Operator 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 的资源使用带有共享内存概念的同一个物理 RAM。有关如何使用共享内存的文档,请参见 “共享内存概念” 一节。此外,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 时使用。由于溢出,不完整的图像可能会存储在内存中。这些不完整的图像会自动完成,并且会丢弃传入的数据,直到有足够的缓冲区空间用于下一行为止。
-
不支持空帧。
![]() |
可用内存空间 |
|---|---|
|
该算子提供只读参数 MaxLineCount,用于报告适合 RAM 的最大行数(由 XLength 定义)。此数字还取决于当前设计中是否存在其他内存算子以及数据 bit width。 |
| 适用于以下硬件平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
与 ImageBuffer 算子不同,LineBuffer 算子执行像素的自动聚合,以尽可能贴近内存数据宽度,从而达到最佳性能。
如果由 ParallelismConverter 参数启用,您可以将输出 Parallelism 调整为与输入 Parallelism 不同的值。这允许在算子的输入和输出之间定义不对称的峰值数据吞吐量。当后续数据处理管道需要使用不同的 Parallelism 时,您可以使用此功能来避免使用额外的 PARALLELdn 或 PARALLELup 算子实例。
为了使算子能够处理超出 RAM 可用最大带宽的大量连续写入数据,请启用 WritePriority 参数。建议将此功能用于无限数据源,例如相机(InfiniteSource = ENABLED)。当由于写入突发而超出 RAM 的可用带宽时,读取将被禁止。这允许对 RAM 进行临时更频繁的写入访问。如果相机提供突发写入数据,则预计该突发后面会有写入数据间距(否则会超出 RAM 可用带宽),然后可以利用该间距来临时提高读取带宽。
|
输入 bit width 的范围是:
|
|
|
bit width 与 Parallelism 的乘积不得超过原生 RAM 数据宽度:RamDataWidth。 |
|
|
如果 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 |
| 范围 | [input parallelism, min(Max.Img Width, (2^RAM address width - 1) * internal 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 转换器。
|
|
| 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} |
|
共享内存概念('Shared Memory Concept')通常会在所有连接的内存算子(即使用 RAM 类型资源的算子)之间平均分配带宽。如果 WritePriority 设置为 DISABLED,则 LineBuffer 算子会为读写分配相同的优先级。通过将 WritePriority 设置为 ENABLED,LineBuffer 算子会优先进行写入而非读取,但仅在临时内存数据速率高于可用带宽时才会这样。临时优先处理写入数据会导致读取过程暂时变慢。因此,平均带宽不得超过 LineBuffer 算子的可用带宽。对于将 InfiniteSource 参数设置为 ENABLED 的任何算子,建议启用写入优先级。在使用可停止源启用写入优先级时,请确保写入带宽不会持续很高,否则将暂停从 LineBuffer 读取,直至缓冲区满。由于写入优先级是针对单个算子的配置,因此设计中每增加一个内存算子,写入优先级的作用就会减弱。 |
|
| FillLevel | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0%, 100%] |
|
该参数提供 DRAM 的填充水平(以百分比表示)。 |
|
| MaxLineCount | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 2^RAM 地址宽度 / (XLength / 内部 RAM Parallelism + 1) |
| 范围 | [1, 2^RAM 地址宽度 / 2] |
|
该参数提供当前适合内存的最大行数。适合内存的最大行数取决于 RAM 地址宽度,而 RAM 地址宽度又取决于实例化的 RAM 算子数量。 |
|
| LineCount | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0, MaxLineCount] |
|
该参数提供内存中的当前行数。 |
|
| Overflow | |
|---|---|
| 键入 | 动态只读参数 |
| 默认 | 0 |
| 范围 | [0, 3] |
|
该参数表示缓冲区溢出。它是一个 2 位位图,其中每一位表示不同类型的溢出。位 0 表示填充水平溢出,位 1 表示写入带宽溢出。Overflow 参数显示溢出的持续时间取决于 OverflowClearMode。 仅当 InfiniteSource 参数设置为 ENABLED 时,Overflow 参数才处于活动状态 |
|
| OverflowClearMode | |
|---|---|
| 键入 | 动态写入参数 |
| 默认 | AutoClear |
| 范围 | {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset} |
|
OverflowClearMode 决定了当算子从溢出状态恢复后如何清除 Overflow 参数。只有在算子不再处于溢出状态时,您才能通过此参数重置溢出状态。 清除模式:
仅当 InfiniteSource 参数设置为 ENABLED 时,OverflowClearMode 参数才处于活动状态 |
|

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



上一页

