Operator LineBuffer (imaFlex)

Operator Library: Memory

LineBuffer 연산자는 이미지 데이터 스트림을 프레임 그래버 내의 FPGA가 아닌 프레임 그래버 RAM(DRAM)에 버퍼링합니다. LineBuffer 연산자는 mE5 하드웨어 플랫폼에서 사용되며 동일한 기능을 제공하는 ImageBuffer 연산자를 대체합니다. imaFlex CXP-12 Quad 및 imaFlex CXP-12 Penta는 ImageBuffer 연산자를 지원하지 않으므로, mE5 하드웨어 플랫폼의 디자인을 imaFlex CXP-12 Quad 또는 imaFlex CXP-12 Penta 플랫폼으로 변환할 경우 ImageBuffer의 모든 인스턴스는 LineBuffer 인스턴스로 자동 대체됩니다.

RAM 유형의 VisualApplets 리소스가 하나 필요합니다. 자세한 내용은 'Allocation of Device Resources'를 참조하세요. RAM 유형의 여러 리소스는 공유 메모리 개념을 통해 동일한 물리적 RAM을 사용합니다. 공유 메모리 사용 방법에 대한 문서는 ' Shared Memory Concept ' 섹션에서 확인할 수 있습니다. 또한 LineBuffer 연산자는 ROI(관심 영역) 지원 기능을 제공합니다. 총 비트 수(bit width 곱하기 Parallelism)는 해당 프레임 그래버의 메모리 제한을 초과해서는 안 됩니다.

이 연산자는 최소 한 라인의 지연(latency)을 유발합니다. 라인이 버퍼에 완전히 기록되는 즉시 해당 라인 읽기가 시작됩니다. 출력이 차단되면 연산자는 입력 데이터를 버퍼링합니다.

이 연산자는 FIFO처럼 작동합니다. 버퍼는 이미지 라인 단위로 작동하므로 메모리 지연 시간이 매우 짧습니다. 선택한 관심 영역 내에 있고 후속 모듈이 데이터를 충분히 빠르게 처리할 수 있는 한, 완료된 모든 입력 데이터 라인은 즉시 출력으로 전달됩니다. 결과적으로 현재 프레임 전송이 여전히 진행 중인 동안에도 카메라의 프레임 데이터를 PC로 전달할 수 있습니다. 버퍼에 더 많은 라인이 채워지면 들어오는 데이터와 나가는 데이터 간의 지연이 증가합니다. 이는 출력이 일정 시간 동안 차단될 때, 특히 후속 모듈이 입력 대역폭과 동일한 속도로 데이터를 처리할 수 없을 때 발생합니다. 따라서 연산자가 입력이 제공하는 속도와 동일한 속도로 데이터를 출력할 수 없는 경우에만 메모리가 채워집니다. 이 연산자는 종종 피크 입력 대역폭을 보상하는 데 사용됩니다.

XOffset, XLength, YOffset, YLength 파라미터를 사용하여 관심 영역을 정의할 수 있습니다. 입력 이미지 너비가 XOffset과 XLength의 합보다 작더라도 LineBuffer 연산자는 매개변수화된 XLength를 계속 읽습니다. 이 경우 연산자는 추가 픽셀에 대해 정의되지 않은 메모리 콘텐츠를 출력합니다. 입력 이미지 높이가 요청된 출력 이미지 높이보다 작으면 연산자는 사용 가능한 라인만 출력합니다. 입력 이미지 높이가 YOffset보다 낮으면 출력에서 더미 값만 포함된 단일 라인이 생성됩니다.

Line1D 응용 모드에서는 YOffset 및 YLength 설정이 적용되지 않습니다.

버퍼의 채워진 정도를 측정하기 위해 연산자는 FillLevel, LineCount, Overflow 파라미터를 제공합니다. FillLevel은 RAM의 채워진 정도를 백분율로 보여줍니다. LineCount은 버퍼에 저장된 현재 라인 수를 제공합니다. Overflow 파라미터는 FillLevel이 100%에 가깝거나 도달하여 버퍼에 저장될 다음 이미지가 RAM 용량을 초과할 때 1로 설정됩니다. 오버플로가 발생하면 입력 데이터가 폐기되고 입력 이미지 높이가 줄어듭니다.

InfiniteSource 파라미터는 카메라의 버퍼링되지 않은 스트림과 같이 중지할 수 없는 데이터 스트림을 연산자가 수신하는지 여부를 지정합니다. 무한 소스에 대한 자세한 내용은 'Infinite Sources / Connecting Cameras'를 참조하세요. 오버플로는 데이터 소스를 중지할 수 없는 경우, 즉 InfiniteSource가 ENABLED로 설정된 경우에만 발생할 수 있습니다. 결과적으로 Overflow 및 OverflowClearMode 파라미터는 InfiniteSource 파라미터가 ENABLED로 설정된 경우에만 사용할 수 있습니다. 오버플로가 발생하면 불완전한 이미지가 메모리에 저장될 수 있습니다. 이러한 불완전한 이미지는 자동으로 완료 처리되며, 다음 라인에 충분한 버퍼 공간이 확보될 때까지 들어오는 데이터는 폐기됩니다.

Operator 제한 사항

  • 빈 프레임은 지원되지 않습니다.

[참고] 사용 가능한 Memory 공간

연산자는 RAM에 들어갈 수 있는 최대 라인 수(XLength로 정의됨)를 보고하는 읽기 전용 파라미터 MaxLineCount를 제공합니다. 이 숫자는 현재 디자인의 다른 메모리 연산자 존재 여부와 데이터 bit width에 따라 더 달라집니다.

하드웨어 플랫폼별 사용 가능 여부
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

대역폭 최적화

ImageBuffer 연산자와 달리 LineBuffer 연산자는 최적의 성능을 달성하기 위해 메모리 데이터 너비에 최대한 가깝게 맞추도록 픽셀의 자동 집계를 수행합니다.

ParallelismConverter 파라미터에 의해 활성화된 경우, 출력 Parallelism을 입력 Parallelism과 다른 값으로 조정할 수 있습니다. 이를 통해 연산자의 입력과 출력 간에 비대칭적인 피크 데이터 처리량을 정의할 수 있습니다. 후속 데이터 처리 파이프라인이 다른 Parallelism으로 작동해야 할 때 PARALLELdn 또는 PARALLELup 연산자의 추가 인스턴스를 피하기 위해 이 기능을 사용할 수 있습니다.

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

I/O Properties

Property Value
Operator Type M
Input Link I, image data input
Output Link O, 이미지 데이터 출력

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism any2 as I 2
Kernel Columns 1 as I
Kernel Rows 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format any as I
Color Flavor any as I
Max. Img Width 2^31-13 as I
Max. Img Height 2^31-1 as I

1

입력 Bit Width의 범위:

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

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

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

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

2

bit width와 Parallelism의 곱은 기본 RAM 데이터 너비인 RamDataWidth를 초과해서는 안 됩니다.

3

LineBuffer 연산자가 Parallelism을 변환하고(ParallelismConverter = Yes), 출력의 최대 이미지 너비를 O.Parallelism의 다음 배수로 자동 반올림합니다. O.Parallelism이 I.Parallelism보다 큰 경우, 출력의 반올림된 최대 이미지 너비가 2^31-1을 초과하지 않도록 I.MaxImgWidth는 2^31-1-O.Parallelism보다 커서는 안 됩니다.

Parameters

RamDataWidth
Type static write parameter
Default 해당 없음
Range 정수

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

XOffset
Type 동적/정적 쓰기 파라미터
Default 0
Range [0, Max.Img Width - XLength]

이 파라미터는 ROI의 왼쪽 상단 모서리의 x 좌표를 정의합니다.

스텝 크기는 입력 Parallelism입니다.

XLength
Type 동적/정적 쓰기 파라미터
Default 1024
Range [input parallelism, min(Max.Img Width, (2^RAM address width - 1) * internal RAM parallelism) - XOffset]

이 파라미터는 ROI의 너비를 정의합니다.

스텝 크기는 입력 Parallelism입니다.

YOffset
Type 동적/정적 쓰기 파라미터
Default 0
Range [0, Max.Img Height - YLength]

이 파라미터는 ROI의 왼쪽 상단 모서리의 y 좌표를 정의합니다.

YLength
Type 동적/정적 쓰기 파라미터
Default 1024
Range [1, Max.Img Height - YOffset]

이 파라미터는 ROI의 높이를 정의합니다.

ParallelismConverter
Type static write parameter
Default No
Range {Yes, No}

이 파라미터는 LineBuffer 연산자가 Parallelism 변환기를 구현하는지 여부를 정의합니다.

  • No: 연산자가 Parallelism 변환을 수행하지 않습니다. 입력 및 출력 Parallelism은 항상 동일합니다. 입력 Parallelism이 변경되면 출력 Parallelism은 새로운 입력 Parallelism 값으로 자동 변경됩니다. 출력 Parallelism은 편집할 수 없습니다.

  • Yes: 연산자가 Parallelism 변환을 수행합니다. 출력 Parallelism은 입력 Parallelism과 완전히 독립적이며 자유롭게 편집할 수 있습니다.

InfiniteSource
Type static write parameter
Default DISABLED
Range {ENABLED, DISABLED}

LineBuffer 연산자는 카메라 연산자 바로 뒤에 삽입할 수 있습니다. 이 경우 InfiniteSource 파라미터를 ENABLED로 설정해야 합니다. 그러면 연산자가 활성 오버플로 관리를 수행하고 연산자가 오버플로로부터 적절히 복구될 수 있도록 보장합니다. 오버플로는 연산자 뒤의 데이터 싱크가 전송을 중지하거나 일시 정지하고 버퍼 채워진 정도가 최대치에 도달할 때, 또는 입력 대역폭이 너무 높아 쓰기 데이터를 외부 RAM으로 전송할 수 없을 때 발생할 수 있습니다. InfiniteSource가 DISABLED로 설정된 경우, 버퍼 채워진 정도나 입력 대역폭이 너무 높아지면 진행 중인 연산자가 데이터 전송을 중지하도록 하는 금지(inhibit) 신호가 생성됩니다.

