콘텐츠로 바로 가기

Operator 유형 및 Synchronization#

이 항목에서는 VisualApplets가 오퍼레이터를 분류하는 방식과 분기가 병합될 때 데이터 스트림을 동기화하는 방법을 설명합니다. 이 항목을 읽고 나면 O형, M형, P형 동작, O형 네트워크 규칙, 동기식 및 비동기식 입력, 그리고 다음과 같은 오퍼레이터가 필요한 시점을 이해할 수 있습니다. SYNC, InsertLine, InsertImage, 또는 SourceSelector 데이터 스트림을 동기화합니다.

핵심 용어

VisualApplets는 각 오퍼레이터의 유형을 나타내는 모양으로 표시합니다. 둥근 아이콘은 O형 오퍼레이터입니다. 사각형 아이콘은 M형 또는 P형 오퍼레이터입니다. M형과 P형은 모두 사각형 아이콘을 사용하므로 모양만으로는 구분할 수 없습니다. 제품 내 도움말이나 Operator Reference에서 유형을 확인하세요. 주요 차이점은 M형 오퍼레이터는 입력을 차단(blocking)할 수 있지만, P형 오퍼레이터는 능동적으로 차단하지 않는다는 것입니다.

차단(Blocking)이란 생성된 FPGA 단계가 더 이상 데이터를 받을 준비가 되지 않았을 때 입력을 일시 중지할 수 있음을 의미합니다. 타이밍이 서로 다르므로 일반 오퍼레이터로는 두 개의 독립된 카메라 스트림을 연결할 수 없습니다. 데이터 스트림을 동기화하려면 버퍼가 있는 동기화 오퍼레이터를 사용하세요.

오퍼레이터 유형 식별#

VisualApplets는 오퍼레이터를 세 가지 유형으로 분류합니다. 디자인 창의 모듈 아이콘 모양으로 유형을 식별할 수 있습니다. 제품 내 도움말과 Operator Reference에 각 오퍼레이터의 유형이 문서화되어 있습니다.

Type 모양 주요 동작
O-type 원형:

O형 오퍼레이터
  • 단순 처리
  • 픽셀 수 변경 없음
  • 직렬 또는 병렬 연결
M-type 정사각형:

M-Type Operator
  • 복잡한 처리
  • 픽셀 수 및 치수 변경 가능
  • 입력 차단 가능
P-type 정사각형:

P-Type Operator
  • M-type과 유사하지만 입력을 능동적으로 차단하지 않음

카메라 모듈과 같은 모든 소스 오퍼레이터는 M-type 오퍼레이터입니다. 다음과 같은 모든 최종 목적지는 DmaToPC, M-type 오퍼레이터입니다.

O형 오퍼레이터#

O-type 오퍼레이터는 단순 처리 단계를 수행합니다. 규칙은 다음과 같습니다:

  • 출력 픽셀 수는 입력 픽셀 수와 같습니다.
  • 입력과 출력 사이에는 일정한 수의 클럭 사이클 지연이 발생합니다. 이 타이밍 지연은 타이밍 동기화 중에 보상되어야 합니다.
  • 제한 없이 직렬 또는 병렬로 조합할 수 있습니다. O-type 파이프라인의 분할 및 병합에는 추가 동기화가 필요하지 않습니다.
  • 데이터 스트림을 직접 차단할 수는 없지만, 하류(downstream) 모듈의 차단 조건을 전파합니다.

정보

알고리즘에 적합한 경우 O-type 오퍼레이터를 우선적으로 사용하는 것이 좋습니다. 일반적으로 M-type 오퍼레이터보다 적은 FPGA 리소스를 사용합니다.

M형 오퍼레이터#

M-type 오퍼레이터는 더 복잡한 처리를 수행합니다. 규칙은 다음과 같습니다:

  • 입력과 출력 간의 픽셀 수를 변경할 수 있습니다.
  • 출력을 지연시킬 수 있습니다.
  • 더 많은 데이터를 수용할 준비가 되지 않은 경우 입력을 차단할 수 있습니다.
  • 연결 시 링크 규칙을 준수해야 합니다.
  • 서로 다른 M-type 소스에서 생성된 데이터 스트림을 병합하려면 비동기 입력이 있는 전용 오퍼레이터를 통해서만 가능합니다(예: SYNC, 또는 SourceSelector).

