콘텐츠로 건너뛰기

중지 가능 및 중지 불가능 데이터 스트림#

이 항목에서는 생성된 FPGA 파이프라인이 적용될 때 이미지 데이터 스트림이 어떻게 작동하는지 설명합니다. 흐름 제어. 이 항목을 읽고 나면 다음의 차이점을 이해할 수 있습니다. stoppable 및 non-stoppable 스트림, 그리고 infinite source 와 같은 카메라 operator가 디자인에 통합되는 방식과 버퍼 operator를 사용하는 방법, InfiniteSource parameter 및 Overflow operator를 사용하여 연결 오류와 데드락을 방지합니다.

Key Terms

non-stoppable 스트림은 연속적으로 실행됩니다. non-stoppable 소스는 생성된 FPGA 디자인의 흐름 제어 로직에 의해 일시 중지될 수 없습니다. 대표적인 예로 픽셀을 계속 전송하는 카메라가 있습니다. 이와 대조적으로 stoppable 스트림은 다음 operator가 준비되지 않았을 때 일시 중지될 수 있습니다. 카메라와 다운스트림 처리 사이의 버퍼는 종종 non-stoppable 스트림을 stoppable 스트림으로 전환합니다.

따라서 카메라 뒤에는 버퍼를 배치해야 합니다. 카메라 버스트를 흡수하려면 DRAM operator를 선호합니다: LineBuffer imaFlex 또는 ImageBuffer microEnable 5에서 사용합니다. ImageFifo (FPGA 내부 메모리)는 예를 들어 SYNC앞의 짧은 지연과 같은 작은 디커플링용으로만 사용하십시오. ImageFifo 중지 불가능한 스트림에서 Overflow 을(를) 사용하는 경우 ImageFlowControl 대신. 참조: Memory 요소 Tutorial topic.

링크 연결의 이면에 있는 공식 규칙은 사용자 매뉴얼의 Infinite Sources / Connecting Cameras를 참조하십시오. operator 모양과 모듈이 데이터 흐름을 일시 중지하거나 보류하는 방식은 Operator Types and Synchronization 튜토리얼 항목을 참조하십시오.

Stoppable 및 Non-Stoppable 스트림#

생성된 FPGA 파이프라인은 모듈 간의 데이터 흐름을 제어합니다. 모듈은 더 이상 데이터를 받을 준비가 되지 않았을 때 입력을 일시 중지할 수 있습니다. 따라서 다운스트림 모듈은 제한된 시간 동안 스트림 속도를 늦출 수 있습니다. VisualApplets은 편집기에서 이러한 흐름 제어를 적용하지 않으며, FPGA에 빌드된 앱릿이 이를 수행합니다.

흐름 제어가 디자인을 손상시키지 않고 보류할 수 있을 때 스트림은 stoppable 상태가 됩니다. 흐름 제어로 소스를 중지할 수 없는 경우 스트림은 non-stoppable 상태가 됩니다. 다음 모듈이 바쁘더라도 소스는 계속해서 데이터를 전달합니다.

non-stoppable 스트림은 infinite sources라고도 부릅니다. 이 이름은 무제한 이미지 크기가 아니라 흐름 제어를 의미합니다. 이 스트림에는 생성된 FPGA 디자인이 소스를 일시 중지할 수 있게 해주는 내부 버퍼가 없습니다.

VisualApplets 디자인에서의 Non-Stoppable 소스#

Camera operators는 가장 일반적인 멈출 수 없는 소스(non-stoppable source)입니다. 이 오퍼레이터들은 카메라로부터 픽셀을 받아 출력 링크로 전달합니다. 백프레셔를 흡수할 수 있는 버퍼가 없으며 카메라에 전송 중지를 명령할 수 없습니다.

이와 대조적으로 중지 가능한 소스에는 CreateBlankImage 및 CoefficientBuffer.

Non-Stoppable 소스 연결#

