Operator LineBuffer (imaFlex)

操作员Library: Memory

LineBuffer 算子在帧采集卡 RAM(DRAM,即帧采集卡上的内存,而不是 FPGA 中的内存)中缓冲图像数据流。LineBuffer 算子替代了用于 mE5 硬件平台并提供相同功能的 ImageBuffer 算子。imaFlex CXP-12 Quad 和 imaFlex CXP-12 Penta 不支持 ImageBuffer 算子,因此,当您将设计从 mE5 硬件平台转换为 imaFlex CXP-12 Quad 或 imaFlex CXP-12 Penta 平台时,任何 ImageBuffer 实例都会自动替换为 LineBuffer 实例。

需要一个类型为 RAM 的 VisualApplets 资源。有关更多信息,请参见 “分配设备资源”。多个类型为 RAM 的资源通过共享 memory 概念使用相同的物理 RAM。有关如何使用共享 memory 的文档,请参见 “共享 memory 概念” 节。此外,LineBuffer 算子支持感兴趣区 (ROI)。总位数(bit width 乘以 Parallelism)不得超过相应帧采集卡的内存限制。

该算子会产生至少一行的延迟。一旦该行完全写入缓冲区,便开始读取该行。如果输出被阻塞,算子将缓冲输入数据。

该算子的工作方式类似于 FIFO。该缓冲区对图像行进行操作,从而产生非常短的内存延迟。只要输入数据在所选感兴趣区内且后续模块能够以足够快的速度消耗数据,任何已完成的输入数据行都会立即转发到输出端。因此,当当前帧传输仍在进行时,来自相机的帧数据就可以转发到 PC。如果缓冲区填充了更多行,输入数据和输出数据之间的延迟会增加。当输出被阻塞一段时间(特别是因为后续模块无法以与输入带宽相同的速率处理数据)时,就会发生这种情况。因此,只有当算子无法以输入提供数据的速率输出数据时,内存才会填满。通常,该算子用于补偿峰值输入带宽。

通过参数 XOffset、XLength、YOffset 和 YLength,您可以定义一个感兴趣区。如果输入图像宽度小于 XOffset 和 XLength 的总和,LineBuffer 算子仍会读取参数化的 XLength。在这种情况下,算子会为额外的像素输出未定义的内存内容。如果输入图像高度小于请求的输出图像高度,算子只输出可用的行。如果输入图像高度低于 YOffset,则会在输出端产生仅包含虚拟值的单行。

在 Line1D 应用模式下,YOffset 和 YLength 设置无效。

为了测量缓冲区的填充水平,该算子提供了以下参数:FillLevel、LineCount 和 Overflow。FillLevel 以百分比形式显示 RAM 的填充水平。LineCount 提供保存在缓冲区中的当前行数。当 FillLevel 接近或等于 100% 且要存储在缓冲区中的下一图像将超过 RAM 容量时,Overflow 参数设置为 1。如果发生溢出,输入数据将被丢弃,并且输入图像高度会减小。

InfiniteSource 参数指定算子接收的是否是无法停止的数据流,例如来自相机的未缓冲流。有关无限源的更多信息,请参见 “无限源 / 连接相机”。只有当数据源不可停止时(即 InfiniteSource 设置为 ENABLED 时),才会发生溢出。因此,Overflow 和 OverflowClearMode 参数仅能在 InfiniteSource 参数设置为 ENABLED 时使用。溢出可能会导致不完整的图像存储在 memory 中。这些不完整的图像会自动完成,并且会丢弃传入的数据,直到有足够的缓冲区空间可用于下一行。

算子限制

  • 不支持空帧。

[注意] 可用 Memory 空间

该算子提供只读参数 MaxLineCount,用于报告适合 RAM 的最大行数(由 XLength 定义)。此数字还取决于当前设计中是否存在其他 memory 算子以及数据 bit width。

适用于硬件平台
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

带宽优化

与 ImageBuffer 算子相比,LineBuffer 算子会自动聚合像素,以尽可能贴近 memory 数据宽度,从而达到最佳性能。

如果由 ParallelismConverter 参数启用,您可以将输出 Parallelism 调整为与输入 Parallelism 不同的值。这允许在算子的输入和输出之间定义不对称的峰值数据吞吐量。当后续数据处理管道需要使用不同的 Parallelism 时,您可以使用此功能来避免使用额外的 PARALLELdn 或 PARALLELup 算子实例。

为了使算子能够处理超过 RAM 可用最大带宽的长写入数据突发,请启用 WritePriority 参数。建议对诸如相机(InfiniteSource = ENABLED)等无限数据源使用此参数。当由于写入突发而超出 RAM 的可用带宽时,读取将被抑制。这允许对 RAM 进行临时更频繁的写入访问。如果相机产生写入数据突发,预计该突发后面会有写入数据中的间隙(否则会超出可用 RAM 带宽),然后该间隙可用于临时提高读取带宽。

I/O Properties

财产 值
操作员类型 M
Input Link I,图像数据输入
输出链接 O,图像数据输出

Supported Link Format

