연산자 RamLUT

Operator Library: Memory

이 오퍼레이터는 일반적으로 DRAM인 Frame Grabber RAM을 기반으로 하는 대규모 룩업 테이블(LUT)을 구현합니다. RAM 유형의 VisualApplets 리소스 1개가 필요합니다('Allocation of Device Resources' 참조).

오퍼레이터 RamLUT는 출력에서 커널을 지원합니다.

operator의 지연 시간에 대한 정보는 Table 46, 'Individual Latencies of the Operators in 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) 중 하나로 구분된 텍스트 파일이어야 합니다. 오퍼레이터는 이러한 파일에 오류가 있는지 확인하고 파일을 사용할 수 없는 경우 오류를 보고합니다.

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

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

    • text_raw

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

    • binary

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

    In all three modes the number of entries in the files must not exceed the number of LUT elements and the number of values must be a multiple of KernelSize. Thus, the files must contain up to 2^InputBitWidth * KernelSize values.

    초기화 파일에 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 효율로 인해 항상 이론적 대역폭보다 작습니다.

오퍼레이터를 통과하는 최대 대역폭은 Bit Width와 Parallelism의 곱이 내부 RAM 포트 너비 x 2와 같을 때 도달됩니다(읽기 전용 매개변수에 해당).

[참고] 플랫폼별 값

RAM Port Width과 System Clock은 플랫폼 종속적입니다. 개별 플랫폼에 대한 자세한 내용은 Device Resources를 참조하십시오.

I/O Properties

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

지원되는 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

허용되는 출력 비트 폭은 프레임 그래버의 물리적 메모리에 따라 다릅니다. 비트 폭은 최대 64비트로 제한되지만 여러 커널 구성 요소를 저장할 수 있습니다. (비트 폭 * 커널 크기)의 곱은 매개변수 RamDataWidth에 표시된 기본 RAM 데이터 폭을 초과해서는 안 됩니다. 자세한 내용은 Device Resources를 확인하십시오.

Parameters

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

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

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

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

InitAddress
Type dynamic write 파라미터
Default 0
Range [0, 2^InputBitWidth-1]

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

InitData
Type dynamic write 파라미터
Default 0
Range [0, 2^OutputBitWidth-1]

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

InitFileLoadMode
Type dynamic write 파라미터
Default text_with_checks
Range {text_with_checks, text_raw, binary}

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

InitFileName
Type dynamic write 파라미터
Default InitRamLut.txt
Range

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

LoadInitFile
Type dynamic write 파라미터
Default 0
Range [0, 1]

InitFileName 파라미터로 지정된 파일을 LUT에 로드하기 시작하려면 이 파라미터에 1을(를) 기록하십시오. 위의 설명을 참조하십시오.

사용 예

RamLUT 오퍼레이터의 사용법은 다음 예제에 나와 있습니다.