Memory 요소#
이 토픽에서는 VisualApplets 디자인의 memory operators가 타겟 하드웨어의 물리적 메모리에 매핑되는 방식과 각 유형을 사용하는 시점에 대해 설명합니다. 이 토픽을 읽고 나면 FPGA 내부 메모리(예: 블록 RAM)와 프레임 그래버 DRAM 간의 차이점, FIFO 스타일 버퍼와 임의 접근 프레임 버퍼의 차이점, 공유 DRAM 대역폭이 여러 RAM operators가 있는 디자인에 미치는 제한, 그리고 시뮬레이션 및 하드웨어에서 메모리 관련 문제를 인식하는 방법을 이해할 수 있게 됩니다.
핵심 용어
FillLevel은 예를 들어 microDisplay X 등 하드웨어의 런타임에서 버퍼가 얼마나 찼는지(퍼센트 단위로) 보여줍니다. 100%에 가까운 상태를 유지하는 버퍼는 종종 병목 현상이나 교착 상태(deadlock)를 나타냅니다. 시작점으로 카메라 뒤에 버퍼를 배치하세요.
플랫폼 RAM 크기, 데이터 폭, 대역폭 값은 Device Resources를 참조하세요.
FPGA 메모리 대 프레임 그래버 DRAM#
VisualApplets memory operators는 프레임 그래버에 데이터를 저장하는 위치에 따라 두 그룹으로 나뉩니다. 두 번째 구분 기준은 데이터를 액세스하는 방식입니다. FIFO 스타일 버퍼와 임의 접근 또는 멀티 ROI 프레임 버퍼가 이에 해당합니다. Operator Reference의 Overview of the Memory Library에서는 각 memory operator가 데이터를 저장하는 위치를 보여줍니다. VisualApplets의 RAM 리소스는 보드 DRAM에 매핑되는 장치 리소스 토큰입니다. VisualApplets 애플리케이션 내의 메모리가 아닙니다.
| Property | FPGA 내부 메모리 | 프레임 그래버 DRAM |
|---|---|---|
| 일반적인 operators | ImageFifo; 소규모 임의 접근(random-access) 케이스의 경우에도 해당 FrameMemoryRandomRd / LineMemoryRandomRd | ImageBuffer, LineBuffer, FrameBufferRandomRead, FrameBufferMultiRoi, FrameBufferMultiRoiDyn |
| 위치 | FPGA 내부 (imaFlex CXP-12 Quad/Penta의 BRAM, LUT RAM 또는 URAM) | 보드 상, FPGA 외부 |
| 용량 | 제한됨. 전체 해상도 프레임은 사용 가능한 FPGA 메모리를 초과하는 경우가 많음 | 더 큼. 많은 라인 또는 전체 프레임에 적합함 |
| Latency | 낮음. 외부 DRAM 버스에 접근할 수 없음 | 라인 지향 FIFO는 최소 한 줄 이상을 추가함 |
| VisualApplets RAM 리소스 | 아니요 — RAM 디바이스 리소스를 예약하지 않음 | 예 — 인스턴스당 하나의 RAM 리소스가 보드 DRAM에 매핑됨 |
| Bandwidth | 로컬. 오퍼레이터가 프레임 그래버 RAM 인터페이스를 두고 경쟁하지 않음 | 동일한 물리적 인터페이스의 RAM 오퍼레이터 간에 공유됨 — DRAM 대역폭 공유 참고 |
메모리 오퍼레이터 선택의 표를 사용하여 오퍼레이터를 선택한 다음, 매개변수 및 플랫폼 세부 정보에 대한 해당 오퍼레이터 섹션을 읽으십시오.
Memory Operator 선택하기#
| 사용 사례 | 선호 |
|---|---|
| 작은 버퍼, 낮은 지연 시간, DRAM 대역폭 비용 없음 | ImageFifo (FPGA 내부) |
| mE5의 이미지 FIFO, 피크 흡수, ROI | ImageBuffer (DRAM) |
| imaFlex CXP-12 Quad/Penta의 라인 FIFO | LineBuffer (DRAM) |
이전 버퍼 SYNC 작은 지연 시간 포함 | ImageFifo (지연 시간이 큰 경우 더 큰 DRAM 버퍼) |
| 임의의 픽셀 읽기가 가능한 전체 프레임 저장소 | FrameBufferRandomRead (DRAM) |
| 단일 버퍼에서 다중 또는 동적 ROI | FrameBufferMultiRoi / FrameBufferMultiRoiDyn (DRAM) |
설계 지침
Basler는 카메라의 데이터 버스트를 보상하기 위해 디자인에 최소한 하나 이상의 DRAM operator를 사용할 것을 권장합니다. 해당 DRAM 버퍼는 기본 카메라 디커플링 경로이며 (LineBuffer 또는 ImageBuffer). ImageFifo 은(는) 카메라 버스트를 흡수해야 할 때 해당 DRAM 버퍼를 대체할 수 없습니다.
ImageFifo#
The ImageFifo operator는 이미지 데이터를 first-in, first-out 버퍼로 FPGA 내부 메모리에 큐잉합니다. 버퍼 크기는 EntitiesToStore 및 EntityType 매개변수. EntityType 의 값으로 설정하며 PIXEL, LINE, 또는 FRAME. 데이터는 출력이 비어 있는 즉시 전달됩니다. 다운스트림 모듈이 차단되면 버퍼가 Fill됩니다.
파라미터를 원하는 InfiniteSource operator의 ImageFifo operator를(을) ENABLED 카메라와 같이 중단할 수 없는 소스에서 입력이 들어올 때 사용합니다.
정보
The ImageFifo operator는 비교적 적은 수의 픽셀만 버퍼링합니다. 따라서 FIFO 오버플로가 발생할 위험이 크며, 이는 operator에 의해 내부적으로 항상 안정적으로 처리되는 것은 아닙니다. 중단할 수 없는 스트림의 경우, Basler는 ImageFifo 을(를) 선행하는 Overflow operator와 결합하거나 ImageFlowControl operator를(을) 대신 사용할 것을 권장합니다. ImageFifo operator를 통해 수행됩니다. ImageFlowControl operator는 FIFO 버퍼링과 통합 오버플로 처리를 결합합니다.
파라미터 ImplementationType 을(를) 사용하여 AUTO (기본값) BRAM, LUTRAM또는 (imaFlex CXP-12 Quad/Penta의 경우) URAM중에서 선택할 수 있습니다. Basler는 특정 FPGA 리소스 타입이 부족하지 않은 한 항상 AUTO 을(를) 사용할 것을 권장합니다.
operator에 대한 자세한 내용은 Operator Reference의 ImageFifo를 참조하십시오.
ImageBuffer 및 LineBuffer#
The ImageBuffer (microEnable 5) 및 LineBuffer (imaFlex) operator는 라인 지향 FIFO처럼 작동합니다. 선택한 ROI의 완료된 라인은 다운스트림 모듈이 수용할 수 있는 즉시 전달됩니다. 대기 시간은 최소 one line. 출력 차단으로 인해 버퍼가 채워지면 지연 시간이 증가합니다. 다음 내용도 참조하십시오. Latency 튜토리얼 항목.

