1)实验平台:正点原子MPSoC开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html
第四章Vivado软件的安装和使用
Vivado Design Suite是Xilinx公司的综合性FPGA开发软件,可以完成从设计输入到硬件配置的完整FPGA设计流程。本章我们将学习如何安装Vivado软件以及Vivado软件的使用方法,为大家在接下来学习实战篇打下基础。
本章包括以下几个部分:
444.1Vivado软件的安装
4.2Vivado软件的使用
4.3在线逻辑分析仪的使用
4.4在Vivado中进行功能仿真
4.1Vivado软件的安装
X Xilinx公司每年都会对Vivado设计套件进行更新,各个版本之间除界面以及其它性能的优化之外,基本的使用功能都是一样的,我们光盘中提供的是最新版Vivado 19.2版本,接下来安装Vivado 19.2(以下简称Vivado)版本的软件。
首先在DFZU2EG/4EV MPSoC开发板资料盘(B盘)→Vivado 19.2文件夹下找到Vivado 19.2的安装包文件,文件列表如下图所示:
图 4.1.1 Vivado安装包文件夹
将压缩包解压出来(注意,解压目录的路径名称只能够包含字母、数字、下划线,否则安装程序有可能出问题),为避免在安装过程中出错,在开始安装之前,请先关闭安全或杀毒软件。双击解压出来的文件夹下的“xsetup.exe”,开始安装Vivado软件,如下图所示:
图 4.1.2 双击“xsetup.exe”
进入Vivado的安装引导页面,如下图所示:
图 4.1.3 Vivado软件的安装引导页面
在接下来的页面中,勾选3个“I Agree”,然后点击“next”如下图所示:
图 4.1.4 勾选“I Agree”
接下来是选择版次,这里我们选择全功能的版次,即“System Edition”,其包含最多的子组件。如下图所示:
图 4.1.5 选择版次
接下来是选择工具组件和器件库。为了节省存储空间,我们将用不到的工具组件和器件库去掉,如下图所示:
图 4.1.6 选择组件和器件库
最下面的“Disk Space Required”表示在当前选项下Vivado在安装完成后所占用的磁盘空间大小,为76.42GB。由此可见,Vivado对硬盘存储空间的占用相对来说还是挺大的。
点击Next,进入安装目录设置页面,如下图所示:
图 4.1.7 安装目录设置
图中红色方框内是对安装目录的设置,默认安装在C盘下的“Xilinx”文件夹下,如果需要,可以点击后面的三个点来修改安装目录(注意,安装路径只能够包含字母、数字、下划线,否则安装程序有可能出问题)。其他的设置保持默认即可。
点击Next,进入Summary界面,该界面总结了前面所有安装的配置信息,供用户浏览确认。确认无误后,点击“Install”开始安装Vivado设计套件,如下图所示。(由于Vivado在安装期间会占用大量的电脑CPU资源和内存资源,所以笔者建议在开始安装之前,尽量关闭电脑中其他的不必要的应用软件)
图 4.1.8 开始安装
之后会出现下面的正在安装界面:
图 4.1.9 正在安装
安装过程可能会耗费一些时间,请读者耐心等待。
在安装期间可能会出面如下消息:
图 4.1.10 点击确定即可
弹出的这个界面是提示我们断开所有的Xilinx下载器与电脑的连接。值得注意是,在安装Vivado软件的过程中,会安装Xilinx下载器的驱动程序,这里必须断开Xilinx下载器和电脑的连接,否则下载器的驱动可能安装失败。断开连接后,点击确定即可。
最后出现了安装成功的消息窗口,如下图所示:
图 4.1.11 安装成功
我们直接点击确定即可。一同弹出的还有“Vivado License Manager”窗口,我们可以选择30天试用期,也可以通过购买Xilinx正版的License等途径来正常使用(请查看安装包目录下“安装说明.txt”)。如下图所示:
图 4.1.12 “Vivado License Manager”窗口
至此,Vivado设计套件的安装就成功完成了,我们可以在电脑桌面上看到Vivado2019.2的图标,如下图所示:
图 4.1.13 Vivado 2019.2的桌面图标
4.2Vivado软件的使用
在开始使用Vivado软件之前,我们先来了解一下Vivado软件的使用流程,如下图所示:
图 4.2.1 Vivado软件使用流程
从上图可以看出,首先打开Vivado软件,新建一个工程,在新建工程的时候,我们可以通过新建工程向导的方式来创建工程;工程建立完成后,我们需要新建一个Verilog顶层文件,然后我们将设计的代码输入到新建的Verilog顶层文件中;HDL源代码输入完毕之后,就是对设计文件进行分析与综合了。
在代码输入以及设计分析阶段,Vivado软件会检查代码,如果代码出现语法错误,那么Vivado软件将会给出相关错误提示。在FPGA设计中,综合(Synthesis)就是将RTL设计转变为由FPGA器件中的查找表(LUT)、触发器(FF)等各种底层电路单元所组成的网表,在这个过程中综合器也会对设计进行优化,例如,删除多余的逻辑等等。
综合完成后,我们需要进行约束的输入。约束表达了设计者期望满足的时序要求,规范了设计的时序行为,并在综合、实现阶段来指导工具进行布局、布线,工具会按照你的约束尽量去努力实现以满足时序要求,并在时序报告中给出结果。常用的约束包括时序约束、引脚约束等等。
接下来就可以实现整个设计了,包括布局和布线等。如果实现成功,则Vivado会给出提示结果。此时,就可以生成用于下载到器件中的比特流文件了。最后,我们会通过下载器来将这个比特流文件下载到FPGA中,完成整个开发流程。
在这里,我们只是简单的介绍了一下上述的流程图,让大家对Vivado软件的开发流程有个大致的了解。接下来我们就以LED灯闪烁实验的工程为例,对每个流程进行详细的操作演示,一步步、手把手带领大家学习使用Vivado软件。
4.2.1新建工程
我们直接双击桌面上的Vivado 2019.2软件图标,打开Vivado软件,Vivado软件启动界面如下图所示,我们点击“Create Project来创建一个新的工程”。
图 4.2.2 Vivado软件启动界面
出现下图所示窗口,我们直接点击“Next”,如下图所示。
图 4.2.3 新建工程向导
接下来输入工程的名称和路径。名称要能反应出工程所实现的功能,本次工程实现了LED闪烁的功能,因此项目名称命名为“led_twinkle”。工程路径是指定本次工程存放在电脑磁盘中的位置,这个大家可以自行选择路径,需要说明的是,工程路径不能包含中文、空格或者其它一些特殊的符号,否则工程会创建失败。工程名和路径的设置如下图所示。
图 4.2.4 输入工程名称和路径
注意,由于默认勾选了“Create project subdirectory”选项,Vivado会在所选工程目录下自动创建一个与工程名同名的文件夹,用于存放工程内的各种文件。并且Vivado会自动管理工程文件夹内的各种工程文件,并创建相应的子目录,这为我们的开发工作带来了很大的便捷。
我们继续点击“Next”按钮,接下来是工程类型的选择,我们选择“RTL Project”,如下图所示:
图 4.2.5 工程类型的选择
这里简单介绍下各个工程类型的含义。“RTL Project”是指按照正常设计流程所选择的类型,这也是常用的一种类型,“RTL Project”下的“Do not specify sources at this time”用于设置是否在创建工程向导的过程中添加设计文件,如果勾选后,则不创建或者添加设计文件;“Post-synthesis Project”在导入第三方工具所产生的综合后网表时才选择;“I/O Planning Project”一般用于在开始RTL设计之前,创建一个用于早期IO规划和器件开发的空工程;“Imported Project”用于从ISE、XST或Synopsys Synplify导入现有的工程源文件;“Example Project”是指创建一个Vivado提供的工程模板。
选择了“RTL Project”后,我们点击“Next”,进入添加源文件页面。注意,如果勾选中图 4.2.5中“RTL Project”下的“Do not specify sources at this time”,则不会出现添加源文件的界面。
在弹出添加源文件的界面后,可以在此处创建/添加源文件,当然也可以直接点击“Next”,创建完工程后再创建/添加源文件。这里直接点击“Next”,如下图所示:
图 4.2.6 添加源文件
接下来是添加约束文件,我们也是直接点击“Next”,创建完工程后再创建/添加约束文件,如下图所示:
图 4.2.7 添加约束文件
接下来选择开发板的芯片型号,我们可以直接在搜素框中输入完整的芯片型号,大家根据自己所使用的开发板型号进行选择。如果使用的是XCZU4EV开发板,则输入“xczu4ev-sfvc784-1-i”,如下图所示:
图 4.2.8 MPSoC XCZU4EV开发板芯片型号
如果使用的是XCZU2EG开发板,则输入“xczu2eg-sfvc784-2-i”,如下图所示:
图 4.2.9 MPSoC XCZU2EG开发板芯片型号
在搜素框中输入完整的芯片型号后,在“Part”一栏会出现唯一匹配的型号,单击选中“Part”一栏的芯片型号,然后点击“Next”按钮。
需要说明的是,本次工程以XCZU4EV开发板为例,接下来的软件截图可能会出现XCZU4EV器件的芯片型号。大家使用XCZU4EV开发板和XCZU2EG开发板除了在创建工程向导选择的芯片型号不一样外,其余操作都是一样的,因此,我们接下来只贴XCZU4EV开发板器件的软件截图。
最后进入工程概览页面,这个页面将之前几个步骤中的设置全部列了出来,供用户检查,选择不同的芯片型号,概览页面列举的芯片型号也不一样,我们直接点击“Finish”按钮完成工程的创建,如图 4.2.10所示。
图 4.2.10 工程概览(Summary)页面
工程创建完成后,就进入了Vivado的工程主界面,如下图所示:
图 4.2.11 Vivado工程主界面
下面介绍Vivado工程主界面中的几个主要子窗口:
(1)Flow Navigator。Flow Navigator提供对命令和工具的访问,其包含从设计输入到生成比特流的整个过程。 在点击了相应的命令时,整个Vivado工程主界面的各个子窗口可能会作出相应的更改。
(2)数据窗口区域。默认情况下,Vivado IDE的这个区域显示的是设计源文件和数据相关的信息。
• Sources窗口:显示层次结构(Hierarchy)、IP源文件(IP Sources)、库(Libraries)和编译顺序(Compile Order)的视图。
• Netlist窗口:提供分析后的(elaborated)或综合后的(synthesized)逻辑设计的分层视图。
(3)Properties窗口:显示有关所选逻辑对象或器件资源的特性信息。
(4)工作空间(Workspace):工作区显示了具有图形界面的窗口和需要更多屏幕空间的窗口,包括:
• Project Summary。提供了当前工程的摘要信息,它在运行设计命令时动态地更新。
• 用于显示和编辑基于文本的文件和报告的Text Editor。
• 原理图(Schematic)窗口。
• 器件(Device)窗口。
• 封装(Package)窗口。
(5)结果窗口区域:在Vivado IDE中所运行的命令的状态和结果,显示在结果窗口区域中,这是一组子窗口的集合。在运行命令、生成消息、创建日志文件和报告文件时,相关信息将显示在此区域。默认情况下,此区域包括以下窗口:
• Tcl Console:允许您输入Tcl命令,并查看以前的命令和输出的历史记录。
• Messages:显示当前设计的所有消息,按进程和严重性分类,包括“Error”、“Critical Warning”、“Warning”等等
• Log:显示由综合、实现和仿真run创建的日志文件。
• Reports:提供对整个设计流程中的活动run所生成的报告的快速访问。
• Designs Runs:管理当前工程的runs。
(6)主工具栏:主工具栏提供了对Vivado IDE中最常用命令的单击访问。
(7)主菜单:主菜单栏提供对Vivado IDE命令的访问。
(8)窗口布局(Layout)选择器:Vivado IDE提供预定义的窗口布局,以方便设计过程中的各种任务。布局选择器使您能够轻松地更改窗口布局。或者,可以使用菜单栏中的“Layout”菜单来更改窗口布局。
4.2.2设计输入
下面我们就来创建工程顶层文件,我们点击“Sources”窗口中的“+”号,如下图所示:
图 4.2.12 添加源文件按钮
弹出下图所示界面,我们选择添加设计源文件(注意,Vivado不支持使用原理图的方式来输入设计),然后点击“Next”按钮,如下图所示。
图 4.2.13 选择添加设计源文件
接下来在弹出的页面中添加或者创建一个文件。如果事先有编写好的代码,可以点击“Add Files”按钮来添加文件;如果没有,则点击“Create File”创建一个新的设计文件。由于我们事先没有编写好的设计文件,这里点击“Create File”来创建一个新的设计文件,如下图所示:
图 4.2.14 点击创建源文件
接下来会弹出一个对话框,对创建的设计文件进行命名。这里我们输入源文件的名称“led_twinkle”,然后点击“OK”按钮,如下图所示:
图 4.2.15 输入源文件名称
这时我们看到列表中已经出现了刚刚新创建的设计文件,点击“Finish”按钮,如下图所示:
图 4.2.16 添加的源文件
接下来会弹出一个定义模块的页面,用于设置源文件的模块名称和端口列表,Vivado会根据在此窗口中的设置,自动地在HDL源文件中写入相应的verilog语句。我们会手动输入代码,所以这里不作任何设置,直接点击“OK”按钮即可,如下图所示。
图 4.2.17 定义顶层模块名和模块端口
接下来会弹出一个模块定义确认的页面,直接点击“YES”即可,如下图所示:
图 4.2.18 模块定义确认页面
这时工程主界面的“Sources”窗口中就出现了我们刚刚创建的源文件,如下图所示:
图 4.2.19 源文件创建完毕
我们双击打开“led_twinkle”文件,删除文件中默认的代码,然后替换成LED灯闪烁代码,代码如下:
1 module led_twinkle(
2 input sys_clk_p, //系统差分输入时钟
3 input sys_clk_n, //系统差分输入时钟
4 input sys_rst_n, //系统复位,低电平有效
5
6 output [1:0] led //LED灯
7 );
8
9 //reg define
10 reg [26:0] cnt;
11
12 //*****************************************************
13 //** main code
14 //*****************************************************
15
16 //对计数器的值进行判断,以输出LED的状态
17 assign led = (cnt < 27'd5000_0000) ? 2'b01 : 2'b10;
18 //assign led = (cnt < 27'd5) ? 2'b01 : 2'b10; //仅用于仿真
19
20 //转换差分信号
21 IBUFDS diff_clock
22 (
23 .I (sys_clk_p), //系统差分输入时钟
24 .IB(sys_clk__n), //系统差分输入时钟
25 .O (sys_clk) //输出系统时钟
26 );
27
28 //计数器在0~10000_0000之间进行计数
29 always @ (posedge sys_clk or negedge sys_rst_n) begin
30 if(!sys_rst_n)
31 cnt <= 27'd0;
32 else if(cnt < 27'd10000_0000)
33 //else if(cnt < 27'd10) //仅用于仿真
34 cnt <= cnt + 1'b1;
35 else
36 cnt <= 27'd0;
37 end
38
39 endmodule
这里需要注意的是,源代码前面的序号是为了方便大家查看代码的,在将源代码拷贝到软件编辑区的时候,需要去掉前面的序号,大家也可以直接从我们光盘中提供的源码代码中拷贝,源代码位于资料盘(A盘)下的4_SourceCODE\ MPSoC_XCZU4EV(MPSoC_XCZU2EG)\ 1_FPGA_Design\ 1_led_twinkle\ led_twinkle.srcs\ sources_1\ new\ led_twinkle.v(如果是压缩包的话,需要先解压)。
本章我们只是带领大家熟悉Vivado软件的使用流程,不对代码做讲解,在后面的例程中,再来对代码做详细的介绍。
代码编写完成后,软件中显示的界面如下图所示。
图 4.2.20 Verilog文件编写完成界面
另外,如果读者认为Vivado的Text Editor默认的字体比较小,也可以依次点击“Settings”→“Text Editor” →“Fonts and Colors”,在窗口中的“Size”选项中来修改字体大小,默认是12,我们修改为20,如下图所示:
图 4.2.21 修改代码的字体大小
接下来我们单击工作空间中的保存按钮或者按下键盘的“Ctrl+S”,来保存编辑完成后的代码,如下图所示:
图 4.2.22 保存源文件按钮
每次保存后,Vivado都会对源文件进行部分语法的检查,如果有语法的错误,Vivado会给出提示。另外,在大多数情况下,Vivado IDE会自动识别设计的顶层模块,当然,用户也可以手动指定顶层模块。从“Sources”窗口的右击菜单中选择“Set as Top”来手动定义顶级模块。
4.2.3分析与综合
代码输入完毕之后,就可以对设计进行分析(Elaborated)了。点击“Flow Navigator”窗口中的“Open Elaborated Design”按钮,如下图所示:
图 4.2.23 “Open Elaborated Design”按钮
此时,Vivado会编译RTL源文件并进行全面的语法检查,并在Messages窗口中给出相应的“Error”和“Warning”。如果出现“Error”,则分析失败,用户必须修改设计文件,并重新编译源文件来取消“Error”。如果出现“Warning”,用户也可逐一查看,以确定哪些是设计缺陷,哪些是可以忽略的。打开分析后(Elaborated)的设计,Vivado会生成顶层原理图视图,并在默认view layout中显示设计,如下图所示:
图 4.2.24 打开的Elaborated Design
可以看到,此时窗口布局已经发生了变化,新增了Schematic(原理图)、Netlist(网表)等窗口。此时,底部的Messages窗口会显示分析阶段产生的消息,如下图所示:
图 4.2.25 Messages窗口中的消息
可以看出,我们LED闪烁实验的代码并没有产生警告或者错误。
此时,我们也可以进行I/O引脚分配,在右上角的窗口布局(Layout)选择器中选择“I/O Planing”,如下图所示:
图 4.2.26 点击“I/O Planing”Layout
此时,窗口布局会打开IO相关的子窗口,如下图所示:
图 4.2.27 I/O Planing窗口布局
在下方的“I/O Ports”窗口中,就可以进行IO的分配了。这里我们暂时不分配,先对设计进行综合,综合之后再统一输入时序约束和IO引脚的物理约束。
我们关闭分析后的界面。在工作区域的顶部标题栏处,用鼠标右击,在弹出的命令列表中选择“close”,如下图所示:
图 4.2.28 关闭分析后的设计
接下来点击“Flow Navigator”窗口中的“Run Synthesis”按钮,来对代码进行综合,如下图所示:
图 4.2.29 “Run Synthesis”按钮
在弹出的窗口中我们直接点击OK,如下图所示:
图 4.2.30 Launch Runs窗口
这时可以看到在“Design Runs”窗口中显示正在综合,如下图所示:
图 4.2.31 “Design Runs”窗口
综合完成后,弹出如下窗口:
图 4.2.32 综合完成
我们关闭该窗口。接下来进行约束的输入。
4.2.4约束输入
首先,我们需要先创建一个约束文件。点击“Sources”窗口中的“+”号,在弹出的窗口选择“Add or create constraints”,点击“NEXT”按钮,如下图所示:
图 4.2.33 添加约束文件
在接下来的界面中点击“Create File”创建一个新的约束文件,如下图所示:
图 4.2.34 Create File
在弹出的对话框中输入约束文件的名称“led_twinkle”,然后点击“OK”按钮,如下图所示:
图 4.2.35 输入约束文件的名称
接下来点击“Finish”按钮,完成约束文件的创建,如下图所示:
图 4.2.36 点击Finish
这时我们就可以在“Sources”窗口中看到添加的这个约束文件了,如下图所示:
图 4.2.37 添加完成的约束文件