所需的软件和文件
要完成本教程,您必须安装以下软件:
- LabVIEW开发环境
- LabVIEW FPGA模块
- 用于Vivado的LabVIEW FPGA模块Xilinx编译工具
您必须下载并解压缩附带的zip文件夹,其中包含将在整个教程中使用的所有源文件以及通过CLIP和IPIN集成的IP。
注意:本文档是使用LabVIEW 2018和Vivado 2017.2 创建的。步骤和UI文本在其他LabVIEW或Vivado版本中可能有所不同。
Verilog模块
就本教程而言,已提供了一个简单的Verilog模块作为起点。可以在以下位置的附件文件夹中找到该文件:
.. \ vivado_verilog_tutorial \源文件\ Adder.v
Adder.v实例化具有异步复位和时钟使能的时钟驱动的8位加法器。下表中显示了此组件的端口定义。
端口 | 方向 | 描述 |
---|
clk | 在 | 驱动组件的输入时钟 |
clkEn | 在 | 使能信号以进行时钟门控 |
aReset | 在 | 异步复位 |
dataInA (7:0) | 在 | 8位输入数据端口A |
dataInB (7:0) | 在 | 8位输入数据端口B |
dataInC (7:0) | 出 | 8位输出数据端口 |
整合选项
要将外部或第三方IP集成到LabVIEW FPGA中,可以使用组件级IP(CLIP)或IP集成节点(IPIN)。虽然两者都允许集成LabVIEW外部的代码,但是这些选项具有不同的用例和限制。 NI建议您在集成任何外部IP之前参考LabVIEW帮助以了解不同的设计要求。
与本教程相关的一个区别是,CLIP的顶级综合文件必须是VHDL文件,而IPIN可以将网表用作顶级综合文件。这意味着CLIP需要生成VHDL包装器,而IPIN是可选的。但是,在特定情况下,PINI可能需要VHDL包装器。例如,当LabVIEW不支持Verilog模块的顶级端口类型时。
设置一个Vivado项目
要准备将Verilog模块集成到LabVIEW FPGA中,必须首先创建一个项目并在Xilinx Vivado Design Suite中对其进行正确配置。
注意:用于Vivado的LabVIEW FPGA模块Xilinx编译工具将安装Vivado Design Suite,该套件使用与LabVIEW FPGA模块相同的编译器版本和配置。 NI建议您使用该版本的Vivado Design Suite来准备使用Vivado FPGA目标时要集成到LabVIEW FPGA的任何第三方或外部IP。
- 运行以下批处理文件,启动Xilinx Vivado Design Suite安装程序,该安装程序将随LabVIEW FPGA Module Xilinx Compile Tool for Vivado一起安装:
C:\ NIFPGA \ programs \ <Vivado> \ bin \ vivado.bat - 单击文件»新建项目...以启动新建项目向导,然后单击下一步。
-
如下所示配置项目名称页面。
- 单击下一步前进到项目类型页面,确保已选择 RTL项目 ,然后再次单击下一步。
- 在添加源页面中,添加Adder.v Verilog模块,然后在目标语言下拉列表中选择VHDL 。
- 单击下一步,然后再次单击下一步以转到默认零件页面。
-
选择与您将在LabVIEW FPGA项目中使用的FPGA器件匹配的部件。您可以在LabVIEW的FPGA Target Properties窗口的General部分中找到每个目标的详细信息。在本教程中,我们将准备在PXIe-7975R(FlexRIO)上使用的IP。
- 单击下一步,然后单击完成以完成设置过程。
综合设计
配置项目并添加所有源文件后,必须按照层次设计将Verilog模块综合到网表中
流动。这意味着必须以非上下文(OOC)模式执行综合,以允许从VHDL上下文使用Verilog模块。本教程使用.dcp网表文件格式。
- 在项目管理器下,单击设置。
- 在项目设置下,选择综合。
- 在选项部分的更多选项中输入-mode out_of_context 。
- 单击应用 ,然后单击确定。
- 在项目管理器下,单击运行综合。
- 在启动运行窗口中,单击确定开始合成。
- 综合完成后,在综合完成窗口中选择打开综合设计 ,然后单击确定。
-
作为综合的结果,将创建一个.dcp网表。网表是定义要包装的组件的综合代码。在Xilinx Vivado Design Suite项目的工作目录中,.dcp文件应位于以下位置。记下该文件位置。
.. \ VerilogIntegrationTutorial.runs \ synth_1 \ Adder.dcp
注意: .dcp文件不兼容向前版本。 NI建议您使用为所使用的LabVIEW版本提供的Vivado设计套件来生成这些文件。
创建一个VHDL包装器
要将.dcp网表集成到LabVIEW FPGA中,必须创建一个实例化组件的VHDL包装文件。创建此文件通常并不困难,但是可能需要一些VHDL语言知识。
- 在“源”视图中,右键单击设计源,然后选择添加源...。
-
在添加”窗口中,选择添加或创建设计源 ,然后单击下一步。
- 单击创建文件。
- 如下所示配置创建源文件窗口,然后单击确定 。
- 点击完成。
- 如下所示配置定义模块窗口。确保为VHDL包装器模块定义的端口与原始Verilog模块中定义的端口匹配。包装模块需要一组与原始IP对应的端口。
- 单击确定。
- 双击项目中设计源下的新源文件,以在编辑器中打开该文件。
- 如下所示,在VHDL模块的体系结构声明中实例化Adder组件。
- 将端口从Adder组件映射到AdderWrapper实体的相应顶级端口。
- 保存修改后的包装器文件。
将IP集成到LabVIEW中
将Verilog模块合成为网表并创建VHDL包装器后,将适用CLIP或IP集成节点的标准IP集成过程。
- 收集所需的HDL和综合文件。您将需要VHDL包装器和所有网表。对于此设计,您将需要以下文件:
- AdderWrapper.vhd-在本教程中为Verilog模块创建的VHDL包装器。这将是顶级模块。
- Adder.dcp-Verilog模块的综合网表。
- 按照将外部IP导入LabVIEW FPGA教程中的步骤将IP集成到LabVIEW FPGA。选择综合文件时,请使用上面列出的文件。
使用Tcl控制台进行高级集成
尽管上面的教程逐步介绍了许多用户可能最直观的过程,但使用Vivado Design Suite中的Tcl控制台生成所需文件可能更快。 Tcl控制台使您可以直接运行Vivado GUI使用的许多基本命令,并提供其他高级选项。在某些情况下,使用这些命令可能比使用GUI更直接或更快捷。就本教程而言,重点是使用控制台实现与上述相同的选项。有关下面使用的功能的更多信息,请参考Xilinx官方文档。
注意:这些命令的确切行为和格式在Xilinx Vivado Design Suite版本之间可能有所不同。 NI建议您在继续之前阅读这些命令的Xilinx文档。
合成
要执行网表的综合和生成,请首先创建一个Vivado项目,然后将Adder.v Verilog模块添加到该项目中。将模块添加到项目后,请在“源”视图中记下实体的名称。在Adder.v Verilog模块的示例情况下,项目中实体的名称为Adder。要运行综合过程,可以使用Tcl控制台中的synth_design命令。对于本教程中使用的Adder模块,命令可能如下所示:
synth_design-顶部加法器-part xc7k410tffg900-2 -mode out_of_context
合成完成后,使用write_checkpoint命令生成网表文件。
write_checkpoint -force -noxdef“ C:/ Vivado Verilog教程/Adder.dcp”
此命令在指定位置生成.dcp网表文件。或者,您可以使用write_edif命令生成EDIF网表。有关在Tcl控制台中使用write_edif命令的信息,请参考Xilinx官方文档。
编写VHDL包装器
要编写VHDL包装器,可以使用本文档的“创建VHDL包装器”部分中详细介绍的相同过程。或者,您可以使用write_vhdl命令生成存根VHDL文件,该文件可用于集成Verilog模块。这将等效于上述“创建VHDL包装器”部分中的步骤1至7,您仍然需要完成其余步骤。此外,您必须将新的.vhd文件添加到项目中,或在其他编辑器中手动对其进行编辑。要生成这样的存根文件,请执行以下命令。
write_vhdl-模式端口“ C:/ Vivado Verilog教程/AdderWrapper.vhd”
创建功能仿真模型
注:仅当您计划在Xilinx ISIM等第三方模拟器中模拟组件级IP时,才需要执行此步骤。对于IP集成节点,可以在LabVIEW环境中为仿真目的将仿真行为设置为后期合成模型。由于不能在LabVIEW FPGA中直接仿真组件级IP,因此从仿真模型中排除网表将在大多数情况下提供全部功能。有关通过仿真调试LabVIEW FPGA代码的更多信息,请参见测试和调试LabVIEW FPGA代码。
如果要在LabVIEW FPGA中仿真模块,NI建议使用write_vhdl命令为网表生成VHDL仿真模型,该命令的标志与以前使用的标志不同。然后,您可以将仿真模型用作LabVIEW FPGA中用户定义的仿真行为。要为加法器模块生成功能仿真模型,请执行以下命令。
write_vhdl -mode funcsim“ C:/ Vivado Verilog教程/Adder_funcsim.vhd”