Operator FrameMemoryRandomRd

Operator Library: Memory

FrameMemoryRandomRd(帧内存随机读取)算子可在内存中缓冲图像并支持随机读取访问。 帧数据通过链路 I 传输到算子中。 通过将地址传输到端口 RColA(读取列地址)和 RRowA(读取行地址),可以对数据进行随机读取。 算子将使用这些地址根据给定坐标读取帧数据。 生成的输出帧将具有与地址输入相同的图像尺寸。

所需的内存大小由输入帧的图像尺寸(Max. Img Width 和 Max. Img Height)决定。

有关 operator 延迟的信息,请参见 Table 46, 'Individual Latencies of the Operators in Library Memory'。

该算子可以采用两种变体来实现。 即单缓冲区实现和双缓冲区实现。 第一种实现方式可节省 RAM,但不允许写入和读取在时间上重叠。 因此,地址输入链路 RColA 和 RRowA 在写入状态下会停止。 后一种实现方式使 RAM 容量翻倍,允许在输入链路 I 接收下一帧的同时,对上一帧进行随机读取。

该算子有两个状态:

  1. 写入状态: 链路 I 的像素以线性方式存储在缓冲区中,即像素的坐标构成缓冲区中的地址。

  2. 读取状态:使用在输入端 RColA 和 RRowA 提供的地址读出内存。 地址数量和地址链路图像尺寸决定了图像输出的宽度和高度。 例如,如果在地址输入端输入仅包含一个像素的帧, 则输出帧将仅包含一个像素。输入帧的其他像素将被丢弃。

图像数据输入和地址输入彼此异步。 它们的图像尺寸可能不同。 两个地址输入 RColA 和 RRowA 必须是 O-synchronous。

请注意输入链路的时序。 如果没有进行缓冲,地址输入不得由与数据链路输入 I 相同的算子提供源。 这是因为在将图像数据写入算子时,无法接受用于读取当前帧的地址。 只有当帧完全存储到缓冲区中后,才能接受地址。 在许多情况下,算子 CreateBlankImage 用于为地址生成图像。

时序如下图所示。

该算子使用 FPGA 的内部块 RAM Memory。 因此,不使用类型为 RAM 的 VisualApplets 采集卡资源。 FPGA 内部块 RAM 是有限的。完整分辨率的帧可能无法放入 FPGA 内部块 RAM 中。 请考虑改用算子 FrameBufferRandomRead。

算子限制

  • 不支持空帧。

  • 不支持具有不同行长的图像。

I/O Property

Property 值
Operator Type M
输入链路 I,图像数据输入
RColA,I 处像素的读取列地址
RRowA,I 处像素的读取行地址
Output Link O,数据输入

同步和异步输入

  • 同步组:RColA 和 RRowA
  • 输入 I 与该组异步。

Supported Link Format

Link Parameter Input Link I 输入链接 RColA 输入链接 RRowA Output Link O
Bit Width [1, 64]1 auto2 auto3 as I
Arithmetic {unsigned, signed} unsigned unsigned as I
Parallelism 1 as I as I as I
Kernel Columns any 1 1 as I
Kernel Rows any 1 1 as I
Img Protocol VALT_IMAGE2D as I as I as I
Color Format any VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE as I
Max. Img Width any any 与 RColA 相同 与 RColA 相同
Max. Img Height any any 与 RColA 相同 与 RColA 相同

1

对于无符号输入,输入 Bit Width 的范围是 [1, 64]。 对于有符号输入,范围是 [2, 64]。 对于无符号彩色输入,范围是 [3, 63],对于有符号彩色输入,范围是 [6, 63]。

2

列地址的位宽为:

3

行地址的位宽为:

参数

实现
键入 static 参数
默认 SingleBuffer
范围 {SingleBuffer, DoubleBuffer}

该参数用于选择 FrameMemoryRandomRd 的实现方式(参见上文)。

使用示例

以下示例展示了 FrameMemoryRandomRd 算子的用法: