해결책
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에서는 더 작은 로직만 실행할 수 있습니다.