LabVIEW FPGA Module의 Single-Cycle Timed 루프 FAQ

업데이트 됨 Nov 6, 2023

해당 제품

소프트웨어

  • LabVIEW FPGA Module

문의사항

LabVIEW FPGA Module에서는 SCTL(Single-Cycle Timed Loop)을 사용할 수 있습니다. SCTL은 무엇이며 어떤 장점과 한계가 있습니까?

해결책

Single-cycle Timed 루프는 무엇입니까?
Timed Loop (Single-Cycle)은 LabVIEW Timed 루프 구조의 특별한 용도입니다. Timed 루프 구조는 FPGA VI에서 사용될 때 항상 SCTL입니다. FPGA 타겟과 함께 사용하면이 루프는 선택한 FPGA 클록의 1 tick 내에서 모든 기능을 실행합니다. 기본 선택은 40MHz FPGA 글로벌 클럭입니다. 파생 된 클럭과 함께 SCTL을 사용하여 40MHz가 아닌 속도로 루프를 실행 할 수 있습니다. FPGA 타겟과 함께 사용하는 경우 Timed 루프의 타이밍 속성을 동적으로 변경할 수 없습니다.

프로그램을 SCTL을 사용하여 얼마나 빨리 실행할 수 있습니까?
FPGA VI에서 기존의 While 루프를 사용하면 각 반복을 실행하는 데 최소 3 tick이 필요합니다. 이는 컴파일 된 FPGA VI에서 사용되는 활성화 체인 때문입니다. 활성화 체인에 대한 설명은 이 문서에서 다루지 않지만 FPGA VI가 비트 파일로 컴파일 될 때 데이터 흐름을 보장하는 데 사용됩니다.

또한 While 루프 내부의 각 함수는 데이터 종속성이없는 경우 함수가 병렬로 실행되지만 적어도 하나의 틱을 실행해야합니다. SCTL을 사용하면 루프 내부의 모든 기능을 한 번씩 실행해야합니다.

FPGA VI에서 SCTL을 사용하여 얻을 수있는 성능상의 이점은 루프의 내용에 따라 달라집니다. 정상적인 루프 대신 SCTL에서 코드를 성공적으로 컴파일 할 수 있다면 성능이 향상됩니다.

SCTL은 FPGA 리소스를 보다 효율적으로 사용할 수 있습니까?
네. 로직이 하드웨어로 조합되어 구현되므로 코드로 생성 된 FPGA 구성은 더 적은 리소스를 사용합니다. 추가 작업을 수행하고 그 결과를 여러 번 계산하고 저장하는 대신 SCTL은 한 눈금으로 작업을 수행하므로 중간에 결과를 저장할 필요가 없습니다. 각 이전 연산의 결과를 저장하기 위해 연산간에 플립 플롭이 필요하지 않으므로 FPGA 리소스를 절약 할 수 있습니다.

모든 기능과 구조를 SCTL 내부에서 사용할 수 있습니까?
아닙니다. 아날로그 I / O 기능 또는 대기중인 기능과 같이 1 tick 이상 걸리는 기능은 SCTL 내부에서 사용할 수 없습니다. 또한 루프 내에 루프가 한 틱보다 오래 걸리면, 이 로직을 SCTL 내부에서 사용할 수 없으며 VI가 컴파일되지 않습니다.

시퀀스 구조는 SCTL 내에 배치 될 수 있지만 FPGA에서 실행되기 전에 코드에서 제거됩니다.

Timed Loop (Single-Cycle)에는 SCTL에서 사용할 수 없는 기능 목록이 있습니다. 개별 VI의 SCTL 지원과 타이밍 정보에 대한 더 자세한 정보는 LabVIEW 도움말을 참조하십시오.
  • Analog Period Measurement VI
  • Butterworth Filter VI
  • Discrete Delay VI
  • 나누기 함수
  • FIFO Clear function
  • 일부 FPGA 타겟을 제외한 FPGA I/O 메소드 노드
  • 일부 FPGA 타겟을 제외한 FPGA I/O 프로퍼티 노드
  • Interrupt VI
  • Interpolate data를 선택한 Look-Up Table 1D VI
  • 루프 타이머 VI
  • 하나 이상의 노드가 루프 내에 있고 적어도 하나의 노드가 루프 외부에 있는 동일한 I/O 리소스로 구성된 여러 FPGA I/O 노드
  • 여러 인스턴스를 사용하는 재호출이 아닌 실행의 SubVI
  • Notch Filter VI
  • PID VI
  • 몫 & 나머지 함수
  • 역수 함수
  • 1D 배열 회전 함수
  • Sine Wave Generator VI
  • 단정도 부동 소수점 연산
  • 제곱근 함수
  • Timed 루프
  • 기다림 익스프레스 VI
  • 어커런스 기다림 함수
  • While 루프

파이프 라이닝을 사용하여 더 많은 로직을 SCTL 내부에서 실행할 수 있습니까?
네. 시프트 레지스터 또는 피드백 노드를 사용하여 로직을 병렬로 실행하고 SCTL의 다음 루프에 데이터를 전달할 수 있습니다. 따라서 전체 논리 체인은 여러 SCTL 반복을 통해 실행됩니다. FPGA VI의 병렬 구현과 마찬가지로 추가 FPGA 리소스를 사용합니다.

SCTL 내부 로직을 한 tick에 실행할 수 없다면 에러 메시지가 나타납니까?
네, LabVIEW는 FPGA VI를 컴파일하기 전까지는 일반적으로 타이밍 관련 에러를 발생시키지 않습니다. 컴파일 시 SCTL 관련 에러를 발생시킬 수 있는 두 가지 원인이 있습니다. 우선 LabVIEW FPGA가 VI를 VHDL 코드 (중간 파일 생성)로 컴파일 하려고 시도 할 때, SCTL에서 지원되지 않는 함수(예 : 몫 & 나머지)를 사용하면 에러 대화 상자가 나타납니다. 이 상자가 나타나기까지 몇 초 정도 걸릴 것입니다 (전체 VHDL 컴파일 프로세스가 시작되지 않음).

SCTL에서 지원되지 않는 함수를 사용하지 않더라도, 한 클럭 tick에서 루프를 실행할 수 없는 로직이 SCTL에 포함되어 있으면 컴파일이 Timing 위반으로 실패합니다. 이러한 유형의 에러는 Xilinx 도구에서 실제로 컴파일되는 동안 발생하며 컴파일에 몇 분 (또는 그 이상)이 걸릴 수 있습니다. 이러한 에러가 발생하면 SCTL의 로직을 줄이거나 알고리즘을 파이프 라이닝하여 VI가 성공적으로 컴파일 되도록 하십시오.

SCTL은 고급 기능입니까?
네. 일부 작업은 SCTL에서 매우 간단하게 구현할 수 있지만 일부 작업은 어려울 수 있습니다. 예를 들어, SCTL을 사용하는 경우 기다림 함수를 사용하여 고속 디지털 프로토콜을 구현할 수는 없습니다. 루프의 각 반복이 한 번만 걸릴 수 있도록 상태 머신을 사용해야 합니다. SCTL은 이를 필요로 하는 응용 프로그램에 속도와 효율성을 제공하지만 사용하기 까다로울 수 있습니다. 어떤 상황에서는 전통적인 While 루프를 사용하는 것이 더 적절할 수 있습니다.

더 빠른 클럭으로 SCTL을 사용할 수 있습니까?
네. 그러나 80 MHz 이상으로 컴파일 된 SCTL에서는 더 작은 로직만 실행할 수 있습니다.