Operator 유형 및 동기화#
Key Terms
VisualApplets는 각 오퍼레이터에 유형을 나타내는 모양을 표시합니다. 둥근 아이콘은 O-type 오퍼레이터입니다. 사각형 아이콘은 M-type 또는 P-type 오퍼레이터입니다. M-type과 P-type은 모두 사각형 아이콘을 사용하므로 모양만으로는 구분할 수 없습니다. 제품 내 도움말이나 Operator Reference에서 유형을 확인하십시오. 주요 차이점은 M-type 오퍼레이터는 입력을 차단(block)할 수 있지만, P-type 오퍼레이터는 능동적으로 차단하지 않는다는 점입니다.
차단(Blocking)이란 생성된 FPGA 단계가 더 이상 데이터를 받을 준비가 되지 않았을 때 입력을 일시 중지할 수 있음을 의미합니다. 타이밍이 다르기 때문에 일반 오퍼레이터로는 두 개의 독립된 카메라 스트림을 연결할 수 없습니다. 데이터 스트림을 동기화하려면 버퍼가 있는 동기화 오퍼레이터를 사용하십시오.
오퍼레이터 유형 식별#
VisualApplets는 오퍼레이터를 세 가지 유형으로 분류합니다. 디자인 창의 모듈 아이콘 모양으로 유형을 식별할 수 있습니다. 제품 내 도움말과 Operator Reference에 각 오퍼레이터의 유형이 문서화되어 있습니다.
| Type | 모양 | 주요 동작 |
|---|---|---|
| O-type | 둥근 모양:![]() |
|
| M-type | 사각형: ![]() |
|
| P-type | 사각형: ![]() |
|
카메라 모듈과 같은 모든 소스 오퍼레이터는 M형 오퍼레이터입니다. 다음과 같은 모든 최종 대상은 DmaToPC, M-type 연산자입니다.
O-Type Operators#
O-type 연산자는 간단한 처리 단계를 수행하며, 다음 규칙을 따릅니다.
- 출력의 픽셀 수는 입력의 픽셀 수와 같습니다.
- 입력과 출력 사이에는 일정한 수의 클럭 주기만큼 지연이 발생합니다. 이 타이밍 지연은 타이밍 동기화 과정에서 보상되어야 합니다.
- 제한 없이 직렬 또는 병렬로 조합할 수 있습니다. O-type 파이프라인의 분할 및 병합에는 추가적인 동기화가 필요하지 않습니다.
- 자체적으로 데이터 스트림을 차단할 수는 없지만, 하위 모듈의 차단 상태를 전파합니다.
정보
알고리즘에 적합한 경우 O-type 연산자를 우선적으로 사용할 것을 권장합니다. 일반적으로 M-type 연산자보다 더 적은 FPGA 리소스를 사용합니다.
M-Type Operators#
M-type 오퍼레이터는 더 복잡한 처리를 수행하며, 다음 규칙을 따릅니다.
- 입력과 출력 사이의 픽셀 수를 변경할 수 있습니다.
- 출력을 지연시킬 수 있습니다.
- 더 많은 데이터를 수용할 준비가 되지 않았을 때 입력을 차단할 수 있습니다.
- 연결할 때 링크 규칙을 준수해야 합니다.
- 서로 다른 M-type 소스에서 발생하는 데이터 스트림을 병합하려면 비동기 입력이 있는 전용 오퍼레이터를 통해서만 가능합니다(예:
SYNC, 또는SourceSelector).
카메라 연산자와 버퍼 연산자는 항상 M-type 연산자입니다. 많은 필터 및 동기화 연산자 역시 M-type입니다.
P-타입 Operator#
P-type 오퍼레이터는 M-type 오퍼레이터와 유사합니다. 주요 차이점은 입력을 능동적으로 차단하지 않는다는 점입니다. 또한 링크의 대역폭을 줄이지 않으며 수신하는 데이터보다 더 많은 데이터를 생성하지 않습니다. 중지할 수 없는 소스와 함께 사용할 수 있습니다.
Key Terms
A non-stoppable stream runs continuously. A non-stoppable source cannot be paused by the flow-control logic of the generated FPGA design. A typical example is a camera that keeps sending pixels. As a contrast, a stoppable stream can pause when the next operator isn't ready. A buffer between camera and downstream processing often turns a non-stoppable stream into a stoppable one.
For details on stoppable and non-stoppable data streams, see Stoppable and Non-Stoppable Data Streams Tutorial topic.
Unless an exception is specified in the Operator Reference, the same link rules apply to both P-type and M-type operators. However, unlike M-type operators, P-type operators can be used with non-stoppable sources.
동기 및 비동기 입력#
M-type operators with multiple inputs accept synchronous inputs, asynchronous inputs, or both. Some operators provide groups of synchronous inputs which may be asynchronous to each other. The in-product help and the Operator Reference document which input type each port requires.
동기 입력#
많은 오퍼레이터는 모든 입력 포트 또는 입력 포트의 하위 집합에서 동기식 입력을 요구합니다. 동기식이란 이러한 입력의 데이터 스트림이 정렬되어 있음을 의미합니다. 프로토콜, 들어오는 픽셀 수, 데이터 타이밍이 정확히 일치해야 합니다.
모든 입력이 O-type 연산자 네트워크를 통해서만 단독으로 라우팅되는 공통 M-type 소스에서 비롯된 경우 동기식 동작이 보장됩니다. 다른 소스(즉, M-type 연산자)가 도입되지 않는 한, 이 입력들은 임의 개수의 O-type 연산자를 통해 연결될 수 있습니다.
동일한 동기식 그룹에 속하는 모든 입력은 항상 단일 M-type 소스를 공유합니다.
전형적인 예시는 RemoveImage 동일한 LineBuffer:

비동기식 입력#
비동기 입력을 지원하는 오퍼레이터는 소수에 불과합니다. 비동기식이란 이러한 입력의 데이터 스트림이 정렬되어 있지 않음을 의미합니다. 타이밍, 프로토콜 및 들어오는 픽셀 수가 다를 수 있습니다. 비동기 입력 간에 차이가 있을 수 있는 특정 Property는 오퍼레이터에 따라 다릅니다. 비동기 입력은 각 소스의 O-type 오퍼레이터 네트워크를 통해 연결될 수도 있습니다. 비동기 입력은 이를 명시적으로 지원하는 오퍼레이터에만 사용하십시오. 이러한 오퍼레이터는 비동기 데이터 스트림을 동기식 데이터 스트림으로 변환합니다.
비동기 이미지 입력을 지원하는 오퍼레이터는 다음과 같습니다.
SYNCInsertLineInsertImageSourceSelector.
FrameBufferRandomRead 및 FrameBufferMultiRoiDyn 역시 비동기식 이미지 링크를 허용하지만, 좌표 입력은 여전히 동기식이어야 합니다.
일반적인 다중 입력 오퍼레이터로는 두 개의 독립적인 M-type 소스를 병합할 수 없습니다. 이를 위해서는 비동기 입력을 지원하는 오퍼레이터가 필요합니다.

동기화 규칙#
O-type 네트워크에서는 네트워크의 복잡성에 관계없이 모든 O-type 모듈이 동일한 M-type 또는 P-type 모듈에서 소스를 공급받아야 합니다. 이 소스의 링크는 다른 O-type 모듈이나 O-type 서브네트워크를 거쳐갈 수 있습니다.
O-type 파이프라인의 분할 및 병합은 간단하며 추가적인 동기화가 필요하지 않습니다.

네트워크에 M-type 또는 P-type 연산자가 도입되면 새로운 데이터 소스가 됩니다. 서로 다른 소스에서 비롯된 분기들이 하위단에서 병합되는 경우, 해당 병합에는 동기화가 필요합니다. 즉, SYNC, InsertLine, InsertImage, 또는 SourceSelector. 이러한 분기(branch)는 표준 다중 입력 오퍼레이터에 연결할 수 없습니다.
VisualApplets highlights synchronization violations with purple links in the design pane:

