Operator FrameBufferRandomRead (imaFlex)

Operator Library: Memory

이 오퍼레이터는 버퍼링된 데이터의 임의 읽기(random read)를 용이하게 합니다. 프레임 데이터는 링크 I를 통해 오퍼레이터로 전송됩니다. 데이터의 임의 읽기는 RColA(읽기 열 주소) 및 RRowA(읽기 행 주소) 포트에 주소를 전송하여 수행할 수 있습니다. 오퍼레이터는 이 주소를 사용하여 지정된 좌표에 따라 프레임 데이터를 읽습니다. 결과 출력 프레임은 주소 입력의 이미지 크기를 갖습니다. RAM 타입의 VisualApplets 리소스 1개가 필요합니다. 자세한 내용은 'Allocation of Device Resources'를 확인하십시오.

FrameBufferRandomRead 오퍼레이터는 프레임 그래버 RAM(DRAM)에 이미지 스트림을 버퍼링합니다. RAM 타입의 VisualApplets 리소스 1개가 필요합니다. RAM 타입의 여러 리소스는 공유 메모리 개념을 사용하여 동일한 물리적 RAM을 사용합니다. 공유 메모리 사용 방법에 대한 문서는 Application Note: Shared Memory에서 확인할 수 있습니다.

연산자에는 다음과 같은 두 가지 상태가 있습니다.

  • Write 상태: 입력 이미지가 버퍼에 저장됩니다. 오퍼레이터는 FIFO처럼 작동합니다. 충분한 메모리를 사용할 수 있는 경우, 여러 이미지를 버퍼에 저장할 수 있습니다.

  • Read 상태: 이미지가 메모리에 완전히 저장된 후, 입력 RColA 및 RRowA에 지정된 주소를 사용하여 메모리를 읽습니다. 주소 개수와 주소 링크 이미지 크기에 따라 출력 이미지의 너비와 높이가 정의됩니다.

이미지 데이터 입력과 주소 입력은 서로 동기화되지 않습니다. 이미지 크기가 다를 수 있습니다. 주소 입력 RColA와 RRowA는 모두 O-동기화되어야 합니다.

입력 링크의 타이밍에 주의하십시오. 주소 입력은 버퍼링 없이 데이터 링크 입력 I와 동일한 오퍼레이터로부터 소스를 공급받아서는 안 됩니다. 이는 오퍼레이터에 이미지 데이터를 쓰는 동안 현재 프레임을 읽기 위한 주소를 수락할 수 없기 때문입니다. 프레임이 버퍼에 완전히 저장된 경우에만 주소를 수락할 수 있습니다. 많은 경우 주소용 이미지를 생성하기 위해 CreateBlankImage 오퍼레이터가 사용됩니다.

이 오퍼레이터는 대용량 non-FPGA 메모리를 사용합니다. 작은 프레임이나 라인만 저장해야 하는 경우 FrameMemoryRandomRd 또는 LineMemoryRandomRd 오퍼레이터 사용을 고려하십시오.

이 오퍼레이터는 2차원 이미지(Img Protocol = VALT_IMAGE2D)와 1차원 라인 시퀀스(Img Protocol = VALT_LINE1D)를 모두 처리할 수 있습니다. 2차원 모드에서는 전체 프레임이 처리되므로, 전체 프레임이 기록된 후에만 읽기를 시작할 수 있습니다. 주소 포트(RColA 및 RRowA)가 프레임의 끝을 수신하면 해당 프레임의 메모리를 다시 사용할 수 있게 되고 다음 읽기가 다음 프레임을 주소 지정합니다. 1차원 모드에서는 라인을 처리합니다. 결과적으로 하나의 라인이 기록되는 즉시 읽기를 시작할 수 있습니다. 주소 포트 RColA의 라인 끝은 해당 라인의 메모리를 해제하며, 다음 RColA 값이 다음 라인을 주소 지정합니다. RRowA는 1차원 라인 모드에서 사용되지 않으며 임의의 상수 값(CONST)으로 설정해야 합니다.

모든 핀은 빈 프레임, 빈 라인 및 가변적인 라인 길이를 허용합니다.

입력 프레임의 크기가 내부 프레임의 크기를 초과할 수 있습니다. 이 경우 오퍼레이터는 수신된 프레임을 MaxFrameWidth 및 MaxFrameHeight로 정의된 크기로 자릅니다.

