参数化

在前面的章节中,我们已经讲解了 VisualApplets 项目的数据流模型、布局以及链接规则。本章将概述您的设计中模块和链接的参数化配置。

应用行为和带宽不仅取决于您在设计中使用的算子,还在很大程度上取决于模块和链接的参数化配置。模块 Property 定义了每个模块的行为,而链接 Property 则描述了模块之间的协议。模块和链接 Property 直接相关,并会相互影响彼此的可用性或范围。

有关参数化的实用指导,请参阅 Parameterization 教程主题。

Module Properties

您可以在 Module Properties 对话框或 Parameter Info 视图中更改模块 Property。Parameter Info 视图显示了活动设计中所有算子的所有参数,从而便于您全面了解所有已配置的参数。Module Properties 对话框则提供了关于这些参数的更多详细信息。您可以在这两个视图中编辑参数,但添加元数据只能在 Module Properties 对话框中进行。

Parameter Info 视图

Parameter Info 位于 VisualApplets 主窗口右上角的 Information Panel 中。

Parameter Info 视图

图 70. Parameter Info 视图


如果 Parameter Info 在启动时未打开,您可以通过菜单栏选择 Window → Dock Windows → Parameter Info 将其打开。

Parameter Info 视图显示了活动设计的所有参数及其对应的算子。您还可以在 Parameter Info 视图中直接编辑这些参数。

参数信息

图 71. Parameter Info


Parameter Info 视图提供了一个搜索功能,允许您搜索参数、参数值或算子名称。您可以使用 Runtime Parameter Only 过滤器仅显示动态参数,即那些在运行时可以编辑的参数。

Module Properties 对话框

  1. 要访问 Module Properties 对话框,请双击某个模块,或者右键单击该模块并选择 Properties。

Module Properties 对话框列出了模块所需的所有设置。请注意,每个模块可用的参数集各不相同(取决于为创建该模块而实例化的算子)。

下图显示了 Module Properties 对话框中 ImageBuffer 算子的参数:

Module Properties 对话框

图 72. Module Properties 对话框


Module Properties 窗口列出了模块所有可用的参数。在此上下文中,每个参数都代表一个模块 Property。这些参数通过以下列中的条目进行显示:

  • Parameter Name:

    参数的名称。

    当向模块添加参数时(见下文),您可以在此处为新参数输入名称。

  • Parameter Value

    参数的实际值。

    您可以编辑此字段以更改值。

  • Parameter Unit

    参数的单位。可以是像素、秒、行等。

  • 参数类型

    在此处,您可以将参数设置为静态或动态。静态参数在 applet 的构建过程完成后无法更改,而动态参数则可以在 applet 已在 frame grabber 硬件上投入使用时进行更改。通常,静态参数比动态参数需要更少的 FPGA 资源。

  • 参数标志

    参数标志用于指示某个参数是

    • 只读(Read),还是具备

    • 读写权限(Write)。

  • 值类型

    参数值的类型。参数值共有四种不同类型:

    • 字符串

      任何字符串,例如文件名。

    • 值的

      不同类型(无符号、有符号、双精度)的值以及范围。

    • 枚举

      枚举值列表,例如 Disabled 或 Enabled。

    • 字段参数

      字段参数由数组、列表或值矩阵组成。它主要用于核系数、查找表和其他列表。值范围和列表大小可以是动态的。请注意,显示的 Bit Width 不等于实际参数范围。此外,参数始终为无符号数,即使它在列中被声明为有符号值。

[注意] 模块之间的差异

特定模块可用参数的数量和种类因模块而异(取决于底层算子)。尽管如此,每个模块都将至少拥有一个名为 Name 的参数。

参数编辑

[警告] 无撤销选项

无法取消更改。所有更改都会立即应用。