This O-type network rule ensures synchronous inputs: All branches that belong to the same synchronous input group must originate from a single M-type or P-type source and may only pass through O-type operators.
O-type 네트워크 규칙은 다음을 사용하는 신호 링크에는 적용되지 않습니다. Image Protocol = VALT_SIGNAL. For more information, see 신호 링크에 대한 서로 다른 규칙 사용자 설명서에서 확인하세요.
독립적인 소스 병합#
When two or more independent sources feed one processing path, you must synchronize timing and image dimensions.
- Timing synchronization aligns when pixels arrive on each branch.
- Image dimension synchronization aligns width, height, and image protocol.
동기화는 일반적으로 연산자를 사용하여 수행됩니다. SYNC. 특정 상황에서는 동기화를 위한 몇 가지 다른 옵션이 있습니다.
잘못된 타이밍 동기화는 교착 상태(deadlock), 대역폭 부족, 또는 데이터 손실을 유발할 수 있습니다.
정보
교착 상태를 방지하려면 메모리 연산자를 배치하십시오. 예: ImageFifo 또는 ImageBuffer, SYNC 오퍼레이터 앞에 소스가 서로 다른 속도로 실행되거나 하나의 분기에서 지연을 추가할 때 사용됩니다. 또한 메모리 요소의 크기도 적절히 지정해야 합니다. 충분한 버퍼 크기를 선택하려면 예상되는 지연 시간을 알아야 합니다.
교착 상태는 VisualApplets의 시뮬레이션으로 안정적으로 감지할 수 없으며 하드웨어에서만 나타납니다. 이를 감지하려면 다음을 모니터링하십시오. FillLevel parameter가 ImageFifo operator or other buffer operators on the frame grabber, for example in microDisplay X. A FIFO that stays at 100% often indicates the source of a deadlock. You cannot observe that Fill level in the VisualApplets design pane.
For more details on deadlocks, see Troubleshooting: Deadlock
비동기 스트림을 병합할 때는 라인 레이트, 프레임 레이트, 픽셀 레이트가 일치하는지 확인하십시오. 한 카메라가 다른 카메라보다 빠르게 작동하면 오버플로가 발생할 때까지 버퍼가 채워지고 데이터가 손실됩니다. 동일한 레이트로 여러 카메라에서 장기 획득을 수행해야 하는 경우 트리거 시스템을 사용하십시오.
SYNC 오퍼레이터를 사용한 동기화#
이 SYNC operator는 모든 입력 링크에서 타이밍과 이미지 크기를 동기화합니다. 입력 수는 operator를 인스턴스화할 때 고정됩니다. 모든 출력은 동기식입니다. 그 후 다운스트림 O형 operator가 병합된 스트림을 처리할 수 있습니다.
이 SYNC 오퍼레이터는 모든 입력에서 밸브처럼 작동합니다. 모든 입력에 유효한 픽셀이 존재할 때까지 대기합니다. 그런 다음 모든 출력으로 동시에 픽셀을 전달합니다.
입력 이미지의 크기가 서로 다른 경우, SYNC aligns them. Depending on the parameterization, it expands the smaller image or crops the larger one. See the operator description SYNC in the Operator Reference and section SyncToMin 및 SyncToMax 파라미터 값 사용 대상: SyncToMin 및 SyncToMax behavior.
정보
다음을 사용하십시오. SYNC operator는 카메라가 동기식으로 트리거되는 경우에만 디자인에서 카메라 근처에 배치하십시오. 그렇지 않으면 버퍼가 빠르게 가득 찰 수 있습니다.
전형적인 2대 카메라 경로는 다음과 같습니다.