카메라 오퍼레이터와 버퍼 오퍼레이터는 항상 M-type 오퍼레이터입니다. 많은 필터 및 동기화 오퍼레이터도 M-type입니다.

P-Type Operator#

P-type operator들은 M-type operator들과 유사합니다. 가장 큰 차이점은 입력을 강제로 차단하지 않는다는 점입니다. 또한 링크의 대역폭을 줄이지 않으며 수신하는 데이터보다 더 많은 데이터를 생성하지 않습니다. 중단할 수 없는(non-stoppable) 소스와 함께 사용할 수 있습니다.

핵심 용어

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

중단할 수 있는 데이터 스트림과 중단할 수 없는 데이터 스트림에 대한 자세한 내용은 Stoppable and Non-Stoppable Data Streams 튜토리얼 항목을 참조하세요.

Operator Reference에 예외가 명시되어 있지 않은 한, P-type operator와 M-type operator에는 동일한 링크 규칙이 적용됩니다. 그러나 M-type operator와 달리 P-type operator는 중단할 수 없는 소스와 함께 사용할 수 있습니다.

동기식 및 비동기식 입력#

복수의 입력을 가진 M-type operator는 동기식(synchronous) 입력, 비동기식(asynchronous) 입력 또는 둘 다 허용합니다. 일부 operator는 서로 비동기식일 수 있는 동기식 입력 그룹을 제공합니다. 제품 내 도움말 및 Operator Reference에는 각 포트에 필요한 입력 유형이 문서화되어 있습니다.

동기식 입력#

많은 operator는 모든 입력 포트 또는 일부 입력 포트에서 동기식 입력을 요구합니다. 동기식이란 이러한 입력의 데이터 스트림이 정렬되어 있음을 의미합니다. 즉, 프로토콜, 들어오는 픽셀 수, 데이터 타이밍이 모두 정확히 일치해야 합니다.

동기식 동작은 모든 입력이 O-type operator 네트워크를 통해서만 배타적으로 라우팅되는 공통 M-type 소스에서 비롯될 때 보장됩니다. 다른 소스(즉, M-type operator)가 도입되지 않는 한, 이러한 입력은 임의 개수의 O-type operator를 통해 연결될 수 있습니다.

동일한 동기식 그룹에 속하는 모든 입력은 항상 단일 M-type 소스를 공유합니다.

전형적인 예시는 다음과 같습니다. RemoveImage 동일한 소스에서 가져온 두 개의 이미지 입력이 있는 LineBuffer:

동기식 입력

비동기식 입력#

소수의 operator만 비동기식 입력을 지원합니다. 비동기식이란 이러한 입력의 데이터 스트림이 정렬되어 있지 않음을 의미합니다. 타이밍, 프로토콜, 들어오는 픽셀 수가 다를 수 있습니다. 비동기식 입력 간에 차이가 있을 수 있는 특정 속성은 operator에 따라 다릅니다. 비동기식 입력은 각 소스로부터 O-type operator 네트워크를 통해 연결될 수도 있습니다. 비동기식 입력을 명시적으로 지원하는 operator에만 비동기식 입력을 사용하십시오. 이러한 operator는 비동기식 데이터 스트림을 동기식 데이터 스트림으로 변환합니다.

비동기식 이미지 입력을 지원하는 operator는 다음과 같습니다:

  • SYNC
  • InsertLine
  • InsertImage
  • SourceSelector.

FrameBufferRandomRead 및 FrameBufferMultiRoiDyn 또한 비동기식 이미지 링크를 허용하지만, 좌표 입력은 여전히 동기식이어야 합니다.

일반적인 다중 입력 operator로는 두 개의 독립된 M-type 소스를 병합할 수 없습니다. 이를 위해서는 비동기식 입력을 지원하는 operator가 필요합니다:

비동기식 입력

동기화 규칙#

O-type 네트워크에서는 네트워크의 복잡성에 관계없이 모든 O-type 모듈의 소스가 동일한 M-type 또는 P-type 모듈이어야 합니다. 이 소스의 링크는 다른 O-type 모듈이나 O-type 서브네트워크를 거쳐갈 수 있습니다.

O-type 파이프라인의 분할과 병합은 간단하며 추가 동기화가 필요하지 않습니다.

O-Type 네트워크

