将外部IP导入LabVIEW FPGA

通过将第三方IP 集成到NI LabVIEW软件,您能使用许多的针对Xilinx现场可编程门整列(Field-programmable gate arrays, FPGA)进行优化的算法,在实现高性能的同时提高代码重用度。LabVIEW FPGA模块提供两种方法用来实现外部代码的导入:组件级IP(Component-Level Intellectual Property, CLIP)节点和IP集成节点。本文将讨论这两种方法。

1. CLIP节点介绍
CLIP节点是一种用于将已有的FPGA IP导入LabVIEW FPGA硬件的同时通过LabVIEW FPGA程序框图与它进行通讯的框架。一旦导入成功,相对于LabVIEW FPGA,IP可以独立地、并行地运行。IP既能以原始VHDL的形式也能以诸如电子设计交换格式(Electronic design interchange format, EDIF)网表等中间文件的形式存在。这一功能要求使用者具有一定数字电路设计经验和VHDL的基本知识,因为所导入的IP通常是一种底层的硬件描述语言(Hardware description language, HDL)。

对于不同的FPGA目标,其所支持的CLIP也不同。请参考目标硬件的的定义文档获取关于CLIP支持的信息。部分FPGA目标可支持以下一种或者两种类型的CLIP:

用户定义的CLIP—导入VHDL代码,直接与FPGA VI进行通讯。

套接字CLIP—导入VHDL代码,直接和不与LabVIEW FPGA模块关联的一个FPGA VI以及FPGA引脚进行通信。一些FPGA目标在FPGA中定义了一个您可以插入套接字CLIP的固定式CLIP套接字。

图1. 在由使用者定义的CLIP节点中导入VHDL代码可以与一个FPGA VI进行通讯;反之,一个套接字CLIP节点允许IP同时连接到FPGA VI和可用FPGA引脚。

图1. 在由使用者定义的CLIP节点中导入VHDL代码可以与一个FPGA VI进行通讯;反之,一个套接字CLIP节点允许IP同时连接到FPGA VI和可用FPGA引脚。


获取最新的信息,请参考标题为使用VHDL代码作为组件级IP(FPGA模块)的LabVIEW FPGA模块帮助。

2. 在FPGA应用中使用CLIP
以下步骤概述了在一个FPGA 应用中使用CLIP的过程:

创建或者获取IP。
在FPGA目标属性中声明CLIP以及定义IP接口。
将CLIP添加到项目中。
在一个FPGA VI中使用CLIP。
创建或者获取IP
要将CLIP添加到一个FPGA目标中,您必须提供VHDL代码形式的IP以编译成FPGA对象。您能使用以下方式提供VHDL代码::

创建VHDL代码。
通过其它的硬件描述语言(HDL)创建您自己的可兼容IP核心,例如通过Xilinx CORE Generator利用Verilog进行创建。
从Xilinx或合作伙伴那购买IP核心。

注意:在LabVIEW FPGA的CORE Generator IP选板中有超过50种Xilinx IP模块,无需使用CLIP或IP集成节点导入IP模块您就能将其集成到您的LabVIEW FPGA VI的数据流中。


了解如何使用Xilinx CORE GeneratorIP选板提高IP的重用度

在使用CLIP节点时,需要特别注意的是LabVIEW FPGA所支持的数据类型以及如何将它们转换为VHDL数据类型。如果您的IP使用的逻辑向量并不不是表一中所列的数据类型之一,您必须编写一个VHDL外层程序来对标准LabVIEW类型进行扩展、缩短或者分解,从而符合IP的数据宽度。


请参考LabVIEW FPGA模块帮助,获取更多关于您IP的注意事项,包括使用外部时钟 、交叉时钟域、使用同步寄存器、执行异步重置,以及使用约束和层次条件。 

表1. CLIP接口支持使用的数据类型

表1. CLIP接口支持使用的数据类型

在FPGA目标的属性中声明CLIP以及定义IP接口
注意:以下示例使用附件中的simple_and.vhd文件演示如何将IP导入到一个由用户定义的CLIP节点。

为了将IP的输入和输出映射到LabVIEW 的I/O,使用FPGA目标属性向导创建一个定义了IP必要属性的XML文件。按照以下步骤完成这个任务。

创建一个带有FPGA硬件新LabVIEW项目。右键点击FPGA目标,并选择属性。属性对话框有一段标有“组件级IP(Component-Level IP)”的部分。点击创建文件按钮创建XML文件。

图2. 点击“Create File”开始定义XML声明文档。

图2. 点击“Create File”开始定义XML声明文档。

1、点击Add Synthesis File…按钮,并浏览代表顶层组件IP(即simple_and.vhd )的VHDL文档.再点击Next>

图3. 添加了您的IP的综合文件后,点击Next />。

图3. 添加了您的IP的综合文件后,点击Next>。

2、配置向导的余下部分用来安装XML声明文档。本例中,点击Next>按钮默认安装向导的余下部分,验证输入文件的语法,再点击剩下的Next>按钮。

图4. 配置向导中生成的XML声明文件必须为导入的IP模块而列出。

图4. 配置向导中生成的XML声明文件必须为导入的IP模块而列出。

一旦您完成了CLIP配置向导,CLIP声明名称(在XML文档中已定义)将出现在文件的路径旁。在本对话框中,您能够为需要导入的所有不同IP模块声明多个CLIP节点。

将一个CLIP项添加到一个LabVIEW项目中
在FPGA中声明CLIP实际上并没有将它添加到项目中去,因为你能够在同一个FPGA上完成一个CLIP的多个实例。在下一步中,你将创建一个先前已经被声明的simpleAND CLIP项的实例。

1、右键点击FPGA目标,并选择New Component-Level IP。在CLIP对话框中会出现选择所需的 CLIP,给这个实例一个唯一的标识名,以及通过“Clock”信号类型,选择时钟连接到CLIP中的任意线路。在本例中,后面两个选项默认不选。

图5. 本对话框显示当你将一个CLIP的实例添加到项目中后,选择CLIP,定义一个名称,同时配置时钟。

图5. 本对话框显示当你将一个CLIP的实例添加到项目中后,选择CLIP,定义一个名称,同时配置时钟。

2、一旦您点击本对话框中的OK按钮,本CLIP和出现在项目中的所有与之相关的输入和输出都被标有该实例的名称。

图6. 添加CLIP后的项目后,显示IP的所有I/O节点。

图6. 添加CLIP后的项目后,显示IP的所有I/O节点。

在CLIP和一个FPGA VI之间传递数据
此时,你已经准备好在CLIP和FPGA VI间进行通讯。你要做的只是从项目中将所需的I/O节点拖放到FPGA框图中。您的IP必须具有如何使用IP的文档。比如,许多IP模块使用一些类型的握手线用于数据的输入和输出,它们通常被标记为“data valid ”或者 “enable”。使用LabVIEW的数据类型,在正确的时间发送正确的数值,即可运行IP。您可将CLIP I/O放置在一个单周期定时循环(Single-cycle Timed Loop, SCTL)内部或者外部,但是请记住,在一个SCTL内部,你可能需要考虑时钟域交叉以及使用同步寄存器。

图7. 为了在LabVIEW FPGA中与CLIP进行通讯,将项目窗口中IP输入和输出拖放到FPGA VI的框图中。

图7. 为了在LabVIEW FPGA中与CLIP进行通讯,将项目窗口中IP输入和输出拖放到FPGA VI的框图中。

图8. 使用CLIP, 整个的LabVIEW FPGA方框图与所导入的IP进行通讯。

图8. 使用CLIP, 整个的LabVIEW FPGA方框图与所导入的IP进行通讯。

3. IP集成节点介绍
注意:这个IP集成节点范例将导入附件中的demo_adder.vhd IP模块。

创建一个带有FPGA目标的LabVIEW项目,同时在FPGA目标下添加一个新的VI
在新建的VI的程序框图中,从编程选板中拖放一个IP Integration Node,保存FPGA VI,再双击节点打开配置向导对话框。

图9. 双击IP集成节点,使用属性配置向导开始导入步骤。

图9. 双击IP集成节点,使用属性配置向导开始导入步骤。

1、点击Add Synthesis File,在弹出的窗口中选择demo_adder.vhd文档。
2、返回到配置向导对话框,两次点击Next>选择默认选项。
3、在文件生成步骤,首先确认导入的VHDL文档的语法,然后通过点击如下所示的各个按钮生成支持文件。

图10. 配置向导使帮助您在生成必须的LabVIEW支持文件之前检查您的VHDL IP的语法。

图10. 配置向导使帮助您在生成必须的LabVIEW支持文件之前检查您的VHDL IP的语法。

1、一旦IP生成成功,在后续的三步中选择Next>保持默认选项。
2、在配置向导的最后一步中,你能够为不同的终端选择数据类型。对这一IP模块,默认的定点数据类型即可满足要求。点击Finish按钮完成生成。
3、IP集成节点现已配置成功,同时您可以将其集成进您的其它的LabVIEW FPGA应用中。

图11.  IP集成节点及其集成的IP

图11. IP集成节点及其集成的IP

4. CLIP和IP集成节点的区别
CLIP 和 IP集成节点是将外部IP导入LabVIEW FPGA的两种方式,你必须根据以下的标准在二者之间进行选择。CLIP节点能够与您在LabVIEW FPGA中开发的IP 独立地并行运行。此外,CLIP能够直接与FPGA时钟和I/O引脚进行联接。与此相反,IP集成节点则被植入LabVIEW FPGA程序框图中,并按照LabVIEW VI数据流所定义的方式执行。作为LabVIEW 数据流的一部分,使用周期精准的仿真工具,IP集成节点使您可以验证整体的应用行为和时序。

表格2. 概述了两种节点之间的区别。

表格2. 概述了两种节点之间的区别。

文章来源:NI官网