포트 I의 입력 이미지 최대 크기는 RAM에 실제로 사용 가능한 저장 공간보다 크게 정의할 수 있습니다. 이를 통해 매우 넓은 이미지와 매우 높은 이미지 간을 전환할 수 있는 유연한 사용이 가능합니다. 파라미터 MaxFrameWidth와 MaxFrameHeight는 스토리지 내 이미지의 크기를 정의합니다. 결과적으로 이 두 파라미터는 사용 가능한 스토리지보다 큰 이미지를 정의해서는 안 됩니다.

InfiniteSource를 사용한 오버플로 관리

InfiniteSource 모드에서는 이미지가 손실되거나 손상될 수 있습니다. 이는 RAM이 가득 차서 더 이상 데이터를 수락할 수 없거나, 입력 대역폭이 공유 메모리 인터페이스에 비해 너무 높기 때문에 발생합니다. 오퍼레이터가 오버플로 상태에 도달하면 들어오는 모든 데이터가 폐기됩니다. 이로 인해 엔티티(즉, 2D 모드의 프레임 또는 1D 모드의 라인)가 손실되거나 손상됩니다. 채워진 레벨이 전체 엔티티 단위로 카운트되기 때문에, 손상된 이미지는 입력 대역폭이 너무 높을 때만 발생합니다. 손상된 이미지는 이미지의 일부가 이미 RAM에 기록되었으나 오버플로로 인해 이미지의 다른 일부가 폐기될 때 발생합니다. 결과적으로 손상된 이미지를 읽으면 정의되지 않은 출력 데이터가 생성됩니다. RAM에 충분한 공간이 다시 생기고 공유 메모리 인터페이스를 통해 RAM에 데이터를 다시 쓸 수 있게 되면, 오퍼레이터는 오버플로에서 복구되어 입력 데이터 폐기를 중단합니다. Overflow 파라미터는 오버플로가 발생한 시점을 나타냅니다. OverflowClearMode 파라미터를 사용하면 오버플로 복구 직후에 Overflow를 재설정할지 아니면 수동으로 재설정할지를 정의할 수 있습니다. Overflow 및 OverflowClearMode 파라미터는 InfiniteSource 파라미터가 ENABLED로 설정된 경우에만 사용할 수 있습니다.

오퍼레이터 제한 사항

  • 읽기 주소에 대한 유효성 검사는 수행되지 않습니다. RColA가 MaxFrameWidth보다 크거나 같거나, RRowA가 MaxFrameHeight보다 크거나 같은 경우(2D 모드에서만 해당), 오퍼레이터는 메모리에서 임의의 더미 값을 읽습니다.

  • 링크 속성 제한은 Max. Image Width의 경우 항상 최대 2^24-1이고 Max. Image Height의 경우 2^17-1입니다. 그러나 MaxFrameSizeMode가 Auto로 설정된 경우 다음 제한이 추가로 적용됩니다.

    • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

    • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

  • 모든 입력 포트의 Parallelism은 1입니다.

대역폭 최적화

최적의 성능을 위해 사용되는 데이터 비트 수는 모듈 파라미터 RamDataWidth에 제공된 값과 최대한 일치해야 합니다. 비트 폭과 커널 크기의 곱이 내부 RAM 포트 폭 RamDataWidth와 같을 때 오퍼레이터를 통과하는 최대 대역폭에 도달합니다. 내부 비트 폭은 커널을 사용하여 증가시킬 수 있지만, 전체 커널은 여전히 단일 픽셀로 주소 지정된다는 점에 유의하십시오.

RAM의 사용 가능한 최대 대역폭을 초과하는 긴 쓰기 데이터 버스트를 오퍼레이터가 처리할 수 있도록 하려면 WritePriority 파라미터를 활성화하십시오. 이는 카메라(InfiniteSource = ENABLED)와 같은 무한 데이터 소스에서 권장됩니다. WritePriority 파라미터가 활성화된 경우, 쓰기 버스트로 인해 RAM의 사용 가능한 대역폭이 초과되면 읽기가 억제됩니다. 이를 통해 RAM에 대한 쓰기 액세스를 일시적으로 더 자주 수행할 수 있습니다. 카메라가 쓰기 데이터 버스트를 전달하는 경우, 해당 버스트 뒤에 쓰기 데이터의 공백(gap)이 올 것으로 예상되며(그렇지 않으면 사용 가능한 RAM 대역폭이 초과됨), 이 공백을 사용하여 읽기 대역폭을 일시적으로 높일 수 있습니다.