플랫폼 참고 사항: ImageBuffer 대 LineBuffer#
| Operator | 플랫폼 |
|---|---|
ImageBuffer | microEnable 5 (mE5) |
LineBuffer | imaFlex CXP-12 Quad / Penta |
imaFlex CXP-12 Quad and Penta 지원하지 않습니다 the ImageBuffer operator. mE5에서 imaFlex로 디자인을 변환할 때 VisualApplets는 대체합니다 각 ImageBuffer operator with a LineBuffer operator를 통해 수행됩니다. LineBuffer operator provides the same core buffering and ROI features for the imaFlex platforms.
ImageBuffer 및 LineBuffer를 사용한 관심 영역(ROI) 정의#
을(를) 통해 ImageBuffer 및 LineBuffer operators, you can also define regions of interest (ROIs). You do that by setting the XOffset, XLength, YOffset및 YLength parameters. Edge cases are documented in the Operator Reference: For example, if the input is smaller than the requested ROI, or if your design is in Line1D mode, or if you have undefined content for extra pixels.
operator에 대한 자세한 내용은 Operator Reference의 LineBuffer 및 Operator Reference의 ImageBuffer를 참조하십시오.
버퍼 사용량 및 오버플로 모니터링#
The ImageBuffer 및 LineBuffer operators provide the following status parameters to monitor buffer usage and overflow:
| Parameter | 의미 |
|---|---|
FillLevel | Defines how full the buffer RAM is, in percent (on ImageBuffer in 25% steps). |
LineCount | Indicates the current number of lines stored. Only available for the LineBuffer (으)로 줄어듭니다. |
Overflow | Indicates that the buffer can't accept more data without exceeding capacity. This status parameter is not the same as the Overflow operator in the Synchronization library, and not the same as arithmetic overflow. See 중지 가능 및 중지 불가능 데이터 스트림 Tutorial topic and Bit Arithmetic 튜토리얼 항목. |
오버플로가 발생하면 들어오는 데이터가 손실될 수 있으며 유효한 이미지 높이가 줄어들 수 있습니다. 연산자가 복구될 때까지 불완전한 이미지가 메모리에 남아 있을 수 있습니다. Overflow 소스가 중단될 수 없는 경우에 적용되며 InfiniteSource 은(는) ENABLED. 설정합니다. InfiniteSource 에서 ENABLED 버퍼가 카메라 또는 다른 무한 소스 바로 뒤에 위치할 때 적용됩니다. 참고: 중지 가능 및 중지 불가능 데이터 스트림 튜토리얼 주제. 디버깅 시 이러한 파라미터를 사용하는 방법은 다음을 참조하세요: 메모리 관련 오류 인식.

