Operator CoefficientBufferMultiRoi (imaFlex)

Operator Library: Memory

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

이 operator를 사용하면 호스트 PC에서 프레임 그래버 RAM(DRAM)으로 이미지 데이터를 업로드할 수 있습니다. 임의의 수의 관심 영역(ROI)에 대해 연속적인 데이터 출력을 제공합니다. 여기서는 이미지 파일이 범용 데이터 컨테이너로 사용됩니다. 따라서 업로드된 이미지에는 계수(coefficient)와 같은 모든 데이터가 포함될 수 있습니다. 각 이미지에는 출력 커널이 할당됩니다. 또한, 이 operator는 RamLUT operator와 동일한 초기화 인터페이스를 제공하며, 각 메모리 주소는 텍스트 파일이나 바이너리 파일을 통해 또는 수동으로 초기화할 수 있습니다. 모든 계수 이미지는 Frame Grabber RAM (DRAM)에 저장됩니다. RAM 유형의 VisualApplets 리소스가 하나 필요합니다. 자세한 내용은 'Allocation of Device Resources'를 참조하십시오. operator의 대기 시간에 대한 정보는 Table 46, 'Individual Latencies of the Operators in Library Memory'를 참조하십시오. RAM 유형의 여러 리소스는 공유 메모리 개념을 사용하여 동일한 물리적 RAM을 사용합니다. 공유 메모리 사용 방법에 대한 설명서는 Application Note: Shared Memory에서 확인할 수 있습니다.

CoefficientBufferMultiRoi operator는 출력에서 커널을 지원합니다. operator가 이미지 파일로 초기화되는 경우 각 이미지 파일은 해당 출력 커널에 할당됩니다. 버퍼를 수동으로, 텍스트 파일로, 또는 바이너리 파일로 초기화하는 경우 데이터가 올바른 순서로 되어 있는지 확인해야 합니다. 정확한 데이터 형식은 아래에 설명되어 있습니다.

Operator Initialization

이 operator는 여러 가지 방식으로 버퍼 내용 프로그래밍을 단순화합니다. 각 방식에 따라, 런타임 동안 앱들이 사용되는 시점에 신테시스(synthesis) 프로세스 이후에 버퍼가 프로그래밍되어야 합니다.

Register Access

버퍼를 프로그래밍하는 한 가지 방법은 InitAddress 및 InitData 파라미터를 제공하는 레지스터 인터페이스를 사용하는 것입니다. 먼저 InitAddress 파라미터를 사용하여 주소를 설정합니다. 그런 다음 데이터를 InitData 파라미터에 기록합니다.

데이터를 기록하면 operator가 실제로 버퍼에 기록하고 이전 값을 교체합니다. 마지막 병렬 커널의 마지막 커널 요소에 쓰기를 수행하면 operator가 실제로 RAM에 기록하고 이전 값을 교체합니다. RAM 주소의 데이터는 다음과 같은 방식으로 구성되어야 합니다(위의 애니메이션도 참조).

  • 각 RAM 주소에는 O.Parallelism * O.KernelColumns * O.KernelRows 개의 값이 포함됩니다.

  • 결과적으로 InitData는 O.Parallelism * O.KernelColumns * O.KernelRows 개의 값으로 이루어진 배열입니다.

  • 먼저 커널 행의 모든 값을 나열해야 합니다. 즉, 각 커널 column에 대해 반복됩니다.

  • 그런 다음 데이터가 모든 커널 rows를 순회합니다.

  • 마지막으로 모든 병렬 데이터 커널에 대해 동일한 과정이 반복됩니다.

File Access

버퍼를 프로그래밍하는 두 번째 방법은 내용이 포함된 하나 이상의 파일을 사용하는 것입니다. 파일 액세스는 레지스터 액세스보다 빠르지만 주의가 필요합니다. 파일은 다양한 형식일 수 있습니다. InitFileMode 파라미터를 사용하여 형식을 정의해야 합니다.

text_with_checks

이 모드에서 초기화 파일은 값 문자열이 공백, 탭 정지, 줄 바꿈(LF) 또는 캐리지 리턴 줄 바꿈(CRLF)으로 구분된 텍스트 파일이어야 합니다. operator는 이러한 파일에서 오류를 검사하고 파일을 사용할 수 없는 경우 오류를 보고합니다.

각 값은 커널 요소를 나타내며 올바른 범위 내의 10진수여야 합니다. 파일에는 커널 요소의 정확한 수만큼 값이 포함되어야 합니다. 1보다 큰 Parallelism을 사용하는 경우 값의 수는 parallelism * kernel elements여야 합니다.