하드웨어 플랫폼 지원 여부
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

I/O Properties

Property Value
Operator Type M
Input Links I, 이미지 데이터 입력
RColA, I에서의 픽셀에 대한 읽기 열 주소(read column address)
RRowA, I에서의 픽셀에 대한 읽기 행 주소(read row address)
출력 링크 O, 이미지 데이터 출력

동기식 및 비동기식 입력

  • 동기식 그룹: RColA 및 RRowA
  • 입력 I는 해당 그룹과 비동기식입니다.

지원되는 Link Format

Link Parameter Input Link I 입력 링크 RColA 입력 링크 RRowA Output Link O
Bit Width [1, 64]1 auto2 auto3 as I
Arithmetic {unsigned, signed} unsigned unsigned as I
Parallelism 1 1 1 as I
Kernel Columns [1, Ram Data Width / Bit Width / Kernel Rows]4 1 1 as I
Kernel Rows [1, Ram Data Width / Bit Width / Kernel Columns]5 1 1 as I
Img Protocol VALT_LINE1D / VALT_IMAGE2D as I as I as I
Color Format any VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE as I
Max. Img Width 2^24-16 any RColA와 동일 RColA와 동일
Max. Img Height 2^17-16 any RColA와 동일 RColA와 동일

1

입력 Bit Width의 범위는 다음과 같습니다:

  • 부호 없는(unsigned) 입력의 경우: [1, 64]

  • 부호 있는(signed) 입력의 경우: [2, 64]

  • 부호 없는(unsigned) 컬러 입력의 경우: [3, 63]

  • 부호 있는(signed) 컬러 입력의 경우: [6, 63]

입력 Bit Width는 네이티브 RAM 데이터 폭인 RamDataWidth를 초과해서는 안 됩니다.

2

열 주소의 Bit Width:

3

행 주소의 Bit Width:

4

BitWidth * Columns * Rows <= RamDataWidth

5

BitWidth * Columns * Rows <= RamDataWidth

6

링크 속성 제한은 Max. Image Width의 경우 항상 최대 2^24-1이고 Max. Image Height의 경우 2^17-1입니다. 그러나 MaxFrameSizeMode가 Auto로 설정된 경우 다음 제한이 추가로 적용됩니다.

  • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

  • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

Parameters

RamDataWidth
Type 정적 쓰기 파라미터
Default N/A
Range 정수

이 파라미터는 사용할 수 있는 데이터 비트 수를 제공합니다.

RamAddressWidth
Type 정적 쓰기 파라미터
Default N/A
Range 정수

이 파라미터는 사용할 수 있는 어드레스 비트 수를 제공합니다. 사용 가능한 RAM 슬롯 수는 2^RamAddressWidth에 의해 정의됩니다. 현재 RamAddressWidth는 하드웨어 플랫폼뿐만 아니라 디자인의 현재 메모리 오퍼레이터(즉, RAM 유형의 리소스를 사용하는 오퍼레이터) 수에 따라 달라집니다.

MaxFrameSizeMode
Type dynamic write 파라미터
Default Auto
Range {Auto, Custom}

이 파라미터는 MaxFrameWidth 및 MaxFrameHeight 파라미터가 입력 I의 최대 이미지 크기를 자동으로 따르도록 할지(mode=Auto), 아니면 이 파라미터들을 조정할 수 있도록 할지(mode=Custom)를 정의합니다. Custom 모드를 사용하면 애플리케이션에 맞춤화되어 입력 링크의 제한보다 훨씬 작을 수 있는 최대 프레임 크기를 설정할 수 있습니다. 이렇게 하면 RAM에 더 많은 프레임을 저장할 수 있습니다. Auto 모드에서는 I의 링크 속성(Max.Img Width 및 Max.Img Height)이 메모리의 사용 가능한 슬롯 수(2^RamAddressWidth)보다 큰 최대 이미지를 정의해서는 안 됩니다. I의 링크 속성 Max.Img Width 및 Max.Img Height가 사용 가능한 메모리 공간보다 큰 최대 이미지를 정의하고 Custom 모드인 경우, 입력 링크의 최대 이미지가 더 작게 정의될 때까지 MaxFrameSizeMode 파라미터를 더 이상 편집할 수 없습니다. 이 파라미터는 획득(acquisition)이 실행 중일 때 쓸 수 없습니다. 1D 모드에서는 MaxFrameHeight 및 입력 I의 Max.Img Height가 1인 것으로 간주할 수 있습니다.

