定义 IP Core 属性

若要为您希望在 FPGA 上使用的各个 VA IP Core 定义接口,请使用 GUI 工具 eVA Designer。eVA Designer 是 VisualApplets Embedder 软件包的一部分,在安装 VisualApplets 时会一同安装。获取 VisualApplets Embedder 许可证后即可使用 eVA Designer。您在此处输入的数据将被写入硬件描述文件 (XML)。随后,eVA Designer 将根据这些数据在 VHDL 中构建 IP Core 黑盒。

eVA Designer 的图形用户界面

eVA Designer 的图形用户界面简单且直观:

eVA Designer 的 GUI 会对您的任何输入做出反应,从而为您提供支持。

图形表示

所定义的 IP Core 的图形表示(位于程序窗口的左侧面板中)会显示您在特定时刻定义的所有接口。图形表示会对任何输入(添加或删除接口)立即做出反应。

  • 所有使用 FIFO 的接口均以绿色显示。

  • 同类的多个接口会相应地显示:

    • 最多三个同类接口会显示为一叠,其数量与实际接口数量相符。示例:2 个 memory 接口: 

    • 超过三个同类接口会显示为一叠(三个),并附带一个指示实际接口数量的数字。示例:4 个 GPI 和 4 个 GPO 接口:

输出字段

输出字段会立即告知您 IP core 定义是否与您在 eVA Designer 中做出的其他条目不一致。例如,如果您定义的接口与您为在 IP core 内连接这些接口而定义的 VisualApplets operator 不匹配。

输出字段会对任何输入(例如添加或删除接口或 operator)立即做出反应。

打开 eVA Designer 和硬件描述文件

若要创建新的 IP core 定义,即定义要集成到 FPGA 设计中的可编程 IP core 的接口:

  1. 启动 VisualApplets。

  2. 从 Tools 菜单中选择 eVA Designer。

    eVA Designer 的启动窗口随即打开:

  3. 从 File 菜单中选择 Open。

  4. 从文件系统中选择一个 XML 模板(或您之前处理过的硬件描述文件)以加载到 eVA Designer 中。

    XML 模板现已加载到 eVA Designer 中:

[注意] 继续处理硬件描述文件

当然,您也可以重新打开您之前处理过的各个硬件描述文件,或者完全 Fill 的示例文件之一。在这种情况下,IP core 的图形表示会显示已指定的接口:

为 Zynq 平台指定的示例 IP Core

图 193. 针对 Zynq 平台指定的 IP 核示例


输入平台详细信息

  1. 转到 Device 选项卡。

  2. 输入有关包含您要配备图像处理应用的 FPGA 的硬件的第一部分信息:

    • Name:输入您的目标硬件产品的名称。

    • Display Name: 定义要在 VisualApplets GUI 中显示的硬件别名。允许使用空格字符。

    • Vendor (display field): 您的公司名称(即产品的供应商)。该字符串值由 Basler 预设,无法更改。供应商名称将显示在 VisualApplets 图形用户界面中。(示例硬件描述文件在此处显示为 DEMO。)

    • ID: 输入可通过运行时系统读取的硬件平台的四位十六进制识别号。您可以自由在此处输入任何值。该值旨在供 VisualApplets 用户进行硬件识别。示例:0xabcd

    • Version: 输入您的硬件产品的版本。您可以自由在此处输入任何值。该值旨在供 VisualApplets 用户进行硬件版本识别。

    • Performance Class: 此处显示您所选 XML 模板的性能等级。有关可用性能等级的详细信息,请参阅性能等级一节。

    • Icon File (optionally): 您可以在此处输入小型图形文件的路径,该文件稍后将与您的硬件平台名称一起显示在 VisualApplets 中。

输入 FPGA 详细信息

  1. 转到 FPGA 选项卡。

  2. 在 Type Information for FPGA Device 下输入有关要在其中集成 IP 核的 FPGA 的信息:

    Vendor: FPGA 供应商名称(例如 XILINX)。

    Architecture: 您的 FPGA 的 FPGA 系列和 FPGA 型号,例如 ZYNQ7000。

    Device: FPGA 的器件名称(FPGA 类型,不含速度等级和封装详细信息),例如 xc7z020。

    Speedgrade: FPGA 的速度等级,例如 -1

    Package: FPGA 的封装标识,例如 clg484

  3. 在 VisualApplets Design Clock Settings 下,指定 iDesignClk 的属性:

    Min. design clock freq.: Visual Applets Core 设计的最低频率。

    Max. design clock freq.: Visual Applets Core 设计的最高频率。

    Default design clock freq.: Visual Applets Core 设计的默认频率。

    Design clock freq. step: 可用于调整 Visual Applets Core 频率的步长。

    如果您在此处指定频率范围(而不是在所有三个上方字段中输入相同的值),则允许 VisualApplets 用户将特定设计的设计时钟设置为您取值范围内的值。有关时钟系统的常规信息,请参阅 'Clock Interface'。

    [注意] 外围 FPGA 设计需要支持定义的频率

    确保您的外围 FPGA 设计为 IP 核设计提供您在此处定义的频率。如果您允许 VisualApplets 用户调整设计时钟(通过在此处指定频率范围而不是在所有三个字段中输入相同的值),则需要确保

    • 您周围的 FPGA 设计可以灵活调整其输入以适应 iDesignClk,并且

    • 您的 FPGA 设计能够提供指定值范围内的所有频率。

  4. 在 FPGA Resources Available for VisualApplets 下,输入您允许图像处理应用(在 VA IP Core 中)最多使用的 FPGA 资源:

    Max. number of LUTs: Visual Applets 设计可使用的最大 FPGA LUT 数量。

    Max. number of Registers: Visual Applets 设计可使用的最大 FPGA 寄存器数量。

    Max. number of Block RAMs: Visual Applets 设计可使用的最大 FPGA 块 RAM 数量。

    Max. number of embedded ALUs: Visual Applets 设计可使用的最大 FPGA 嵌入式 ALU 数量。

输入所需的 ImgIn 接口的描述

eVA IP Core 的 ImgIn 接口

图像流端口 ImgIn 是通用的图像通信接口,用于将图像数据从周围的 FPGA 逻辑写入 VA IP Core。ImgIn 端口由一个简单的 FIFO 接口加上附加参数端口组成。该接口端口经过了全面的参数化。除了现有参数外,您还可以定义附加寄存器,用于将参数转发到连接的 FPGA 逻辑。

图像数据通过类型为 ImgIn 的接口端口进入 VA IP Core。可以定义多种类别的 ImgIn 端口,并且每种类别都可以有多个实例。

图像输入接口的端口布局

图 194. 图像输入接口的端口布局


下表描述了接口信号,其中 PORTID 是相应图像输入端口类的名称,X 是用于区分同类多个端口的端口号:

端口

方向

Width

描述

iPORTIDXClk

在

1

用于写入 FIFO 的时钟。当端口配置为同步通信时,此输入将被忽略。ImgIn 接口配置在 “定义 ImgIn 接口类”中描述。

ivPORTIDXData

在

PORTIDWidth

写入数据(解释为像素数据,或解释为行结束或帧结束标志)

iPORTIDXValid

在

1

执行写访问

iPORTIDXEndOfLine

在

1

将当前的写访问信号发送为行结束通知。随后,写入的数据将不再被解释为像素数据。

iPORTIDXEndOfFrame

在

1

指示帧结束。如果激活此标志,则数据不包含像素值。帧结束信号必须与行结束信号一致。

oPORTIDXFIFOFull

输出

1

输入 FIFO 已满,不接受更多数据。

ovPORTIDXFIFOCnt

输出

Ceil Log2(PORTIDFIFODepth)。Ceil Log2 是表示该值所需的 Parallelism 数。

输入 FIFO 中的字数。该信号可用于生成诸如 Almost Full 的 FIFO 标志。

oPORTIDXReset

输出

1

进程的复位信号

oPORTIDXEnable

输出

1

进程的使能信号

ovPORTIDX_PARNAME_D

输出

S

参数 PARNAME 的数据。S 取决于所选的 Bit Width。系统会为定义的每个参数生成该信号。

oPORTIDX_PARNAME_Upd

输出

1

当从运行时软件更新参数 PARNAME 时,该信号置高“1”一个时钟周期。系统会为定义的每个参数生成该信号。

ovPORTIDX_FID_D

输出

Ceil Log2(N)。Ceil Log2 (N) 是表示值 (N-1) 所需的 Parallelism 数。

用于通知当前图像数据格式的预定义参数。N 是为此端口指定的图像格式数量。

下图显示了通过 ImgIn 接口进行图像通信的时序,这是一个传输包含两个三像素 32 位灰度像素值的行的帧的简单示例。在波形图中,名称部分 PORTIDX 已被替换为 imgin。

说明图像输入端口协议的波形图

图 195:说明图像输入端口协议的波形图


支持的 ImageIn 格式

可以通过单个 ImgIn 端口驱动各种不同的协议。VisualApplets 支持以下图像格式:

  • grayXxP:每个像素有 X 位且 Parallelism 为 P 的灰度图像

  • rgbYx P :彩色图像,每个颜色分量(红、绿、蓝)使用Y /3 位,并具有并行性P

  • hsi Y x P :彩色图像,每个颜色分量Y /3 位(HSI 颜色模型)和并行P

  • hsl Y x P :彩色图像,每个颜色分量Y /3 位(HSL 颜色模型)和并行P

  • hsv Y x P :彩色图像,每个颜色分量Y取 /3 位(HSV 颜色模型),并行P

  • yuv Y x P :每个颜色分量Y /3 位(YUV 颜色模型)和并行P 的彩色图像

  • ycrcb Y x P :彩色图像,每个颜色分量Y /3 位(YCrCb 颜色模型)和并行P

  • lab Y x P :彩色图像,每个颜色分量Y /3 位(LAB 颜色模型)和并行P

  • xyz Y x P :彩色图像,每个颜色分量Y /3 位(XYZ 颜色模型),并行P

您可以定义一个ImgIn接口类来支持这些格式的任意组合,前提是围绕 VA IP 核的平台设计支持图像通信通道的适当配置。

您可以指定像素分量是被解释为有符号还是无符号。

定义ImgIn接口类

您可以定义各种类型的ImgIn接口。这些接口类型在支持的图像协议数量和种类、支持的数据宽度、使用的时钟信号以及许多其他方面可能有所不同。每个ImgIn接口类型在 VA IP 核上可以多次出现。

eVA IP 核示例

图 196. eVA IP 核示例


上图中的示例 IP 核显示了两个ImgIn类和两个ImgOut类。这两个类都有多个实例可用:此 VA IP 核提供 7 个ImgIn类ImgIn_A的ImgIn端口、5 个ImgIn类ImgIn_B的ImgIn端口、2 个ImgOut类ImgOut_a的ImgOut端口和 5 个ImgOut类ImgOut_b的ImgOut端口。

[注意] 相关运营商VisualApplets

对于每个已定义的ImgIn类,一个或多个平台特定的VisualApplets ImgIn运算符可以稍后生成(详情请参阅“定义硬件特定运算符” )。这些运算符(在 IP 核集成之后)可以在内部实例化。 VisualApplets 然后实现该接口。

如果存在多个相同配置(类)的接口端口,则相应运算符的实例可以连接到由资源管理控制的任何一个端口。 VisualApplets 。

资源管理VisualApplets : 在VisualApplets对于每个ImgIn类,都会设置一个同名资源。在此资源对话框中VisualApplets可以定义分配方式。

设置ImgIn端口

定义允许图像流传输到 eVA IP 核的端口:

  1. 转到ImgIn选项卡。

  2. 点击加号 图标。

  3. 在字段 Base Name 中,输入您要定义的 ImgIn 接口类的名称。双击该字段进行输入。

  4. 在字段 Multiplicity 中,定义您的 VisualApplets IP Core 上需要此类的多少个 ImgIn 接口。双击该字段进行输入。

    已定义的 ImgIn 端口(在我们的示例中为类 ImgInGray 的 3 个接口)将立即在 IP Core 的图形表示中可见:

  5. 定义 ImgIn 接口类的其他属性:

    Flow control: 此参数决定是否允许 VisualApplets 应用程序临时暂停传入的图像数据流。如果设置为 YES,将实现用于暂停输入数据的内部流控制机制。如果设置为 NO,则不会实现流控制机制。如果连接到 ImgIn 端口的图像源可停止,则实现流控制机制是合理的。如果您使用的是不可停止的源,请选择 NO。

    • Yes:已实现用于暂停输入数据的流控制机制。

    • NO:未实现用于暂停输入数据的流控制机制。

    Sync. mode: 此参数指示图像接口时钟(ImgIn 端口上的 iPORTIDXClk)与设计时钟(IP Core 上的 iDesignClk)之间的关系。支持以下值:

    • SyncToDesignClk – 接口端口与 iDesignClk 同步。图像接口端口的外部时钟输入将被忽略。

    • SyncToDesignClk2x – 接口端口与 iDesignClk2x 同步。ImgIn 端口的外部时钟输入将被忽略。

    [注意] 可用双倍像素深度

    如果您将 iDesignClk2x 用于 ImgIn 端口,则可以定义一个图像协议,其位深度是您为端口 iv..Data 定义的位深度的两倍(即 bit width 与 Parallelism 的乘积可以是双倍大小)。在这种情况下,系统会自动执行因数为 2 的并行扩展。

    • Async – 异步接口:接口端口与 ImgIn 接口的外部时钟输入同步。

    如果选择 Async,您需要

    • 在 ImgIn 接口的 iImgInClk 端口提供时钟信号,并且

    • 在综合约束(约束文件)中定义时钟域交叉约束。

    [注意] 可用双倍像素深度

    如果您在 iImgInClk 端口提供的时钟信号频率远高于 iDesignClk,则可以定义一个图像协议,其位深度是您为端口 iv..Data 定义的位深度的两倍(即 bit width 与 Parallelism 的乘积可以是双倍大小)。在这种情况下,系统会自动执行因数为 2 的并行扩展。

    [注意] 使用 iDesignClk 或 iDesignClk2x

    VisualApplets 建议尽可能使用 iDesignClk 或 iDesignClk2x 进行同步。

    Fifo depth: 在此处定义输入数据的缓冲 FIFO 深度,该深度至少需要由附加的 VisualApplets 接口算子实现。该值必须是 15 到 1023 之间介于 2 的幂减 1。

    Port width: 在此处定义图像数据端口的宽度。

为 ImgIn 接口类定义图像协议

您需要定义要由此 ImgIn 接口类支持的图像协议。逐个定义协议,直到指定完所有需要的协议。

[注意] 相关运营商VisualApplets

将 VisualApplets IP Core 集成到您的 FPGA 设计中后,图像处理应用程序的开发人员会在 VisualApplets 中实例化一个 ImgIn 算子,并定义在给定的应用程序中由此算子实例实现 ImgIn 接口(以及算子本身)支持的哪些协议。

  1. 单击 Format 列中的箭头,从格式列表中选择所需的格式:

    有关支持的图像格式的更多详细描述,请参见 'Supported ImageIn Formats'。

  2. 双击 Pix.Width 列中的字段。

    输入所需的像素数据 Bit Width(值范围:[1..64])。

    像素数据宽度限制为 64 bit。所有非灰度彩色格式的像素数据宽度必须是 3 的倍数,且限制为 63 bit。

  3. 双击 Parall 列中的字段。输入所需的 Parallelism。

    The parallelism P defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from the following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (Port width, see above) must follow certain rules:

    • 所有 P 个像素的数据必须适合长度为 N 的单个字。数据采用 LSB 对齐方式存储,这意味着对于像素宽度 Z(灰度时 Z=X,彩色时 Z=Y),数据的分布如下:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。

    • 对于 RGB 图像,三个颜色分量按 LSB 对齐打包到子字 [0..Y-1] 中,顺序如下:红色使用位 [0..Y/3-1 ],绿色使用位 [Y/3..2*Y/3-1],蓝色使用位 [2*Y/3..3*Y/3-1]。

    • 对于 HSI 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,I 扮演蓝色的角色。

    • 对于 HSL 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,L 扮演蓝色的角色。

    • 对于 HSV 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,V 扮演蓝色的角色。

    • 对于 YUV 彩色图像,适用与 RGB 相同的规则,其中 Y 扮演红色的角色,U 扮演绿色的角色,V 扮演蓝色的角色。

    • 对于 YCrCb 彩色图像,适用与 RGB 相同的规则,其中 Y 扮演红色的角色,Cr 扮演绿色的角色,Cb 扮演蓝色的角色。

    • 对于 LAB 彩色图像,适用与 RGB 相同的规则,其中 L 扮演红色的角色,A 扮演绿色的角色,B 扮演蓝色的角色。

    • 对于 XYZ 彩色图像,适用与 RGB 相同的规则,其中 X 扮演红色的角色,Y 扮演绿色的角色,Z 扮演蓝色的角色。

  4. 单击 Dimension 列中的箭头以选择正在定义的协议的图像维度。

    该维度的含义如下:

    • Area(默认):图像由行结束和帧结束标记构成。在 VisualApplets 中,图像维度 Area 名为 2D。面阵相机可以作为 2D 图像源。

    • Line:图像由行结束标记构成。没有将输入行划分为帧的帧结束标记。在 VisualApplets 中,图像维度 Line 名为 1D。线扫描相机可以作为 1D 图像源。

    • Raw:没有将输入的图像数据划分为行和帧的行结束和帧结束标记。Image-In 流由宽度为 1 个像素的无休止像素流组成。在 VisualApplets 中,图像维度 Raw 名为 0D。

  5. 单击 Signedness 列中的箭头并选择您正在定义的协议的图像维度。

    • Unsigned(默认):像素数据被解释为无符号像素分量。

    • Signed:像素数据被解释为有符号像素分量。

  6. 重复步骤 1 - 5,直到定义完图像类所需支持的所有图像协议。

[注意] 图像协议定义的内部 ID

隐式假定内核大小为 1x1。每个列出的协议都有编号,列表从零开始。这些数字构成给定 ImgIn 类的协议 ID。ID 不会显示在 GUI 上。因此,您定义的每个 ImgIn 类都有一个您定义的图像协议的内部 ID 列表。

在接下来的步骤之一中,您可以定义一个或多个 VisualApplets ImgIn 算子,其实例可以连接到定义的 ImgIn 类(有关如何定义算子的详细信息,请参见 “定义硬件特定算子”)。对于其中的每个算子,您可以分配为您所关心的图像端口指定的全部或部分图像协议。

在 VisualApplets 中,ImgIn 算子将提供一个参数,VisualApplets 用户可以在其中从选项列表中选择图像格式。根据所选内容,相应的 ID 将分配给相关的 IP 核心 ImgIn 端口 (ov..FID_D)。这使附加的粘合逻辑能够根据所选格式调整其行为。

为 ImgIn 接口类定义附加参数

您可以为 ImgIn 接口类定义所需的附加参数。这些(动态)参数可以在运行时进行设置。可以通过运行时接口访问它们(请参阅 “运行时软件接口”)。

这些参数通过 VA IP 核心的寄存器从接口(请参阅 “寄存器从接口”)进行通信。

ovPORTIDX_PARNAME_D:参数 PARNAME 的数据。方向:输出。您可以定义 Bit Width。此信号 是为定义的每个参数生成的。

oPORTIDX_PARNAME_Upd:方向:输出。Bit Width:1。当从运行时软件更新参数 PARNAME 时,此信号 在一个时钟周期内设置为“1”。此信号是为定义的每个参数生成的。

要为 ImgIn 接口类定义附加参数:

  1. 转到程序窗口的 Parameter ports 区域。

  2. 点击加号 图标。

  3. 在 Name 字段中,输入您要定义的参数的名称。双击该字段进行写入。

  4. 在 Width 字段中,定义参数端口的宽度 {1,64}。 双击该字段进行写入。

    [注意] 从接口数据宽度与实际寄存器宽度之间的映射

    通过寄存器接口访问的寄存器可以具有 1 到 64 之间的任意宽度 。从接口数据宽度与 VisualApplets 参数的实际寄存器宽度之间的映射是自动完成的。当寄存器的宽度大于寄存器接口的宽度时,运行时软件 将自动分频访问。因此,单个参数会占用多个 寄存器地址。

  5. 重复步骤 2 – 4,直到您定义了图像类 要支持的所有参数。

    执行完 “设置 ImgIn 端口”、“为 ImgIn 接口 类定义图像协议” 和 “为 ImgIn 接口类定义附加参数” 中描述的所有步骤后,您已 经设置好了第一个 ImgIn 接口类。

  6. 如果您需要更多的 ImgIn 接口类,请重新开始 “设置 ImgOut 端口”,以定义下一个 ImgIn 接口类。

[注意] 根据需要定义任意数量的 ImgIn 接口类

您可以根据需要定义任意数量的接口类。要设置下一个 ImgIn 接口类,请再次从 章节 “设置 ImgIn 端口” 中描述的步骤开始。

输入所需的 ImgOut 接口的描述

VA IP Core 的 ImgOut 接口

图像传输端口 ImgOut 是通用图像通信接口,用于将图像数据从 VA IP Core 写入周围的 FPGA 逻辑中。端口 ImgOut 由一个简单的 FIFO 接口以及附加的参数端口组成。接口端口经过了全面的参数化配置。除了现有参数之外,您还可以定义额外的寄存器,以便将参数转发至所连接的 FPGA 逻辑。

图像数据通过类型为 ImgOut 的接口端口离开 VA IP Core。可以定义多类 ImgOut 端口,并且每一类都可以有多个实例。

图像输出接口的端口布局
图像输出接口的端口布局

图 197. 图像输出接口的端口布局


下表描述了接口信号,其中 PORTID 是相应图像输入端口类的名称,X 是用于区分同类多个端口的端口号:

端口

方向

Width

描述

iPORTIDXClk 在 1 用于从 FIFO 读取的时钟。当端口配置为同步通信时,此输入将被忽略。(ImgOut 接口配置在“定义 ImgOut 接口类”中进行描述。)
ivPORTIDXData 输出 PORTIDWidth 用于自定义读取的数据
iPORTIDXRead 在 1

执行读取访问

iPORTIDXEndOfLine 输出 1 指示行结束。如果激活此标志,则数据不包含像素值。
iPORTIDXEndOfFrame 输出 1 指示帧结束。如果激活此标志,则数据不包含像素值。帧结束信号必须与行结束信号重合。
oPORTIDXFIFOEmpty 输出 1 输出 FIFO 为空
ovPORTIDXFIFOCnt 输出

Ceil Log2(

PORTIDFIFODepth

)

输出 FIFO 中的字数。该信号可用于生成诸如“将近空 (Almost Empty)”的 FIFO 标志。
oPORTIDXReset 输出 1 进程的复位信号
oPORTIDXEnable 输出 1 进程的使能信号
ovPORTIDX_PARNAME_D 输出 S 参数 PARNAME 的数据。S 取决于所选的 Bit Width。该信号针对每个定义的参数生成。
oPORTIDX_PARNAME_Upd 输出 1 当从运行时软件更新参数 PARNAME 时,该信号在一个时钟周期内被置为“1”。该信号针对每个定义的参数生成。
ovPORTIDX_FID_D 输出 Ceil Log2(N)。Ceil Log2 (N) 是表示值 (N-1) 所需的位数。 用于通知当前图像数据格式的预定义参数。N 是为此端口指定的图像协议数量。

下图通过一个简单示例展示了通过 ImgOut 接口进行图像通信的时序:传输包含两行、每行三个 32 位灰度像素值的帧。在波形图中,名称部分 PORTIDX 已被替换为 imgout。

说明图像输出端口协议的波形图

图 198. 说明图像输出端口协议的波形图


支持的 ImageOut 格式

可以通过单个 ImgOut 端口驱动多种不同的协议。VisualApplets 支持以下图像格式:

  • grayXxP:每个像素有 X 位且 Parallelism 为 P 的灰度图像

  • rgbYx P :彩色图像,每个颜色分量(红、绿、蓝)使用Y /3 位,并具有并行性P

  • hsi Y x P :彩色图像,每个颜色分量Y /3 位(HSI 颜色模型)和并行P

  • hsl Y x P :彩色图像,每个颜色分量Y /3 位(HSL 颜色模型)和并行P

  • hsv Y x P :彩色图像,每个颜色分量Y取 /3 位(HSV 颜色模型),并行P

  • yuv Y x P :每个颜色分量Y /3 位(YUV 颜色模型)和并行P 的彩色图像

  • ycrcb Y x P :彩色图像,每个颜色分量Y /3 位(YCrCb 颜色模型)和并行P

  • lab Y x P :彩色图像,每个颜色分量Y /3 位(LAB 颜色模型)和并行P

  • xyz Y x P :彩色图像,每个颜色分量Y /3 位(XYZ 颜色模型),并行P

您可以定义一个 ImgOut 接口类以支持这些格式的任意组合,前提是环绕 VA IP Core 的平台设计支持图像通信通道的适当配置。

定义 ImgOut 接口类

您可以定义各种类别的 ImgOut 接口。这些接口类在支持的图像协议的数量和种类、支持的数据宽度、所使用的时钟信号以及许多其他方面可能会有所不同。每个 ImgOut 接口类在 VA IP Core 上可以存在多个。

eVA IP 核示例

图 199. eVA IP Core 示例


上图中的示例展示了两个 ImgIn 类和两个 ImgOut 类。这两个类都支持多个实例:此 VA IP Core 提供 7 个属于 ImgIn_A ImgIn 类的 ImgIn 端口、5 个属于 ImgIn 类 ImgIn_B 的 ImgIn 端口、2 个属于 ImgOut 类 ImgOut_a 的 ImgOut 端口,以及 5 个属于 ImgOut 类 ImgOut_b 的 ImgOut 端口。

[注意] 相关运营商VisualApplets

对于每个已定义的 ImgOut 类,您随后可以定义一个或多个平台特定的 VisualApplets ImgOut 运算符(有关详情,请参见“定义硬件特定运算符”)。在 IP core 集成之后,这些运算符可以在 VisualApplets 中实例化并实现该接口。如果存在多个具有相同配置(类)的接口端口,相应运算符的实例可以连接到其中的任何一个,并由 VisualApplets 的资源管理进行控制。

设置 ImgOut 端口

要定义允许图像从 VA IP Core 流式传输到周围 FPGA 设计的端口:

  1. 转到 ImgOut 选项卡。

  2. 点击加号 图标。

  3. 在 Base Name 字段中,输入您要定义的 ImgOut 接口类的名称。双击该字段进行编写。

  4. 在 Multiplicity 字段中,定义您希望在 VA IP Core 上拥有此类的多少个 ImgOut 接口。双击该字段进行编写。

    已定义的 ImgOut 端口(在我们的示例中为 3 个 ImgOutGray 类的接口)在 IP Core 的图形表示中立即可见:

  5. 定义 ImgOut 接口类的其他属性:

    Flow control {Yes,No}:

    • Yes:如果选择 Yes,则会实现用于暂停输出数据的流控制机制。选择 Yes 允许 VisualApplets 设计在任意持续时间内阻止从输出 FIFO 读取数据。FIFO 满信号表示不得再写入更多数据。

    • NO:如果选择 No,则不会实现用于阻止输出数据的流控制机制。

    Sync. mode:此参数指示图像接口时钟(ImgOut 端口上的 iPORTIDXClk)与设计时钟(IP Core 上的 iDesignClk)之间的关系。可能的值如下:

    • SyncToDesignClk – 接口端口与 iDesignClk 同步。ImgOut 端口上的外部时钟输入将被忽略。

    • SyncToDesignClk2x – 接口端口与 iDesignClk2x 同步。ImgOut 端口上的外部时钟输入将被忽略。

    [注意] 可用双倍像素深度

    如果您将 iDesignClk2x 用于 ImgOut 端口,则可以定义一个图像协议,其位深度为您为端口 ov..Data 定义的位深度的两倍(即,bit width 与 Parallelism 的乘积可以加倍)。在这种情况下,系统将执行因子为 2 的自动并联。

    • Async – 异步接口:接口端口与 ImgOut 接口的外部时钟输入同步。

    如果选择 Async,您需要

    • 在 ImgOut 接口的 iPortIDXClk 端口提供时钟信号,以及

    • 在综合约束(约束文件)中定义时钟域交叉约束。

    [注意] 可用双倍像素深度

    如果您将 iDesignClk2x 用于 ImgOut 端口,则可以定义一个图像协议,其位深度为您为端口 ov..Data 定义的位深度的两倍(即,bit width 与 Parallelism 的乘积可以加倍)。在这种情况下,系统将执行因子为 2 的自动并联。

    [注意] 使用 iDesignClk 或 iDesignClk2x

    VisualApplets 建议尽可能使用 iDesignClk 或 iDesignClk2x 进行同步。

    Fifo depth:在此处定义输出数据的缓冲区 FIFO 的深度,该深度至少需要由附加的 Visual Applets 接口运算符实现。该值必须是 15 到 1023 之间介于 2 的幂减 1 的数。

    Port width: 在此处定义图像数据端口的宽度。

为 ImgOut 接口类定义图像协议

您需要定义此 ImgOut 接口类所支持的图像协议。您需要逐个定义协议,直至完成所有要指定的协议。

[注意] 相关运营商VisualApplets

将 VA IP Core 集成到 FPGA 设计后,图像处理应用程序的开发人员将在 VisualApplets 中实例化一个 ImgOut 算子,并在给定的应用程序中定义此算子实例要实现 ImgOut 接口(以及算子本身)所支持的哪个协议。

  1. 单击 Format 列中的箭头,从格式列表中选择所需的格式:

    有关受支持图像格式的更详细描述,请参见 '受支持的 ImageOut 格式'。

  2. 双击 Pix.Width 列中的字段。

    输入所需的像素数据 Bit Width(值范围:[1..64])。

    像素数据宽度限制为 64 bit。所有非灰度彩色格式的像素数据宽度必须是 3 的倍数,且限制为 63 bit。

  3. 双击 Parall 列中的字段。输入所需的 Parallelism。

    The parallelism P defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from the following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (Port width, see above) must follow certain rules:

    • 所有 P 个像素的数据必须适合长度为 N 的单个字。数据采用 LSB 对齐方式存储,这意味着对于像素宽度 Z(灰度时 Z=X,彩色时 Z=Y),数据的分布如下:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。

    • 对于 RGB 图像,三个颜色分量按 LSB 对齐打包到子字 [0..Y-1] 中,顺序如下:红色使用位 [0..Y/3-1 ],绿色使用位 [Y/3..2*Y/3-1],蓝色使用位 [2*Y/3..3*Y/3-1]。

    • 对于 HSI 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,I 扮演蓝色的角色。

    • 对于 HSL 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,L 扮演蓝色的角色。

    • 对于 HSV 彩色图像,适用与 RGB 相同的规则,其中 H 扮演红色的角色,S 扮演绿色的角色,V 扮演蓝色的角色。

    • 对于 YUV 彩色图像,适用与 RGB 相同的规则,其中 Y 扮演红色的角色,U 扮演绿色的角色,V 扮演蓝色的角色。

    • 对于 YCrCb 彩色图像,适用与 RGB 相同的规则,其中 Y 扮演红色的角色,Cr 扮演绿色的角色,Cb 扮演蓝色的角色。

    • 对于 LAB 彩色图像,适用与 RGB 相同的规则,其中 L 扮演红色的角色,A 扮演绿色的角色,B 扮演蓝色的角色。

    • 对于 XYZ 彩色图像,适用与 RGB 相同的规则,其中 X 扮演红色的角色,Y 扮演绿色的角色,Z 扮演蓝色的角色。

  4. 单击 Dimension 列中的箭头以选择正在定义的协议的图像维度。

    该维度的含义如下:

    • Area(默认):图像由行结束标志和帧结束标志构成。在 VisualApplets 中,图像维度 Area 名为“2D”。

    • Line:图像由行结束标志构成。没有将传入行划分为帧的帧结束标志。在 VisualApplets 中,图像维度 Line 名为“1D”。

    • Raw:没有将传入图像数据划分为行和帧的行结束标志和帧结束标志。输入图像流由宽度为 1 个像素的无休止像素流组成。在 VisualApplets 中,图像维度 Raw 名为“0D”。线阵相机可以作为 0-D 图像源。

  5. 单击 Signedness 列中的箭头并选择您正在定义的协议的图像维度。

    • Unsigned(默认):像素数据打包为无符号像素组件。

    • Signed:像素数据打包为有符号像素组件

  6. 重复步骤 1 - 5,直到定义完图像类所需支持的所有图像协议。

[注意] 图像协议定义的内部 ID

默认隐含内核大小为 1x1。列出的每个协议都有编号,列表从零开始。这些编号构成了给定 ImgOut 类的协议 ID。ID 不会显示在 GUI 上。因此,您定义的每个 ImgOut 类都有一个您定义的图像协议的内部 ID 列表。

在接下来的步骤之一中,您可以定义 VisualApplets ImgOut 算子。这些算子的实例可以连接到已定义的 ImgOut 类(有关如何定义算子的详情,请参见 '定义硬件特定算子')。您可以为每个 ImgOut 算子分配您为相关图像端口指定的全部或部分图像协议。

在 VisualApplets 中,ImgOut 算子将提供一个参数,VisualApplets 用户可以从中选择列表中的图像格式。根据所选内容,相应的 ID 将分配给相关的 IP Core ImgOut 接口端口 (ov..FID_D)。这使附加的粘合逻辑能够根据所选格式调整其行为。

为 ImgOut 接口类定义附加参数

您可以定义您的 ImgOut 接口类所需的附加参数。这些(动态)参数可以在运行时进行设置和重新设置。可以通过运行时接口访问它们(请参见 '运行时软件接口')。

在运行时,它们通过 VA IP Core 的寄存器从属接口(请参见 '寄存器从属接口')进行通信。

ovPORTIDX_PARNAME_D:参数 PARNAME 的数据。方向:输出。您可以如下所述定义 Bit Width。将为定义的每个参数生成此信号。

oPORTIDX_PARNAME_Upd:方向:输出。Bit Width:1。当从运行时软件更新参数 PARNAME 时,此信号 在一个时钟周期内设置为“1”。此信号是为定义的每个参数生成的。

要为 ImgOut 接口类定义附加参数:

  1. 转到程序窗口的 Parameter ports 区域。

  2. 点击加号 图标。

  3. 在 Name 字段中,输入您要定义的参数的名称。双击该字段进行写入。

  4. 在 Width 字段中,定义参数端口的宽度 {1,64}。 双击该字段进行写入。

    [注意] 从接口数据宽度与实际寄存器宽度之间的映射

    通过寄存器接口访问的寄存器可以具有 1 到 64 之间的任意宽度 。从接口数据宽度与 VisualApplets 参数的实际寄存器宽度之间的映射是自动完成的。当寄存器的宽度大于寄存器接口的宽度时,运行时软件 将自动分频访问。因此,单个参数会占用多个 寄存器地址。

  5. 重复步骤 2 – 4,直到您定义了图像类 要支持的所有参数。

    执行完 '设置 ImgOut 端口'、'为 ImgOut 接口类定义图像协议' 和 '为 ImgOut 接口类定义附加参数' 中描述的所有步骤后,您便完成了第一个 ImgOut 接口类的设置。

  6. 如果您需要更多的 ImgOut 接口类,请通过重新开始 '设置 ImgOut 端口' 来定义下一个 ImgOut 接口类。

[注意] 根据需要定义任意数量的 ImgOut 接口类

您可以根据需要定义任意数量的接口类。要设置下一个 ImgOut 接口类,请再次从 '设置 ImgOut 端口' 中描述的步骤开始。

输入 GPIO 定义

通用输入信号 (GPI) 和通用输出信号 (GPO) 可能会进入或离开 VA IP Core。这些信号可用于触发和过程控制。

您可以配置如下所述数量的 GPI 和 GPO 信号。

在 eVA 平台描述中定义的任何 GPI 或 GPO 信号在 VA IP Core 中都有一个相应的输入或输出端口。当 NAME 为 GPI 或 GPO 信号在 VisualApplets 中显示的名称时,信号端口将获得以下名称:

  • iSig_NAME 用于宽度为 1 的输入信号

  • oSig_NAME 用于宽度为 1 的输出信号

所有专用 I/O 信号均与时钟 iDesignClk 同步。

端口 方向 Width 描述
iSig_NAME 在 1 GPI 端口上的输入信号
oSig_NAME 输出 1 GPO 端口上的输出信号

要定义 VA IP Core 的 GPI 端口:

  1. 转到 GPIO 选项卡。

  2. 在 General Purpose Input Signals 区域,点击加号 图标。

  3. 在现已可用的字段中,输入您要定义的 GPI 端口的名称。双击该字段进行写入。

  4. 重复步骤 3 和 4,直到定义了您希望在 VA IP Core 上可用的所有 GPI 端口。

  5. 转到 General Purpose Output Signals 区域。

  6. 点击加号 图标。

  7. 在现已可用的字段中,输入您要定义的 GPO 端口的名称。双击该字段进行写入。

  8. 重复步骤 7 和 8,直到定义了您希望在 VA IP Core 上可用的所有 GPO 端口。

    定义的 GPI 和 GPO 端口在 IP Core 的图形表示中立即可见:

[注意] 相关运营商VisualApplets

对于 GPI 和 GPO 信号,您稍后可以定义一个或多个平台特定的 VisualApplets GPIO 运算符(有关详细信息,请参阅 “Defining Hardware-Specific Operators”)。这些运算符由连接到一个或多个 GPIO 资源的连接器组成。

这些运算符(在 IP Core 集成后)可以在 VisualApplets 中实例化,然后实现对 IP Core 的一个或多个 GPI 和/或 GPO 端口的访问。VisualApplets 环境会检查资源冲突(同一输入/输出引脚不能由两个运算符实例使用)。

定义所需的 Memory 接口

您可以通过抽象的内存接口将 VA IP Core 连接到外部内存。您可以通过单个接口机制连接任何类型的内存。您只需通过胶合逻辑(glue logic)将 eVA 内存接口协议适配到您所使用的内存控制器即可。

您可以配置 VA IP Core 上可用的内存接口端口数量。对于每个端口,您可以分别定义接口 Property(即地址和数据宽度)。

eVA IP Core 的 Memory 接口

当需要使用图像缓冲运算符时,VisualApplets 需要访问外部内存。在大多数情况下,这将是多个 RAM 库。内存接口端口在 VisualApplets 设计条目中不可见。但使用外部内存的运算符(如 ImageBuffer)会消耗一个由 VisualApplets 的资源管理处理的名为 RAM 的抽象资源。

eVA 内存接口的设计允许通过单一接口机制连接各种不同的内存架构。抽象接口基本上是一个从接口,其中外部内存控制器主导访问。从设备通过用于写入和读取命令的独立 FIFO 接口请求写入或读取访问。连接的主设备需要确认获取命令并可以随时执行访问。标志接口使从设备能够注意到何时执行了请求的访问。还有用于附加信息的可选信号,例如等待获取的命令数量。这些信号可以帮助内存控制器主设备优化内存访问。

eVA 框架能够配合多个 memory ports 运行。生成的 VA IP Core 的 I/O ports 带有后缀 X,其中 X 是 memory interface 通道的编号。

Memory Interface 的 Port Layout(其中 X 为接口端口索引)

图 200:Memory Interface 的 Port Layout(其中 X 为接口端口索引)


  • 当指定异步接口时,所有 I/O 都与外部提供的时钟 iMemClkX 同步。 或者,同步模式也可以是 SyncToDesignClk (此时所有 I/O 都与 iDesignClk 同步),或 SyncToDesignClk2x (此时 I/O 与 iDesignClk2x 同步)。

[注意] iDesignClk2x 推荐配置

Basler 建议在 memory ports 上使用 iDesignClk2x 时钟信号。

  • 写请求和读请求可以并发发生;到 memory 的写数据路径和读数据路径完全分离。

  • 写访问通过端口 ovMemWrDataX、 ovMemWrAddrX、ovMemWrFlagX 和 oMemWrReqX 发起,以下将这些端口统称为写命令。

  • 读访问通过端口 ovMemRdAddrX、 ovMemRdFlagX、oMemRdReqX 发起,以下将这些端口统称为读命令。

  • 当访问命令被提取时,控制器会进行确认。在确认之后(写操作为 iMemWrAckX, 读操作为 iMemRdAckX),可在下一个时钟周期提供下一条命令。命令通过相应的请求端口 (写操作为 oMemWrReqX,读操作为 oMemRdReqX)发出信号。

  • 某些 VA operators 要求访问必须由标志 (ovMemWrFlagX、ovMemRdFlagX)进行标记。访问执行完毕后,控制器必须将此标志返回给 memory interface (ivMemWrFlagX、ivMemRdFlagX)。必须提供标志的最小位宽为:

    • MemWrFlagWidth >= 4

    • MemRdFlagWidth >= 8

下表详细介绍了 memory interface ports,其中 X 是用于区分多个 memory ports 的端口号:

端口

方向

Width

描述

iMemClkX

在

1

Memory interface 时钟。当端口配置为同步通信时,此输入将被忽略。

ovMemWrDataX

输出

MemDataWidthX

写入 memory controller 的写数据输出

ovMemWrAddrX

输出

MemAddrWidthX

写地址

ovMemWrFlagX

输出

MemWrFlagWidthX

写标志输出

oMemWrReqX

输出

1

写请求

iMemWrAckX

在

1

确认写数据已被 Memory 控制器接收

oMemWrAlmostEmptyX

输出

1

仅单个写命令可用

ovMemWrCntX

输出

MemWrCntWidthX

可用写命令的数量

ivMemWrFlagX

在

MemWrFlagWidthX

来自控制器的写标志输出

iMemWrFlagValidX

在

1

写标志输入有效 – 信号指示 iMemWrFlagX 有效,这意味着已执行用相应的 oMemWrFlagX 标记的写访问。

ovMemRdAddrX

输出

MemAddrWidthX

读地址输出

ovMemRdFlagX

输出

MemRdFlagWidthX

读标志输出

oMemRdReqX

输出

1

读请求

iMemRdAckX

在

1

确认读地址已被 Memory 控制器接收

oMemRdAlmostEmptyX

输出

1

仅单个读地址可用

ovMemRdCntX

输出

MemRdCntWidthX

可用读地址的数量

ivMemRdFlagX

在

MemRdFlagWidthX

读取标志输入 – 仅在断言 iMemRdDataValidX 时有效

ivMemRdDataX

在

MemDataWidthX

读取数据输入

iMemRdDataValidX

在

1

读取数据有效

下图展示了写入和读取访问重叠时的接口协议。为简单起见,假定内存控制器的固定读取延迟为两个时钟周期:

展示内存接口协议的波形图

图 201. 展示内存接口协议的波形图


定义 Memory 接口

您可以定义各类内存接口。这些接口类在支持的数据宽度、地址、使用的时钟信号以及许多其他方面可能有所不同。每个内存接口类在 VA IP Core 上可以存在多个。

VA IP Core 示例

图 202. VA IP Core 示例


示例 VA IP Core(上图所示)展示了两个内存接口类。这两个类均有多个实例可用:此 VA IP Core 提供 1 个接口类为 MemIF_A 的内存接口和 3 个接口类为 MemIF_B 的内存接口。

要定义 VA IP Core 的内存接口:

  1. 转到 Memory 选项卡。

  2. 点击加号 图标。

  3. 在 Memory Type 字段中,输入您要定义的内存接口类的名称。双击该字段即可进行输入。

  4. 在 Multiplicity 字段中,定义您的 VA IP Core 上需要该类多少个内存接口。双击该字段即可进行输入。

    定义的内存接口(在我们的示例中为 6 个 MemIF_A 类的接口)会立即在 IP Core 的图形表示中显示出来:

  5. 定义内存接口类的更多 Property:

    Data width: 输入内存接口类的数据宽度。

    Address width: 在此处输入地址宽度。

    Write flags count: 在此处输入 ovMemWrFlagX 的宽度(最小宽度:4)

    Read flags count: 在此处输入 ovMemRdFlagX 的宽度(最小宽度:8)

    某些 VisualApplets 算子要求访问必须带有标志标签(ovMemWrFlagX、ovMemRdFlagX)。访问完成后,控制器必须将此标志返回给内存接口(ivMemRdFlagX、ivMemRdFlagX)。必须提供标签的最小宽度:MemWrFlagWidth >= 4,MemRdFlagWidth >= 8

    Sync. mode: 此参数指示内存接口时钟(内存接口上的 iMemClkX)与设计时钟(IP Core 上的 iDesignClk)之间的关系。可以使用以下值:

    • SyncToDesignClk – 接口端口与 iDesignClk 同步工作。忽略发送至接口时钟端口的外部时钟输入。

    • SyncToDesignClk2x – 接口端口与 iDesignClk2x 同步。忽略发送至接口时钟端口的外部时钟输入。

    [注意] iDesignClk2x 推荐配置

    Basler 建议在 memory 端口上使用 iDesignClk2x 时钟信号。

    • Async – 异步接口:接口端口与输入到时钟端口 iMemClkX 的外部时钟同步。

      如果选择 Async,您需要

      • 在 memory 接口的 iMemClkX 端口提供时钟信号,并

      • 在综合约束(约束文件)中定义时钟域交叉。

    Max. pending read transfers: 在此输入核心外部读取流水线中的最大数据字数。此值与计算传入读取数据的最小 buffer 深度相关。

  6. 重复步骤 2 – 5 以定义所需的所有 memory 接口类。

定义硬件特定运算符

VisualApplets 提供了用于定义图像处理应用程序的大量算子库。除一个算子库外,所有算子库均与硬件无关,这意味着其中包含的算子可用于任何目标硬件的任何设计中。

唯一的例外是直接连接到 VA IP Core 周围硬件的算子:ImgIn 接口、ImgOut 接口和 memory 接口。这些是特定于硬件的算子,必须与 IP Core 本身一同进行设计。

定义 ImgIn 算子

为目标硬件定义 ImgIn 算子:

  1. 转至 VisualApplets Operators 选项卡。

  2. 转至 ImgIn Operators 选项卡。

    在 ImgIn Operators 选项卡下,您可以找到先前定义的 ImgIn 接口类的列表。

    (在我们的示例中,这些是 ImgIn_A 和 ImgIn_B。)

  3. 单击要为其定义连接 ImgIn 算子的 ImgIn 接口类。

  4. 点击加号 图标。

    此时将显示用于为此 ImgIn 接口类定义算子的选项:

  5. 在 Operator 字段中,输入要定义的算子名称。双击该字段即可进行编辑。

  6. 在 Icon file 字段中,定义图标文件的路径,该图标将显示在 VisualApplets 中算子的图形表示上。您可以在程序窗口的右上角面板中查看算子在 VisualApplets 中的完整图形外观:

  7. 在字段 帮助文件中,定义描述算子及其参数的 HTML 帮助文件的路径。单击加号图标从文件系统中选择文件。起始 *.html 文件的名称必须命名为 <nameofOperator>.html 并置于首位。 其他文件可以是图像、CSS 文件等。

  8. 如果要添加多个包含该算子相关信息的文件,请重复步骤 7。您可以一步加载一批文件(即包含图形文件的 HTML 文件系统)。您在此处列出的第一个 HTML file 将被视为主要帮助文件(帮助文件系统的起始点)。

    一旦用户实例化算子、点击设计窗口中的算子实例并按下 F1,主要帮助文件将显示在 VisualApplets 帮助面板中:

    Image protocol selection 面板显示附加到所选接口类的图像协议:

  9. 在此处选择您希望此算子支持的图像协议。

  10. 如果需要,可在最后两列中为所选图像协议定义最大图像宽度和最大图像高度。

  11. 重复步骤 4 – 10 以定义可连接到所选接口类的其他算子。

  12. 重复步骤 3 – 10 以定义其他接口类的算子。

定义 ImgOut 算子

为目标硬件定义 ImgOut 算子:

  1. 转至 VisualApplets Operators 选项卡。

  2. 转到 ImgOut Operators 选项卡。

    在 ImgOut Operators 选项卡下,您可以找到您之前定义的 ImgOut 接口类的列表。(在我们的示例中,这些是 ImgOut_a 和 ImgOut_b。)

  3. 点击您要为其定义连接 ImgOut 算子的 ImgOut 接口类。

  4. 点击加号 图标。

    现在,将显示用于为该 ImgOut 接口类定义算子的选项:

  5. 在 Operator 字段中,输入要定义的算子名称。双击该字段即可进行编辑。

  6. 在 Icon file 字段中,定义图标文件的路径,该图标将显示在 VisualApplets 中算子的图形表示上。您可以在程序窗口右侧的面板中查看算子在 VisualApplets 中的完整图形表示形式:

  7. 在 Help file 字段中,定义描述算子及其参数的 HTML 帮助文件的路径。点击加号图标从文件系统中选择文件。

  8. 如果要添加多个包含该算子相关信息的文件,请重复步骤 7。您可以一步加载一批文件(即包含图形文件的 HTML 文件系统) 。您在此处列出的第一个 HTML file 将被视为主要帮助文件(帮助文件系统的起始点)。

    一旦用户实例化算子、点击设计窗口中的算子实例并按下 F1,主要帮助文件就会显示在 VisualApplets 帮助面板中。

    Image protocol selection 面板显示附加到所选接口类的图像协议:

  9. 在此处选择您希望此算子支持的图像协议。

  10. 如果需要,可在最后两列中为所选图像协议定义最大图像宽度和最大图像高度。

  11. 重复步骤 4 – 10 以定义可连接到所选接口类的其他算子。

  12. 重复步骤 3 – 10 以定义其他接口类的算子。

定义 GPIO 算子

您可以定义提供可配置数量的 GPI 和 GPO 端口的 GPIO 算子。 在设计图像处理应用时,用户可以将这些端口连接到 eVA IP Core 的实际 GPI 和 GPO 端口。

为目标硬件定义 GPIO 算子:

  1. 转至 VisualApplets Operators 选项卡。

  2. 转到 GPIO Operators 选项卡。

  3. 点击加号 图标。

  4. 在打开的字段中,输入您要定义的算子的名称。 双击该字段即可进行输入。

  5. 在 Icon file 字段中,定义图标文件的路径,该图标将显示在 VisualApplets 中算子的图形表示上。您可以在程序窗口右上方的面板中查看算子在 VisualApplets 中的完整图形表示形式。

  6. 在 Help file 字段中,定义描述算子及其参数的 HTML 帮助文件的路径。点击加号图标从文件系统中选择文件。

  7. 如果要添加多个包含该算子相关信息的文件,请重复步骤 6。您可以一步加载一批文件(即包含图形文件的 HTML 文件系统) 。您在此处列出的第一个 HTML file 将被视为主要帮助文件(帮助文件系统的起始点)。

    一旦用户实例化算子、点击设计窗口中的算子实例并按下 F1,主要帮助文件就会显示在 VisualApplets 帮助面板中。

    GPIO port selection 面板显示您为 eVA IP Core 定义的 GPI 和 GPO 接口:

  8. 在此处选择您希望此算子能够连接到的 IP 核心的 GPI 和 GPO 端口。

  9. 重复步骤 3 – 8,以定义能够连接到 IP 核心的 GPI 和 GPO 端口的其他算子。

为 IP Core 生成 VHDL 代码

按照“所有平台的通用接口”至“定义硬件特定算子”节中的描述定义 IP Core 黑盒后,您便可构建 IP Core 黑盒(VHDL)。在“嵌入和仿真 IP 核心”中,您将把此黑盒集成到您的 FPGA 设计中。

除了 IP Core 黑盒,eVA Designer 还会自动为所定义的各个接口生成一个仿真环境以及相应的测试平台。“嵌入和仿真 IP 核心”一节详细介绍了如何使用它们。

生成 IP 核心黑盒时,您无需指定任何构建流程细节。您也可以在后续阶段定义硬件特定算子。

要生成 IP Core 黑盒:

  1. 按照“所有平台的通用接口”至“定义硬件特定算子”节中的说明,输入有关目标硬件和所需 IP Core 接口的所有信息。

  2. 打开包含您的硬件和核心接口描述的 XML 或 *.eva 文件。

  3. 从Tools菜单中选择Generate VHDL …

  4. 创建一个用于存储生成文件的专用目录。

  5. 点击Select Directory。现在,所有相关文件都将自动生成。您可以在所选目录中找到它们:

  6. 请遵循“嵌入和仿真 IP 核心”节中的说明。您将了解

    1. 如何将刚刚创建的 IP 核心黑盒集成到您的 FPGA 设计 (VHDL) 中,

    2. 并使用在 VHDL 集成过程中为您提供支持的激励和仿真文件。