Operator FrameBufferRandomRead (imaFlex)

Operator Library: Memory

该算子支持对缓冲数据进行随机读取。帧数据通过链接 I 传入算子。通过将地址传输到端口 RColA(读列地址)和 RRowA(读行地址),可以执行数据的随机读取。算子使用这些地址根据给定坐标读取帧数据。生成的输出帧具有与地址输入相同的图像尺寸。需要一个类型为 RAM 的 VisualApplets 资源。请查看 'Allocation of Device Resources' 了解更多信息。

FrameBufferRandomRead 算子在采集卡 RAM (DRAM) 中对图像流进行缓冲。需要一个类型为 RAM 的 VisualApplets 资源。多个类型为 RAM 的资源可通过共享内存概念使用相同的物理 RAM。有关如何使用共享内存的文档,请参见 Application Note: Shared Memory。

该算子有两个状态:

  • Write 状态:输入图像存储在缓冲区中。该算子的工作方式类似 FIFO。如果有足够的可用内存,多个图像可以存储在缓冲区中。

  • Read 状态:图像完全存储在内存中之后,使用在输入端 RColA 和 RRowA 处给定的地址来读出内存。地址的数量和地址链接图像尺寸决定了输出图像的宽度和高度。

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

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

该算子使用大型非 FPGA 内存。如果只需要存储小帧或行,请考虑使用算子 FrameMemoryRandomRd 或 LineMemoryRandomRd。

该算子既能处理二维图像(Img Protocol = VALT_IMAGE2D),也能处理一维行序列(Img Protocol = VALT_LINE1D)。在二维模式下,处理的是完整的帧,这意味着只有在完整帧写入完成后才能开始读取。一旦地址端口(RColA 和 RRowA)接收到帧结束信号,该帧的内存便再次可用,且下一个读取操作将寻址下一帧。一维模式处理行。因此,只要写入了一行,就可以开始读取。地址端口 RColA 上的行结束信号会释放该行的内存,并且下一个 RColA 值将寻址下一行。在一维行模式下不使用 RRowA,且应将其设置为任何常量值(CONST)。

所有引脚都允许空帧、空行以及变化的行长度。

输入帧的尺寸可能会超过内部帧的尺寸。然后,算子会将传入的帧裁切为由 MaxFrameWidth 和 MaxFrameHeight 定义的尺寸。

端口 I 上的输入图像的最大尺寸可以定义得比 RAM 中实际可用的存储空间更大。这允许灵活使用,能够在非常宽和非常高的图像之间切换。参数 MaxFrameWidth 和 MaxFrameHeight 定义了存储中图像的大小。因此,这两个参数所定义的图像不得大于可用存储空间。

使用 InfiniteSource 的溢出管理

在 InfiniteSource 模式下,图像可能会丢失或损坏。发生这种情况的原因是 RAM 已满,无法接受任何更多数据;或者输入带宽对于共享内存接口而言过高。一旦算子达到溢出状态,所有传入的数据都将被丢弃。这会导致实体丢失或损坏(即 2D 模式下的帧或 1D 模式下的行)。损坏的图像仅在输入带宽过高时才会出现,因为填充级别是以完整实体来计算的。当图像的一部分已经写入 RAM,但由于溢出导致图像的一部分被丢弃时,就会出现损坏的图像。因此,读取损坏的图像会导致未定义的输出数据。一旦 RAM 中再次有足够空间且共享内存接口允许再次将数据写入 RAM,算子就会从溢出中恢复并停止丢弃输入数据。Overflow 参数指示何时发生了溢出。通过 OverflowClearMode 参数,您可以定义是在溢出恢复后立即重置 Overflow,还是手动重置溢出。仅当 InfiniteSource 参数设置为 ENABLED 时,才能使用 Overflow 和 OverflowClearMode 参数。

算子限制

  • 不对读取地址进行有效性检查。如果 RColA 大于或等于 MaxFrameWidth,或者如果 RRowA 大于或等于 MaxFrameHeight(仅在 2D 模式下),算子将从内存中读取随机虚拟值。

  • 对于链接属性,Max. Image Width 的最大限制始终为 2^24-1,Max. Image Height 的最大限制始终为 2^17-1。但是,如果 MaxFrameSizeMode 设置为 Auto,则还适用以下限制:

    • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

    • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

  • 所有输入端口的 Parallelism 为 1。

带宽优化

为了获得最佳性能,所使用的数据位数应尽可能与模块参数 RamDataWidth 中提供的值相匹配。如果位宽与内核大小的乘积等于内部 RAM 端口宽度 RamDataWidth,则达到通过算子的最大带宽。请注意,内部位宽可以通过使用内核来增加,但完整的内核仍将作为单个像素被寻址。

为了使算子能够处理超出 RAM 可用最大带宽的大量连续写入数据,请启用 WritePriority 参数。建议在处理相机等无限数据源(InfiniteSource = ENABLED)时使用此功能。如果启用了 WritePriority 参数,则在因写入突发而超出 RAM 可用带宽时,读取操作将被抑制。这允许对 RAM 进行临时更频繁的写入访问。如果相机提供了一组写入数据突发,则预计该突发后面会跟有一个写入数据间隙(否则会超出可用 RAM 带宽),然后该间隙可用于暂时提高读取带宽。

适用于 Hardware Platform
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

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 1 1 as I
Kernel Columns [1, Ram Data Width / Bit Width / Kernel Rows]4 1 1 as I
Kernel Rows [1, Ram Data Width / Bit Width / Kernel Columns]5 1 1 as I
Img Protocol VALT_LINE1D / 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 2^24-16 any 与 RColA 相同 与 RColA 相同
Max. Img Height 2^17-16 any 与 RColA 相同 与 RColA 相同

1

输入 bit width 的范围是:

  • 对于无符号输入:[1, 64]

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

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

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

输入 bit width 不得超过原生 RAM 数据宽度 RamDataWidth。

2

列地址的位宽为:

3

行地址的位宽为:

4

BitWidth * Columns * Rows <= RamDataWidth

5

BitWidth * Columns * Rows <= RamDataWidth

6

对于链接属性,Max. Image Width 的最大限制始终为 2^24-1,Max. Image Height 的最大限制始终为 2^17-1。但是,如果 MaxFrameSizeMode 设置为 Auto,则还适用以下限制:

  • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

  • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

参数

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

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

RamAddressWidth
键入 静态写参数
默认 不适用
范围 整型数字

此参数提供可使用的地址位数。 可用 RAM 插槽的数量由 2^RamAddressWidth 定义。当前的 RamAddressWidth 取决于硬件 平台以及设计中当前的 Memory 算子数量(即使用 RAM 类型资源的算子)。

MaxFrameSizeMode
键入 动态写入参数
默认 Auto
范围 {Auto, Custom}

此参数定义参数 MaxFrameWidth 和 MaxFrameHeight 是应自动跟随输入 I 处最大的图像尺寸(模式=Auto),还是可以调整这些参数(模式=Custom)。Custom 模式允许设置针对应用进行定制的最大帧尺寸,该尺寸可以比输入链接的限制小得多。这样,更多的帧可以存储在 RAM 中。在 Auto 模式下,I 的链接属性(Max.Img Width 和 Max.Img Height)所定义的最大图像不得大于内存中可用槽位的数量(2^RamAddressWidth)。如果 I 的链接属性(Max.Img Width 和 Max.Img Height)定义的最大图像大于可用内存空间,且您处于 Custom 模式,则在将输入链接上的最大图像定义得更小之前,无法再编辑 MaxFrameSizeMode 参数。采集运行中时无法写入此参数。在 1D 模式下,输入 I 的 MaxFrameHeight 和 Max.Img Height 可以视为 1。

MaxFrameWidth
键入 动态写入参数
默认 1024
范围 [1, Max. Image Width at I]

