Operator LineMemory

Operator Library: Memory

LineMemory 算子是一个内存块,它使用随机写访问来存储传入的图像行。 写入地址通过输入 link 列地址 ColA 来指定。 因此,必须为每个输入像素值指定一个列地址。

将一行完全写入内存后,会使用 link O 读取并输出。 输出图像宽度由参数定义,且与输入图像宽度无关。 内存预初始化为零值。

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

内存大小由参数 FrameWidth 定义。

该算子可以实现为两种变体。 即单缓冲区实现和双缓冲区实现。 第一种实现节省了 RAM,但不允许写入和读取在时间上重叠。 因此,输入 link I 在读取状态下会停止。 后一种实现将 RAM 容量加倍,并允许在输入 link I 接收下一行的同时输出图像行。

该算子有两个状态:

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

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

这两个状态之间的切换由输入 link I 处的行结束信号触发。 请注意,输出 link 处的行宽固定为参数 XOffset 和 XLength 定义的大小, 并且与输入 link 的行宽无关。

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

该算子使用 FPGA 内部块 RAM 或 UltraRAM 内存(URAM 仅适用于 imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台)。 因此,不占用任何 RAM 类型的 VisualApplets 采集卡资源。 FPGA 内部块 RAM 是有限的。全分辨率帧可能无法放入 FPGA 内部块 RAM 中。 请考虑改用算子 FrameBufferRandomRead。

算子限制

  • 不支持空帧。

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

I/O Property

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

同步和异步输入

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

Supported Link Format

Link Parameter Input Link I 输入链路 WriteI 输入链路 ColA Output Link O
Bit Width [1, 64]1 1 auto2 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, VALT_LINE1D} 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 as I as I 参数 FrameWidth
Max. Img Height any as I as I as I

1

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

2

列地址的位宽为:

参数

ImplementationType(imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 平台)
键入 静态写参数
默认 AUTO
范围 (AUTO, BRAM, URAM)

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

您可以选择以下值之一:

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

BRAM: operator 使用 FPGA 的 Block RAM。

URAM: operator 使用 FPGA 的 UltraRAM。

[注意] URAM 的可用性

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

[注意] 通常使用 AUTO

通常,该参数应设置为 AUTO。在特殊情况下,即如果 设计中的某种 FPGA 资源短缺,您可以通过使用值 BRAM 或 URAM 来手动干预 FPGA 资源管理。

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

此参数选择 LineMemory 的实现方式(参见上文)。

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

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

XOffset
键入 动态/静态读/写参数
默认 0
范围 [0, FrameWidth - XLength]

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

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

该参数定义了 ROI 的宽度。

使用示例

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