使用Xilinx Vivado设计套件准备Verilog模块以集成到LabVIEW FPGA

更新 Nov 2, 2021

环境

软件

  • FPGA Xilinx Compilation Tools
  • LabVIEW FPGA Module

VHDL和Verilog是两种最常用的硬件描述语言。 LabVIEW FPGA本机支持以VHDL编写的IP集成。但是,不可能以本地方式集成用Verilog编写的IP。本教程说明了如何使用Xilinx Vivado设计套件通过以下方法之一准备现有的Verilog模块以集成到LabVIEW FPGA中:

  • 组件级IP(CLIP)-并行执行,独立于VI数据流
  • IP集成节点(IPIN)-按VI数据流的定义执行
注意:如果您使用Xilinx ISE设计套件,请参考使用Xilinx ISE设计套件准备准备集成到LabVIEW FPGA的Verilog模块

所需的软件和文件

要完成本教程,您必须安装以下软件:

  • 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。

  1. 运行以下批处理文件,启动Xilinx Vivado Design Suite安装程序,该安装程序将随LabVIEW FPGA Module Xilinx Compile Tool for Vivado一起安装:

    C:\ NIFPGA \ programs \ <Vivado> \ bin \ vivado.bat
  2. 单击文件»新建项目...以启动新建项目向导,然后单击下一步。
  3. 如下所示配置项目名称页面。

  1. 单击下一步前进到项目类型页面,确保已选择 RTL项目 ,然后再次单击下一步
  2. 添加源页面中,添加Adder.v Verilog模块,然后在目标语言下拉列表中选择VHDL
  1. 单击下一步,然后再次单击下一步以转到默认零件页面。
  2. 选择与您将在LabVIEW FPGA项目中使用的FPGA器件匹配的部件。您可以在LabVIEW的FPGA Target Properties窗口的General部分中找到每个目标的详细信息。在本教程中,我们将准备在PXIe-7975R(FlexRIO)上使用的IP。

  3. 单击下一步,然后单击完成以完成设置过程。

综合设计

配置项目并添加所有源文件后,必须按照层次设计将Verilog模块综合到网表中
流动。这意味着必须以非上下文(OOC)模式执行综合,以允许从VHDL上下文使用Verilog模块。本教程使用.dcp网表文件格式。

  1. 在项目管理器下,单击设置。
  2. 项目设置下,选择综合。
  3. 选项部分的更多选项中输入-mode out_of_context
  1. 单击应用 ,然后单击确定。
  2. 在项目管理器下,单击运行综合。
  1. 启动运行窗口中,单击确定开始合成。
  2. 综合完成后,在综合完成窗口中选择打开综合设计 ,然后单击确定
  1. 作为综合的结果,将创建一个.dcp网表。网表是定义要包装的组件的综合代码。在Xilinx Vivado Design Suite项目的工作目录中,.dcp文件应位于以下位置。记下该文件位置。

    .. \ VerilogIntegrationTutorial.runs \ synth_1 \ Adder.dcp

注意: .dcp文件不兼容向前版本。 NI建议您使用为所使用的LabVIEW版本提供的Vivado设计套件来生成这些文件。


创建一个VHDL包装器

要将.dcp网表集成到LabVIEW FPGA中,必须创建一个实例化组件的VHDL包装文件。创建此文件通常并不困难,但是可能需要一些VHDL语言知识。

  1. 在“源”视图中,右键单击设计源,然后选择添加源...。
  2. 添加”窗口中,选择添加或创建设计源 ,然后单击下一步

  1. 单击创建文件
  2. 如下所示配置创建源文件窗口,然后单击确定 。
  1. 点击完成
  2. 如下所示配置定义模块窗口。确保为VHDL包装器模块定义的端口与原始Verilog模块中定义的端口匹配。包装模块需要一组与原始IP对应的端口。
  1. 单击确定。
  2. 双击项目中设计源下的新源文件,以在编辑器中打开该文件。
  3. 如下所示,在VHDL模块的体系结构声明中实例化Adder组件。
  1. 将端口从Adder组件映射到AdderWrapper实体的相应顶级端口。
  1. 保存修改后的包装器文件。

将IP集成到LabVIEW中

将Verilog模块合成为网表并创建VHDL包装器后,将适用CLIP或IP集成节点的标准IP集成过程。

  1. 收集所需的HDL和综合文件。您将需要VHDL包装器和所有网表。对于此设计,您将需要以下文件:
    • AdderWrapper.vhd-在本教程中为Verilog模块创建的VHDL包装器。这将是顶级模块。
    • Adder.dcp-Verilog模块的综合网表。
  2. 按照将外部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”