MaxFrameWidth
Type dynamic write 파라미터
Default 1024
Range [1, Max. Image Width at I]

이 파라미터는 현재 이미지 처리 구성의 최대 이미지 너비를 설정합니다. 이 제한을 초과하는 입력 프레임의 라인은 MaxFrameWidth로 잘립니다. 이 값을 최대 이미지 너비 미만으로 줄이면 메모리 공간이 절약되고 더 많은 프레임을 저장할 수 있습니다. 이 파라미터는 MaxFrameSizeMode가 Custom으로 설정된 경우에만 편집할 수 있습니다. MaxFrameHeight와 MaxFrameWidth의 곱은 사용 가능한 메모리 슬롯 수(2^RamAddressWidth)보다 커서는 안 됩니다. 1D 모드에서는 MaxFrameHeight를 1로 간주할 수 있습니다. 이 파라미터는 획득이 실행 중일 때 편집할 수 없습니다.

MaxFrameHeight
Type dynamic write 파라미터
Default 1024
Range [1, Max. Image Height at I]

이 파라미터는 현재 이미지 처리 구성의 최대 이미지 높이를 설정합니다. 이 높이 제한을 초과하는 입력 프레임은 MaxFrameHeight로 잘립니다. 이 값을 최대 이미지 높이 미만으로 줄이면 메모리 공간이 절약되고 더 많은 프레임을 저장할 수 있습니다. 이 파라미터는 MaxFrameSizeMode가 Custom으로 설정되고 Image Protocol이 VALT_IMAGE2D로 설정된 경우에만 편집할 수 있습니다. 1D 모드에서는 MaxFrameHeight를 1로 간주할 수 있습니다. MaxFrameHeight와 MaxFrameWidth의 곱은 사용 가능한 메모리 슬롯 수(2^RamAddressWidth)보다 커서는 안 됩니다. 이 파라미터는 획득이 실행 중일 때 편집할 수 없습니다.

FillLevel
Type dynamic read parameter
Default 0
Range [0%, 100%]

이 파라미터는 DRAM의 Fill 수준을 백분율로 제공합니다.

MaxFrameCount
Type dynamic read parameter
Default 2^RamAddressWidth / (MaxFrameHeight * MaxFrameWidth)
Range [1, 2^RamAddressWidth]

이 파라미터는 현재 메모리에 저장할 수 있는 최대 프레임 수를 제공합니다. 메모리에 저장할 수 있는 최대 프레임 수는 RamAddressWidth, MaxFrameHeight 및 MaxFrameWidth 파라미터에 따라 달라집니다.

MaxFrameCount = 2^RamAddressWidth / (MaxFrameHeight * MaxFrameWidth)

이 파라미터는 1D 모드에서 비활성화됩니다.

FrameCount
Type dynamic read parameter
Default 0
Range [0, MaxFrameCount]

이 파라미터는 메모리에 있는 현재 프레임 수를 제공합니다.

이 파라미터는 1D 모드에서 비활성화됩니다.

InfiniteSource
Type 정적 쓰기 파라미터
Default DISABLED
Range {ENABLED, DISABLED}

이 오퍼레이터는 카메라 오퍼레이터 바로 뒤에 삽입할 수 있습니다. 이 경우 InfiniteSource 파라미터를 ENABLED로 설정해야 합니다. 그러면 오퍼레이터가 활성 오버플로 관리를 수행하여 오버플로 발생 시 정상적으로 복구될 수 있도록 합니다. 오버플로는 오퍼레이터 뒤의 데이터 싱크가 전송을 중지하거나 일시 정지하여 버퍼 Fill 수준이 최댓값에 도달할 때, 또는 입력 대역폭이 너무 높아 쓰기 데이터를 외부 RAM으로 전송할 수 없을 때 발생할 수 있습니다. InfiniteSource가 DISABLED로 설정된 경우, 버퍼 Fill 수준이나 입력 대역폭이 너무 높아지면 이전 오퍼레이터의 데이터 전송을 중지하는 인히비트 신호가 생성됩니다.