버퍼는 카메라 간의 타이밍 스큐를 흡수합니다. 버퍼와 SYNC, 해당 디자인은 데드락 또는 DRC 경고가 발생할 위험이 있습니다.
For a step-by-step overlay and stitching walkthrough, see Synchronization of Asynchronous Image Pipelines in the User Manual.
SyncToMin 및 SyncToMax 파라미터 값 사용#
If sources contain images of different sizes, use the SyncMode parameter가 SYNC 연산자가 크기를 맞추도록 합니다. 다음 값 중에서 선택할 수 있습니다. SyncToMin 및 SyncToMax.
동기화를 통해 모든 출력 이미지의 크기가 동일하도록 보장합니다. SYNC operator는 두 가지 모드를 지원합니다.
-
SyncToMin: 더 큰 이미지를 잘라내어 모든 이미지를 가장 작은 이미지 크기로 정렬합니다.
-
SyncToMax: 작은 이미지를 확장하여 모든 이미지를 가장 큰 이미지 크기에 맞게 정렬합니다. 대상SyncToMax모드에서는 추가 영역이 더미 0 픽셀로 채워집니다(검은색으로 표시됨).
시뮬레이션에서 이는 다음과 같이 표시됩니다.
SyncToMin: 대형 이미지가 잘립니다.

SyncToMax: 소형 이미지가 더미 픽셀로 채워집니다.

InsertLine 및 InsertImage 오퍼레이터를 사용한 동기화#
InsertLine 여러 소스의 라인을 삽입하여 이미지를 조립합니다. 두 소스가 모두 순서대로 라인을 전달하는 라인 기반 스티칭에 사용하십시오.
카메라를 동기적으로 트리거할 때 더 작은 ImageFifo operator를 대신 사용하여 LineBuffer 연산자를 사용할 수 있습니다. 이를 통해 리소스 사용량을 줄일 수 있습니다.

정보
InsertLine 및 InsertImage 은(는) 종종 CONST 연산자. 이 맥락에서, CONST 은(는) 이미지나 라인이 출력 스트림에 포함되는지 여부를 지정합니다. 데이터는 항상 처리되지만 CONST 출력 스트림에 나타날지 아니면 내부적으로 폐기될지(즉, 내부 쓰레기 경로로 전송될지) 결정합니다.
InsertImage 여러 소스의 이미지를 삽입하여 이미지 시퀀스를 조립합니다. 두 카메라의 이미지를 하나의 출력 시퀀스로 다중화(multiplexing)하는 데 사용하십시오.

두 오퍼레이터 모두 비동기 입력을 허용합니다. 중단할 수 없는 소스와 함께 이러한 오퍼레이터를 사용하는 경우, 교착 상태(deadlock)를 방지하기 위해 충분한 크기의 버퍼를 앞에 배치하십시오. 오퍼레이터 참조서의 InsertLine 및 InsertImage도 참조하십시오.
SourceSelector 오퍼레이터를 사용한 동기화#
SourceSelector 예를 들어 두 대의 카메라와 같은 여러 이미지 소스 중에서 선택합니다. 수신되는 이미지의 무결성을 유지하면서 비동기 소스 간에 전환합니다.
선택한 입력만 출력으로 전달되며, 다른 모든 입력은 폐기됩니다. 입력에서 이미지 전송이 진행되는 동안 전환이 발생하면, 새 소스가 활성화되기 전에 전송이 완료됩니다.
다음을 사용하십시오. SelectSource parameter를 사용하여 런타임에 활성 소스를 제어합니다.
연산자는 다른 입력으로 전환하기 전에 현재 프레임을 완료합니다. 설정 InfiniteSource (으)로 ENABLED 카메라가 입력을 공급할 때입니다. 다음으로 설정합니다. DISABLED 입력이 버퍼링되고 중지 가능한 스트림에서 올 때입니다.

Basler에서는 다음을 사용할 것을 권장합니다. IF 또는 CASE 대신 SourceSelector 모든 입력이 동일한 M-type 모듈에서 소싱될 때입니다. 이러한 연산자는 더 적은 리소스를 사용합니다. 예를 들어 다음과 같은 디자인을 참조하세요. CASE operator:

오퍼레이터 참조서의 SourceSelector 참조.
동기화 방지#
동기화 및 버퍼링용 연산자는 많은 FPGA 리소스를 소비하므로 가능하면 동기화가 필요하지 않도록 하세요. 많은 경우 이는 필수 M-type 연산자 앞에 데이터를 병합하고 나중에 데이터를 분할하는 등의 대체 설계 기법을 적용하여 해결할 수 있습니다. 다음 스크린샷은 유사한 워크플로의 두 가지 구현을 보여줍니다. MergePixel 및 ADD, 그리고 다음을 사용하여 한 번 SYNC:
![]()
문제 해결: 데드락#
가장 흔하고 해결하기 어려운 동기화 오류 중 하나는 교착 상태(deadlock)입니다.
데드락은 예를 들어 다음을 사용하여 두 소스가 직접 동기화될 때 발생합니다. SYNC 연산자를 버퍼링 없이 사용합니다. 이 상황에서는 각 소스가 서로를 기다립니다. A는 B를 기다리고, B는 A를 기다립니다. 결과적으로 데이터가 전송되지 않습니다.
아래 다이어그램은 정지 신호를 수신하여 더 이상 입력에서 데이터를 수신하지 않는 하단 경로의 브랜치 모듈을 보여줍니다. 결과적으로 상단 경로도 데이터 수신을 중단하고 전체 파이프라인이 멈추게 됩니다.

데드락은 시스템이 정상적으로 실행되는 것처럼 보일 수 있는 시뮬레이션에서는 보이지 않는 경우가 많습니다. 그러나 하드웨어에서는 일반적으로 출력이 없는 상태로 이어집니다. 이러한 경우 하드웨어 어플릿이 중단되고, PC로의 데이터 전송이 멈추며, 결국 DMA 타임아웃이 발생합니다.
정보
교착 상태는 시뮬레이션에서 눈에 잘 띄지 않기 때문에 감지하기 어렵습니다. 가능한 교착 상태를 확인하려면 microDisplay X와 같은 런타임 도구를 사용하여 하드웨어의 FIFO Fill 수준을 모니터링하십시오. 용량이 100%로 유지되는 FIFO는 교착 상태 또는 병목 현상이 발생했음을 나타냅니다.
데드락의 일반적인 원인:
- 누락된 버퍼
- 잘못된 동기화
교착 상태 해결 방법:
데드락을 해결하려면 예를 들어 FIFO 기반 버퍼링을 삽입하십시오. ImageBuffer 또는 ImageFifo, SYNC 연산자. 이를 통해 한 소스가 약간 앞서 실행될 수 있으며 상호 대기 조건을 방지할 수 있습니다.

DRC로 디자인 검증#
합쳐지는 분기를 연결한 후 Analysis → Design Rules Check Level 1을 실행하세요. 레벨 1은 동기화 위반을 보고하고 영향을 받는 링크를 보라색으로 표시합니다.
Design Rules Check Level 2는 확장된 검사를 실행하고 FPGA 리소스를 예측합니다. 빌드하기 전에 레벨 1의 형식 오류를 수정하십시오.
DRC log를 강조 표시된 모듈 및 링크와 함께 확인하세요. 전체 워크플로는 From Empty Design to Running Applet 튜토리얼 주제를 참조하세요.
관련 항목#
- 사용자 매뉴얼의 Rules of Links — O형 네트워크 규칙 및 신호 링크
- 튜토리얼 주제 Stoppable and Non-Stoppable Data Streams — 무한 소스 및 흐름 제어
- Memory 요소 튜토리얼 주제 — 이전 버퍼
SYNC - 튜토리얼 주제 Pipeline Concept — 차단 및 배압(backpressure)
- 기본 및 예제의 Synchronization of Asynchronous Image Pipelines
- From Empty Design to Running Applet 튜토리얼 주제 — DRC, 시뮬레이션 및 빌드
- 튜토리얼 주제 Parameterization — 합류 지점에서의 링크 Property