다음에서: LineBuffer operator의 경우 Basler는 다음을 활성화할 것을 권장합니다: WritePriority 파라미터, InfiniteSource 은(는) ENABLED. 만약 WritePriority 은(는) ENABLED일시적인 쓰기 속도가 가용한 DRAM 대역폭을 초과하는 동안에는 읽기보다 카메라의 쓰기 버스트가 선호됩니다. 다만 평균 대역폭은 해당 operator에 할당된 공유 대역폭 내에 유지되어야 합니다.
The LineBuffer operator는 모듈 파라미터를 통해 입력과 출력 간의 Parallelism을 변환할 수도 있으므로, ParallelismConverter별도의 PARALLELup / PARALLELdn가 항상 필요한 것은 아닙니다. 참고: Parallelism 튜토리얼 항목.
FrameBuffer operators를 이용한 전체 프레임, 임의 접근, 멀티 ROI#
The FrameBufferRandomRead, FrameBufferMultiRoi및 FrameBufferMultiRoiDyn operator는 전체 이미지 또는 대형 영역을 저장하고 엄격한 라인 FIFO가 아닌 않습니다 순서로 읽습니다. 임의 픽셀 액세스나 하나의 버퍼에서 Multiple ROI가 필요할 때 사용하세요.
FrameBufferRandomRead#
FrameBufferRandomRead 입력 이미지를 DRAM에 쓴 다음, 전용 주소 포트에서 열 및 행 주소 를 기준으로 픽셀을 읽습니다. 기하학적 변환, 리매핑 및 기타 임의 액세스 패턴에 사용하세요.
프레임이나 라인이 작은 경우에는 DRAM operator 대신 FrameMemoryRandomRd 또는 LineMemoryRandomRd 와 같은 FPGA 내부 operator를 사용하는 것이 좋습니다.
operator에 대한 자세한 내용은 Operator Reference의 FrameBufferRandomRead를 참조하세요.
FrameBufferMultiRoi 및 FrameBufferMultiRoiDyn#
The FrameBufferMultiRoi 및 FrameBufferMultiRoiDyn operator는 이미지 데이터를 저장하고 여러 관심 영역(ROI)을 출력합니다.. FrameBufferMultiRoiDyn 허용 동적 제어 링크를 통한 ROI 크기 및 위치.
DRAM 대역폭 공유#
각 DRAM 오퍼레이터에는 RAM 유형의 VisualApplets 리소스가 하나씩 필요합니다. 이 리소스는 VisualApplets 리소스 모델의 슬롯입니다. 이는 프레임 그래버의 물리적 DRAM에 매핑됩니다. imaFlex 및 microEnable 5 marathon 플랫폼에서는 RAM 리소스를 예약하는 모든 오퍼레이터가 물리적 DRAM을 공유합니다. 각 오퍼레이터에는 전용의 겹치지 않는 메모리 영역이 할당되지만, 크기와 대역폭은 동일한 물리적 인터페이스 상에서 활성화된 RAM 오퍼레이터 간에 분할됩니다.
결과:
- 모든 읽기 및 쓰기 작업은 공유 인터페이스에서 대역폭을 소비합니다.
- 여러 개의 DRAM 인스턴스가 있거나 처리량이 높은 경우, 총 트래픽이 플랫폼 한도를 초과할 수 있습니다.
- 초과 수요는 차단, 증가,
FillLevel오버플로 또는 지속 가능한 프레임 속도 저하로 이어집니다.
디바이스 리소스에서 플랫폼의 RAM 크기, RAM 데이터 너비 및 RAM 대역폭 총계(공유)를 확인하십시오.
필요한 경우 리소스 대화 상자에서 리소스를 할당하십시오. 디바이스 리소스의 디바이스 리소스 할당을 참조하십시오.
대역폭 계산 참고 사항#
공유 메모리 애플리케이션 노트에서는 RAM 크기와 RAM 데이터 너비를 효율적으로 사용하는 방법을 설명합니다.
핵심 사항:
-
읽기와 쓰기는 인터페이스를 공유합니다. 단일 DRAM 오퍼레이터의 경우, 사용 가능한 이미지 데이터 속도를 추정할 때 플랫폼 최대 대역폭을 2로 나눈 다음(쓰기에 절반, 읽기에 절반), 효율성 계수를 적용합니다. 문서화된 대역폭 값은 이론적 최댓값이며 실제 효율성은 그보다 낮습니다.
-
실제 사용 가능한 수준으로 RAM 데이터 너비를 최대한 활용하십시오. 링크의 유효 RAM 데이터 너비는 다음과 같습니다.
bit width × parallelism × kernel elements
이 곱은 각 DRAM 액세스의 유효 너비입니다. parallelism × Base Design Clock의 픽셀 레이트 대역폭과 혼동해서는 안 됩니다. 최대 DRAM 처리량은 이 곱이 보드에 따라 256비트, 384비트 또는 640비트 등 플랫폼의 RAM 데이터 너비와 초과 없이 일치할 때 달성됩니다. 곱을 최대 RAM 데이터 너비에 맞추면 DRAM의 전체 쓰기 및 읽기 대역폭이 활용됩니다. 값이 너무 낮으면 DRAM 액세스가 병목 현상이 될 수 있습니다. 8 bit × parallelism 4 구성의 디자인은 256비트 인터페이스 중 32비트만 사용하므로 대역폭 여유를 낭비하게 됩니다.
-
여러 DRAM 오퍼레이터가 대역폭을 공유합니다. 공유 메모리 플랫폼에서 하나의오퍼레이터가 사용할 수 있는 대역폭은 해당 인터페이스의 1 / (RAM 오퍼레이터 수)에 비례하여 조정됩니다. 자세한 내용은 디바이스 리소스 및 애플리케이션 노트: 공유 메모리(관련 주제 참조)에 설명된 대로 플랫폼에 따라 다릅니다.
-
플랫폼이 imaFlex 2 Dual 100과 같이 둘 이상의 물리적 인터페이스를 제공하는 경우, 독립적인 RAM 뱅크 간에 오퍼레이터의 균형을 맞추십시오. 대역폭은 동일한 물리적 뱅크에 있는 오퍼레이터 간에만 공유됩니다.
설계 지침
RAM 사용량을 미리 계획하십시오. DRAM 오퍼레이터가 추가될 때마다 동일한 물리적 메모리 인터페이스에서 다른 오퍼레이터가 사용할 수 있는 대역폭이 줄어듭니다. 다른 DRAM 버퍼를 추가하기 전에 결합된 읽기/쓰기 트래픽을 계산하고 플랫폼에서 사용 가능한 공유 대역폭과 비교하십시오(디바이스 리소스 참조). 다음을 우선적으로 사용하십시오. ImageFifo DRAM 대역폭을 불필요하게 낭비하지 않도록 소규모 디커플링 작업에는 (FPGA 메모리)를 사용하십시오.
메모리 관련 오류 인식#
VisualApplets는 모든 런타임 시나리오에 대해 디자인에 적절한 유형과 크기의 메모리가 충분한지 항상 검증할 수는 없습니다. 이미지 크기, 속도 및 동기화 요구 사항에 맞는 오퍼레이터와 버퍼 크기를 직접 선택해야 합니다.
하드웨어에 비해 버퍼가 너무 작을 때도 시뮬레이션은 성공적으로 실행될 수 있습니다. 시뮬레이션은 정상적으로 보여도 프레임 그래버에서는 이미지 출력 없음과 같은 오류가 나중에 발생하는 경우가 많습니다.
일반적인 원인은 다음과 같습니다. SYNC 데드락 및 메모리 부족 또는 오류.
이러한 문제를 방지하려면 다음 사항을 확인하십시오.
- 버퍼와 DMA 경로를 연결한 후 Design Rules Check Level 1 and Level 2를 실행합니다.
- 하드웨어에서
FillLevel(및Overflow사용 가능한 경우, 예: microDisplay X) 모니터링합니다. 지속적인 100% Fill은 종종 교착 상태(deadlock) 또는 대역폭 병목 현상을 나타냅니다. - 여러 DRAM 오퍼레이터가 있는 경우, Design → Device Resources를 열고 RAM 할당 및 예상 대역폭 점유율을 확인합니다.
- 무한 소스(infinite source)의 경우 다음을 확인하십시오.
InfiniteSource은(는)ENABLED중단할 수 없는 스트림을 수용하는 모든 버퍼에서 실행됩니다.
일반적인 파이프라인 예시#
DRAM 라인 버퍼를 통한 카메라에서 DMA로의 전송#
가장 작은 디자인은 하나의 카메라 오퍼레이터, 하나의 DRAM 버퍼( InfiniteSource 다음을 다음으로 설정: ENABLED), 및 하나의 DmaToPC 연산자:

