Operator 유형 및 Synchronization#
핵심 용어
VisualApplets 각 연산자는 그 유형을 나타내는 모양으로 표시됩니다. 둥근 아이콘은 O형 연산자입니다. 사각형 아이콘은 M형 또는 P형 연산자입니다. M형과 P형은 모두 사각형 아이콘을 사용하므로, 모양만으로는 둘을 구별할 수 없습니다. 유형을 확인하려면 제품 내 도움말이나 연산자 참조를 확인하십시오. 두 유형의 주요 차이점은 M형 연산자는 입력을 차단할 수 있는 반면, P형 연산자는 능동적으로 입력을 차단하지 않는다는 점입니다.
블로킹이란 생성된 FPGA 단계가 더 이상 데이터를 수신할 준비가 되지 않았을 때 입력을 일시 중지할 수 있음을 의미합니다. 두 개의 독립적인 카메라 스트림은 타이밍이 다르기 때문에 일반 연산자를 사용하여 연결할 수 없습니다. 데이터 스트림을 동기화하려면 버퍼가 포함된 동기화 연산자를 사용하십시오.
연산자 유형 식별#
VisualApplets 연산자를 세 가지 유형으로 분류합니다. 디자인 창에 표시되는 모듈 아이콘의 모양을 통해 해당 유형을 확인할 수 있습니다. 제품 내 도움말과 ‘연산자 참조’ 문서에는 각 연산자의 유형이 설명되어 있습니다.
| Type | 모양 | 주요 동작 |
|---|---|---|
| O-type | 라운드:![]() |
|
| M-type | Square: ![]() |
|
| P-type | Square: ![]() |
|
카메라 모듈과 같은 모든 소스 연산자는 M형 연산자입니다. 다음과 같은 모든 최종 목적지는 DmaToPC,는 M형 연산자입니다.
O형 연산자#
O형 연산자는 간단한 처리 단계를 수행합니다. 이 연산자는 다음 규칙을 따릅니다:
- 출력의 픽셀 수는 입력의 픽셀 수와 같습니다.
- 입력과 출력 사이에는 일정한 수의 클럭 사이클만큼의 지연이 발생합니다. 타이밍 동기화 과정에서 이러한 타이밍 지연을 보정해야 합니다.
- 제한 없이 직렬 또는 병렬로 연결할 수 있습니다. O형 파이프라인을 분할하거나 병합할 때 별도의 동기화가 필요하지 않습니다.
- 이들 자체적으로는 데이터 스트림을 차단할 수는 없지만, 다운스트림 모듈에서 발생하는 차단 조건을 전달합니다.
정보
Basler는 알고리즘에 적합한 경우 O형 연산자를 우선적으로 사용할 것을 권장합니다. O형 연산자는 일반적으로 M형 연산자보다 FPGA 리소스를 덜 사용합니다.
M형 연산자#
M형 연산자는 더 복잡한 처리를 수행합니다. 이 연산자들은 다음 규칙을 따릅니다:
- 입력과 출력 간의 픽셀 수를 변경할 수 있습니다.
- 그들은 출력을 지연시킬 수 있습니다.
- 더 이상 데이터를 수신할 준비가 되지 않았을 때 입력을 차단할 수 있습니다.
- 링크를 연결할 때는 링크 규칙을 반드시 준수해야 합니다.
- 서로 다른 M형 소스에서 발생하는 데이터 스트림을 병합하려면 비동기 입력을 지원하는 전용 연산자만을 사용해야 합니다(예:
SYNC, 또는SourceSelector).
카메라 조작자와 버퍼 조작자는 항상 M형 조작자에 해당합니다. 많은 필터 및 동기화 조작자 역시 M형에 속합니다.
P-Type Operator#
P형 연산자는 M형 연산자와 유사합니다. 주요 차이점은 P형 연산자가 입력을 능동적으로 차단하지 않는다는 점입니다. 또한 링크의 대역폭을 줄이지 않으며, 수신한 데이터보다 더 많은 데이터를 생성하지도 않습니다. P형 연산자는 중지 불가능한 소스와 함께 사용할 수 있습니다.
핵심 용어
중지 불가능한 스트림은 지속적으로 흐릅니다. 중지 불가능한 소스는 생성된 FPGA 설계의 흐름 제어 로직으로도 일시 중지할 수 없습니다. 대표적인 예로, 지속적으로 픽셀을 전송하는 카메라를 들 수 있습니다. 반면, 중지 가능한 스트림은 다음 연산자가 준비되지 않았을 때 일시 중지될 수 있습니다. 카메라와 하류 처리 단계 사이에 버퍼를 배치하면, 중지 불가능한 스트림을 중지 가능한 스트림으로 전환하는 경우가 많습니다.
중지 가능한 데이터 스트림과 중지 불가능한 데이터 스트림에 대한 자세한 내용은 ‘중지 가능한 데이터 스트림 및 중지 불가능한 데이터 스트림 ’ 자습서 항목을 참조하십시오.
연산자 참조서에 예외 사항이 명시되어 있지 않은 한, P형 및 M형 연산자 모두에 동일한 연결 규칙이 적용됩니다. 다만, M형 연산자와는 달리 P형 연산자는 중지 불가능한 소스와 함께 사용할 수 있습니다.
동기 및 비동기 입력#
여러 개의 입력을 갖는 M형 연산자는 동기 입력, 비동기 입력 또는 둘 다를 수용합니다. 일부 연산자는 서로 비동기적일 수 있는 동기 입력 그룹을 제공합니다. 각 포트에 필요한 입력 유형은 제품 내 도움말과 ‘연산자 참조’ 문서를 참조하십시오.
동기식 입력#
많은 연산기는 모든 입력 포트 또는 일부 입력 포트에 대해 동기식 입력을 요구합니다. ‘동기식’이란 이러한 입력의 데이터 스트림이 정렬되어 있음을 의미합니다. 즉, 프로토콜, 입력 픽셀 수, 데이터 타이밍이 모두 정확히 일치해야 합니다.
모든 입력이 공통된 M형 소스에서 비롯되고, 이 입력이 오로지 O형 연산자 네트워크를 통해서만 전달될 때 동기적 동작이 보장됩니다. 다른 소스(즉, M형 연산자)가 도입되지 않는 한, 이러한 입력은 임의의 개수의 O형 연산자를 통해 연결될 수 있습니다.
동일한 동기 그룹에 속하는 모든 입력은 항상 하나의 M형 소스를 공유합니다.
전형적인 예로는 RemoveImage 동일한 출처에서 가져온 두 개의 이미지 입력을 사용하여 LineBuffer:

비동기 입력#
비동기 입력을 지원하는 연산자는 극소수에 불과합니다. 비동기란 이러한 입력의 데이터 스트림이 일치하지 않음을 의미합니다. 즉, 타이밍, 프로토콜 및 수신 픽셀 수가 다를 수 있습니다. 비동기 입력 간에 차이가 있을 수 있는 구체적인 속성은 연산자에 따라 다릅니다. 비동기 입력은 각 소스에서 O형 연산자 네트워크를 통해 연결될 수도 있습니다. 비동기 입력은 이를 명시적으로 지원하는 연산자와 함께만 사용하십시오. 이러한 연산자는 비동기 데이터 스트림을 동기 데이터 스트림으로 변환합니다.
비동기 이미지 입력을 지원하는 연산자에는 다음이 포함됩니다:
SYNCInsertLineInsertImageSourceSelector.
FrameBufferRandomRead 및 FrameBufferMultiRoiDyn 비동기 이미지 링크도 허용하지만, 좌표 입력은 여전히 동기식으로 이루어져야 합니다.
일반적인 다중 입력 연산자만으로는 두 개의 독립적인 M형 소스를 병합할 수 없습니다. 이를 위해서는 비동기 입력을 지원하는 연산자가 필요합니다:

동기화 규칙#
O형 네트워크에서는 네트워크의 복잡성과 관계없이 모든 O형 모듈이 동일한 M형 또는 P형 모듈에서 전원을 공급받아야 합니다. 이 전원을 공급받는 모듈에서 출발하는 링크는 다른 O형 모듈이나 O형 하위 네트워크를 통과할 수 있습니다.
O형 파이프라인을 분할하고 병합하는 것은 간단하며, 별도의 동기화가 필요하지 않습니다.

M형 또는 P형 연산자가 네트워크에 도입되면, 이는 새로운 데이터 소스가 됩니다. 서로 다른 소스에서 비롯된 분기가 하류에서 병합될 경우, 이 병합 과정에는 동기화가 필요합니다. 즉, 다음과 같이 비동기 입력을 갖는 연산자를 추가해야 합니다. SYNC, InsertLine, InsertImage, 또는 SourceSelector. 이러한 분기들은 표준 다중 입력 연산자와 연결할 수 없습니다.
VisualApplets 디자인 창에서 보라색 링크로 동기화 위반 사항을 강조 표시합니다:

이 O형 네트워크 규칙은 동기 입력의 조건을 보장합니다. 즉, 동일한 동기 입력 그룹에 속하는 모든 분기는 단일 M형 또는 P형 소스에서 비롯되어야 하며, 오직 O형 연산자만을 통과할 수 있습니다.
O형 네트워크 규칙은 다음을 사용하는 신호 링크에는 적용되지 않습니다. Image Protocol = VALT_SIGNAL. 자세한 내용은 다음을 참조하십시오. 신호 링크에 대한 다른 규칙 사용 설명서 참조.
독립된 출처 병합하기#
두 개 이상의 독립적인 소스가 하나의 처리 경로로 입력될 때는 타이밍과 이미지 크기를 동기화해야 합니다.
- 타이밍 동기화는 각 분기에 픽셀이 도착하는 시점을 일치시킵니다.
- 이미지 크기 동기화는 너비, 높이 및 이미지 프로토콜을 일치시킵니다.
동기화는 일반적으로 연산자를 사용하여 수행됩니다. SYNC. 특정 상황에서는 동기화를 위한 몇 가지 다른 옵션이 있습니다.
타이밍 동기화가 제대로 이루어지지 않으면 교착 상태, 대역폭 부족 또는 데이터 손실이 발생할 수 있습니다.
정보
교착 상태를 방지하려면 다음과 같은 메모리 연산자를 배치하십시오. ImageFifo 또는 ImageBuffer, ~ 이전에 SYNC 소스들이 서로 다른 속도로 실행되거나 한 분기가 지연을 유발할 때 이 연산자를 사용해야 합니다. 또한 메모리 요소의 크기도 적절하게 설정해야 합니다. 충분한 버퍼 크기를 선택하려면 예상 지연 시간을 파악해야 합니다.
VisualApplets 에서는 시뮬레이션을 통해 교착 상태를 확실하게 감지할 수 없으며, 이는 하드웨어에서만 나타납니다. 이를 감지하려면 다음을 확인하십시오. FillLevel operator의 ImageFifo 연산자 또는 기타 버퍼 연산자 프레임 그래버에서, 예를 들어 microDisplay X. 100%를 유지하는 FIFO는 종종 교착 상태의 원인을 나타냅니다. 이 채움 수준은 ‘ VisualApplets ’ 설계 창에서는 확인할 수 없습니다.
교착 상태에 대한 자세한 내용은 ‘문제 해결: 교착 상태’를 참조하십시오.
비동기 스트림을 병합할 때는 라인 속도, 프레임 속도, 픽셀 속도가 일치하는지 확인하십시오. 한 대의 카메라가 다른 카메라보다 빠르게 작동하면 버퍼가 가득 차서 오버플로가 발생하고 데이터가 손실될 수 있습니다. 여러 대의 카메라에서 동일한 속도로 장시간 영상을 촬영해야 할 때는 트리거 시스템을 사용하십시오.
SYNC 연산자와의 동기화#
The SYNC 이 연산자는 모든 입력 링크의 타이밍과 이미지 크기를 동기화합니다. 입력 개수는 연산자를 인스턴스화할 때 고정됩니다. 모든 출력은 동기식입니다. 이후 하류의 O형 연산자는 병합된 스트림을 처리할 수 있습니다.
The SYNC 이 연산자는 모든 입력에 대해 밸브와 같은 역할을 합니다. 모든 입력에 유효한 픽셀이 나타날 때까지 기다린 다음, 모든 출력을 통해 픽셀을 동시에 전달합니다.
입력 이미지의 크기가 서로 다를 때, SYNC 이미지들을 정렬합니다. 매개변수 설정에 따라 더 작은 이미지를 확대하거나 더 큰 이미지를 잘라냅니다. 연산자 설명을 참조하십시오. SYNC ‘연산자 참조’ 및 해당 섹션에서 SyncToMin 및 SyncToMax 매개변수 값 사용 ~을 위해 SyncToMin 및 SyncToMax 행동.
정보
다음 명령을 사용하여 SYNC 카메라가 동기식으로 작동할 때만 카메라 근처에 연산기를 배치하도록 설계해야 합니다. 그렇지 않으면 버퍼가 금방 가득 찰 수 있습니다.
일반적인 2대 카메라 촬영 경로는 다음과 같습니다:

버퍼는 카메라 간 타이밍 스큐를 상쇄합니다. 버퍼가 없고, 또한 SYNC, 이 설계는 교착 상태나 DRC 경고가 발생할 위험이 있습니다.
단계별 오버레이 및 스티칭 절차에 대한 자세한 내용은 사용자 설명서의 “비동기 이미지 파이프라인의 동기화” 섹션을 참조하십시오.
SyncToMin 및 SyncToMax 매개변수 값 사용#
출처에 다음이 포함되어 있다면 크기가 다른 이미지들, 다음을 사용하십시오. SyncMode operator의 SYNC 연산자를 사용하여 차원을 정렬합니다. 다음 값 중에서 선택할 수 있습니다. SyncToMin 및 SyncToMax.
동기화를 통해 모든 출력 이미지의 크기가 동일하게 유지됩니다. 이 SYNC 이 연산자는 두 가지 모드를 지원합니다:
-
SyncToMin: 더 큰 이미지는 자르기를 통해 모든 이미지를 가장 작은 이미지 크기에 맞춰 조정합니다.
-
SyncToMax: 작은 이미지를 확대하여 모든 이미지를 가장 큰 이미지 크기에 맞춰 정렬합니다.SyncToMax모드에서는 추가 영역이 가짜 0 픽셀(검은색으로 표시됨)로 채워집니다.
시뮬레이션에서는 다음과 같이 나타납니다:
SyncToMin: 더 큰 이미지가 잘려 나갔습니다.

SyncToMax: 작은 이미지는 더미 픽셀로 채워져 있습니다.

InsertLine 및 InsertImage 연산자와의 동기화#
InsertLine 여러 소스의 선을 삽입하여 이미지를 조합합니다. 두 소스 모두 선을 순서대로 제공하는 경우, 선 기반 스티칭에 이 기능을 사용하십시오.
카메라가 동기화되어 작동할 때는 더 작은 ImageFifo a 대신 연산자 LineBuffer 연산자. 이렇게 하면 리소스 사용량을 줄일 수 있습니다.

정보
InsertLine 및 InsertImage 은 종종 다음과 함께 사용되며 CONST 연산자. 이 맥락에서, CONST 이미지나 선이 출력 스트림에 포함될지 여부를 지정합니다. 데이터는 항상 처리되지만, CONST 해당 항목이 출력 스트림에 표시될지, 아니면 내부적으로 폐기될지(즉, 내부 휴지통 경로로 전송될지)를 결정합니다.
InsertImage 여러 소스의 이미지를 삽입하여 일련의 이미지 시퀀스를 생성합니다. 이 기능을 사용하여 두 대의 카메라에서 촬영된 이미지를 하나의 출력 시퀀스로 다중화할 수 있습니다.

두 연산자 모두 비동기 입력을 허용합니다. 이러한 연산자를 중지할 수 없는 소스와 함께 사용하는 경우, 교착 상태를 방지하기 위해 연산자 앞에 충분한 크기의 버퍼를 배치해야 합니다. 연산자 참조의 InsertLine 항목과 InsertImage 연산자 참조를 참조하십시오.
SourceSelector 연산자와의 동기화#
SourceSelector 여러 이미지 소스(예: 두 대의 카메라) 중에서 선택합니다. 이 기능은 수신되는 이미지의 무결성을 유지하면서 비동기식 소스 간을 전환합니다.
선택된 입력만 출력으로 전달되며, 그 외의 모든 입력은 무시됩니다. 입력에서 이미지가 전송 중인 도중에 스위치 변경이 발생하면, 새로운 소스가 활성화되기 전에 해당 전송이 완료됩니다.
다음 명령을 사용하여 SelectSource 실행 시 활성 소스를 제어하는 매개변수.
오퍼레이터는 다른 입력으로 전환하기 전에 현재 프레임을 완료합니다. 설정 InfiniteSource 에서 ENABLED 카메라에서 입력이 전송될 때. 다음으로 설정하세요. DISABLED 입력이 버퍼링되고 중지 가능한 스트림에서 들어올 때.

Basler는 다음을 사용할 것을 권장합니다. IF 또는 CASE ~ 대신 SourceSelector 모든 입력 신호가 동일한 M형 모듈에서 공급되는 경우입니다. 이러한 연산자는 더 적은 리소스를 사용합니다. 예를 들어, 다음의 설계를 참고하십시오. CASE 연산자:

‘연산자 참조’의 ‘SourceSelector ’ 항목도 참조하십시오.
동기화 피하기#
동기화 및 버퍼링 연산자는 FPGA 리소스를 많이 소모하므로, 가능한 한 동기화가 필요하지 않도록 해야 합니다. 대부분의 경우 대체 설계 기법을 적용함으로써 이를 달성할 수 있습니다. 이러한 기법에는 필요한 M형 연산자 앞에서 데이터를 병합하고, 그 뒤에서 데이터를 분할하는 방법이 포함될 수 있습니다. 다음 스크린샷은 유사한 워크플로우의 두 가지 구현 예를 보여주며, 하나는 MergePixel 및 ADD, 그리고 한 번은 SYNC:
![]()
문제 해결: 교착 상태#
가장 흔하면서도 해결하기 가장 어려운 동기화 오류 중 하나는 교착 상태입니다.
두 소스가, 예를 들어 다음을 사용하여 직접 동기화될 때 교착 상태가 발생합니다. SYNC 버퍼링 없이 연산자가 실행됩니다. 이 상황에서 각 소스는 상대방을 기다리게 됩니다. 즉, A는 B를 기다리고, B는 A를 기다립니다. 그 결과, 데이터가 전송되지 않습니다.
아래 다이어그램은 하단 경로에 있는 분기 모듈이 정지 신호를 수신하여 더 이상 입력에서 데이터를 받아들이지 않는 모습을 보여줍니다. 그 결과, 상단 경로도 데이터 수신을 중단하고 파이프라인 전체가 정지합니다:

시뮬레이션 환경에서는 데드락이 종종 눈에 띄지 않아 시스템이 정상적으로 작동하는 것처럼 보일 수 있습니다. 그러나 하드웨어 환경에서는 일반적으로 출력이 전혀 발생하지 않습니다. 이러한 경우, 하드웨어 애플릿이 멈추고 PC로의 데이터 전송이 중단되며, 결국 DMA 타임아웃이 발생합니다.
정보
데드락은 시뮬레이션에서는 종종 눈에 띄지 않기 때문에 탐지하기 어렵습니다. 잠재적인 데드락을 파악하려면 microDisplay X 과 같은 런타임 도구를 사용하여 하드웨어 내 FIFO의 채움 수준을 모니터링하십시오. FIFO의 채움 수준이 100%로 유지된다면, 이는 잠재적인 데드락이나 병목 현상을 나타냅니다.
교착 상태가 발생하는 일반적인 원인:
- 누락된 버퍼
- 동기화 오류
교착 상태를 해결하는 방법:
교착 상태를 해결하려면 FIFO 기반 버퍼링을 도입해야 합니다. 예를 들어, ImageBuffer 또는 ImageFifo, ~ 이전에 SYNC 연산자. 이를 통해 하나의 소스가 약간 앞서 실행될 수 있게 하여 상호 대기 상황을 방지합니다:

DRC를 사용한 디자인 검증#
분기들이 합쳐지도록 배선을 완료한 후, ‘분석’ → ‘설계 규칙 검사 레벨 1’을 실행하십시오. 레벨 1은 동기화 위반 사항을 보고하며, 영향을 받은 링크를 보라색으로 표시합니다.
설계 규칙 검사 레벨 2에서는 확장된 검사를 수행하고 FPGA 리소스를 추정합니다. 빌드하기 전에 레벨 1에서 발견된 형식적 오류를 수정하십시오.
DRC 로그를 강조 표시된 모듈 및 링크와 함께 읽어보세요. 전체 워크플로는 ‘빈 디자인에서 실행 가능한 애플릿까지’ 튜토리얼 항목을 참조하세요.
관련 항목#
- 사용자 설명서의 링크 관련 규칙 — O형 네트워크 규칙 및 신호 링크
- 중지 가능한 데이터 스트림과 중지 불가능한 데이터 스트림 튜토리얼 주제 — 무한 소스 및 흐름 제어
- Memory 요소 튜토리얼 주제 — 이전 버퍼
SYNC - 파이프라인 개념 튜토리얼 주제 — 블로킹 및 역압
- 비동기 이미지 파이프라인의 동기화: 기초와 예제
- ‘빈 디자인에서 실행 가능한 애플릿까지’ 튜토리얼 주제 — DRC, 시뮬레이션 및 빌드
- 매개변수화 튜토리얼 주제 — 병합 지점에서의 링크 속성