若要编辑参数:

  1. 点击参数值并输入新值。

    某些值类型具有特殊的编辑选项:

    String: 可以通过直接输入新字符串来编辑字符串参数。某些字符串参数是文件名参数。在这种情况下,将打开文件选择对话框。

    Values: 若要编辑值,请使用参数值旁边的微调框来增加或减少该值。参数的步长定义了最小的增加/减少量。

    Fields: 对于字段参数,将打开一个用于编辑的新窗口,其中显示了该参数的所有字段元素。下图显示了 FIRoperatorNxM 算子的字段:

    字段参数编辑窗口

    图 73. 字段参数编辑窗口


    可以通过三种不同的方式编辑模块的字段参数值:

    1. 可以单独编辑每个字段元素。

    2. 或者,您可以使用文件中的列表来 Fill 字段参数值。

      • 您可以通过单击 File 按钮来导入文件。

      • 您也可以通过单击 Export 按钮将当前的字段参数设置导出到文件。

      [注意] 导入文件的文件格式
      • 导入文件必须包含 ASCII 值列表。

      • 每个值必须单独占一行。

      • 各行之间必须使用回车 (CR) 和换行 (LF) 分隔。

      • 文件必须是纯文本格式 ([NameOfFile].txt)。

      如果文件中的值多于字段中的值,则使用文件中的前几个值(数量为 Fill 该字段所需数量)。文件中的后续值将无效。

      如果文件中的值少于字段中的值,则文件中的所有值将恰好使用一次。字段的最后几个位置(文件中没有对应值的位置)将保持不变。

    3. 编辑字段元素的第三种方法是使用 Parameter function 对话框。

      • 单击 Function 以打开功能对话框(参见下图)。

        使用此对话框,可以使用线性函数来编辑元素。线性函数由以下元素组成:a = 斜率,b = 偏移量,以及 x = 字段元素的索引。在对话框中,可以编辑 a 和 b。

      • 输入 a 和 b 的值。

        字段的第一个元素的索引为 0。对于矩阵元素,这些元素按行连续编号。

      用于编辑字段参数的功能对话框

      图 74. 用于编辑字段参数的功能对话框


[重要] 已禁用的参数

某些参数处于禁用状态,无法编辑。参数是禁用还是启用取决于其他参数的设置、输入格式或输出格式。有关更多信息,请查阅相应的算子参考。以下屏幕截图显示了两个禁用的参数。在这种情况下,y 参数被禁用,因为输入链接具有图像协议 VALT_LINE1D(这意味着图像是一维的(仅一像素宽的行),因此没有 y 坐标)。

已禁用的参数

图 75. 禁用的参数


编辑参数后,必须应用该参数。

  1. 在 Module properties 窗口中单击 Apply 以应用设置。

    如果新的参数值不在允许的参数值范围内,则会被丢弃。

[注意] 在关闭窗口之前单击 Apply

建议在关闭参数之前单击 Apply。这样,如果您输入的值未被接受,您将看到警告。

  1. 单击 Close 关闭 Module properties 窗口。

Translator 和 Reference 算子的自动补全和语法高亮

Parameters 库中的大多数算子都为特定参数提供自动补全和语法高亮功能。以下算子的哪些参数支持自动补全:

算子 参数 Activation
EnumParamTranslator

WriteAction、 ReadAction