다음 그림은 4x3 커널의 파일을 보여줍니다:

text_raw

이 모드는 text_with_checks 모드와 유사하지만 오류 검사가 적습니다. 이 모드에서는 각 값이 별도의 줄에 제공되어야 합니다. 이 모드에서 파일을 로드하는 것은 text_with_checks 모드에 비해 빠릅니다. 각 값이 별도의 줄에 기록되므로 이 파일 형식에서는 Parallelism이 데이터 시퀀스에 영향을 주지 않습니다. 위의 예제는 text_raw 모드에서 다음과 같이 나타납니다.

binary

binary 모드는 각 커널 항목에 8바이트가 사용되는 바이너리 파일을 가정합니다. 커널 항목 값을 64비트 미만으로 표현할 수 있는 경우 사용되지 않는 비트는 무시됩니다. 이는 RAM에 값을 쓰는 가장 빠른 방법입니다. 모든 값이 연속적으로 기록되므로 이 파일 형식에서는 Parallelism이 데이터 값의 시퀀스에 영향을 주지 않습니다. 위의 예제는 binary 모드에서 다음과 같이 나타납니다.

image_file

image_file 모드는 쉼표나 세미콜론으로 구분된 InitFileName 파라미터의 이미지 파일 목록을 예상합니다. 각 파일은 하나의 커널 값을 초기화하는 데 사용됩니다. 첫 번째 초기화 파일은 첫 번째 커널 값에 할당되고, 두 번째 파일은 두 번째 커널 값에 할당되는 식입니다...

이 모드는 일반 이미지를 사용하므로 파일의 데이터 형식에는 Parallelism이 관련이 없습니다. 초기화 파일은 이미지 형식일 수 있습니다. *.tif 또는 *.bmp. 개별 이미지 파일이 동일한 형식일 필요는 없으며 동일한 수의 픽셀을 포함할 필요도 없습니다.

이미지 라인당 최대 바이트 수가 32비트 정수 값의 경계에 도달하면 operator가 이미지 로드에 실패할 수 있습니다. 이는 O.Max.Img.Width가 최대 너비(2^RamAddressWidth)에 가깝고 O.Parallelism도 1보다 큰 경우에만 발생할 수 있습니다.

초기화 파일에 2^RamAddressWidth * KernelSize * Parallelism 개의 값이 포함되어 있는 경우 주소 0부터 시작하여 메모리가 완전히 덮어씌워집니다. 이 경우 InitAddress 파라미터는 변경되지 않습니다.

초기화 파일에 RAM에 기록할 수 있는 것보다 더 많은 데이터가 포함된 경우 초기화 파일의 일부만 사용됩니다. 더 이상 메모리 공간을 사용할 수 없을 때까지 파일 시작 부분의 데이터가 사용됩니다.

초기화 파일에 더 적은 수의 항목이 포함된 경우 부분 초기화가 수행됩니다. 이 경우 초기화는 InitAddress 파라미터에서 지정한 주소부터 시작됩니다. InitAddress 파라미터는 마지막으로 기록된 메모리 항목 다음 위치로 자동으로 증가합니다. 이를 통해 기록된 메모리 항목의 수를 모니터링할 수 있습니다. 파일에 (2^RamAddressWidth - InitAddress) * KernelSize * Parallelism 개보다 많은 값이 포함된 경우, 메모리의 마지막 항목을 기록한 후 초기화가 중지되고 InitAddress가 0으로 설정됩니다.

위에서 지정한 초기화 모드의 경우 InitFilename 파라미터는 초기 값이 포함된 파일을 지정합니다. 마지막으로 LoadInitFile 파라미터에 값 1을 쓰면 파일 읽기가 시작되며 허용되는 경우 하드웨어에 값이 기록됩니다. LoadInitFile 파라미터에 0을 쓰면 값을 로드하지 않습니다. 이는 앱들 초기화 프로세스 중에 초기 파일이 하드웨어에 로드되지 않도록 하려는 경우에 유용할 수 있습니다.

시뮬레이션 중 초기화 파일 로드는 런타임과 동일한 방식으로 수행됩니다. 부분 구성의 경우나 오류 발생 시 시뮬레이션 로그에서 출력을 확인하는 것이 유용할 수 있습니다. Simulation 대화 상자에서 Show Details를 활성화하십시오.

ROI 정의

운영자의 프레임 그래버 RAM(DRAM)이 가 이미지 데이터로 초기화되면, 여러 관심 영역(ROI)을 읽어옵니다. 다음 매개변수를 사용하여 ROI를 정의할 수 있습니다:

  • 읽을 ROI 개수: MaxNumRoI 및 NumRoI

  • ROI의 크기 및 위치: XOffset, XLength, YOffset 및 YLength