네트워크에 M-type 또는 P-type operator가 도입되면 새로운 데이터 소스가 됩니다. 서로 다른 소스에서 파생된 분기(branch)가 하위 스트림에서 병합되는 경우, 병합에는 동기화가 필요합니다. 즉, SYNC, InsertLine, InsertImage, 또는 SourceSelector과 같은 비동기식 입력이 있는 operator를 추가해야 합니다. 이러한 분기는 표준 다중 입력 operator에 연결할 수 없습니다.

VisualApplets은 디자인 창에서 동기화 위반(synchronization violation)을 보라색 링크(purple link)로 강조 표시합니다:

VisualApplets: 보라색 링크로 표시되는 동기화 위반

이 O-type 네트워크 규칙은 동기식 입력을 보장합니다. 동일한 동기식 입력 그룹에 속하는 모든 분기는 단일 M-type 또는 P-type 소스에서 나와야 하며 O-type operator만 거쳐야 합니다.

O-type 네트워크 규칙은 다음을 사용하는 신호 링크에는 적용되지 않습니다. Image Protocol = VALT_SIGNAL. 자세한 내용은 다음을 참조하세요. 신호 링크에 대한 다른 규칙 사용 설명서 참조.

독립형 소스 병합#

두 개 이상의 독립된 소스가 하나의 처리 경로에 공급될 때는 타이밍(timing)과 이미지 크기(image dimensions)를 동기화해야 합니다.

  • 타이밍 동기화(Timing synchronization)는 픽셀이 각 브랜치에 도달하는 시점을 정렬합니다.
  • 이미지 크기 동기화(Image dimension synchronization)는 너비, 높이, 이미지 프로토콜을 정렬합니다.

동기화는 일반적으로 다음 연산자를 사용하여 수행됩니다. SYNC. 특정 상황에서는 동기화를 위한 몇 가지 다른 옵션이 있습니다.

잘못된 타이밍 동기화는 교착 상태(deadlock), 대역폭 부족 또는 데이터 손실을 유발할 수 있습니다.

정보

교착 상태를 방지하려면 다음과 같은 Memory 연산자를 배치하십시오. ImageFifo 또는 ImageBuffer, 이전 SYNC 소스가 서로 다른 속도로 실행되거나 하나의 브랜치에서 지연이 발생하는 경우 연산자입니다. 또한 메모리 요소의 크기는 적절하게 조정해야 합니다. 충분한 버퍼 크기를 선택하려면 예상되는 지연 시간을 파악해야 합니다.

교착 상태는 VisualApplets의 시뮬레이션으로 안정적으로 감지할 수 없으며 하드웨어에서만 나타납니다. 이를 감지하려면 다음을 모니터링하십시오. FillLevel operator의 ImageFifo 연산자 또는 기타 버퍼 연산자 프레임 그래버에서, 예를 들어 microDisplay X. 100% 상태를 유지하는 FIFO는 종종 교착 상태의 원인을 나타냅니다. VisualApplets 디자인 창에서는 해당 Fill 수준을 관찰할 수 없습니다.

교착 상태에 대한 자세한 내용은 문제 해결: 교착 상태(Troubleshooting: Deadlock)를 참조하십시오.

비동기 스트림을 병합할 때 라인 레이트, 프레임 레이트, 픽셀 레이트가 일치하는지 확인하십시오. 한 카메라가 다른 카메라보다 빠르게 작동하면 버퍼가 넘칠 때까지 채워져 데이터가 손실됩니다. 동일한 속도로 여러 카메라에서 장시간 획득을 수행해야 하는 경우 트리거 시스템을 사용하십시오.

SYNC 오퍼레이터로 동기화#

The SYNC 연산자는 모든 입력 링크의 타이밍과 이미지 크기를 동기화합니다. 입력 수는 연산자를 인스턴스화할 때 고정됩니다. 모든 출력은 동기식입니다. 그 후 다운스트림 O형 연산자가 병합된 스트림을 처리할 수 있습니다.

The SYNC 연산자는 모든 입력에서 밸브 역할을 합니다. 모든 입력에 유효한 픽셀이 존재할 때까지 대기합니다. 그런 다음 모든 출력으로 동시에 픽셀을 전달합니다.

입력 이미지의 크기가 다를 때, SYNC 이(가) 이미지들을 정렬합니다. 매개변수화에 따라 작은 이미지를 확장하거나 큰 이미지를 자릅니다. 연산자 설명 참조 SYNC 연산자 참조(Operator Reference) 및 섹션 SyncToMin 및 SyncToMax 파라미터 값 사용 에 대한 SyncToMin 및 SyncToMax 동작.

