연산자 LineMemoryRandomRd

운영자 Library: Memory

LineMemoryRandomRd(라인 메모리 랜덤 읽기) 연산자는 랜덤 읽기 액세스가 가능한 작은 메모리 블록입니다. 데이터의 무작위 읽기는 RColA(열 주소 읽기) 포트에 주소를 전송하여 수행할 수 있습니다. 이 연산자는 해당 주소를 사용하여 지정된 좌표에 해당하는 라인 데이터를 읽습니다. 결과로 생성되는 출력 프레임의 이미지 너비는 입력된 주소의 너비와 동일합니다.

연산자의 지연 시간에 대한 정보는 표 46, ‘라이브러리 메모리 내 연산자의 개별 지연 시간’을 참조하십시오 .

LineMemoryRandomRd 연산자는 입력되는 이미지 라인을 저장하고 무작위 읽기 액세스를 허용합니다. 라인 데이터는 링크 I를 통해 연산자로 전송됩니다.

필요한 메모리 크기는 입력 프레임의 이미지 너비(최대 이미지 너비)에 의해 결정됩니다.

이 연산자는 두 가지 방식으로 구현될 수 있습니다. 즉, 단일 버퍼 구현과 이중 버퍼 구현입니다. 첫 번째 구현 방식은 RAM을 절약하지만, 쓰기와 읽기를 적시에 중첩하여 수행할 수는 없습니다. 따라서 쓰기 상태에서는 주소 입력 링크인 RColA와 RRowA의 동작이 중지됩니다. 후자의 구현 방식은 RAM 용량을 두 배로 늘리며, 입력 링크 I를 통해 다음 프레임을 수신하는 동안 마지막 프레임을 임의로 읽을 수 있게 해줍니다.

이 연산자는 두 가지 상태를 가집니다:

  1. 쓰기 상태: 링크 I의 픽셀은 버퍼에 선형으로 저장됩니다. 즉, 픽셀의 좌표가 버퍼 내의 주소를 형성합니다.

  2. 읽기 상태: 입력 RColA에 지정된 주소를 사용하여 메모리를 읽어옵니다. 주소 수와 주소 링크 이미지 너비가 이미지 출력 너비를 결정합니다. 예를 들어, 주소 입력부에 단 하나의 픽셀로만 구성된 라인이 입력되면, 출력 프레임 너비는 단 하나의 픽셀로만 구성됩니다. 입력 라인의 나머지 픽셀들은 버려집니다.

이미지 데이터 입력과 주소 입력은 서로 비동기적입니다. 두 입력의 이미지 크기가 다를 수 있습니다.

입력 링크의 타이밍에 유의하십시오. 주소 입력은 버퍼링 없이 데이터 링크 입력 I과 동일한 연산자에서 공급되어서는 안 됩니다. 이는 이미지 데이터를 연산자에 기록하는 동안에는 현재 프레임을 읽기 위한 주소를 수락할 수 없기 때문입니다. 프레임이 버퍼에 완전히 저장된 경우에만 주소를 수락할 수 있습니다. 많은 애플리케이션에서 연산자 는 해당 주소에 대한 이미지를 생성하는 데 사용됩니다.

이 타이밍은 다음 그림에 시각화되어 있습니다.

운영자는 FPGA 내부 블록 RAM 메모리를 사용합니다. 따라서 RAM 유형의 비 VisualApplets 프레임 그래버 리소스가 사용됩니다. FPGA 내장 블록 RAM의 용량은 제한적입니다. 전체 해상도의 프레임이 FPGA 내장 블록 RAM에 들어가지 않을 수도 있습니다. 연산자 FrameBufferRandomRead 연산자를 사용하는 것을 고려해 보십시오.

오퍼레이터 제한 사항

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

  • 선 길이가 서로 다른 이미지는 지원되지 않습니다.

LineMemoryRandomRd 시뮬레이션