모든 O-type 및 P-type 오퍼레이터는 멈출 수 없는 소스의 다운스트림에 위치할 수 있습니다. 무한 소스(infinite-source) 속성은 모듈이 스트림을 제어 가능한(controllable) 스트림으로 변환할 때까지 이 오퍼레이터들을 통해 전파됩니다.

일부 M-type 오퍼레이터만 멈출 수 없는 소스를 직접 수용합니다. 이들은 주로 메모리 오퍼레이터 예: LineBuffer, ImageBuffer, ImageFifo및 FrameBuffer입니다. 특정 M-type 오퍼레이터가 무한 소스를 수용하는지 여부는 오퍼레이터 도움말과 다음 항목에 문서화되어 있습니다. Operator Reference.

무한 소스를 수용하지 않는 M-type 오퍼레이터에 멈출 수 없는 소스를 연결하면 Design Rules Check Level 2에서 infinite source 오류가 보고됩니다. 앱릿을 빌드하기 전에 이 오류를 수정하십시오.

M-type, O-type, P-type의 동작 및 흐름 제어 규칙에 대해서는 Operator Types and Synchronization 튜토리얼 주제를 참조하십시오.

무한 소스를 제어하는 두 가지 옵션이 있습니다.

  • 다음과 같은 버퍼 연산자 사용: LineBuffer, ImageBuffer, 또는 ImageFifo
  • With the Overflow operator.

카메라 경로의 경우 Basler는 기본값으로 DRAM 버퍼(LineBuffer 또는 ImageBuffer)를 권장합니다. 다음을 사용하십시오. ImageFifo 소규모 디커플링 작업에만 해당합니다. 이 주제 시작 부분의 주요 용어(Key Terms) 상자와 다음 내용을 참조하십시오. Memory 요소 Tutorial topic.

정보

이 Overflow operator in the 동기화 라이브러리는 처리할 수 없는 프레임을 누락시킵니다. 이로 인해 프레임 길이가 달라지며, 일부 다운스트림 오퍼레이터는 이를 처리하지 못할 수 있습니다. 이 오퍼레이터를 다음 항목과 혼동하지 마십시오. arithmetic overflow (비트 너비에 더 이상 맞지 않는 결과, 다음 내용 참조: Bit Arithmetic 튜토리얼 주제) 또는 다음 내용과 혼동하지 마십시오. Overflow status parameter 버퍼 오퍼레이터의 오류 (버퍼가 꽉 찼음, 다음 내용 참조: Memory 요소 튜토리얼 주제).

이 Overflow 연산자는 자체적으로 데이터를 버퍼링하지 않습니다. 따라서 Basler에서는 항상 다음과 같이 사용할 것을 권장합니다. Overflow 연산자를 버퍼 연산자와 함께 사용합니다.

버퍼 operator 사용#

버퍼 연산자는 중단 불가능한 스트림을 제어 가능한 스트림으로 변환합니다. 하류 모듈이 더 많은 데이터를 받을 준비가 되지 않았을 때도 입력의 데이터를 허용합니다. 데이터를 내부적으로 저장했다가 하류 모듈이 준비되면 전달합니다.

전형적인 디커플링 오퍼레이터에는 다음이 포함됩니다. LineBuffer, ImageBuffer, ImageFifo, 및 무한 소스를 지원하는 기타 메모리 오퍼레이터. 카메라 버스트를 흡수해야 하거나 다운스트림 처리 또는LineBuffer 또는 ImageBuffer에서 흐름 제어를 적용해야 하는 경우, 멈출 수 없는 소스 바로 뒤에 DRAM 버퍼( DmaToPC )를 배치하십시오. 다음을 사용하십시오. ImageFifo 필요한 버퍼가 작을 때만 사용합니다.

정보

이 ImageFifo 연산자는 이미지의 작은 부분만 버퍼링합니다. 결과적으로 내부적으로 감지되거나 처리되지 않는 FIFO 오버플로우의 위험이 큽니다.

다음 항목을 사용하려는 경우 ImageFifo 중단할 수 없는 스트림을 버퍼링하기 위해 연산자를 사용하는 경우, Basler에서는 다음과 같이 사용할 것을 권장합니다. ImageFifo 이전의 Overflow 연산자. 이를 통해 들어오는 데이터를 적절히 처리하고 제어되지 않는 오버플로우 상태를 방지할 수 있습니다.

결합하는 것의 대안으로 Overflow Memory 연산자가 있는 연산자, 다음을 사용할 수 있습니다. ImageFlowControl 더 안전하고 안정적인 처리를 위한 연산자. 이는 다음의 버퍼링 기능을 결합합니다. ImageFifo 통합 오버플로 처리가 포함됩니다.

전형적인 취득 경로는 다음과 같습니다:

Camera → LineBuffer 또는 ImageBuffer (DRAM) → 추가 처리 → DmaToPC

소규모 디커플링의 경우에만 DRAM 버퍼 대신 ImageFifo를 사용할 수 있으며, 가급적 Overflow와 함께 사용하거나 ImageFlowControl을 사용하십시오.

버퍼 오퍼레이터로 무한 소스 제어하기

버퍼가 없으면 DmaToPC 또는 입력을 일시 중지하는 다른 오퍼레이터가 카메라 스트림을 조절(throttle)할 수 없습니다. 이 경우 디자인이 DRC를 통과하지 못하거나 하드웨어에서 교착 상태(deadlock)가 발생할 위험이 있습니다.

무한 소스를 제어하기 위해 버퍼 오퍼레이터를 사용할 때 다음을 설정해야 합니다. InfiniteSource 버퍼 오퍼레이터의 파라미터는 ENABLED.

InfiniteSource가 ENABLED로 설정된 버퍼 오퍼레이터

만약 InfiniteSource 버퍼 오퍼레이터의 파라미터가 다음으로 설정된 경우 DISABLED, DRC Level 2 실패:

InfiniteSource가 DISABLED로 설정된 버퍼 오퍼레이터

버퍼 크기 지정, FillLevel, 및 RAM 사용량에 대해서는 다음을 참조하십시오. Memory 요소 Tutorial topic.

InfiniteSource 파라미터 설정#

많은 버퍼 오퍼레이터는 다음 파라미터를 제공합니다. InfiniteSource. 다음으로 설정하십시오. ENABLED 오퍼레이터 입력이 중지할 수 없는 소스에 연결될 때. 다음으로 설정하십시오. DISABLED 입력이 중지 가능한 스트림에서 올 때.

다음 규칙을 따르십시오:

  • 설정 InfiniteSource (으)로 ENABLED 모듈 입력이 실제로 중지할 수 없는 소스에 연결될 때만.
  • 설정 InfiniteSource (으)로 DISABLED 중지 가능한 스트림에서 데이터를 수신하는 버퍼 오퍼레이터에서.
  • 확실하지 않은 경우 다음을 설정하십시오. DISABLED first. Run Design Rules Check Level 2 and adjust modules that the check flags.

모듈 파라미터를 변경하려면 모듈을 더블 클릭하여 Module Properties를 엽니다. Apply를 사용하여 파라미터 변경 사항을 적용합니다. 링크 파라미터 및 모듈 파라미터에 대한 내용은 Parameterization 튜토리얼 항목을 참조하십시오.

다운스트림 처리가 일시 중지될 수 있을 때 Overflow operator 사용#

이 Overflow 연산자는 중단할 수 없는 들어오는 2D 스트림을 일시적으로 차단될 수 있는 처리 과정으로부터 분리합니다. 자체적인 내부 버퍼가 없으므로 Basler에서는 항상 다음과 같이 사용할 것을 권장합니다. Overflow 연산자를 버퍼 연산자와 함께 사용합니다. 출력 데이터 차단으로 인해 버퍼가 채워지면, Overflow 오퍼레이터는 현재 프레임을 잘라내고 손상된 것으로 표시하며, 출력이 다시 데이터를 수용할 때까지 추가 프레임을 건너뛸 수 있습니다.

사용 Overflow 소스를 중지할 수 없고 다운스트림 오퍼레이터가 라인 또는 프레임 버퍼가 커버할 수 있는 것보다 더 오랫동안 데이터 흐름을 일시 중지할 수 있을 때.

Overflow Operator를 사용하여 Infinite Source 제어하기

다음 항목을 배치할 때 Overflow operator와 같은 Memory operator 사이에 operator를 배치하면 FrameBuffer으로 설정하고 InfiniteSource 해당 Memory operator의 parameter를 DISABLED. Overflow 연산자는 이미 중지할 수 없는 스트림의 오버플로우를 처리합니다. 활성화 InfiniteSource 해당 토폴로지의 Memory 모듈에서 잘못 설정하면 DRC 오류가 발생합니다.

이 Overflow operator can produce non-rectangular frames when it cuts a frame. Verify that downstream operators tolerate shortened last lines. See the operator description Overflow (Operator Reference 내용).

정보

결합하는 것의 대안으로 Overflow Memory 연산자가 있는 연산자, 다음을 사용할 수 있습니다. ImageFlowControl 더 안전하고 안정적인 처리를 위한 연산자. 이는 다음의 버퍼링 기능을 결합합니다. ImageFifo 통합 오버플로 처리가 포함됩니다.

DRC로 디자인 검증#

소스, 버퍼 및 DMA 경로를 연결한 후 Analysis → Design Rules Check Level 2를 실행합니다. Level 1은 시뮬레이션 및 빌드 전에도 자동으로 실행됩니다.

DRC 레벨 2 checks extended rules and estimates FPGA resources. It reports infinite-source errors when a non-stoppable source feeds an M-type operator that doesn't accept infinite sources, or when InfiniteSource 설정이 실제 연결과 일치하지 않습니다.

DRC log를 읽고 강조 표시된 모듈이나 링크를 수정합니다. 전체 워크플로는 From Empty Design to Running Applet 튜토리얼 항목을 참조하세요.

일반적인 파이프라인 예시#

버퍼를 통한 카메라와 DMA 간 연결#

  1. 소스로서 camera 오퍼레이터를 배치합니다.
  2. Insert LineBuffer 또는 ImageBuffer 이미지 경로에 (또는 ImageFifo 소규모 디커플링용으로만 사용, 위 참조).
  3. 설정 InfiniteSource (으)로 ENABLED 버퍼에.
  4. 처리 operator를 연결하고 DmaToPC.
  5. DRC Level 1 및 Level 2를 실행한 후 시뮬레이션 또는 빌드하십시오.

2단계와 3단계가 없으면 DRC Level 2는 잘못된 연결에 대해 무한 소스 오류를 보고합니다.

Overflow 및 버퍼가 있는 Non-Stoppable 소스#

  1. 멈출 수 없는 소스를 다음에 연결하십시오. Overflow.
  2. 연결 Overflow (으)로 ImageFifo, LineBuffer또는 기타 버퍼 operator.
  3. 설정 InfiniteSource (으)로 DISABLED 다음에 버퍼의 Overflow.
  4. 추가 처리를 연결하고 DRC Level 2를 실행하십시오. 무한 소스 또는 InfiniteSource 불일치가 남아 있지 않은지 확인하십시오.

Overflow Operator 및 Buffer가 있는 Infinite Source

Overflow 출력이 중단되면 프레임을 자르거나 건너뜁니다. 다음 버퍼는 일시 중지될 수 있는 후속 처리를 위해 데이터를 저장합니다. 해당 버퍼가 없으면 Overflow 단독으로는 멈출 수 없는 소스가 후속 모듈을 일시 중지하는 것을 분리할 수 없습니다.