정보

다음 명령을 사용하여 SYNC 카메라가 동기화되어 트리거되는 경우에만 디자인 내 카메라 근처에 연산자를 배치하십시오. 그렇지 않으면 버퍼가 빠르게 채워질 수 있습니다.

전형적인 2대 카메라 경로는 다음과 같습니다:

SYNC 오퍼레이터로 동기화

버퍼는 카메라 간의 타이밍 스큐를 흡수합니다. 버퍼와 SYNC이(가) 없으면 디자인에서 교착 상태(deadlock) 또는 DRC 경고가 발생할 위험이 있습니다.

단계별 오버레이 및 스티칭 안내는 사용자 매뉴얼의 Synchronization of Asynchronous Image Pipelines을 참조하십시오.

SyncToMin 및 SyncToMax 파라미터 값 사용#

소스에 크기가 다른 이미지가 포함된 경우, SyncMode operator의 SYNC 연산자를 사용하여 크기를 맞추십시오. 다음 값 중에서 선택할 수 있습니다. SyncToMin 및 SyncToMax.

동기화를 통해 모든 출력 이미지의 크기가 동일하게 유지됩니다. SYNC 연산자는 두 가지 모드를 지원합니다.

  • SyncToMin: 더 큰 이미지를 자르(cropping)어 모든 이미지를 가장 작은 이미지 크기에 맞춥니다.

    SyncToMin을 사용한 더 큰 이미지 자르기

  • SyncToMax: 더 작은 이미지를 확장하여 모든 이미지를 가장 큰 이미지 크기에 맞춥니다. 이 SyncToMax 모드에서는 추가 영역이 더미 제로 픽셀(검은색으로 표시됨)로 Fill됩니다.

    SyncToMax를 사용한 더 큰 이미지 패딩

시뮬레이션에서는 다음과 같이 나타납니다:

SyncToMin: 더 큰 이미지가 잘립니다.

시뮬레이션에서의 SyncToMin

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

시뮬레이션에서의 SyncToMax

InsertLine 및 InsertImage 오퍼레이터로 동기화#

InsertLine 여러 소스의 라인을 삽입하여 이미지를 조립합니다. 두 소스 모두에서 라인이 순차적으로 전송되는 라인 기반 스티칭에 사용하십시오.

카메라가 동기식으로 트리거되는 경우, ImageFifo 연산자 대신 더 작은 LineBuffer 연산자를 사용할 수 있습니다. 이를 통해 리소스 사용량을 줄일 수 있습니다.

InsertLine을 이용한 동기화

정보

InsertLine 및 InsertImage 종종 다음과 함께 사용됩니다. CONST operator. 이 맥락에서, CONST 지정된 이미지 또는 라인이 출력 스트림에 포함되는지 여부를 지정합니다. 데이터는 항상 처리되지만, CONST 출력 스트림에 나타날지 아니면 내부적으로 폐기(즉, 내부 쓰레기 경로로 전송)될지를 결정합니다.

InsertImage 여러 소스의 이미지를 삽입하여 이미지 시퀀스를 조립합니다. 두 대의 카메라에서 오는 이미지를 하나의 출력 시퀀스로 멀티플렉싱하는 데 사용합니다.

InsertImage를 사용한 동기화

두 operator 모두 비동기 입력을 수락합니다. 이러한 operator를 중지할 수 없는 소스와 함께 사용하는 경우, 교착 상태(deadlock)를 방지하기 위해 그 앞에 충분한 크기의 버퍼를 배치하십시오. Operator Reference의 InsertLine 및 Operator Reference의 InsertImage도 참조하십시오.

SourceSelector 오퍼레이터로 동기화#

SourceSelector 예를 들어 두 대의 카메라와 같은 여러 이미지 소스 중에서 선택합니다. 들어오는 이미지의 무결성을 유지하면서 비동기 소스 간에 전환합니다.

선택된 입력만 출력으로 전달되며, 다른 모든 입력은 폐기됩니다. 입력에서 이미지 전송이 진행되는 중에 전환이 발생하면, 새 소스가 활성화되기 전에 현재 전송이 완료됩니다.