VisualApplets 시뮬레이션을 실행하는 방법에는 두 가지가 있습니다. 이미지 기반 시뮬레이션(시스템 설정에서 ‘데이터 흐름 동기화 시뮬레이션’ 활성화)과 줄 단위 시뮬레이션(시스템 설정에서 ‘1D 줄 단위 시뮬레이션’ 활성화) 입니다. 시뮬레이션에 대한 일반적인 내용은 ‘시뮬레이션’을 참조하십시오 .

  • 줄 단위 시뮬레이션

    행별 시뮬레이션에서는 각 행이 개별적으로 처리됩니다. 출력 행의 수는 입력 링크 I 와 RColA의 입력 행 수뿐만 아니라, 입력 I의 이미지 프로토콜에 따라 달라집니다.

    • I. Img 프로토콜 = VALT_IMAGE2D:

      입력 이미지는 입력 I의 전체 데이터 이미지를 처리하기에 충분한 라인이 주소 입력 RColA 에 있을 때만 처리됩니다. 이 시뮬레이션에서는 주소 입력 RColA 의 이미지 프로토콜이 무시됩니다. 사용 가능한 주소 라인이 충분하지 않은 경우, 시뮬레이션에서 불완전한 프레임이 발생하는 것을 방지하기 위해 해당 입력 이미지는 처리되지 않으며 출력 이미지도 생성되지 않습니다. 이 시뮬레이션 동작은 하드웨어에서 실제 LineMemoryRandomRd의 동작과는 다릅니다. 위 그림에서 볼 수 있듯이, 하드웨어의 연산자는 들어오는 데이터를 한 줄씩 처리합니다. 그 결과, 하드웨어에서 들어오는 모든 라인은 전체 입력 이미지를 처리하기에 충분한 주소 라인이 있는지 여부와 관계없이 가능한 한 빨리 처리됩니다.

    • I. Img 프로토콜 = VALT_LINE1D:

      입력 I 의 모든 수신 데이터 라인은 입력 RColA 의 해당 주소 라인이 사용 가능해지면 즉시 처리됩니다. 이 시뮬레이션에서는 주소 입력 RColA 의 이미지 프로토콜은 무시됩니다.

  • 이미지 기반 시뮬레이션

    입력 I의 수신 데이터 이미지의 높이와 입력 RColA의 수신 주소 이미지의 높이는 동일해야 합니다. 이 시뮬레이션에서는 1차원 링크의 라인 시퀀스가 2차원 이미지로 처리되므로 이미지 프로토콜은 무시됩니다.

I/O Properties

Property Value
Operator Type M
Input Links I, 이미지 데이터 입력
RColA, I 위치에 있는 픽셀의 열 주소
출력 링크 O, 데이터 입력

동기 및 비동기 입력

  • 모든 입력은 서로 비동기적으로 처리됩니다.

지원되는 Link Format

Link Parameter Input Link I 입력 링크 RColA Output Link O
Bit Width [1, 64]1 auto2 as I
Arithmetic {unsigned, signed} unsigned as I
Parallelism 1 as I as I
Kernel Columns any 1 as I
Kernel Rows any 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format any VAF_GRAY as I
Color Flavor any FL_NONE as I
Max. Img Width any any RColA로서
Max. Img Height any as I as I

1

부호 없는 입력의 경우 입력 비트 폭 범위는 [1, 64]입니다. 부호 있는 입력의 경우 범위는 [2, 64]입니다. 부호 없는 색상 입력의 경우 범위는 [3, 63]이며, 부호 있는 색상의 경우 범위는 [6, 63]입니다.

2

행 주소의 비트 폭은 다음과 같습니다:

Parameters

구현
Type static parameter
Default SingleBuffer
Range {단일 버퍼, 이중 버퍼}

이 매개변수는 FrameMemoryRandomRd의 구현체를 선택합니다(위 부분 참조).

사용 예

다음 예제에서는 LineMemoryRandomRd 연산자의 사용법을 보여줍니다.