RamLUT 오퍼레이터

Operator Library: Memory

이 연산자는 주로 DRAM인 Frame Grabber RAM을 기반으로 하는 대형 룩업 테이블(LUT)을 구현합니다. RAM 유형의 VisualApplets 리소스가 하나 필요합니다('Allocation of Device Resources' 참조).

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

연산자 지연 시간에 대한 정보는 '표 46: Library Memory의 연산자별 지연 시간'을 참조하십시오.

이 연산자의 일반적인 사용 사례는 색상 공간 분류 문제입니다. 예를 들어 microEnable IV 계열 보드에서 이 연산자를 사용하면 2^24개의 엔트리로 구성된 룩업 테이블을 사용할 수 있습니다. 즉, RGB 24 색상 공간의 각 색상에 대한 값이 포함된 분류 룩업 테이블을 정의할 수 있습니다. 이 연산자는 두 가지 방식으로 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%의 대역폭 사용률을 초과하지 못하게 됩니다. 그러나 여러 DRAM 뱅크를 결합하면 최악의 경우에도 처리량을 높일 수 있습니다. 2개 이상의 RamLUT 연산자를 함께 연결하고 각각 다른 룩업 작업을 처리하도록 하십시오. 연속된 입력 값이 빠르게 변경되지 않으면 연산자의 성능이 훨씬 높아집니다. 하드웨어 사용자 가이드에서 프레임 그래버의 해당 RAM 기술과 치수를 확인하십시오.

대역폭 최적화

Frame Grabber RAM (DRAM)을 사용하는 연산자를 통과하는 이론적 대역폭[bits/second]은 다음 공식에 따라 계산됩니다.

그러나 실제 대역폭은 DRAM 효율로 인해 항상 이론적 대역폭보다 낮습니다.

연산자를 통과하는 최대 대역폭 is Bit Width와 Parallelism의 곱이 내부 RAM Port Width x 2와 같을 때 도달합니다(읽기 전용 파라미터의 경우 해당됨).

[참고] 플랫폼별 값

RAM Port Width와 System Clock은 플랫폼별로 다릅니다. 개별 플랫폼에 대한 자세한 내용은 Device Resources를 참조하세요.

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, Ram Data Width]2
Arithmetic unsigned as I
Parallelism 1 as I
Kernel Columns 1 [1, Ram Data Width / Bit Width]2
Kernel Rows 1 [1, Ram Data Width / Bit Width / Kernel Columns]2
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 기반 연산자 수에 따라 변경될 수 있습니다. 자세한 내용은 Device Resources를 확인하십시오.

2

허용되는 출력 bit width은 프레임 그래버의 물리적 메모리에 따라 다릅니다. Bit width은 64 bit로 제한되지만 여러 커널 구성 요소를 저장할 수 있습니다. (bit width * 커널 크기)의 곱은 RamDataWidth 파라미터에 표시되는 네이티브 RAM 데이터 너비를 초과해서는 안 됩니다. 자세한 내용은 Device Resources를 확인하세요.

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 값을 쓰십시오. 위의 설명을 참조하세요.

사용 예제

RamLUT 오퍼레이터의 사용법은 다음 예시와 같습니다: