Operator RamLUT (imaFlex)

Operator Library: Memory

이 연산자는 주로 DRAM인 Frame Grabber RAM을 기반으로 대형 룩업 테이블(LUT)을 구현합니다. 유형이 RAM인 VisualApplets 리소스가 하나 필요합니다('Allocation of Device Resources' 참조). 유형이 RAM인 여러 리소스는 공유 메모리 개념을 사용하여 동일한 물리적 RAM을 사용합니다. 공유 메모리 사용 방법에 대한 문서는 Application Note: Shared Memory에서 확인할 수 있습니다.

RamLUT 연산자는 출력에서 커널을 지원합니다.

이 연산자의 일반적인 사용 사례는 색공간 분류 문제입니다.

이 연산자는 두 가지 방식으로 LUT 콘텐츠 프로그래밍을 용이하게 합니다. 두 방식 모두 합성 프로세스 완료 후, 런타임 중에 앱릿이 사용되는 시점에 LUT를 프로그래밍해야 합니다.

  1. LUT를 프로그래밍하는 한 가지 방법은 주소 값 파라미터인 InitAddress 및 InitData를 제공하는 레지스터 인터페이스를 사용하는 것입니다. 먼저 파라미터 InitAddress를 사용하여 주소를 설정합니다. 다음으로 파라미터 InitData에 데이터를 씁니다. 데이터를 쓰면 연산자가 실제로 LUT에 쓰고 이전 값을 교체합니다. 커널을 사용하는 경우 마지막 커널 요소에 쓰면 연산자가 실제로 LUT에 쓰고 이전 값을 교체합니다.

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

    • text_with_checks

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

      각 값은 커널 요소를 나타내며 올바른 범위 내의 십진수여야 합니다.

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

    • text_raw

      이 모드는 text_with_checks 모드와 유사하지만 오류 검사가 적습니다. 이 모드에서는 각 값이 별도의 줄에 제공되어야 합니다. 이 모드에서 파일을 로드하는 것은 text_with_checks 모드에 비해 빠릅니다. 위의 예제는 text_raw 모드에서 다음과 같이 나타납니다:

    • binary

      binary 모드는 LUT 요소의 각 커널 항목에 8바이트가 사용되는 바이너리 파일을 가정합니다. 커널 항목 값을 64비트 미만으로 표현할 수 있는 경우 사용되지 않는 비트는 무시됩니다. 이것은 값을 LUT에 쓰는 가장 빠른 방법입니다. 위의 예제는 binary 모드에서 다음과 같이 나타납니다:

    세 모드 모두에서 파일의 항목 수는 LUT 요소 수를 초과할 수 없으며 값의 수는 KernelSize의 배수여야 합니다. 따라서 파일에는 최대 2^InputBitWidth * KernelSize개의 값이 포함되어야 합니다.

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

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

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

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

DRAM 기술은 임의 액세스(random access)에서 매우 저조한 성능을 보인다는 점에 유의하십시오. DRAM에 대한 연속적인 각 액세스로 인해 페이지 미스가 발생하고 새로운 행 활성화가 필요한 최악의 시나리오에서는, DRAM 처리량이 최대 성능의 90%까지 손실되어 약 10%의 대역폭만 사용하게 됩니다.

입력 링크는 동적 라인 너비뿐만 아니라 빈 라인 및 빈 프레임도 처리할 수 있습니다. 결과적으로 출력 링크도 동일한 이미지 크기를 처리할 수 있습니다.

대역폭 최적화

최적의 성능을 위해 사용되는 데이터 비트 수는 모듈 매개변수 RamDataWidth에 제공된 수치와 최대한 일치해야 합니다. 연산자를 통과하는 최대 대역폭은 비트 너비와 커널 크기의 곱이 내부 RAM 포트 너비 RamDataWidth와 같을 때 도달합니다.

Hardware Platform에서 사용 가능
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

I/O Properties

Property Value
Operator Type M
Input Link I, 읽기 주소 입력
Output Link O, 이미지 데이터 출력

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, RAM Address Width]1 [1, 64]2
Arithmetic unsigned as I
Parallelism 1 as I
Kernel Columns 1 [1, Ram Data Width / Bit Width]
Kernel Rows 1 [1, Ram Data Width / Bit Width / Kernel Columns]
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} as I
Color Format VAF_GRAY as I
Color Flavor FL_NONE as I
Max. Img Width any as I
Max. Img Height any as I

1

허용되는 입력 비트 너비는 프레임 그래버의 물리적 메모리와 RAM을 공유하는 연산자 수에 따라 달라집니다. RamAddressWidth 매개변수는 사용할 수 있는 최대 주소 비트를 제공합니다. 이 숫자는 디자인에 있는 RAM 기반 연산자의 수에 따라 변경될 수 있습니다.

2

허용되는 출력 비트 너비는 프레임 그래버의 물리적 메모리에 따라 다릅니다. 비트 너비는 64비트로 제한되지만 여러 커널 구성 요소가 저장될 수 있습니다. (비트 너비 * 커널 크기)의 곱은 매개변수 RamDataWidth에 표시된 네이티브 RAM 데이터 너비를 초과해서는 안 됩니다.

Parameters

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

이 파라미터는 RAM 인터페이스에서 사용할 수 있는 데이터 비트 수를 제공합니다. 커널이 올바르게 사용되는 경우 출력이 제공할 수 있는 최대 비트 수입니다.

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

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

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

이 파라미터는 InitData 파라미터로 정의된 데이터의 어드레스를 정의합니다. 위의 설명을 참조하세요.

InitData
Type dynamic write parameter
Default 0
Range [0, 2^OutputBitWidth-1]

이 파라미터는 InitAddress 파라미터로 정의된 어드레스에 기록될 데이터를 정의합니다. 이 파라미터에 쓰기를 수행하면 하드웨어에 대한 실제 쓰기 작업이 시작됩니다. 위의 설명을 참조하세요.

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

이 파라미터는 룩업 테이블로 로드되는 파일의 파일 형식과 모드를 정의합니다. 위의 설명을 참조하세요.

InitFileName
Type dynamic write parameter
Default InitRamLut.txt
Range

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

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

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