本帖最后由 正点原子运营 于 2023-3-13 11:04 编辑
第四章 Vivado软件的安装和使用
1)实验平台:正点原子 DFZU2EG/4EV MPSoC开发板
2) 章节摘自【正点原子】DFZU2EG/4EV MPSoC之FPGA开发指南 V1.0
6)FPGA技术交流QQ群:994244016
Vivado Design Suite是Xilinx公司的综合性FPGA开发软件,可以完成从设计输入到硬件配置的完整FPGA设计流程。本章我们将学习如何安装Vivado软件以及Vivado软件的使用方法,为大家在接下来学习实战篇打下基础。 本章包括以下几个部分: 4.1 Vivado软件的安装 4.2 Vivado软件的使用 4.3 在线逻辑分析仪的使用 4.4 在Vivado中进行功能仿真
4.1 Vivado软件的安装X Xilinx公司每年都会对Vivado设计套件进行更新,各个版本之间除界面以及其它性能的优化之外,基本的使用功能都是一样的,我们光盘中提供的是最新版Vivado 19.2版本,接下来安装Vivado 19.2(以下简称Vivado)版本的软件。
首先在DFZU2EG/4EVMPSoC开发板资料盘(B盘)→Vivado 19.2文件夹下找到Vivado 19.2的安装包文件,文件列表如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 图 4.1.1 Vivado安装包文件夹
将压缩包解压出来(注意,解压目录的路径名称只能够包含字母、数字、下划线,否则安装程序有可能出问题),为避免在安装过程中出错,在开始安装之前,请先关闭安全或杀毒软件。双击解压出来的文件夹下的“xsetup.exe”,开始安装Vivado软件,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 图 4.1.2 双击“xsetup.exe”
进入Vivado的安装引导页面,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 图 4.1.3 Vivado软件的安装引导页面
在接下来的页面中,勾选3个“I Agree”,然后点击“next”如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png 图 4.1.4 勾选“I Agree”
接下来是选择版次,这里我们选择全功能的版次,即“System Edition”,其包含最多的子组件。如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 图 4.1.5 选择版次
接下来是选择工具组件和器件库。为了节省存储空间,我们将用不到的工具组件和器件库去掉,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg 图 4.1.6 选择组件和器件库
最下面的“DiskSpace Required”表示在当前选项下Vivado在安装完成后所占用的磁盘空间大小,为76.42GB。由此可见,Vivado对硬盘存储空间的占用相对来说还是挺大的。 点击Next,进入安装目录设置页面,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg 图 4.1.7 安装目录设置
图中红色方框内是对安装目录的设置,默认安装在C盘下的“Xilinx”文件夹下,如果需要,可以点击后面的三个点来修改安装目录(注意,安装路径只能够包含字母、数字、下划线,否则安装程序有可能出问题)。其他的设置保持默认即可。 点击Next,进入Summary界面,该界面总结了前面所有安装的配置信息,供用户浏览确认。确认无误后,点击“Install”开始安装Vivado设计套件,如下图所示。(由于Vivado在安装期间会占用大量的电脑CPU资源和内存资源,所以笔者建议在开始安装之前,尽量关闭电脑中其他的不必要的应用软件) file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg 图 4.1.8 开始安装
之后会出现下面的正在安装界面: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg 图 4.1.9 正在安装
安装过程可能会耗费一些时间,请读者耐心等待。 在安装期间可能会出面如下消息: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png 图 4.1.10 点击确定即可
弹出的这个界面是提示我们断开所有的Xilinx下载器与电脑的连接。值得注意是,在安装Vivado软件的过程中,会安装Xilinx下载器的驱动程序,这里必须断开Xilinx下载器和电脑的连接,否则下载器的驱动可能安装失败。断开连接后,点击确定即可。 最后出现了安装成功的消息窗口,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png 图 4.1.11 安装成功
我们直接点击确定即可。一同弹出的还有“Vivado License Manager”窗口,我们可以选择30天试用期,也可以通过购买Xilinx正版的License等途径来正常使用(请查看安装包目录下“安装说明.txt”)。如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg 图 4.1.12 “Vivado License Manager”窗口
至此,Vivado设计套件的安装就成功完成了,我们可以在电脑桌面上看到Vivado2019.2的图标,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg 图 4.1.13 Vivado 2019.2的桌面图标
4.2 Vivado软件的使用在开始使用Vivado软件之前,我们先来了解一下Vivado软件的使用流程,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg 图 4.2.1 Vivado软件使用流程
从上图可以看出,首先打开Vivado软件,新建一个工程,在新建工程的时候,我们可以通过新建工程向导的方式来创建工程;工程建立完成后,我们需要新建一个Verilog顶层文件,然后我们将设计的代码输入到新建的Verilog顶层文件中;HDL源代码输入完毕之后,就是对设计文件进行分析与综合了。
在代码输入以及设计分析阶段,Vivado软件会检查代码,如果代码出现语法错误,那么Vivado软件将会给出相关错误提示。在FPGA设计中,综合(Synthesis)就是将RTL设计转变为由FPGA器件中的查找表(LUT)、触发器(FF)等各种底层电路单元所组成的网表,在这个过程中综合器也会对设计进行优化,例如,删除多余的逻辑等等。
综合完成后,我们需要进行约束的输入。约束表达了设计者期望满足的时序要求,规范了设计的时序行为,并在综合、实现阶段来指导工具进行布局、布线,工具会按照你的约束尽量去努力实现以满足时序要求,并在时序报告中给出结果。常用的约束包括时序约束、引脚约束等等。
接下来就可以实现整个设计了,包括布局和布线等。如果实现成功,则Vivado会给出提示结果。此时,就可以生成用于下载到器件中的比特流文件了。最后,我们会通过下载器来将这个比特流文件下载到FPGA中,完成整个开发流程。 在这里,我们只是简单的介绍了一下上述的流程图,让大家对Vivado软件的开发流程有个大致的了解。接下来我们就以LED灯闪烁实验的工程为例,对每个流程进行详细的操作演示,一步步、手把手带领大家学习使用Vivado软件。
4.2.1 新建工程我们直接双击桌面上的Vivado2019.2软件图标,打开Vivado软件,Vivado软件启动界面如下图所示,我们点击“Create Project来创建一个新的工程”。
file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg 图 4.2.2 Vivado软件启动界面
出现下图所示窗口,我们直接点击“Next”,如下图所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image030.png 图 4.2.3 新建工程向导
接下来输入工程的名称和路径。名称要能反应出工程所实现的功能,本次工程实现了LED闪烁的功能,因此项目名称命名为“led_twinkle”。工程路径是指定本次工程存放在电脑磁盘中的位置,这个大家可以自行选择路径,需要说明的是,工程路径不能包含中文、空格或者其它一些特殊的符号,否则工程会创建失败。工程名和路径的设置如下图所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg 图 4.2.4 输入工程名称和路径
注意,由于默认勾选了“Createproject subdirectory”选项,Vivado会在所选工程目录下自动创建一个与工程名同名的文件夹,用于存放工程内的各种文件。并且Vivado会自动管理工程文件夹内的各种工程文件,并创建相应的子目录,这为我们的开发工作带来了很大的便捷。
我们继续点击“Next”按钮,接下来是工程类型的选择,我们选择“RTL Project”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg 图 4.2.5 工程类型的选择
这里简单介绍下各个工程类型的含义。“RTL Project”是指按照正常设计流程所选择的类型,这也是常用的一种类型,“RTLProject”下的“Do not specify sources at this time”用于设置是否在创建工程向导的过程中添加设计文件,如果勾选后,则不创建或者添加设计文件;“Post-synthesis Project”在导入第三方工具所产生的综合后网表时才选择;“I/O PlanningProject”一般用于在开始RTL设计之前,创建一个用于早期IO规划和器件开发的空工程;“Imported Project”用于从ISE、XST或Synopsys Synplify导入现有的工程源文件;“Example Project”是指创建一个Vivado提供的工程模板。
选择了“RTLProject”后,我们点击“Next”,进入添加源文件页面。注意,如果勾选中图 4.2.5中“RTL Project”下的“Do not specify sources at this time”,则不会出现添加源文件的界面。
在弹出添加源文件的界面后,可以在此处创建/添加源文件,当然也可以直接点击“Next”,创建完工程后再创建/添加源文件。这里直接点击“Next”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image036.jpg 图 4.2.6 添加源文件
接下来是添加约束文件,我们也是直接点击“Next”,创建完工程后再创建/添加约束文件,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image038.jpg 图 4.2.7 添加约束文件
接下来选择开发板的芯片型号,我们可以直接在搜素框中输入完整的芯片型号,大家根据自己所使用的开发板型号进行选择。如果使用的是XCZU4EV开发板,则输入“xczu4ev-sfvc784-1-i”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image040.jpg 图 4.2.8 MPSoC XCZU4EV开发板芯片型号
如果使用的是XCZU2EG开发板,则输入“xczu2eg-sfvc784-2-i”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image042.jpg 图 4.2.9 MPSoC XCZU2EG开发板芯片型号
在搜素框中输入完整的芯片型号后,在“Part”一栏会出现唯一匹配的型号,单击选中“Part”一栏的芯片型号,然后点击“Next”按钮。
需要说明的是,本次工程以XCZU4EV开发板为例,接下来的软件截图可能会出现XCZU4EV器件的芯片型号。大家使用XCZU4EV开发板和XCZU2EG开发板除了在创建工程向导选择的芯片型号不一样外,其余操作都是一样的,因此,我们接下来只贴XCZU4EV开发板器件的软件截图。
最后进入工程概览页面,这个页面将之前几个步骤中的设置全部列了出来,供用户检查,选择不同的芯片型号,概览页面列举的芯片型号也不一样,我们直接点击“Finish”按钮完成工程的创建,如图 4.2.10所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image044.jpg 图 4.2.10 工程概览(Summary)页面
工程创建完成后,就进入了Vivado的工程主界面,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image046.jpg 图 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):工作区显示了具有图形界面的窗口和需要更多屏幕空间的窗口,包括: • ProjectSummary。提供了当前工程的摘要信息,它在运行设计命令时动态地更新。 • 用于显示和编辑基于文本的文件和报告的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”窗口中的“+”号,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image047.png 图 4.2.12 添加源文件按钮
弹出下图所示界面,我们选择添加设计源文件(注意,Vivado不支持使用原理图的方式来输入设计),然后点击“Next”按钮,如下图所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image049.png 图 4.2.13 选择添加设计源文件
接下来在弹出的页面中添加或者创建一个文件。如果事先有编写好的代码,可以点击“Add Files”按钮来添加文件;如果没有,则点击“Create File”创建一个新的设计文件。由于我们事先没有编写好的设计文件,这里点击“Create File”来创建一个新的设计文件,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image051.png 图 4.2.14 点击创建源文件
接下来会弹出一个对话框,对创建的设计文件进行命名。这里我们输入源文件的名称“led_twinkle”,然后点击“OK”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image053.jpg 图 4.2.15 输入源文件名称
这时我们看到列表中已经出现了刚刚新创建的设计文件,点击“Finish”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image055.jpg 图 4.2.16 添加的源文件
接下来会弹出一个定义模块的页面,用于设置源文件的模块名称和端口列表,Vivado会根据在此窗口中的设置,自动地在HDL源文件中写入相应的verilog语句。我们会手动输入代码,所以这里不作任何设置,直接点击“OK”按钮即可,如下图所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image057.jpg 图 4.2.17 定义顶层模块名和模块端口
接下来会弹出一个模块定义确认的页面,直接点击“YES”即可,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image059.jpg 图 4.2.18 模块定义确认页面
这时工程主界面的“Sources”窗口中就出现了我们刚刚创建的源文件,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image060.png 图 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 //elseif(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软件的使用流程,不对代码做讲解,在后面的例程中,再来对代码做详细的介绍。
代码编写完成后,软件中显示的界面如下图所示。 file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image062.jpg 图 4.2.20 Verilog文件编写完成界面
另外,如果读者认为Vivado的Text Editor默认的字体比较小,也可以依次点击“Settings”→“Text Editor” →“Fonts and Colors”,在窗口中的“Size”选项中来修改字体大小,默认是12,我们修改为20,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image064.png 图 4.2.21 修改代码的字体大小
接下来我们单击工作空间中的保存按钮或者按下键盘的“Ctrl+S”,来保存编辑完成后的代码,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image065.png 图 4.2.22 保存源文件按钮
每次保存后,Vivado都会对源文件进行部分语法的检查,如果有语法的错误,Vivado会给出提示。另外,在大多数情况下,Vivado IDE会自动识别设计的顶层模块,当然,用户也可以手动指定顶层模块。从“Sources”窗口的右击菜单中选择“Set as Top”来手动定义顶级模块。
4.2.3 分析与综合代码输入完毕之后,就可以对设计进行分析(Elaborated)了。点击“Flow Navigator”窗口中的“Open Elaborated Design”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image066.png 图 4.2.23 “Open ElaboratedDesign”按钮
此时,Vivado会编译RTL源文件并进行全面的语法检查,并在Messages窗口中给出相应的“Error”和“Warning”。如果出现“Error”,则分析失败,用户必须修改设计文件,并重新编译源文件来取消“Error”。如果出现“Warning”,用户也可逐一查看,以确定哪些是设计缺陷,哪些是可以忽略的。打开分析后(Elaborated)的设计,Vivado会生成顶层原理图视图,并在默认view layout中显示设计,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image068.jpg 图 4.2.24 打开的Elaborated Design
可以看到,此时窗口布局已经发生了变化,新增了Schematic(原理图)、Netlist(网表)等窗口。此时,底部的Messages窗口会显示分析阶段产生的消息,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image070.jpg 图 4.2.25 Messages窗口中的消息
可以看出,我们LED闪烁实验的代码并没有产生警告或者错误。
此时,我们也可以进行I/O引脚分配,在右上角的窗口布局(Layout)选择器中选择“I/O Planing”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image071.png 图 4.2.26 点击“I/O Planing”Layout
此时,窗口布局会打开IO相关的子窗口,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image073.jpg 图 4.2.27 I/O Planing窗口布局
在下方的“I/O Ports”窗口中,就可以进行IO的分配了。这里我们暂时不分配,先对设计进行综合,综合之后再统一输入时序约束和IO引脚的物理约束。
我们关闭分析后的界面。在工作区域的顶部标题栏处,用鼠标右击,在弹出的命令列表中选择“close”,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image074.png 图 4.2.28 关闭分析后的设计
接下来点击“FlowNavigator”窗口中的“Run Synthesis”按钮,来对代码进行综合,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image075.png 图 4.2.29 “Run Synthesis”按钮
在弹出的窗口中我们直接点击OK,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image077.png 图 4.2.30 Launch Runs窗口
这时可以看到在“DesignRuns”窗口中显示正在综合,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image079.png 图 4.2.31 “DesignRuns”窗口
综合完成后,弹出如下窗口: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image081.png 图 4.2.32 综合完成
我们关闭该窗口。接下来进行约束的输入。
4.2.4 约束输入首先,我们需要先创建一个约束文件。点击“Sources”窗口中的“+”号,在弹出的窗口选择“Add or create constraints”,点击“NEXT”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image083.jpg 图 4.2.33 添加约束文件
在接下来的界面中点击“CreateFile”创建一个新的约束文件,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image085.jpg 图 4.2.34 Create File
在弹出的对话框中输入约束文件的名称“led_twinkle”,然后点击“OK”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image087.jpg 图 4.2.35 输入约束文件的名称
接下来点击“Finish”按钮,完成约束文件的创建,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image089.jpg 图 4.2.36 点击Finish
这时我们就可以在“Sources”窗口中看到添加的这个约束文件了,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image090.png 图 4.2.37 添加完成的约束文件
注意,Vivado的约束文件是以“.xdc”为后缀的文本文件,其中存储的是一条条的xdc约束命令。
我们双击打开led_twinkle.xdc文件,开始对工程进行约束。约束一般分为两种,一种是IO管脚的约束,另外一种是对时序进行约束。我们先来看下IO管脚的约束,约束语句如下: - #IO管脚约束
- #时钟管脚
- set_propertyIOSTANDARD DIFF_HSTL_I_12 [get_ports sys_clk_p]
- set_propertyIOSTANDARD DIFF_HSTL_I_12 [get_ports sys_clk_n]
- set_propertyPACKAGE_PIN AE5 [get_ports sys_clk_p]
- set_propertyPACKAGE_PIN AF5 [get_ports sys_clk_n]
- #复位管脚
- set_property-dict {PACKAGE_PIN AH11 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
- #LED灯
- set_property-dict {PACKAGE_PIN AE10 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
- set_property-dict {PACKAGE_PIN AF10 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
复制代码第一行以“#”号开头,表示这是一条注释语句,每一条注释也单独占用一行。从第三行开始是有效的约束命令,每一个约束命令单独占用一行,命令的结尾不需要像verilog代码一样,添加分号“;”结束符号。命令的第一个关键字代表该命令的名称,其后的所有字段都是该命令的参数列表。IO管脚约束是对端口的引脚位置和电平标准进行约束,例如3-6行命令是对系统时钟的管脚进行约束,“set_property”是命令的名称;“PACKAGE_PIN AE5”与“PACKAGE_PIN AF5”是引脚位置参数,代表引脚位置分别是AE5与AF5;“[get_ports sys_clk_p]”与“[get_ports sys_clk_n]”代表该约束所要附加的对象是sys_clk_p与sys_clk_n引脚;“IOSTANDARD DIFF_HSTL_I_12”代表该引脚所使用的电平标准是DIFF_HSTL_I_12。
IO管脚约束比较好理解,就是我们的程序所驱动的IO和MPSoC芯片的IO对应起来。而时序约束(Timing Constraints)用来描述设计人员对时序的要求,比如时钟频率,输入输出的延时等,以满足设计的时序要求。约束语句如下: - #时钟周期约束
- create_clock-name sys_clk_p -period 10.000 [get_ports sys_clk_p]
复制代码“create_clock”是该命令的名称,它会创建一个时钟;其后的“-name clk”、“-period 5”、“[get_ports sys_clk_p]”都是该命令的各个参数,分别表示所创建时钟的名称是“sys_clk_p k”、时钟周期是10ns、时钟源是 sys_clk_p端口,一般只对输入的时钟做周期的约束。
对时钟的约束最简单的理解就是,设计者需要告诉EDA工具设计中所使用的时钟的频率是多少;然后工具才能按照所要求的时钟频率去优化布局布线,使设计能够在要求的时钟频率下正常工作。本次实验sys_clk_p的时钟频率为100MHz,周期为10ns,在做约束时可以等于这个值或者略低于这个值,不建议周期设置的太小,否则软件在布局布线时很难满足这个要求。
其实对于比较简单的设计,可以不对工程做时序约束,即使不进行时序约束,也不影响最终的功能。而当设计变得复杂起来,或者输入的时钟频率比较高的时候,如果不添加时序约束,那么就有可能在验证设计结果的时候出现一些意料之外的情况。本次实验我们对进行了时序约束。led_twinkle.xdc文件输入IO管脚约束语句后,点击“保持”的图标或者按下键盘的“Ctrl+S”进行保存。输入IO管脚约束语句后如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image092.jpg 图 4.2.38 输入IO管脚约束语句
点击Text Editor中的保存按钮后,就完成了约束的输入。
另外,为了便于大家的查看,我们整理出了包含开发板上所有引脚分配的表格和XDC约束文件,位于资料盘(A盘)\3_正点原子DFZU2EG/4EV MPSoC开发板原理图文件夹下。
4.2.5 设计实现约束输入完毕之后,就可以开始实现设计了。我们点击“Flow Navigator”窗口中的“Run Implementation”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image093.png 图 4.2.39 点击“Run Implementation”按钮
在弹出的界面中直接点击OK即可,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image094.png 图 4.2.40 开始实现
这时可以看到“DesignRuns”窗口中显示正在进行实现,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image095.png 图 4.2.41 正在实现
实现完成后会弹出提示窗口,我们直接点击取消来关闭窗口,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image096.png 图 4.2.42 实现完成
这时我们再次查看“DesignRuns”窗口中的实现结果,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image098.jpg 图 4.2.43 实现结果
4.2.6 下载比特流在下载程序之前,首先要先生成用于下载到器件中的比特流文件,该文件的后缀为“.bit”。我们点击“Flow Navigator”窗口中的“Generate Bitstream”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image099.png 图 4.2.44 “Generate Bitstream”按钮
在弹出的窗口中直接点击OK,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image101.png 图 4.2.45 开始生成比特流
此时我们可以看到在“DesignRuns”窗口中显示正在生成比特流,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image102.png 图 4.2.46 正在生成比特流
比特流生成完毕之后,Vivado会弹出提示窗口,我们点击取消关闭该窗口: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image104.png 图 4.2.47 比特流生成完毕
接下来我们开始下载比特流,点击“Flow Navigator”窗口中的“Open Hardware Manager”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image105.png 图 4.2.48 “Open Hardware Manager”按钮
接着Vivado就会打开Hardware Manager,同时窗口布局也跟着发生了变化,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image107.jpg 图 4.2.49 Hardware Manager窗口布局
接下来我们就要用到开发板和Xilinx下载器了。首先将Xilinx下载器一端连接电脑,另一端与开发板上的JTAG接口相连接,然后连接开发板电源线。
注意!一定要先把下载器的一端连接到了电脑、另一端连接了JTAG接口之后,再给开发板上电!否则,对开发板的JTAG接口进行带电热插拔,有一定概率会损坏JTAG接口! 最后将开发板的电源拨码开关按键按照下图往电源指示灯的方向拨动对开发板进行上电,上电成功后开发板的电源指示灯会亮蓝灯。DFZU2EG/4EV MPSoC开发板的实物连接如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image109.jpg 图 4.2.50 DFZU2EG/4EV MPSoC开发板连接实物图
开发板连接完成后,点击“Hardware”子窗口中的“Auto Connect”按钮,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image111.jpg 图 4.2.51 “Auto Connect”按钮
在“Hardware”子窗口中出现如下界面就表示Vivado就已经和下载器连接成功了,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image113.jpg 图 4.2.52 与下载器连接成功
我们点击上图中的“ProgramDevice”,弹出的界面如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image115.jpg 图 4.2.53 下载比特流界面
此时BitstreamFile一栏会自动识别到工程的比特流文件,我们直接点击“Program”按钮下载程序,程序下载完成后,我们可以看到位于开发板上的LED灯在不断地闪烁了,如下图所示: file:///C:/Users/ALIENTEK/AppData/Local/Temp/msohtmlclip1/01/clip_image117.jpg 图 4.2.54 两个PL LED灯交替闪烁
需要说明的是,下载完比特流后,如果开发板断电,程序会丢失。如果想要程序断电不丢失的话,需要将程序固化至开发板中,这个需要在嵌入式Vitis软件中完成,MPSoC芯片无法单独固化比特流文件(PL的配置文件)。这是由于MPSoC非易失性存储器的引脚(如SD卡、QSPI Flash)是MPSoC PS部分的专用引脚,这些非易失性存储器由PS的ARM处理器进行驱动,需要将bit流文件和elf文件(软件程序的下载文件)合成一个BOOT.BIN,才能进行固化,因此需要学习MPSoC嵌入式Vitis的开发流程。在《DFZU2EG/4EV MPSoC开发板之嵌入式开发指南.pdf》文档中“第七章程序固化实验”,会有一个单独的章节向大家介绍程序固化的方法。 |