链接参数 输入链路 I 输出链路 O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism 任何2 as I 2
内核列 1 as I
内核行 1 as I
图像协议 {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format 任何 as I
颜色口味 任何 as I
Max. Img Width 2^31-13 as I
Max. Img Height 2^31-1 as I

1

The range of the input bit width is:

  • For unsigned inputs: [1, 64]

  • 对于有符号输入:[2, 64]

  • 对于无符号彩色输入:[3, 63]

  • 对于有符号彩色输入:[6, 63]。

2

bit width 与 Parallelism 的乘积不得超过本机 RAM 数据宽度:RamDataWidth。

3

如果 LineBuffer 算子转换 Parallelism(ParallelismConverter = Yes),它会自动将输出端的最大图像宽度四舍五入到 O.Parallelism 的下一个倍数。如果 O.Parallelism 大于 I.Parallelism,则 I.MaxImgWidth 不得大于 2^31-1-O.Parallelism,以便输出端舍入后的最大图像宽度不超过 2^31-1。

参数

RamDataWidth
键入 静态写入参数
默认 不适用
范围 整数

此参数提供可用的数据位数。

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

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

步长为输入 Parallelism。

XLength
键入 动态/静态写参数
默认 1024
范围 [输入 Parallelism, min(Max.Img Width, (2^RAM 地址宽度 - 1) * 内部 RAM Parallelism) - XOffset]

此参数用于定义 ROI 的宽度。

步长为输入 Parallelism。

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

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

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

此参数用于定义 ROI 的高度。

ParallelismConverter
键入 静态写入参数
默认 无
范围 {Yes, No}

此参数定义 LineBuffer 算子是否实现 Parallelism 转换器。

  • No:算子不执行 Parallelism 转换。输入和输出 Parallelism 始终相同。当输入 Parallelism 更改时,输出 Parallelism 会自动更改为新的输入 Parallelism 值。输出 Parallelism 无法编辑。

  • Yes:算子执行 Parallelism 转换。输出 Parallelism 完全独立于输入 Parallelism,并且可以随意编辑。

InfiniteSource
键入 静态写入参数
默认 DISABLED
范围 {ENABLED, DISABLED}

可以在相机算子正后方插入 LineBuffer 算子。在这种情况下,必须将 InfiniteSource 参数设置为 ENABLED。 然后,该算子将执行主动溢出管理,并确保算子能够从溢出中正确恢复。 当算子后面的数据接收器停止或暂停传输且缓冲区 Fill 级达到最大值,或者输入带宽过高导致写入数据无法传输到外部 RAM 时,均会发生溢出。 当 InfiniteSource 设置为 DISABLED 时,如果缓冲区 Fill 级或输入带宽变得过高,则会生成一个禁止信号,以阻止后续算子传输数据。

对于将 InfiniteSource 参数设置为 ENABLED 的任何算子,建议使用写入优先。因此,当 InfiniteSource 参数设置为 ENABLED 时,建议将 WritePriority 参数 设置为 ENABLED。

更多信息请参见 'Infinite Sources / Connecting Cameras'。

WritePriority
键入 静态写入参数
默认 DISABLED
范围 {ENABLED, DISABLED}

共享内存概念( “共享内存概念” )通常会将带宽平均分配给所有连接的内存运算符(即所有使用RAM类型资源的运算符)。如果WritePriority设置为DISABLED ,则LineBuffer运算符会为读取和写入分配相同的优先级。将WritePriority设置为ENABLED后, LineBuffer运算符会优先执行写入操作,但仅当临时内存数据速率高于可用带宽时才会如此。写入数据的临时优先级会导致读取过程暂时减慢。因此, LineBuffer运算符的平均带宽不得超过其可用带宽。建议对任何将InfiniteSource参数设置为ENABLED 的运算符启用写入优先级。当将写入优先级与可停止源一起使用时,请确保写入带宽不会持续过高,否则LineBuffer的读取操作将被停止,直到缓冲区填满。由于写入优先级是针对单个运算符的配置,因此写入优先级的效果会随着设计中内存运算符数量的增加而降低。

FillLevel
键入 动态读取参数
默认 0
范围 [0%, 100%]

此参数提供 DRAM 的填充率(以百分比表示)。

最大行数
键入 动态读取参数
默认 2^RAM 地址宽度 / ( XLength / 内部 RAM 并行度 + 1)
范围 [1, 2^RAM 地址宽度 / 2]

此参数提供当前内存可容纳的最大行数。内存可容纳的最大行数取决于 RAM 地址宽度,而 RAM 地址宽度又取决于已实例化的 RAM 操作符的数量。

行数
键入 动态读取参数
默认 0
范围 [0, MaxLineCount ]

此参数提供内存中当前的行数。

Overflow
键入 动态读取参数
默认 0
范围 [0, 3]

此参数指示缓冲区溢出。它是一个 2 位位图,其中每位指示不同类型的溢出。位 0 表示填充级别溢出,位 1 表示写入带宽溢出。溢出参数显示溢出的时间长短取决于OverflowClearMode 的设置。

仅当 InfiniteSource 参数设置为 ENABLED 时,Overflow 参数才处于活动状态

OverflowClearMode
键入 动态写入参数
默认 AutoClear
范围 {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode决定了运算符从溢出状态恢复后如何清除Overflow参数。只有当运算符不再处于溢出状态时,才能使用此参数重置溢出状态。

清除模式:

  • 自动清除:当操作员从溢出中恢复时,溢出参数会自动重置。

  • 手动清除:当操作员从溢出中恢复后,溢出参数仍会显示溢出信息,直到通过在OverflowClearMode参数中写入ManualClear手动重置为止。在此模式下,进程重置(例如停止采集)不会清除溢出参数,这意味着采集停止后溢出信息仍然可见。

  • ClearAfterRead :当操作员从溢出中恢复时,溢出参数仍会显示溢出,直到读取溢出参数或发生进程重置(例如,当采集停止时)。

  • ClearWithProcessReset :当操作员从溢出中恢复时,溢出参数仍会显示溢出,直到发生重置(例如,当采集停止时)。

仅当 InfiniteSource 参数设置为 ENABLED 时,OverflowClearMode 参数才处于活动状态