MaxNumRoI 파라미터는 읽을 수 있는 최대 ROI 개수를 지정합니다. 각 ROI 좌표 파라미터 필드 XLength, YLength, XOffset 및 YOffset에는 MaxNumRoI개의 항목이 있습니다.

파라미터 NumRoI는 오퍼레이터가 출력에서 제공하는 실제 ROI 개수를 지정합니다. NumRoI가 dynamic(으)로 설정된 경우, 그 값은 MaxNumRoI의 값을 초과할 수 없습니다. dynamic(으)로 설정된 경우 NumRoI는 이미지 취득 중에 업데이트될 수 있습니다. 취득이 실행되는 동안 오퍼레이터는 지정된 개수의 ROI를 주기적으로 읽습니다. 오퍼레이터는 ROI cycle이 NumRoI(으)로 바뀔 때까지 기다립니다.

모든 ROI는 순차적으로 읽혀지며 오퍼레이터 출력에 개별 이미지로 제공됩니다(ROI 0, ROI 1, ROI 2부터 ROI N-1까지). 여기서 N은 파라미터 NumRoI(으)로 지정된 읽어들인 현재 ROI 개수입니다. 파라미터 필드 XOffset, XLength, YOffset 및 YLength는 일련의 ROI를 지정합니다. 이 파라미터들을 dynamic 또는 static(으)로 설정하여 런타임 중에 파라미터를 조정할 수 있는지 여부를 지정할 수 있습니다. 하나의 ROI 파라미터 유형이 설정되면 모든 ROI 파라미터의 파라미터 유형이 자동으로 조정됩니다. 필드 파라미터 구성 방법에 대한 자세한 내용은 'Parameter Editing'에서 확인하십시오.

최대 출력 프레임 치수를 초과하지 않는 한 ROI 정의에 가능한 모든 직사각형 영역이 지원됩니다. 즉, 단일 픽셀, 단일 라인, 단일 열, 직사각형 영역 또는 전체 프레임을 ROI로 정의할 수 있습니다.

서로 다른 ROI가 동일한 크기일 필요는 없습니다.

각 ROI는 개별적으로 정의할 수 있습니다.

ROI는 서로 겹칠 수 있으며 반복될 수도 있습니다.

X 좌표 파라미터 XOffset 및 XLength은(는) 출력 Parallelism의 스텝 크기여야 합니다.

XLength 또는 YLength을(를) 0으로 설정하여 빈 ROI를 정의할 수 있습니다. 그러면 오퍼레이터가 출력에 빈 이미지(또는 링크 유형이 VALT_LINE1D인 라인)를 제공합니다. 빈 이미지에는 픽셀이 포함되어 있지 않습니다. 링크 유형이 VALT_PIXEL0D인 빈 ROI는 출력을 전혀 생성하지 않습니다.

이미지 프로토콜 VALT_LINE1D 또는 VALT_PIXEL0D과 함께 오퍼레이터를 사용하는 경우, ROI는 항상 2차원 이미지로 간주되는 초기화 파일과 관련하여 정의됩니다. 2차원 ROI를 읽어오지만 링크 유형에 따라 출력은 ROI 프레임, 라인 또는 픽셀 시퀀스가 됩니다.

링크 유형 VALT_LINE1D를 사용하면 출력은 개별적으로 정의된 ROI 간의 구분이 없는 무한한 라인 시퀀스가 됩니다. 마찬가지로 VALT_PIXEL0D 링크 유형에서 오퍼레이터는 개별 ROI 또는 심지어 ROI 라인 간의 구분이 없는 무한한 픽셀 시퀀스를 제공합니다.

취득이 시작되고 후속 오퍼레이터에 의해 오퍼레이터의 출력이 차단되지 않는 즉시 오퍼레이터는 출력에서 ROI 데이터를 제공합니다. 오퍼레이터의 지연 시간에 대한 정보는 Table 46, 'Individual Latencies of the Operators in Library Memory'를 참조하십시오.

ROI 파라미터 유형이 dynamic(으)로 설정된 경우 모든 ROI를 동적으로 업데이트할 수 있습니다. 그러나 업데이트된 ROI는 현재 "ROI cycle"이 완료되고 모든 NumRoI ROI를 읽은 후에만 적용됩니다.

[참고] 많은 수의 ROI 및 타이밍

파라미터 MaxNumRoI로 정의된 최대 ROI 정의 수가 증가함에 따라 오퍼레이터의 BRAM 소비량이 증가합니다. 이는 높은 클럭 속도에서 타이밍 문제를 야기할 수 있습니다. 예를 들어, MaxNumRoI가 65536인 경우 전체 디자인에서 타이밍을 충족하지 못할 수 있습니다.

Operator 제한 사항

CoefficientBufferMultiRoi 오퍼레이터에는 다음 제한 사항이 적용됩니다.

  • DRAM이 완전히 초기화되지 않은 경우 ROI 좌표에 실제로 이미지 데이터가 포함되어 있는지 여부를 확인하지 않습니다. 이 경우 오퍼레이터는 메모리에서 임의의 더미 값을 읽습니다.

  • 최대 링크 속성은 오퍼레이터 사용에 따라 다릅니다. 자세한 내용은 아래의 Supported Link Format 섹션을 참조하십시오.

  • 높은 MaxNumRoI(최대값인 65536에 가까운 값)는 타이밍 문제를 유발할 수 있습니다.

  • InitFileLoadMode이 image_file 모드로 설정된 경우 지나치게 넓은 이미지는 로드하지 못할 수 있습니다.

대역폭 최적화

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

I/O Properties

Property Value
Operator Type M
Output Link O, data output

Supported Link Format

Link Parameter Output Link O
Bit Width [1, 64]12
Arithmetic any
Parallelism [1, RamDataWidth / BitWidth / KernelColumns / KernelRows]2
Kernel Columns [1, RamDataWidth / Bit Width / Parallelism / KernelRows]2
Kernel Rows [1, RamDataWidth / Bit Width / Parallelism / KernelColumns]2
Img Protocol any
Color Format any
Color Flavor any
Max. Img Width [1, 2^RamAddressWidth * Parallelism]3
Max. Img Height [1, 2^RamAddressWidth]3

1

입력 Bit Width의 범위:

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

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

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

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

입력 Bit Width는 기본 RAM 데이터 폭인 RamDataWidth를 초과할 수 없습니다.

2

비트 폭, Parallelism, 커널 크기의 곱은 기본 RAM 데이터 폭을 초과해서는 안 됩니다:

3

최대 이미지 크기는 사용 가능한 RAM을 초과할 수 없습니다.

이는 O.MaxImageWidth 및 O.MaxImageHeight에 대해 다음과 같은 조건을 초래합니다.

Parameters

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

이 파라미터는 RAM에서 사용할 수 있는 최대 데이터 너비를 제공합니다. 이 파라미터는 사용된 하드웨어 플랫폼에 따라 다릅니다.

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

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

InitAddress
Type dynamic write parameter
Default 0
Range [0, 2^RamAddressWidth-1]

이 파라미터는 InitData 파라미터로 정의된 데이터의 어드레스를 정의합니다. 이 파라미터는 초기화 파일을 사용하여 RAM을 초기화할 때 오프셋 어드레스로도 사용할 수 있습니다. 위의 상세 설명을 참조하십시오.

InitData
Type dynamic write parameter
Default 0
Range [0, 2^O.BitWidth-1]

이 필드 파라미터는 InitAddress 파라미터로 정의된 어드레스에 기록될 데이터를 정의합니다. InitData에는 O.Parallelism * O.KernelColumns * O.KernelRows 값이 포함됩니다. InitData 배열의 마지막 필드를 작성하면 하드웨어에 실제로 기록됩니다. 위의 상세 설명을 참조하십시오.

InitFileLoadMode
Type dynamic write parameter
Default image_file
Range {text_with_checks, text_raw, binary, image_file}

이 파라미터는 룩업 테이블에 로드되는 파일의 파일 형식 및 모드를 정의합니다.

  • text_with_checks: 커널 값이 공백, 탭 등으로 구분되는 텍스트 파일입니다.

  • text_raw: 커널 값이 개별 줄에 작성되는 텍스트 파일입니다.

  • binary: 커널 값이 8바이트로 구성되는 바이너리 파일입니다.

  • image_file: 파일 목록(*.tiff 또는 *.bmp)은 콤마나 세미콜론으로 구분되며, 각 이미지 파일은 커널 인덱스에 할당됩니다.

위의 상세 설명을 참조하십시오.

InitFileName
Type dynamic write parameter
Default InitCoefficientBuffer.tif
Range

이 파라미터는 초기화 파일의 이름을 정의합니다.

InitFileLoadMode이 image_file로 설정된 경우, 이 파라미터는 단일 파일 이름 대신 파일 목록을 포함합니다. 파일 목록에서 각 항목은 콤마 또는 세미콜론으로 구분되어야 합니다. image_file 모드에서 지정된 파일 수는 LoadInitFile로 파일을 로드할 때 사용 가능한 커널 값의 수(O.KernelColumns * O.KernelRows)와 같아야 합니다.

