让我们再次回顾一下入门指南的设计。 如果您迄今尚未完成入门指南的设计,建议您返回并首先阅读入门指南 (Getting Started)。 到目前为止,我们唯一进行调整的是参数名称。 现在,我们希望调整 applet 以处理来自具有以下 Property 的相机的图像
- 图片边长尺寸为 512 x 512
- 12 位/像素灰度
- Camera Link 双抽头底座配置模式下的接口
我们的设计已经配备了 CameraGrayAreaBase 算子。该算子来自 mE4VD4-CL 算子库,并且仅适用于mE4 Camera Link 帧采集卡,即 mE4VD4-CL 库,是一个包含特定于硬件的操作符的库。CameraGrayAreaBase 操作符支持使用以下方式的灰度面阵扫描相机: Camera Link 在基本配置模式下,双击设计中的摄像头模块以打开其属性。其中一个参数名为“格式”。在这里,您可以设置具体的格式。 Camera Link 可以选择格式。我们选择 DualTap12Bit,应用更改并关闭窗口。现在,我们的设计能够采集 12 位相机图像。
请注意,“格式”参数是动态的。这意味着,在硬件综合设计之后,可以更改该值,从而灵活地使用多种相机格式。但是,如果我们双击相机上的链接,会发现链接的位宽仍然是 8 位/像素。此外,最大图像尺寸也不够大。您可能会问,如果链接只有 8 位,为什么可以使用 12 位相机?答案是,只传输相机图像的最高 8 位,也就是说,只使用可用的链接位。操作器会根据相机操作器中的设置自动从图像中选择正确的位。有关更多信息,请参阅相机操作器的文档( “CameraGrayAreaBase” )。我们将把位宽更改为 12 位,以处理完整的相机位深度。
更改数值后,点击“应用”。可以看到,摄像头、缓冲区和 DMA 之间的链接颜色已从黑色变为绿色。这表示更改已被接受并验证。此外,链接属性“位宽”已通过图像缓冲区传播到缓冲区和 DMA 模块之间的链接。因此,用户无需更改每个链接的位宽。链接属性会在模块间传播,直到模块自身更改链接位宽或需要用户输入为止。如果您打开缓冲区和 DMA 之间链接的链接属性,会发现此处无法更改位宽。
这是因为前置运算符ImageBuffer无法更改链路位宽。因此,链路属性只能在连接的运算符允许更改的情况下才能更改,也就是说,只有当连接的运算符本身能够影响位宽时,链路属性才能被更改。
摄像头所需的图像尺寸为 512 x 512 像素。在链接属性中,我们可以看到名为“最大图像宽度”和“最大图像高度”的属性。这些属性表示链接上图像的最大尺寸。这是最大值。允许使用任何小于此尺寸的图像。但是,超过此限制的图像尺寸将违反链接规则。 VisualApplets 遵循设计规则,在硬件中使用该小程序时可能会出错。
图像尺寸的设置应始终选择所需的最小值,因为较小的图像尺寸可以节省 FPGA 逻辑和内存资源。回到我们的示例:打开相机和缓冲区之间链路的链路属性,并将最大图像宽度和高度设置为 512 x 512。完成后,单击“应用”。
您会再次注意到,此更改直接影响了当前链接以及缓冲区模块之后链接的链接属性。此外,您可以看到缓冲区模块现在被标记为红色。这是因为我们现在创建了一个所谓的“非法条件”。这意味着一个或多个链接属性与模块中的参数设置不兼容。在本例中,ImageBuffer 的参数设置无法与链接的设置一起使用。如果您关闭所有属性窗口并执行设计规则检查(Ctrl + F7),您将看到如下图所示的错误消息。
您可以点击其中一条错误信息来高亮显示出错的模块。如果您有包含多个层级的大型设计,并且无法立即找到出错的运算符,这将非常有用。现在,打开缓冲区模块的属性对话框。您可以再次看到,导致错误的四个参数已标记为红色。
此外,错误的原因现在也显而易见:运算符中设置的感兴趣区域大于链接上允许的最大图像尺寸。这将违反运算符的参数范围,并且VisualApplets 设计规则导致此错误。您可以通过将 XLength 和 YLength 参数的值更改为 512 来立即使您的设计符合要求。
我们的设计已接近尾声。我们现在可以开始构建,并在硬件中使用该设计。 不过,还有一个步骤我们需要考虑。到目前为止,我们将 12 bit 像素值直接连接到了 DMA 模块。 这会导致每个像素都向 PC 传输 12 bit。 由于像素分布在多个字节中,软件程序很难处理这种格式。 因此,每个像素应正好占用一个或多个字节。在我们的示例中,我们将像素扩展为 16 bit。为此, 我们需要在缓冲区和 DMA 模块之间 放置另一个算子。有几种算子可用于解决我们的任务。 我们将使用基础算子库中的 ConvertPixelFormat 算子。将该算子放置在缓冲区和 DMA 模块之间。 如果直接将算子放置在连线上,算子将被自动插入。接下来,您应该将该模块重命名 为 "To16Bit",并打开算子后面的连线 Property。正如您所看到的,为模块输出 选择的默认连线 Bit Width 为每像素 8 bit。因此,该模块已覆盖了输入连线 Bit Width。任何对输入连线 Bit Width 的更改都将被忽略。 该模块将始终输出参数化的值。默认的每像素 8 bit 会将 Bit Width 从 12 降至 8,但相反, 我们希望增加 Bit Width。因此,您只需将连线 Property 值更改为 16 bit 并确认更改即可。
现在,ConvertPixelFormat 算子将通过在低位插入四个常量零位,把 12 bit 的输入像素扩展为 16 bit。 换句话说,我们执行了一次左移四位。 作为替代方案,也可以使用 ShiftLeft 算子来代替 ConvertPixelFormat 算子。 通过用鼠标选中设计中的 ConvertPixelFormat 算子,然后从弹出的 菜单或主菜单栏中按删除键,将其从设计中删除; 或者只需按 Del 。 从 arith 算子库中插入 ShiftLeft 算子。将其插入设计中并检查连线 Property。 正如您所看到的,连线 Bit Width 仍然是 12 bit,且无法在连线 Property 中更改。 对于该算子, 连线 Bit Width 是通过参数来更改的。即 Shift 参数。将参数值更改为 4,应用更改 并返回连线 Property。 正如您所看到的,连线 Bit Width 现在已更改为 16 bit。 总结一下:某些连线 Property 可以在连线上更改,而另一步则是使用算子 Property 进行更改。 在各自的示例中,算子需要这两种方法,因为一种方法用于指定独立于输入 Bit Width 的输出 Bit Width(即自动确定移位值), 而移位算子用于指定移位值。 在此,输出 Bit Width 是由参数化值和输入 Bit Width 自动确定的。
在本示例中,我们在较低的位位置插入了四位。如果您更希望在较高的位位置添加四位 以获得 16 bit,您可以使用 CastBitWidth 算子来代替。
有关位操作算子的解释和示例,请参见算子参考。 请参见 'ConvertPixelFormat'、'ShiftLeft'、'ShiftRight' 和 'CastBitWidth'。
有关参数化和位处理的实用指导,请参阅 Parameterization 教程主题 以及 Bit Arithmetic 教程主题。
我们现在已经完成了基础采集设计的扩展。 接下来,您可以在硬件中构建并使用您的设计。 您已经了解了如何设置参数以及如何解决冲突。 在下一节中,将列出适用于各种相机的基本采集 Acquisition Applets。









上一页

