在Vivado IDE中创建新设计工程的主要步骤如下所述。
第一步 :打开Vivado 2023.1集成开发环境。
第二步 :在 Vivado 集成开发环境主界面内的“Quick Start”分组下,单击“Create New Project”(创建新工程)选项,弹出“Create a New Vivado Project”对话框,单击【Next】按钮,弹出“New Project-Project Name”对话框,在该对话框中要求设计者给出工程的名字和工程路径,具体参数设置如图3.1所示。
图3.1 “New Project-Project Name”对话框
其中,Create project subdirectory前面的复选框提供开发人员是否在当前指定的工程路径下创建一个子目录。例,当前指定的工程路径为 F:/vivado_example/gate_verilog,当选中 Create project subdirectory 前面的复选框时,所创建的工程将保存在 F:/vivado_example/gate_verilog/project_1 目录下。此处不创建工程子目录,即工程放在 F:/vivado_example/gate_verilog目录下。
注: 对于使用 VHDL 开发 FPGA 的读者,名字为“gate_VHDL”,这样是为了使用不同硬件描述语言(Hardware Description Language,HDL)读者学习的方便。
注: 读者可以根据自己的需要命名工程名字和指定工程路径,但是不要起中文名字和将工程放到中文的路径下,这样可能会导致Vivado综合和仿真工具进行后续处理时产生一些错误。
第三步 :单击图3.1中的【Next】按钮,弹出“New Project-Project Type”对话框,如图3.2所示,在该对话框中提供了下面可选的工程类型。
图3.2 “New Project-Project Type”对话框
(1)RTL Project:开发人员可以使用 Vivado 设计套件来管理从 RTL 创建到比特流生成的整个设计流程。开发人员可以添加RTL源文件、Xilinx IP目录中的IP、Vivado IP集成器中创建的块设计、DSP 源文件以及分层模块的 EDIF 网表。IP 可以包括 Vivado 工具生成的XCI或XCIX文件、核生成器工具生成的过时的XCO文件以及预编译的EDIF或NGC格式的网表。
注: ISE IP只支持7系列器件。ISE格式的IP(.ngc)不再支持UltraScale器件。在开始使用UltraScale器件设计之前,开发人员应该将其IP迁移到本原的Vivado设计套件格式。
设计人员从RTL工程中可以详细描述和分析RTL,以确保正确的语法和设计结构。启动和管理各种综合和实现运行,并分析设计和运行结果。设计人员还可以尝试使用不同的约束或实现策略来实现时序收敛。
(2)Post-synthesis Project:开发人员可以使用Vivado综合、XST或任何支持的第三方综合工具生成的网表来创建工程。例如,Vivado设计套件可以导入EDIF、NGC或结构Verilog格式的网表,XCI 文件(包括 DCP 在内的所有输出产品必须已经生成),以及 Vivado 设计检查点(Design CheckPoint,DCP)文件。网表可以由包含所有内容的单个文件或多个模块级网表组成的分层文件集组成。
注: 针对UltraScale器件的Vivado设计套件不支持NGC格式的文件。建议使用Vivado设计套件 IP 定制工具和本原输出产品重新生成 IP。或者设计人员可以使用 NGC2EDIF 命令将NGC 文件转换为 EDIF 格式以进行导入。然而,Xilinx 建议今后使用本原 Vivado IP,而不是XST生成的NGC格式的文件。
设计人员可以分析和仿真网表逻辑,启动和管理各种实现运行,并分析布局和布线的设计。设计人员还可以尝试使用不同的约束或实现策略。
建议始终使用XCI或XCIX文件引用Vivado IP。Xilinx不建议只读取IP DCP文件。虽然DCP确实包含约束,但它不提供IP可以提供和可能需要的其他输出产品,如ELF、COE和Tcl脚本。
(3)I/O Planning Project:通过创建一个空的I/O规划工程,可以在设计周期的早期执行时钟资源和 I/O 规划。开发人员可以在 Vivado IDE 中定义 I/O 端口,也可以通过逗号分隔的值(Comma Separated Value,CSV)或XDC输入文件导入这些端口。开发人员可以创建一个空的I/O规划工程,以探索在不同器件架构中可用的逻辑资源。
当分配完I/O后,Vivado IDE可以创建CSV、XDC和RTL输出文件,以方便在RTL源文件或者网表可用时,在设计流程中稍后使用。输出文件也可以用于创建原理图符号,用于印制电路板(Print Circuit Board,PCB)设计过程。
某些类型的 IP(如存储器、GT、PCIe 和以太网接口)具有与其关联的 I/O 端口,这些 IP需要在一个管理IP工程或一个RTL工程中进行配置。
注: 开发人员可以使用I/O规划工程作为基于RTL的设计工程的基础。
(4)Imported Project:设计人员可以将 Synplify(Synopsys 公司旗下的综合工具产品)所创建的 RTL 工程数据导入 Vivado 工具。导入了工程源文件和编译顺序,但是未导入实现结果和设置。
(5)Example Project:使用可用的一个模板创建新的示例工程。
在该设计中,按图3.2所示的进行参数设置。
注: 勾选“Do not specify sources at this time”,表示在建立工程时不指定源文件。这样,设计人员在生成工程后,再将设计源文件添加到工程中。
第四步 :单击图3.2中的【Next】按钮。
注: 设计人员也可以选择在Vivado主界面下的Tcl Console窗口中输入Tcl命令创建工程,如图3.3所示。
图3.3 Tcl Console窗口
可以输入下面的Tcl命令创建工程(读者可以根据情况进行修改):
默认工程类型是RTL。
如果读者想创建一个网表工程,按照下面的Tcl模板格式输入命令:
可以输入下面的Tcl命令在工程中添加设计源文件:
可以输入下面的Tcl命令将以上创建的文件放到当前工程路径下:
第五步 :弹出“New Project-Default Part”对话框,在该对话框中的参数设置如图3.4所示。
图3.4 “New Project-Default Part”对话框
注: 该设计基于作者开发的 A7-EDP-1 开发板进行设计,该开发板搭载了 Xiling 公司 A7系列xc7a75tfgg484-1的FPGA器件。
在图3.4下方的窗口中,列出了可供选择的器件。在本设计中,选中“Part”名字为“xc7a75tfgg484-1”的那一行。
第六步 :单击图3.4中的【Next】按钮,弹出“New Project-New Project Summary”对话框,该对话框给出了工程类型、工程名字和器件信息的说明。
第七步 :单击【Finish】按钮。
本节将介绍修改目标语言设置的方法和其他设置参数的含义。
本小节将介绍如何修改工程属性。修改工程属性的主要步骤如下所述。
(1)如图 3.5 所示,在 Vivado 当前工程主界面左侧的 Flow Navigator窗口中,找到并展开“PROJECT MANAGER”条目。在展开条目中,单击“Settings”条目。
图3.5 Flow Navigator窗口
(2)弹出“Settings”对话框,如图3.6所示。
在该对话框右侧的General窗口中,“Target language”标题用于设置当前工程中所使用的语言,默认设置为“Verilog”。对于使用VHDL进行工程开发的设计人员来说,通过“Target language”右侧的下拉框将“Target language”设置为“VHDL”。对于使用Verilog HDL进行项目开发的设计人员,无须修改该设置。
图3.6 “Settings”对话框
为了设计人员后续操作的方便,这里将详细介绍“Settings”对话框中的 General 设置。对于该对话框中的其他设置,将在本书所涉及的内容中进行详细说明。
General设置允许设计人员指定工程名字、器件、目标语言、顶层模块名字和语言选项。(1)Name:指定工程的名字。
(2)Project device:指定要用作综合和实现的默认的目标 FPGA 器件。单击右侧的浏览按钮
,打开“Select Device”对话框以选择器件。
注: 如果有多个综合或实现运行,设计人员也可以通过从Run Properties窗口修改运行设置来更改用于特定运行的器件。
(3)Target language:将设计的目标语言指定为Verilog或VHDL。Vivado工具以指定的目标语言从设计中生成 RTL 输出。由目标语言控制的输出的具体示例是综合、仿真、顶层包装器、测试平台和IP例化模板。
(4)Default library:指定工程默认的库。所有没有明确库规范的文件都在该库中编译。设计人员可以选择库名字,也可以通过在库文本字段中键入来指定新的库名字。
(5)Top module name:指定设计的顶层 RTL 模块名字。开发人员可以输入一个低层模块的名字,以便在指定的模块上进行综合实验。单击右侧的浏览按钮
,可以自动搜索顶层模块,并显示可能的顶层模块列表。
(6)Language Options:这里的设置仅用于综合。设计人员可以从“Settings”对话框左侧的Simulation条目对应的界面中定义Verilog options和Generics/Parameters。仿真设置应用于仿真文件集,并影响仿真,但不影响综合。
①Verilog options:单击浏览按钮,在“Verilog options”对话框中设置下面选项
。
● Verilog Include Files Search Paths:指定搜索源Verilog文件中包含语句引用的文件的路径。
● Defines:指定工程的Verilog宏定义。
● Uppercase all identifiers:将所有Verilog标识符设置为大写。
② Generics/Parameters:VHDL支持的类属,而Verilog支持为常数值定义参数。这两种技术都允许在不同的情况下重用参数化设计。单击右侧的浏览按钮
可以定义类属和参数值,以替代在源文件中定义的默认值。
③ Loop count:指定循环迭代的最大值,默认值为1000。
注: 循环计数选项在 RTL 详细描述过程中使用,但不能应用于综合。对于综合,必须在“Settings”对话框中左侧 Synthesis 条目所对应界面中的“More Options”字段指定-loop_iteration_limit开关。
本节将介绍如何为设计创建一个 Verilog/VHDL 设计文件。下面给出创建设计文件的步骤。
第一步
:在Vivado工程主界面的Sources窗口中选择Design Sources文件夹,单击该窗口中的按钮
;或者单击鼠标右键,出现浮动菜单,在浮动菜单中,执行菜单命令【AddSources】,弹出如图 3.7 所示的“Add Sources”对话框。在该对话框中,提供了下面的选项:
图3.7 “Add Sources”对话框
(1)Add or create constraints(添加或者创建约束)。
(2)Add or create design sources(添加或者创建设计源文件)。
(3)Add or create simulation sources(添加或者创建仿真文件)。
默认选择“Add or create design sources”选项。
第二步 :单击图3.7中的【Next】按钮,弹出如图3.8所示的“Add Sources-Add or Create Design Sources”对话框。
第三步
:单击图 3.8 中的【Create File】按钮;或者单击图 3.8 中的
按钮,出现浮动菜单,在浮动菜单内执行菜单命令【Create File】。
注: 读者可以多次单击【Create File】按钮来定义要添加到工程的几个新模块。
第四步 :弹出“Create Source File”对话框,如图3.9所示。
图3.8 “Add Sources-Add or Create Design Sources”对话框
图3.9 “Create Source File”对话框
在该对话框中,选择添加文件的类型和输入文件的名字。
(1)File type(文件类型):Verilog。
(2)File name(文件名字):top。
(3)File location(文件位置):Local to Project。
注: (1)在File type(文件类型)中提供的可选文件类型包括Verilog(.v后缀名)、Verilog Header(.vh 后缀名)、SystemVerilog(.sv 后缀名)、VHDL(.vhdl 或.vhd 后缀名)或 Memory File(.mem后缀名)。
(2)对于使用 VHDL 开发工程的读者,如果在图 3.6 中将“Target language”设置为“VHDL”,则“File type”默认设置为“VHDL”。
第五步 :单击图3.9中的【OK】按钮,退出“Create Source File”对话框。
第六步 :在图3.8所示的对话框中自动添加了top.v文件,如图3.10所示。
图3.10 添加top.v/top.vhd文件后的对话框
注: 若在图 3.9 中的“File type”设置为“VHDL”,则在图 3.10 所示的对话框中添加了名字为“top.vhd”的源文件。
注: 默认情况下,所有HDL源文件都会添加到xil_defaultlib库中。在Library列中,设计人员可以引用现有的库名字,也可以手动键入新的库名字以根据需要指定其他用户库。
第七步 :单击图 3.10 右下角的【Finish】按钮,弹出“Define Module”对话框,该对话框可帮助设计人员定义模块(对于Verilog HDL为module)或实体(对于VHDL为entity)声明的端口。
在该对话框中,需要添加clk、a、b和z四个端口。其中I/O Port Definitions(I/O端口定义)定义了添加到模块定义中的端口。
① Port Name(端口名字)定义出现在RTL代码中的端口名字(通过文本框输入设置)。
② Direction(方向):指定端口是输入、输出或双向端口(通过下拉框设置)。
③ Bus(总线):指定端口是否是总线端口。如果是,则使用最高有效位(Most Signifiant Bit,MSB)和最低有效位(Least Significant Bit,LSB)选项定义总线宽度(通过复选框设置)。
④ MSB:定义 MSB 的数字。这与 LSB 字段相结合,以确定正在定义的总线宽度(通过旋转按钮设置)。
⑤ LSB:定义LSB的数字(通过旋转按钮设置)。
注: 如果端口不是总线端口(没有勾选Bus前面的复选框)时,MSB和LSB无效。
端口的定义规则如表3.1所示。
表3.1 端口的定义规则
(1)定义Verilog HDL模块(module)的端口:弹出如图3.11所示的“Define Module”对话框,在该对话框中按表格3.1中的内容设置参数。
图3.11 “Define Module”对话框(1)
(2)定义VHDL实体(entity)的端口:弹出如图3.12所示的“Define Module”对话框,在该对话框中按表格3.1中的内容设置参数。
图3.12 “Define Module”对话框(2)
第八步 :单击【OK】按钮,如图 3.13 所示,在 Sources 窗口中添加了 top.v 或 top.vhd文件。
图3.13 Sources窗口
第九步 :找到并双击图3.13中top.v文件或top.v文件。打开设计模板,修改设计模板,并添加设计代码,见代码清单3-1和代码清单3-2。在该设计中,两个输入逻辑量a和b进行了6种逻辑运算,并将产生的6种逻辑结果送到z(5)~z(0)端口。
代码清单3-1 top.v文件
代码清单3-2 top.vhd文件
注: 对于使用Verilog HDL的FPGA开发人员,输入代码清单3-1中给出的代码;对于使用VHDL的FPGA开发人员,输入代码清单3-2中给出的代码。
第十步 :添加完 Verilog HDL/VHDL 设计代码后,按下 Ctrl+S 组合键,保存 top.v/top.vhd文件。
注:
在大多数情况下,Vivado IDE 会自动识别设计的顶层模块。在某些情况下,如果可能有多个候选模块,工具会提示设计人员选中设计的顶层模块。设计人员可以在 Sources 窗口中选中要设置为顶层模块的源文件,单击鼠标右键,出现浮动菜单。在浮动菜单内,执行菜单命令【Set as Top】。当设置为顶层文件时,该文件的左侧用
符号标记。