此参数设置当前图像处理配置的最大图像宽度。超出此限制的输入帧行将被裁切为 MaxFrameWidth。将此数字降低到最大图像宽度以下可以节省内存空间并允许存储更多帧。只能在 MaxFrameSizeMode 设置为 Custom 时编辑此参数。MaxFrameHeight 和 MaxFrameWidth 的乘积不得大于可用内存槽位的数量:2^RamAddressWidth。在 1D 模式下,MaxFrameHeight 可以视为 1。采集运行中时无法编辑此参数。

MaxFrameHeight
键入 动态写入参数
默认 1024
范围 [1, Max. Image Height at I]

此参数设置当前图像处理配置的最大图像高度。超出此高度限制的输入帧将被裁切为 MaxFrameHeight。将此数字降低到最大图像高度以下可以节省内存空间并允许存储更多帧。只能在 MaxFrameSizeMode 设置为 Custom 且 Image Protocol 设置为 VALT_IMAGE2D 时编辑此参数。在 1D 模式下,MaxFrameHeight 可以视为 1。MaxFrameHeight 和 MaxFrameWidth 的乘积不得大于可用内存槽位的数量:2^RamAddressWidth。采集运行中时无法编辑此参数。

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

此参数提供以百分比表示的 DRAM Fill 水平。

MaxFrameCount
键入 动态只读参数
默认 2^RamAddressWidth / (MaxFrameHeight * MaxFrameWidth)
范围 [1, 2^RamAddressWidth]

此参数提供当前可放入内存中的最大帧数。可放入内存中的最大帧数取决于参数 RamAddressWidth、MaxFrameHeight 和 MaxFrameWidth。

MaxFrameCount = 2^RamAddressWidth / (MaxFrameHeight * MaxFrameWidth)

此参数在 1D 模式下处于非活动状态。

FrameCount
键入 动态只读参数
默认 0
范围 [0, MaxFrameCount]

此参数提供 memory 中的当前帧数。

此参数在 1D 模式下处于非活动状态。

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

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

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

有关更多信息,请参见 “Infinite Sources / Connecting Cameras”。

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

“Shared Memory Concept” 概念通常会在所有连接的 Memory 算子(即使用 RAM 类型资源的所有算子)之间平均分配带宽。如果 WritePriority 参数设置为 DISABLED,则 FrameBufferRandomRead 算子会为读取和写入分配相同的优先级。通过将 WritePriority 设置为 ENABLED,FrameBufferRandomRead 算子会优先处理写入而不是读取,但仅限临时 Memory 数据速率高于可用带宽时。临时优先处理写入数据会导致读取过程暂时变慢。因此,对于 FrameBufferRandomRead 算子而言,平均带宽不得超过可用带宽。建议将写入优先级用于将 InfiniteSource 参数设置为 ENABLED 的任何算子。将写入优先级与可停止的源配合使用时,请确保写入带宽不会持续保持较高水平,否则将暂停从 FrameBufferRandomRead 算子读取数据,直到缓冲区满为止。由于写入优先级是针对单个算子的配置,因此设计中每增加一个 Memory 算子,写入优先级的作用就会减弱。

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

此参数表示缓冲区溢出。这是一个 2 位位图,其中每一位表示一种不同类型的溢出。位 0 表示 Fill 级别溢出,位 1 表示写入带宽溢出。Overflow 参数显示溢出的持续时间取决于 OverflowClearMode。

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

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

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

清除模式:

  • AutoClear:当算子从溢出中恢复时,会自动重置 Overflow 参数。

  • ManualClear:当算子从溢出中恢复时,Overflow 参数仍会显示溢出,直到通过将 ManualClear 写入 OverflowClearMode 参数来手动重置。在此模式下,进程重置(例如 Acquisition Stop)不会清除 Overflow 参数,这意味着在 Acquisition Stop 后溢出仍然可见。

  • ClearAfterRead:当算子从溢出中恢复时,Overflow 参数仍会显示溢出,直到读取 Overflow 参数或发生进程重置(例如当 Acquisition Stop 时)。

  • ClearWithProcessReset:当算子从溢出中恢复时,Overflow 参数仍会显示溢出,直到发生重置(例如当 Acquisition Stop 时)。

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