쓰기 우선순위 지정은 InfiniteSource 파라미터가 ENABLED로 설정된 상태로 사용되는 모든 연산자에 권장됩니다. 결과적으로 InfiniteSource 파라미터가 ENABLED로 설정된 경우 WritePriority 파라미터를 ENABLED로 설정하는 것이 좋습니다.

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

WritePriority
Type static write parameter
Default DISABLED
Range {ENABLED, DISABLED}

공유 메모리 개념(' Shared Memory Concept ')은 일반적으로 연결된 모든 메모리 연산자(즉, RAM 유형의 리소스를 사용하는 모든 연산자) 간에 대역폭을 균등하게 분배합니다. WritePriority가 DISABLED로 설정된 경우, LineBuffer 연산자는 읽기와 쓰기에 동일한 우선순위를 할당합니다. WritePriority를 ENABLED로 설정하면 LineBuffer 연산자는 읽기보다 쓰기에 우선순위를 부여하지만, 임시 메모리 데이터 전송률이 사용 가능한 대역폭보다 높은 동안에만 적용됩니다. 쓰기 데이터의 일시적인 우선순위 지정은 읽기 프로세스의 일시적인 속도 저하를 유발합니다. 결과적으로 평균 대역폭은 LineBuffer 연산자에 사용 가능한 대역폭을 초과할 수 없습니다. 쓰기 우선순위 지정을 사용하는 것은 InfiniteSource 매개변수가 ENABLED로 설정된 연산자에 권장됩니다. 중지 가능한 소스와 함께 쓰기 우선순위를 사용할 때는 쓰기 대역폭이 지속적으로 높지 않도록 하십시오. 그렇지 않으면 버퍼가 꽉 찰 때까지 LineBuffer에서 읽는 작업이 중지됩니다. 쓰기 우선순위 지정은 개별 연산자에 대한 설정이므로, 디자인에 메모리 연산자가 추가될 때마다 쓰기 우선순위 지정의 효과가 감소합니다.

FillLevel
Type 동적 읽기 파라미터
Default 0
Range [0%, 100%]

이 매개변수는 DRAM의 채워진 수준을 백분율로 제공합니다.

MaxLineCount
Type 동적 읽기 파라미터
Default 2^RAM 주소 폭 / (XLength / 내부 RAM Parallelism + 1)
Range [1, 2^RAM 주소 폭 / 2]

이 매개변수는 현재 메모리에 들어갈 수 있는 최대 라인 수를 제공합니다. 메모리에 들어갈 수 있는 최대 라인 수는 인스턴스화된 RAM 연산자의 수에 따라 달라지는 RAM 주소 폭에 따라 결정됩니다.

LineCount
Type 동적 읽기 파라미터
Default 0
Range [0, MaxLineCount]

이 매개변수는 메모리의 현재 라인 수를 제공합니다.

Overflow
Type 동적 읽기 파라미터
Default 0
Range [0, 3]

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

Overflow 매개변수는 InfiniteSource 매개변수가 ENABLED로 설정된 경우에만 활성화됩니다.

OverflowClearMode
Type dynamic write parameter
Default AutoClear
Range {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode는 연산자가 오버플로에서 복구되었을 때 Overflow 매개변수가 지워지는 방식을 결정합니다. 연산자가 더 이상 오버플로 상태가 아닌 경우에만 이 매개변수로 오버플로 상태를 재설정할 수 있습니다.

지우기 모드:

  • AutoClear: 연산자가 오버플로에서 복구되면 Overflow 매개변수가 자동으로 재설정됩니다.

  • ManualClear: 연산자가 오버플로에서 복구된 후에도 ManualClear를 OverflowClearMode 매개변수에 기록하여 수동으로 재설정할 때까지 Overflow 매개변수는 계속해서 오버플로를 표시합니다. 이 모드에서는 프로세스 재설정(예: Acquisition Stop)으로 Overflow 매개변수가 지워지지 않으므로, 획득이 중지된 후에도 오버플로가 계속 표시됩니다.

  • ClearAfterRead: 연산자가 오버플로에서 복구된 후에도 Overflow 매개변수를 읽거나 프로세스 재설정(예: 획득이 중지될 때)이 발생할 때까지 Overflow 매개변수는 계속해서 오버플로를 표시합니다.

  • ClearWithProcessReset: 연산자가 오버플로에서 복구된 후에도 재설정(예: 획득이 중지될 때)이 발생할 때까지 Overflow 매개변수는 계속해서 오버플로를 표시합니다.

OverflowClearMode 매개변수는 InfiniteSource 매개변수가 ENABLED로 설정된 경우에만 활성화됩니다.