이 버퍼를 사용하여 피크를 흡수하고 라인 기반 처리에 데이터를 공급합니다. 하드웨어에서 FillLevel 을(를) 모니터링하십시오. 값이 100%에 가깝게 유지되는 경우 병목 현상이나 교착 상태를 나타내는 경우가 많습니다. 참조: 메모리 관련 오류 인식.
LineBuffer를 거쳐 3×3 Kernel로 이어지는 카메라 경로#
다음 디자인에서 DRAM 버퍼는 커널(예: 3×3)을 생성하는 인근 오퍼레이터에 라인을 공급합니다. 버퍼는 최소 1라인의 지연(latency)을 추가하며, 필터 경로가 차단되어 Fill이 발생할 경우 지연이 더 늘어납니다. 또한 LineBuffer 오퍼레이터의 공유 DRAM 대역폭도 고려해야 합니다. 스크린샷의 Design Rules Check는 빌드하기 전에 링크 형식과 버퍼 설정이 일관되는지 확인해 줍니다.

관련 항목#
- 중지 가능 및 중지 불가능 데이터 스트림 튜토리얼 항목 —
InfiniteSource, 오버플로, 카메라 디커플링 - Parallelism 튜토리얼 주제 — 대역폭, RAM 데이터 폭,
LineBufferParallelism 변환 - Latency 튜토리얼 주제 — 버퍼 오퍼레이터의 라인 레이턴시
- Operator 유형 및 Synchronization 튜토리얼 주제 — 이전 버퍼
SYNC - Device Resources — 플랫폼 RAM 및 Shared Memory 개념
- Shared Memory 어플리케이션 노트 — 효율적인 DRAM 사용 및 대역폭 예제
- 오퍼레이터 레퍼런스의 Memory Library — 메모리 유형별 오퍼레이터 개요