InfiniteSource와 함께 사용되는 모든 오퍼레이터에는 쓰기 우선순위 지정(write prioritization)을 권장합니다. 따라서 InfiniteSource 파라미터가 ENABLED로 설정된 경우 WritePriority 파라미터도 ENABLED로 설정하는 것이 좋습니다.

자세한 내용은 'Infinite Sources / Connecting Cameras'를 참조하십시오.

WritePriority
Type 정적 쓰기 파라미터
Default DISABLED
Range {ENABLED, DISABLED}

' Shared Memory Concept ' 개념은 일반적으로 연결된 모든 메모리 오퍼레이터(즉, RAM 유형의 리소스를 사용하는 모든 오퍼레이터) 간에 대역폭을 균등하게 분배합니다. WritePriority 파라미터가 DISABLED인 경우, FrameBufferRandomRead 오퍼레이터는 읽기와 쓰기에 동일한 우선순위를 할당합니다. WritePriority를 ENABLED로 설정하면 FrameBufferRandomRead 오퍼레이터는 일시적인 메모리 데이터 전송률이 사용 가능한 대역폭보다 높은 동안에만 읽기보다 쓰기에 우선순위를 뒵니다. 쓰기 데이터의 일시적인 우선순위 지정은 읽기 프로세스의 일시적인 속도 저하로 이어집니다. 따라서 평균 대역폭은 FrameBufferRandomRead 오퍼레이터에 사용 가능한 대역폭을 초과해서는 안 됩니다. 쓰기 우선순위 지정은 InfiniteSource 파라미터가 ENABLED로 설정된 상태로 사용되는 모든 오퍼레이터에 권장됩니다. 중지 가능한 소스와 함께 쓰기 우선순위를 사용할 때는 쓰기 대역폭이 지속적으로 높지 않도록 하십시오. 그렇지 않으면 버퍼가 가득 차기 때까지 FrameBufferRandomRead 오퍼레이터로부터의 읽기가 중지됩니다. 쓰기 우선순위 지정은 개별 오퍼레이터에 대한 설정이므로, 디자인에 메모리 오퍼레이터가 추가될 때마다 쓰기 우선순위 지정의 효과는 감소합니다.

Overflow
Type dynamic read parameter
Default 0
Range [0, 3]

이 파라미터는 버퍼 오버플로를 나타냅니다. 2비트 비트맵이며, 각 비트는 서로 다른 유형의 오버플로를 나타냅니다. 비트 0은 Fill 수준 오버플로를 나타내고, 비트 1은 쓰기 대역폭 오버플로를 나타냅니다. Overflow 파라미터가 오버플로를 표시하는 시간은 OverflowClearMode에 따라 다릅니다.

Overflow 파라미터는 InfiniteSource 파라미터가 ENABLED로 설정된 경우에만 활성화됩니다.

OverflowClearMode
Type dynamic write 파라미터
Default AutoClear
Range {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode는 오퍼레이터가 오버플로 상태에서 복구되었을 때 Overflow 파라미터가 지워지는 방식을 결정합니다. 오퍼레이터가 더 이상 오버플로 상태가 아닌 경우에만 이 파라미터로 오버플로 상태를 재설정할 수 있습니다.

지우기 모드:

  • AutoClear: 오퍼레이터가 오버플로에서 복구되면 Overflow 파라미터가 자동으로 재설정됩니다.

  • ManualClear: 오퍼레이터가 오버플로에서 복구되더라도 Overflow 파라미터는 ManualClear를 OverflowClearMode 파라미터에 입력하여 수동으로 재설정할 때까지 오버플로 상태를 계속 표시합니다. 이 모드에서는 프로세스 재설정(예: Acquisition Stop)으로 Overflow 파라미터가 지워지지 않으므로, Acquisition Stop 후에도 오버플로가 계속 표시됩니다.

  • ClearAfterRead: 오퍼레이터가 오버플로에서 복구되더라도 Overflow 파라미터는 Overflow 파라미터를 읽거나 프로세스 재설정이 발생할 때(예: Acquisition이 중지될 때)까지 오버플로를 계속 표시합니다.

  • ClearWithProcessReset: 오퍼레이터가 오버플로에서 복구되더라도 Overflow 파라미터는 재설정이 발생할 때(예: Acquisition이 중지될 때)까지 오버플로를 계속 표시합니다.

OverflowClearMode 파라미터는 InfiniteSource 파라미터가 ENABLED로 설정된 경우에만 활성화됩니다.