Operator Library: Memory
| 适用于以下硬件平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
此算子将输入图像数据缓冲在 Frame Grabber RAM (DRAM) 中,并为每个缓冲的图像输出任意数量的感兴趣区域 (ROI)。
需要一个 RAM 类型的 VisualApplets 资源(请参见 ‘Allocation of Device Resources’)。多个 RAM 类型的资源会通过 ‘ Shared Memory Concept ’ 使用相同的物理 RAM。有关如何使用共享内存的文档,请查阅 Application Note: Shared Memory。
ROI 在算子参数字段 XLength、YLength、XOffset 和 YOffset 中进行定义。下图展示了针对一个输入帧、一组参数以及输入 Parallelism 为 1 时该算子输出的概述。
参数 MaxNumRoI 用于指定每个缓冲输入帧可读取的最大 ROI 数量。每个 ROI 坐标参数字段 XLength、YLength、XOffset 和 YOffset 均包含 MaxNumRoI 个条目。
参数 NumRoI 用于指定算子将为每个缓冲图像在输出端提供的实际 ROI 数量。当设置为 dynamic 时,此数量不能超过 MaxNumRoI。当设置为 dynamic 时,您可以在图像采集期间更新 NumRoI。对 NumRoI 的更改会在当前帧的所有 ROI 都被读取完毕后生效。
所有 ROI 都会按顺序读取,并作为单独的图像在算子输出端提供:ROI 0、ROI 1、ROI 2... 直至 ROI N-1。其中,N 是从每个输入帧中读取的当前 ROI 数量,由参数 NumRoI 指定。参数字段 XOffset、XLength、YOffset 和 YLength 指定了一组 ROI。这些参数的参数类型可以设置为 dynamic 或 static,这决定了这些参数在运行时是否可调整。当设置其中一个 ROI 参数的参数类型时,所有 ROI 参数以及 MaxFrameWidth、MaxFrameHeight 和 MaxFrameSizeMode 的参数类型也会自动进行调整。请在 ‘Parameter Editing’ 中了解有关如何配置字段参数的信息。
只要不超过最大输入帧尺寸,支持为 ROI 定义所有可能的矩形区域,即可以将单像素、单行、单列、矩形区域或完整帧定义为 ROI。
不同的 ROI 不需要具有相同的尺寸。
每个 ROI 都可以单独定义。
ROI 可以重叠,也可以重复。
X 坐标参数 XOffset 和 XLength 必须符合输入 Parallelism 的步长。
您可以通过将 XLength 或 YLength 设置为零来定义空 ROI。随后,算子将在其输出端提供一张空图像。空图像不包含任何像素。
如果该算子配合图像协议 VALT_LINE1D 使用,则 Y 坐标参数将被禁用。在 1D 运行模式下,算子将读取一个 ROI 作为一行。此时,算子的输出将是一个无限的 1D 图像流,其中每一行由一个 ROI 表示,例如行 0 = ROI 0、行 1 = ROI 1、行 N = ROI N、行 N+1 = ROI 0 等。
一旦对应的输入帧完全缓冲完毕(即接收到输入帧的 EoF (End of Frame) 信号),算子便会在其输出端提供 ROI 图像。如果 DRAM 中有足够空间,则可以在读取 ROI 的同时将后续输入帧写入 DRAM。RAM 带宽在写入和读取之间共享,但读取操作只能在对应的输入帧写入完成后才能开始。在读取完由字段索引 NumRoI-1 处的 XLength、YLength、XOffset 和 YOffset 的值所定义的输入帧的最后一个 ROI 之后,当前帧将被丢弃,下一个 ROI(在字段索引 0 处)将寻址下一个输入帧。有关算子延迟的信息,请参见 Table 46, 'Individual Latencies of the Operators in Library Memory'。
如果 ROI 参数类型设置为 dynamic,则可以动态更新所有 ROI。但是,只有在没有图像采集正在运行的情况下,才能更新 ROI。
该算子支持两种模式来指定保存在 DRAM 中的缓冲图像数据帧的最大大小,您可以通过参数 MaxFrameSizeMode 进行配置:
-
对于 MaxFrameSizeMode = Auto,DRAM 会缓冲一个大小等于最大图像尺寸的图像,该尺寸为 I.MaxImgWidth * I.MaxImgHeight。
小于最大图像尺寸的图像在缓冲时不会被修改。但是,读取 ROI 始终是在具有最大可能图像尺寸的缓冲帧上进行的。在这种情况下,缺失的像素会用随机数据填充,在后续处理中应将其视为未定义。
-
对于 MaxFrameSizeMode = Custom,缓冲输入帧的最大尺寸由参数 MaxFrameWidth 和 MaxFrameHeight 定义。即使实际输入帧更大,超出指定参数尺寸的数据也会被丢弃(类似于没有偏移量的 ROI)。在这种情况下,DRAM 会为帧大小 MaxFrameWidth * MaxFrameHeight 预留内存。您可以使用此模式来优化内存使用并向 DRAM 存储更多帧。
在这两种情况下,都不会检查定义的 ROI 是否位于输入图像内部。但是,不能寻址位于 MaxFrameWidth 和 MaxFrameHeight 之外的 ROI。如果 ROI 位于实际输入图像数据之外,算子会读取随机虚拟值,但 ROI 的大小不会改变。
如果将 MaxFrameSizeMode、MaxFrameWidth 和 MaxFrameHeight 设置为参数类型 static 或 dynamic,则 ROI 参数也会自动设置为相同的参数类型,反之亦然。只有 dynamic 参数才能在运行时进行调整。
该算子支持输入链路上的空帧、空行以及可变行长度。
![]() |
大量 ROI 与时序 |
|---|---|
|
随着由 MaxNumRoI 参数定义的最大 ROI 定义数量的增加,算子的 BRAM 消耗也会增加。这可能会在高时钟频率下导致时序问题。例如,MaxNumRoI 为 65536 时可能无法在完整设计中满足时序要求。如果需要大量的 ROI,请考虑改用 'FrameBufferMultiRoiDyn' 算子,在该算子中,ROI 定义是通过输入链路传递的,并不存储在 BRAM 中。 |
在 InfiniteSource 模式下,FrameBufferMultiRoi 的数据源不可停止,并且图像可能会丢失或损坏。发生这种情况的原因要么是 RAM 已满且无法接受任何更多数据,要么是输入带宽对于共享内存接口而言过高。一旦算子达到溢出状态,所有传入的数据都将被丢弃。这会导致帧丢失或损坏。损坏的图像仅在输入带宽过高时才会出现,因为填充水平是以完整实体进行计数的。当图像的一部分已写入 RAM,但由于输入带宽过高且 RAM 无法足够快地接受写入数据而导致图像的另一部分被丢弃时,就会出现损坏的图像。因此,读取损坏的图像会导致未定义的输出数据。一旦 RAM 中有足够空间并且共享内存接口允许再次将数据写入 RAM,算子就会从溢出中恢复并停止丢弃输入数据。损坏的图像会被自动终止,后续图像不受影响。Overflow 参数指示何时发生了溢出。通过 OverflowClearMode 参数,您可以定义是在溢出恢复后立即重置 Overflow,还是手动重置溢出。
-
该算子的输出模式等同于 ImageBufferMultiRoI 算子的 FreeRun 模式,且不支持附加的 RoI 输出模式 WaitAfterImage 和 WaitAfterRoI。
-
该算子支持输入链路 I 上的空帧,但该帧的输出 ROI 会填充随机虚拟值。
-
如果输入图像小于写入 DRAM 的帧,则不会检查 ROI 坐标是否在输入图像内部。在这种情况下,算子会从 Memory 中读取随机虚拟值。
-
最大链接 Property 因算子的使用方式而异。有关详细信息,请参阅下面的 Supported Link Format 一节。
为了获得最佳性能,所使用的数据位宽应尽可能与 RamDataWidth 模块参数中提供的值相匹配。当位宽、核大小和 Parallelism 的乘积等于内部 RAM 端口宽度 RamDataWidth 时,将达到通过该算子的最大带宽。请注意,您可以通过使用核来增加内部位宽,但完整的核仍将被寻址为单个像素。
为了使算子能够处理超出 RAM 可用最大带宽的大量连续写入数据,请启用 WritePriority 参数。建议在处理相机等无限数据源(InfiniteSource = ENABLED)时使用此功能。如果启用了 WritePriority 参数,则在因写入突发而超出 RAM 可用带宽时,读取操作将被抑制。这允许对 RAM 进行临时更频繁的写入访问。如果相机提供了一组写入数据突发,则预计该突发后面会跟有一个写入数据间隙(否则会超出可用 RAM 带宽),然后该间隙可用于暂时提高读取带宽。
|
输入 bit width 的范围是:
输入 bit width 不得超过原生 RAM 数据宽度 RamDataWidth。 |
|
|
位宽、Parallelism 和核大小的乘积不得超过原生 RAM 数据宽度:
|
|
|
输入链路 I 的最大图像宽度和图像 高度取决于 算子的使用情况:
|
| RamDataWidth | |
|---|---|
| 键入 | 静态写参数 |
| 默认 | 不适用 |
| 范围 | 整型数字 |
|
此参数提供可在 RAM 中使用的最大数据宽度。 |
|
| RamAddressWidth | |
|---|---|
| 键入 | 静态写参数 |
| 默认 | 不适用 |
| 范围 | 整型数字 |
|
此参数提供可使用的地址位数。 可用 RAM 插槽的数量由 2^RamAddressWidth 定义。当前的 RamAddressWidth 取决于硬件 平台以及设计中当前的 Memory 算子数量(即使用 RAM 类型资源的算子)。 |
|
| FillLevel | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0%, 100%] |
|
此参数提供以百分比表示的 DRAM Fill 水平。 |
|
| MaxFrameCount | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 2^RamAddressWidth / (MaxFrameHeight * (MaxFrameWidth / I.Parallelism)) |
| 范围 | [1, 2^RamAddressWidth] |
|
此参数提供当前可放入 memory 中的最大帧数。可放入 memory 中的最大帧数取决于参数 RamAddressWidth、MaxFrameHeight、I.Parallelism 和 MaxFrameWidth。 MaxFrameCount = 2^RamAddressWidth / (MaxFrameHeight * (MaxFrameWidth / I.Parallelism)) |
|
| FrameCount | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0, MaxFrameCount] |
|
此参数提供 memory 中的当前帧数。 |
|
| InfiniteSource | |
|---|---|
| 键入 | 静态写参数 |
| 默认 | DISABLED |
| 范围 | {ENABLED, DISABLED} |
|
该算子可以直接放置在设计中的相机算子后面。在这种情况下,必须将 InfiniteSource 参数设置为 ENABLED。算子随后将执行主动溢出管理,并确保算子能够从溢出中正确恢复。当算子后面的数据接收器停止或暂停传输且缓冲区填充水平达到最大值时,或者当输入带宽过高导致写入数据无法传输到外部 RAM 时,可能会发生溢出。当 InfiniteSource 设置为 Disabled 时,如果缓冲区填充水平或输入带宽变得过高,则会生成一个禁止信号,以阻止前一个算子传输数据。 建议将写入优先级用于任何与 InfiniteSource 一起使用的算子。因此,当 InfiniteSource 参数设置为 ENABLED 时,建议将 WritePriority 参数设置为 ENABLED。 有关更多信息,请参见 “Infinite Sources / Connecting Cameras”。 |
|
| WritePriority | |
|---|---|
| 键入 | 静态写参数 |
| 默认 | DISABLED |
| 范围 | {ENABLED, DISABLED} |
|
' Shared Memory Concept ' 概念通常在所有连接的内存算子(即使用 RAM 类型资源的所有算子)之间平均分配带宽。如果 WritePriority 参数为 DISABLED,则 FrameBufferMultiRoi 算子会为读取和写入分配相同的优先级。通过将 WritePriority 设置为 ENABLED,FrameBufferMultiRoi 算子会优先处理写入而不是读取,但仅在临时内存数据速率高于可用带宽时才会这样。写入数据的临时优先级会导致读取过程暂时变慢。因此,平均带宽不得超过 FrameBufferMultiRoi 算子的可用带宽。建议将写入优先级用于将 InfiniteSource 参数设置为 ENABLED 的任何算子。当将写入优先级与可停止的源配合使用时,请确保写入带宽不会持续很高,否则来自 FrameBufferMultiRoi 算子的读取将会停止,直到缓冲区满为止。由于写入优先级是对单个算子的配置,因此写入优先级的影响会随着设计中每个额外的内存算子而减小。 |
|
| Overflow | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0, 3] |
|
此参数表示缓冲区溢出。这是一个 2 位位图,其中每一位表示一种不同类型的溢出。位 0 表示 fill 级别溢出,位 1 表示写入带宽溢出。Overflow 的显示时间取决于所选的 OverflowClearMode。 |
|
| OverflowClearMode | |
|---|---|
| 键入 | 动态写入参数 |
| 默认 | AutoClear |
| 范围 | {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset} |
|
OverflowClearMode 决定了当算子从溢出中恢复时如何清除 Overflow 参数。只有在算子不再处于溢出状态时,您才能使用此参数重置溢出状态。 清除模式:
|
|
| MaxNumRoI | |
|---|---|
| 键入 | 静态写参数 |
| 默认 | 1 |
| 范围 | [1, 65536] |
|
此参数定义算子可以存储的最大 ROI 数量。在时钟频率较高时,大量的 ROI 会对时序产生负面影响。 |
|
| NumRoI | |
|---|---|
| 键入 | 动态/静态写入参数 |
| 默认 | 1 |
| 范围 | [1, MaxNumRoI] |
|
此参数定义实际使用的 ROI 数量。算子将从每个输入图像中读取 NumRoI 个 ROI,并在其输出端提供这些 ROI。如果该参数设置为 static,则范围为 [1, 65536],并且 MaxNumRoI 被禁用。 |
|
| XOffset | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 0 |
| 范围 | [0, MaxFrameWidth - XLength] |
|
此字段参数定义 ROI 最左侧列的 X 坐标数组。 步长为 Parallelism。 了解如何在 'Parameter Editing' 中配置字段参数。 |
|
| XLength | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 1024 |
| 范围 | [0, MaxFrameWidth - XOffset] |
|
此字段参数定义 ROI 宽度的数组。 步长为 Parallelism。 了解如何在 'Parameter Editing' 中配置字段参数。 |
|
| YOffset | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 0 |
| 范围 | [0, MaxFrameHeight - YLength] |
|
该字段参数定义了 ROI 第一行的 Y 坐标数组。 了解如何在 'Parameter Editing' 中配置字段参数。 |
|
| YLength | |
|---|---|
| 键入 | 动态/静态读/写参数 |
| 默认 | 1024 |
| 范围 | [0, MaxFrameHeight - YOffset] |
|
该字段参数定义了 ROI 高度数组。 了解如何在 'Parameter Editing' 中配置字段参数。 |
|
| MaxFrameSizeMode | |
|---|---|
| 键入 | 动态/静态写入参数 |
| 默认 | Auto |
| 范围 | {Auto, Custom} |
|
此参数定义了参数 MaxFrameWidth 和 MaxFrameHeight 是应自动跟随输入 I 处的最大图像尺寸(模式=Auto),还是可以调整这些参数(模式=Custom)。Custom 模式允许设置针对应用程序定制的最大帧尺寸,该尺寸可以远小于输入链路定义的限制。通过这种方式,可以在 RAM 中存储更多帧。在 Auto 模式下,I 的链路 Property(Max.Img Width 和 Max.Img Height)所定义的最大图像不得大于内存中可用槽位的数量(2^RamAddressWidth)。如果 I 的链路 Property Max.Img Width 和 Max.Img Height 定义的最大图像大于可用的内存空间,并且您处于 Custom 模式,则在减小输入链路上的最大图像之前,将无法再编辑 MaxFrameSizeMode 参数。在采集运行时无法写入此参数。MaxFrameSizeMode 具有与 MaxFrameWidth、MaxFrameHeight 和 ROI 参数相同的参数类型。 |
|
| MaxFrameWidth | |
|---|---|
| 键入 | 动态/静态写入参数 |
| 默认 | 1024 |
| 范围 | [1, Max. Image Width at I] |
|
此参数用于为当前图像处理配置设置最大图像宽度。超出此限制的输入帧行会被裁剪至 MaxFrameWidth。将此数字降低到最大图像宽度以下可以节省内存空间并允许存储更多帧。此参数仅当 Max.Img Width 或 MaxFrameSizeMode 设置为 Custom 时才能进行编辑。MaxFrameHeight 和 MaxFrameWidth 的乘积不得大于可用内存槽位数(即 2^RamAddressWidth 乘以输入并行度)。在采集运行时无法编辑此参数。MaxFrameWidth 具有与 MaxFrameSizeMode、MaxFrameHeight 和 ROI 参数相同的参数类型。 |
|
| MaxFrameHeight | |
|---|---|
| 键入 | 动态/静态写入参数 |
| 默认 | 1024 |
| 范围 | [1, Max. Image Height at I] |
|
此参数用于为当前图像处理配置设置最大图像高度。超出此高度限制的输入帧会被裁剪至 MaxFrameHeight。将此数字降低到最大图像高度以下可以节省内存空间并允许存储更多帧。此参数仅当 MaxFrameSizeMode 设置为 Custom 时才能进行编辑。MaxFrameHeight 和 MaxFrameWidth 的乘积不得大于可用内存槽位数(即 2^RamAddressWidth 乘以输入并行度)。在采集运行时无法编辑此参数。MaxFrameHeight 具有与 MaxFrameSizeMode、MaxFrameWidth 和 ROI 参数相同的参数类型。 |
|

![[注意]](../common/images/admon/note.png)



上一页