이 파라미터는 앞뒤 공백 및 앞뒤 “"” 또는 ‘'’ 문자가 포함된 파일 이름을 허용합니다.

LoadInitFile
Type dynamic write parameter
Default 0
Range [0, 1]

InitFileName 파라미터로 지정된 파일을 RAM으로 로드하기 시작하려면 이 파라미터에 1 값을 기록하십시오. 위의 상세 설명을 참조하십시오.

MaxNumRoI
Type static write parameter
Default 1
Range [1, 65536]

이 파라미터는 오퍼레이터가 저장할 수 있는 최대 ROI 수를 정의합니다.

NumRoI가 정적으로 설정된 경우, 이 파라미터는 편집할 수 없습니다. 대신 자동으로 NumRoI과 동일한 값을 갖게 됩니다.

최대 ROI 개수인 MaxNumRoI의 값이 너무 크면 애플릿을 빌드할 때 타이밍 문제가 발생할 수 있습니다.

NumRoI
Type 동적/정적 쓰기 파라미터
Default 1
Range [1, MaxNumRoI]

이 파라미터는 실제로 사용되는 ROI 개수를 정의합니다. 오퍼레이터는 첫 번째 ROI 읽기로 돌아가기 전에 NumRoI개의 ROI를 읽습니다. 획득이 진행되는 동안, 후속 오퍼레이터에 의해 출력이 차단될 때까지 오퍼레이터는 NumRoI개의 ROI를 주기적으로 출력합니다. 파라미터가 static(으)로 설정된 경우, 허용 범위는 [1, 65536]이며 MaxNumRoI는 비활성화됩니다.

XOffset
Type 동적/정적 읽기/쓰기 파라미터
Default 0
Range [0, O.MaxImgWidth - XLength]

이 필드 파라미터는 ROI의 가장 왼쪽 열에 대한 x 좌표 배열을 정의합니다.

스텝 크기는 Parallelism입니다.

'Parameter Editing'에서 필드 파라미터 구성 방법을 확인하십시오.

XLength
Type 동적/정적 읽기/쓰기 파라미터
Default 1024
Range [0, O.MaxImgWidth - XOffset]

이 필드 파라미터는 ROI 너비 배열을 정의합니다.

스텝 크기는 Parallelism입니다.

'Parameter Editing'에서 필드 파라미터 구성 방법을 확인하십시오.

YOffset
Type 동적/정적 읽기/쓰기 파라미터
Default 0
Range [0, O.MaxImgHeight - YLength]

이 필드 파라미터는 ROI의 첫 번째 행에 대한 y 좌표 배열을 정의합니다.

'Parameter Editing'에서 필드 파라미터 구성 방법을 확인하십시오.

YLength
Type 동적/정적 읽기/쓰기 파라미터
Default 1024
Range [0, O.MaxImgHeight - YOffset]

이 필드 파라미터는 ROI 높이 배열을 정의합니다.

'Parameter Editing'에서 필드 파라미터 구성 방법을 확인하십시오.

LinesToSimulate
Type static write parameter
Default 1
Range {1, 2^31-1}

이 파라미터는 시뮬레이션을 위한 디자인 타임에만 사용되며, O.LinkType이 VALT_LINE1D(으)로 설정된 경우에만 적용됩니다.

이 파라미터는 오퍼레이터가 시뮬레이션해야 하는 ROI 라인 수를 정의합니다. ROI는 초기화 이미지에서 2차원 영역으로 정의되지만, 시뮬레이션 출력은 지정된 모든 ROI를 순환하며 반복하는 라인 시퀀스를 제공합니다(NumRoI개의 ROI 라인을 읽은 후 ROI 0부터 다시 시작함).

PixelsToSimulate
Type static write parameter
Default 1
Range {1, 2^31-1}

이 파라미터는 시뮬레이션을 위한 디자인 타임에만 사용되며, O.LinkType이 VALT_PIXEL0D(으)로 설정된 경우에만 적용됩니다.

이 파라미터는 오퍼레이터가 시뮬레이션해야 하는 ROI 픽셀 수를 정의합니다. ROI는 초기화 이미지에서 2차원 영역으로 정의되지만, 시뮬레이션 출력은 지정된 모든 ROI를 순환하며 반복하는 픽셀 시퀀스를 제공합니다(NumRoI개의 ROI 픽셀을 읽은 후 ROI 0부터 다시 시작함).