다음 명령을 사용하여 SelectSource 런타임에 활성 소스를 제어하는 parameter입니다.

operator는 다른 입력으로 전환하기 전에 현재 프레임을 완료합니다. 설정 InfiniteSource 에서 ENABLED 카메라가 입력을 공급할 때. 설정 DISABLED 입력이 버퍼링되고 중지 가능한 스트림에서 올 때.

SourceSelector와의 동기화

Basler에서는 다음을 사용할 것을 권장합니다. IF 또는 CASE 대신에 SourceSelector 모든 입력이 동일한 M-type 모듈에서 공급되는 경우. 해당 operator는 더 적은 리소스를 사용합니다. 예를 들어 다음 디자인을 참조하십시오. CASE 연산자:

SourceSelector 대신 CASE 사용

Operator Reference의 SourceSelector도 참조하십시오.

동기화 방지#

동기화 및 버퍼링용 operator는 많은 FPGA 리소스를 소비하므로, 가능하면 동기화가 필요하지 않도록 하십시오. 많은 경우 필수 M-type operator 앞에 데이터를 병합하고 나중에 데이터를 분할하는 등의 대체 설계 기법을 적용하여 해결할 수 있습니다. 다음 스크린샷은 유사한 워크플로의 두 가지 구현을 보여줍니다. MergePixel 및 ADD, 그리고 다음을 사용: SYNC:

동기화 방지

문제 해결: 교착 상태(Deadlock)#

가장 일반적이고 해결하기 어려운 동기화 오류 중 하나는 deadlock입니다.

버퍼링 없이 예를 들어 두 소스가 직접 동기화될 때 deadlock이 발생합니다. operator, 이 상황에서 각 소스는 상대방을 기다립니다. A는 B를 기다리고, B는 A를 기다립니다. 결과적으로 데이터가 전송되지 않습니다. SYNC 버퍼링 없이 연산자가 실행됩니다. 이 상황에서 각 소스는 상대방을 기다리게 됩니다. 즉, A는 B를 기다리고, B는 A를 기다립니다. 그 결과, 데이터가 전송되지 않습니다.

아래 다이어그램은 중지 신호를 수신하여 더 이상 입력에서 데이터를 받지 않는 하위 경로의 분기 모듈을 보여줍니다. 결과적으로 상위 경로도 데이터 수신을 중지하고 전체 파이프라인이 중단됩니다.

Deadlock

교착 상태(Deadlock)는 시뮬레이션에서는 잘 드러나지 않으며, 시스템이 정상적으로 작동하는 것처럼 보일 수 있습니다. 그러나 하드웨어에서는 일반적으로 출력 결과가 나타나지 않는 현상으로 이어집니다. 이 경우 하드웨어 애플릿이 멈추고 PC로의 데이터 전송이 중단되며, 결국 DMA 타임아웃이 발생합니다.

정보

교착 상태는 시뮬레이션에서 보이지 않는 경우가 많아 감지하기 어렵습니다. 잠재적인 교착 상태를 식별하려면 microDisplay X와 같은 런타임 도구를 사용하여 하드웨어의 FIFO Fill 수준을 모니터링하십시오. 용량이 100%로 유지되는 FIFO는 교착 상태 또는 병목 현상이 발생했음을 나타냅니다.

교착 상태의 일반적인 원인:

  • 버퍼 누락
  • 잘못된 동기화

교착 상태를 해결하는 방법:

교착 상태를 해결하려면 다음과 같이 FIFO 기반 버퍼링을 삽입하십시오. ImageBuffer 또는 ImageFifo, 이전 SYNC operator. 이를 통해 하나의 소스가 약간 앞서 실행될 수 있으며 상호 대기 조건을 방지할 수 있습니다.

교착 상태 해결됨

DRC를 사용한 디자인 검증#

합쳐지는 분기를 연결한 후 Analysis → Design Rules Check Level 1을 실행하십시오. Level 1은 동기화 위반을 보고하고 영향을 받는 링크를 보라색으로 표시합니다.

Design Rules Check Level 2는 확장된 검사를 실행하고 FPGA 리소스를 추정합니다. 빌드하기 전에 Level 1의 형식 오류를 수정하십시오.

강조 표시된 모듈 및 링크와 함께 DRC log를 읽어보세요. 전체 워크플로에 대해서는 From Empty Design to Running Applet 튜토리얼 항목을 참조하십시오.