Operator FrameMemory

Operator Library: Memory

FrameMemory 算子是一个使用随机写访问存储输入图像的 Memory 块。 写地址通过输入链路行地址 RowA 和列地址 ColA 指定。 因此,必须为每个输入像素值指定行和列地址。

将帧写入 Memory 后,会通过链路 O 进行读取和输出。 输出图像尺寸由参数定义,且与输入图像尺寸无关。 Memory 预初始化为零值。

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

Memory 大小由参数 FrameWidth 和 FrameHeight 定义。

该算子可采用两种变体来实现。 即单缓冲区实现和双缓冲区实现。 第一种实现节省了 RAM,但无法实现写操作和读操作的时间重叠。 因此,输入链路 I 在读取状态下会停止。 后一种实现使 RAM 容量翻倍,允许在输出一帧的同时接收输入链路 I 上的下一帧。

该算子有两个状态:

  1. 写入状态:链路 I 的值存储在由 ColA 和 RowA 指定的地址处。 仅当链路 WriteI 为 1 时执行此操作。 如果链路 WriteI 为 0,则跳过当前像素。 可以写入有效地址范围内的任何地址。 无需写入每个 Memory 单元。

  2. 读取状态:顺序读取 Memory 并生成指定宽度的行。 通过使用参数 XOffset、XLength、YOffset 和 YLength,可以定义读取地址范围,即 ROI。 读取 Memory 会将读取地址的内容重置为零。 因此,如果读取了以前未写入的 Memory 单元,则将输出零。

这两个状态之间的切换由输入链路 I 上的帧结束触发。 请注意,输出链路上的帧宽度和高度固定为由参数 XOffset、XLength、YOffset 和 YLength 定义的大小,并且与输入链路的行宽和帧高无关。

该算子可用于镜像或传感器校正。

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

算子限制

  • 不支持空帧。

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

I/O Property

Property 值
Operator Type M
输入链路 I,图像数据输入
WriteI,写使能输入
ColA,I 处像素的写列地址
RowA,I 处像素的写行地址
Output Link O,数据输入

同步和异步输入

  • 所有输入相互同步,即它们必须由同一个 M-type 运算符通过由 O-type 运算符组成的任意网络提供源信号。

Supported Link Format

Link Parameter Input Link I 输入链路 WriteI 输入链路 ColA 输入链路 RowA Output Link O
Bit Width [1, 64]1 1 auto2 auto3 as I
Arithmetic {unsigned, signed} unsigned unsigned unsigned as I
Parallelism 1 as I as I as I as I
Kernel Columns any 1 1 1 as I
Kernel Rows any 1 1 1 as I
Img Protocol VALT_IMAGE2D as I as I as I as I
Color Format any VAF_GRAY VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE FL_NONE as I
Max. Img Width any as I as I as I 参数 FrameWidth
Max. Img Height any as I as I as I 参数 FrameHeight

1

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

2

列地址的位宽为:

3

行地址的位宽为:

参数

ImplementationType
键入 静态写参数
默认 AUTO
范围 (AUTO, BRAM, LUTRAM, URAM)

参数 ImplementationType 会影响 operator 的实现策略,即用于实现该 operator 的 Memory 元素。

您可以选择以下值之一:

AUTO: 根据所连接 link 的参数化配置,自动选择最佳实现策略。

BRAM: operator 使用 FPGA 的 Block RAM。

LUTRAM: operator 使用 FPGA 的 LUT RAM。

URAM: operator 使用 FPGA 的 UltraRAM。

[注意] URAM 的可用性

ImplementationType 参数(从而使用 URAM 的选项)仅在 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台上可用。

[注意] 通常使用 AUTO

通常,该参数应设置为 AUTO。在特殊情况下(例如,如果设计中的某种 FPGA 资源短缺),您可以使用值 BRAM、LUTRAM 或 URAM 手动干预 FPGA 资源管理(URAM 仅适用于 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台)。

AUTO 仅在 BRAM 和 LUTRAM 之间进行选择。

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

此参数选择 FrameMemory 的实现(见上文)。

FrameWidth
键入 static 参数
默认 1024
范围 [0, 65534]

此参数以像素为单位选择输出链路的图像宽度。

FrameHeight
键入 static 参数
默认 1024
范围 [0, 65534]

此参数以行为单位选择输出链路的图像高度。

XOffset
键入 动态/静态读/写参数
默认 0
范围 [0, Max.Img Height - YLength]

该参数定义 ROI 左上角的 y 坐标。

XLength
键入 动态/静态读/写参数
默认 1024
范围 [1, Max.Img Width - XOffset]

该参数定义了 ROI 的宽度。

YOffset
键入 动态/静态读/写参数
默认 0
范围 [0, Max.Img Height - YLength]

该参数定义 ROI 左上角的 y 坐标。

YLength
键入 动态/静态读/写参数
默认 1024
范围 [1, Max.Img Height - YOffset]

该参数定义了 ROI 的高度。

使用示例

以下示例展示了 FrameMemory 算子的使用: