C Vivado
这里以一个通过拨码开关控制LED灯的电路设计为例,介绍基于Vivado的FPGA设计实现流程。虽然我们对这个例子的介绍是基于Vivado2019.2进行的,但这里所介绍的内容完全适用于自Vivado 2017.1版本以来的各个版本。后续的新版本,请各位读者根据工具具体情况进行尝试,但相信这里介绍基本流程及功能应该都会保留。
C.1 创建工程
通过双击桌面快捷方式或开始菜单的“Xilinx Design Tools\(\rightarrow\)Vivado 2019.2”打开Vivado 2019.2,在界面上的“Quick Start”下选择“Create Project”,如图C.1所示。
这时即可新建工程向导,点击“Next”,如图C.2所示。
在图C.3所示界面中输入工程名称,选择工程的存储路径,并勾选“Create project subdirectory”选项,为工程在指定存储路径下建立独立的目录。设置完成后,点击“Next”。(注意:工程名称和存储路径中不能出现中文和空格,建议工程名称以字母、数字、下划线来组成。)
在图C.4所示的界面中选择“RTL Project”,并勾选“Do not specify sources at this time”(勾选该选项是为了跳过在新建工程的过程中添加设计源文件,如果要在新建工程时添加源文件则不勾选这个选项)。点击“Next”。
在图C.5所示的界面中选择对应的FPGA目标器件。本书推荐的本地实验箱和远程实验平台的FPGA型号一样。在“Family”中选择“Artix 7”,在“Package”中选择“fbg676”,在筛选得到的型号里面选择“xc7a200tfbg676-1”。上述选择完毕后点击“Next”。
在图C.6所示的界面中确认工程的设置信息是否正确。如果正确,则点击“ Finish”;如果不正确,则点击“上一步”,返回相应步骤进行修改。
完成工程新建后的界面如图C.7所示。
C.2 添加设计文件
我们以使用Verilog完成RTL设计为例来说明如何添加设计文件。Verilog代码都是以“.v”为后缀名的文件,可以先在其他文件编辑器里写好代码,再添加到新建的工程中,也可以在工程中新建一个文件再编辑它。
首先添加源文件。在“Flow Navigator”窗口下的“PROJECT MANAGER”下点击“Add sources”,或者点击“Sources”窗口下“Add Sources”按钮(参见图C.8),也可以使用快捷键“Alt + A”添加源文件。
然后添加设计文件。选择“Add or create design sources”来添加或新建Verilog/VHDL源文件,再点击“Next”,如图C.9所示。
接下来添加或者新建设计文件。如添加已有设计文件或者添加包含已有设计文件的文件夹,可以选择“Add Files”或者“Add Directories”,然后在文件浏览窗口选择已有的设计文件完成添加;如创建新的设计文件,则选择“ Create File”。这里选择添加已有设计文件,如图C.10所示。
C.3 功能仿真
Vivado中集成了仿真器Vivado Simulator,可以用它来进行功能仿真。
首先添加测试激励文件。在“Source”中“Simulation Sources”处右击鼠标,选择“Add source”,如图C.11所示。
在“Add Sources”界面中选择“Add or create simulation sources”,点击“Next”,如图C.12所示。
选择“Add Files”,添加已有的激励测试文件,如图C.13所示。
接下来进行仿真。在左侧的“Flow Navigator”窗口中点击“SIMULATION”下的“Run Simulation”选项(如图C.14所示),选择“ Run Behavioral Simulation”,进入仿真界面(如图C.15所示)。
可通过图C.15左侧“Scope”一栏中的目录结构定位到想要查看的Module内部信号,在“Objects”对应的信号名称上右击鼠标选择“Add To Wave Window”,将信号加入波形图中(如图C.16所示)。仿真器默认显示I/O信号。由于这个示例不存在内部信号,因此不需要添加其他观察信号。
可通过选择工具栏中的选项来进行波形的仿真时间控制。如图C.17所示,工具条中的工具分别是复位波形(即回到仿真0时刻)、运行仿真、运行特定时长的仿真、仿真时长设置、仿真时长单位、单步运行、暂停、重启动(重新编译设计和仿真文件并重启仿真波形界面)。我们可以观察仿真波形是否符合预期功能。
在波形显示窗口上侧是波形图控制工具,由左到右分别是:查找、保存波形配置、放大、缩小、缩放到全显示、转到光标、转到时刻0、转到最后时刻、前一个跳变、下一个跳变、添加标记、前一个标记、下一个标记、交换光标,参见图C.18。
可通过右键选中信号来改变信号值的显示进制数。如图C.19所示,将信号改为二进制显示。
查看波形以检查设计功能的正确性,如图C.20所示。
C.4 添加约束文件
添加约束文件有两种方法,一种是利用Vivado中I/O Planning功能,另一种是直接创建XDC约束文件,手动输入约束命令后再添加加工程中。这里主要介绍第二种方法。
首先点击“Add Sources”,选择“Add or create constraints”,点击“Next”,如图C.21所示。
然后添加或创建约束文件。点击“Add Files”添加约束文件,如图C.22所示。
C.5 综合实现和生成比特流文件
在“Flow Navigator”中点击“PROGRAM AND DEBUG”下的“Generate Bitstream”选项,工程会自动完成综合、布局布线、比特流文件生成的工作。如图C.23所示。完成之后,可点击“Open Implemented Design”来查看工程实现结果。
如果出现图C.24所示的提示,意味着综合过期,需重新运行综合和实现。这时点击“Yes”,在弹出的“Launch Runs”窗口点击“OK”。
C.6 本地FPGA烧写配置
如果选用的是本地FPGA实验平台,那么在比特流文件生成后就可以进入烧写配置FPGA的阶段了。具体操作是:在比特流文件生成完成的窗口选择“Open Hardware Manager”,点击OK,进入硬件管理界面,如图C.25所示。连接FPGA开发板的电源线和与电脑的下载线,打开FPGA电源。
在“Hardware Manager”窗口的提示信息中,点击“Open target”下拉菜单的“Open New Target”(或在“Flow Navigator” 下 的“PROGRAM AND DEBUG” 中展开“Open Hardware Manager”, 点击“Open Target\(\rightarrow\)Open New Target”),也可以选择“AutoConnect”来自动连接器件,如图C.26所示。
在“Open Hardware Target”向导中,先点击“Next”,进入Server选择向导,如图C.27所示。
选择连接到“Local server”,点击“Next”,如图C.28所示。
在图C.29所示的界面中选择目标硬件,点击“Next”。
点击“Finish”,打开目标硬件,如图C.30所示。
接下来对目标硬件编程。在“Hardware”窗口右键单击目标器件“xc7a200t_0”,选择“Program Device…”;或者在“Flow Navigator”窗口中点击“PROGRAM AND DEBUG\(\rightarrow\)Hardware Manager\(\rightarrow\)Program Device”。如图C.31所示。
选择下载的比特流文件,点击“Program”,如图C.32所示。
完成下载后,“Hardware”窗口下的“xc7a200t_0”的状态变成“Programmed”,如图C.33所示。
此时,在FPGA开发板上,8个拨码开关SW18~SW25对应控制8个Led灯LED1~LED8的亮灭。设计完成。运行结果如图C.34所示。
C.7 远程FPGA烧写配置
如果选用的是远程FPGA实验平台,那么只有最后一步烧写配置与本地FPGA实验平台不同,前面的各个步骤都是完全一样的。
首先,找到Vivado生成的比特流文件。对于本节的例子来说,通常是在led\led.runs\impl_1\目录下的led.bit文件。当工程项目名称发生变化时,将上述路径和文件名中的led换成新工程的名字即可。
然后,在浏览器中打开“计算机系统能力培养远程实验平台”的登录页面,进入平台之后,在如图C.35所示的界面中选择好比特流文件之后,点击“上传并开始”。
比特流文件上传完成后,将进入如图C.36所示的远程 FPGA 开发板操作界面。根据页面上的提示进行相应的操作即可。