键入 “${”

显示层级

TAB 键

FloatParamTranslator

WriteAction、 ReadAction

键入 “${”

显示层级

TAB 键

IntParamTranslator

WriteAction、 ReadAction

键入 “${”

显示层级

TAB 键

LinkParamTranslator

WriteAction

键入 “${”

EnumParamReference

Reference

TAB 键

显示层级

TAB 键

FloatFieldParamReference

Reference

TAB 键

显示层级

TAB 键

FloatParamReference

Reference

TAB 键

显示层级

TAB 键

IntFieldParamReference

Reference

TAB 键

显示层级

TAB 键

IntParamReference

Reference

TAB 键

显示层级

TAB 键

ResourceReference

Reference

TAB 键

显示层级

TAB 键

StringParamReference

Reference

TAB 键

显示层级

TAB 键

IntParamSelector

Reference

TAB 键

显示层级

TAB 键

FloatParamSelector

Reference

TAB 键

显示层级

TAB 键

EnumVariable

显示层级

TAB 键

FloatVariable

显示层级

TAB 键

IntVariable

显示层级

TAB 键

表 5. 自动补全和语法高亮的可用性


若要使用 Reference 算子的自动补全功能,请点击 Reference 或 DisplaHierarchy 参数的 Parameter Value 字段,然后按下 TAB 键。随后 VisualApplets 会在下拉列表中向您提供有效值的选项。

Reference 参数的自动补全

图 76. Reference 参数的自动补全


如果您点击 旁边的三个点 Parameter Value 字段,则会打开 Enter data for <operator>/<parameter> 对话框。在此对话框中,您可以看到带有语法高亮的数据,并可继续使用自动补全功能:

Autocompletion in "Enter data for <operator>/<parameter> Dialog

Figure 77. Autocompletion in "Enter data for <operator>/<parameter> Dialog


Syntax Highlighting in "Enter data for <operator>/<parameter> Dialog

Figure 78. Syntax Highlighting in "Enter data for <operator>/<parameter> Dialog


语法高亮在 Module Properties 中同样有效:

Module Properties 对话框中的语法高亮

图 79. Module Properties 对话框中的语法高亮


To use the autocompletion functionality in the WriteAction and ReadAction parameters of translate operators, type “${” into the Parameter Value field:

Translator 算子的自动补全

图 80. Translator 算子的自动补全


语法高亮也适用于 translator 算子的 WriteAction and ReadAction 参数。

若要使用 translate 算子 DisplayHierarchy 参数的自动补全,请点击 DisplaHierarchy 参数的 Parameter Value 字段,然后按下 TAB 键。

非法参数值状态

当链接属性或其他属性发生更改时,参数允许的取值范围可能会发生变化。如果发生这种情况,旧的参数值可能会处于非法状态。在这种情况下,参数会被标记为红色,以指示当前设置将无法通过设计规则检查。您必须纠正参数值,直到其处于有效范围内。

处于非法状态的参数

图 81. 处于非法状态的参数


上图显示了一个处于非法状态的参数示例。在这种情况下,参数值不在允许的范围内,因为 XLength + XOffset 大于输入连接参数化后的最大图像宽度。

元数据

可以为每个模块添加 Metadata 参数。Metadata 参数是字符串参数。要添加 Metadata 参数,请点击模块属性窗口中的 Add Metadata 按钮。此时,参数列表中将添加一个新参数。点击名称和值即可对其进行编辑。Metadata 参数是读/写参数。要删除 Metadata 参数,只需选中该参数并点击 Delete Metadata 即可。

Metadata 参数通常用于版本控制和添加注释。

Metadata Parameter

图 82. Metadata Parameter


Link Properties

模块之间的每个连接都由其连接 Property 定义。您可以通过双击连接或右键单击并选择 Properties 来访问连接 Property。

每个连接都具有以下连接 Property:

  • Bit Width

    定义单个像素的连接 Bit Width。因此,如果使用彩色连接,Bit Width 将代表所有颜色通道。对于 image protocol VALT_SIGNAL,Bit Width 始终为 1 位。有关 Bit Width 和 Arithmetic 处理的实用指导,请参阅 Bit Arithmetic 教程主题。

  • Arithmetic

    连接的 Arithmetic。可以是有符号的或无符号的。如果设置为有符号,则使用补码有符号 Arithmetic。符号位包含在 Property bit width 指定的位数中。对于 image protocol VALT_SIGNAL,Arithmetic 始终设置为无符号。

  • Parallelism

    指定在一个设计时钟周期内,在两个模块之间并行传输的像素数量。对于 image protocol VALT_SIGNAL,Parallelism 始终设置为 1。有关 Parallelism 的更多信息,请参见 'Bandwidth of an Applet'。

  • Kernel Columns

    定义内核列数。对于 image protocol VALT_SIGNAL,内核列数始终设置为 1。

  • Kernel Rows

    定义内核行数。对于 image protocol VALT_SIGNAL,内核行数始终设置为 1。有关在设计中使用内核的实用指导,请参阅 Working with Kernels 教程主题。

  • Image Protocol

    Image protocol定义了连接用于传输数据的协议。可用协议如下:

    • VALT_IMAGE2D:二维图像,例如面阵相机。

    • VALT_LINE1D:一维图像,即图像高度不受限制的图像,例如线扫描相机。

    • VALT_PIXEL0D:不包含图像尺寸信息的简单像素流。

    • VALT_SIGNAL:在每个时钟周期都有效的单位信号。用于触发系统等信号处理。

    有关 Image Protocol 的更多信息,请参见 'Image Protocols, Image Dimensions and Data Structure'。

  • Color Format

    Color Format 可以是 VAF_GRAY、VAF_COLOR 或 VAF_NONE。对于 image protocol VALT_SIGNAL,Color Format 始终设置为 FL_GRAY。

  • Color Flavor

    定义 Color Format 的风格。对于 image protocol VALT_SIGNAL,Color Flavor 始终设置为 FL_GRAY。

  • Max. Image Width

    定义连接的最大图像宽度。在此连接上传输的图像不得超过此值,但可以小于此值。Max. Image Width 对 Image Protocol 为 VALT_PIXEL0D 和 VALT_SIGNAL 的连接没有影响。对于这些 Image Protocol,Max. Image Width 将被忽略。更多信息可在 'Data Flow ' 以及 'Image Protocols, Image Dimensions and Data Structure' 中找到。

  • Max. Image Height

    定义连接的最大图像高度。在此连接上传输的图像不得超过此值,但可以小于此值。Max. Image Height 对 Image Protocol 为 VALT_LINE1D、VALT_PIXEL0D 和 VALT_SIGNAL 的连接没有影响。对于这些 Image Protocol,Max. Image Height 将被忽略。更多信息可在 'Data Flow ' 以及 'Image Protocols, Image Dimensions and Data Structure' 中找到。

[提示] GUI 上的可视化

为了可视化相应的 link properties,VisualApplets 在程序窗口的工具栏中提供了两个 GUI 按钮:

Display Link Info 显示图表中每个 link 的 Bit Width 和 Parallelism:

Display Link Throughput 显示图表中每个 link 的最大像素吞吐量(以兆像素每秒为单位):

Properties Ranges and Disabled Properties

每个模块都在其输出端自行定义链路 Property 的范围。某些 Property 无法修改,某些 Property 只能在指定的范围内修改,而其他 Property 则可以任意修改。有关允许的输出链路格式的详细说明,请参阅 Operator Reference 中的相应算子参考。use image processing/vision industry-specific terminology。

参数编辑

要编辑参数,只需点击链路 Property 窗口的“Value”列中的参数即可。

链路 Property 对话框由三列组成:

  • 值

    这是您的编辑列。通过点击此列中的值来编辑您的链路 Property 值。如果编辑的值不在允许的参数范围或步长之内,则该编辑的值将被丢弃或无法插入。通过离开字段焦点或按 Enter 键来确认新值。

  • Source Port

    在 Value 列中输入新值并确认后,源算子会检查是否接受该新值。如果不接受新值,则该参数和链路将变为红色,以显示链路 Property 冲突。因此,如果 source port 列中的链路 Property 显示为红色,则说明源算子不允许此设置。 此列中的值无法修改!

  • 目标端口

    点击 Apply 或 Close 或 Window Close (X) 或按 Esc 将应用链路的新设置。如果目标算子输入端口不接受新设置,则链路以及 Destination Port 列中的参数将变为红色以指示冲突。 此列中的值无法修改!

更改链路 Property 可能会导致另一个链路 Property 或模块参数值的更改。无法取消更改。每项更改都将立即生效。

让我们来看几个例子。下图显示了源端口处的冲突。由于 bit width 的原因,源算子(在本例中为 CastParallel 算子)在其输出端不接受为三的 Parallelism。将输出 Parallelism 更改为四、二或一后,冲突即告解决。

无效的 Source Port 链路 Property

图 83. 无效的 Source Port 链路 Property


截图 图 84,“无效的 Destination Port 链路 Property” 显示了目标端口处的冲突。目标算子(在本例中为 DmaToPC 算子)不接受具有此 Parallelism 和 bit width 的 RGB 图像。将 Parallelism 减少到四或五后,冲突即告解决。

无效的 Destination Port 链路 Property

图 84. 无效的 Destination Port 链路 Property


Propagation and Dependencies of Operator Parameters and Link Properties

链路 Property 由算子定义。某些链路 Property 可以直接在算子输出链路上更改,而其他链路 Property 是固定的或由算子参数定义。此外,大多数算子除了定义输入链路 Property 之外,还定义其链路 Property。这可能会导致贯穿多个模块的链路 Property 修改链。因此,如果更改了某个链路 Property,后续模块的参数和链路 Property 也可能会发生变化。

此传播链可能会产生三种结果:

  • 修改已被所有后续模块和链路接受。VisualApplets 将以绿色显示所有已更改的链路,以通知用户修改后的链路 Property。

  • 某些模块的链路不接受该链路修改。在这种情况下,请检查链路是否存在错误。请阅读源算子或目标算子的文档以了解允许的链路格式。

  • 修改导致与模块参数发生冲突。在这种情况下,模块和相应的模块参数都将变为红色。请查阅算子参考中的链路和参数依赖关系以解决冲突。