Vivado软件的使用
目录
1 新建工程
1.1 Flow Navigator
1.2 数据窗口区域
1.3 Properties 窗口
1.4 工作空间(Workspace)
1.5 结果窗口区域
1.6 主工具栏
1.7 主菜单
1.8 窗口布局(Layout)选择器
2 设计输入
修改字体大小
3 分析与综合
4 约束输入
5 设计实现
6 下载比特流
1 新建工程
双击Vivado 2018.3
点击“Create Project”
工程创建完成后,就进入了 Vivado 的工程主界面,如下图所示:
下面介绍 Vivado 工程主界面中的几个主要子窗口:
1.1 Flow Navigator
Flow Navigator 提供对命令和工具的访问,其包含从设计输入到生成比特流的整个过程。 在点击了相应的命令时,整个 Vivado 工程主界面的各个子窗口可能会作出相应的更改。
1.2 数据窗口区域
1.3 Properties 窗口
1.4 工作空间(Workspace)
1.5 结果窗口区域
1.6 主工具栏
1.7 主菜单
1.8 窗口布局(Layout)选择器
2 设计输入
在弹出的页面中添加或者创建一个文件。如果事先有编写好的代码,可以点击“Add Files”按 钮来添加文件;如果没有,则点击“Create File”创建一个新的设计文件:
接下来会弹出一个定义模块的页面,用于设置源文件的模块名称和端口列表,Vivado 会根据在此窗口中的设置,自动地在 HDL 源文件中写入相应的 verilog 语句。我们会手动输入代码,所以这里不作任何设置,直接点击“OK”按钮即可:
这时工程主界面的“Sources”窗口中就出现了我们刚刚创建的源文件:
module led_twinkle(input sys_clk , //系统时钟input sys_rst_n, //系统复位,低电平有效output [1:0] led //LED 灯
);//reg define
reg [25:0] cnt ;//*****************************************************
//** main code
//*****************************************************//对计数器的值进行判断,以输出 LED 的状态
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;//计数器在 0~5000_000 之间进行计数
always @ (posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)cnt <= 26'd0;else if(cnt < 26'd5000_0000)cnt <= cnt + 1'b1;elsecnt <= 26'd0;
endendmodule
代码编写完成后,软件中显示的界面如下图所示。
修改字体大小
3 分析与综合
此时,我们也可以进行 I/O 引脚分配,在右上角的窗口布局(Layout)选择器中选择“I/O Planing”:
在下方的“I/O Ports”窗口中,就可以进行 IO 的分配了。这里我们暂时不分配,先对设计进行综合, 综合之后再统一输入时序约束和 IO 引脚的物理约束。
关闭分析后的界面:
可在“Design Runs”窗口中查看到正在综合。
综合完成后,弹出如下窗口:
关闭该窗口。接下来进行约束的输入。
4 约束输入
首先创建一个约束文件。点击“Sources”窗口中的“+”号,在弹出的窗口选择“Add or create constraints”,点击“NEXT”按钮,如下图所示:
在接下来的界面中点击“Create File”创建一个新的约束文件,如下图所示:
接下来点击“Finish”按钮,完成约束文件的创建:
这时我们就可以在“Sources”窗口中看到添加的这个约束文件了,如下图所示:
Vivado 的约束文件是以“.xdc”为后缀的文本文件,其中存储的是一条条的 xdc 约束命令。
#IO 管脚约束set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {led[0]}]set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
#时钟周期约束create_clock -name clk -period 20 [get_ports sys_clk ]
对时钟的约束最简单的理解就是,设计者需要告诉 EDA 工具设计中所使用的时钟的频率是多少;然后工具才能按照所要求的时钟频率去优化布局布线,使设计能够在要求的时钟频率下正常工作。本次实验sys_clk 的时钟频率为 50MHz,周期为 20ns,在做约束时可以等于这个值或者略低于这个值,不建议周期设置的太小,否则软件在布局布线时很难满足这个要求。
其实对于比较简单的设计,可以不对工程做时序约束,即使不进行时序约束,也不影响最终的功能。而当设计变得复杂起来,或者输入的时钟频率比较高的时候,如果不添加时序约束,那么就有可能在验证设计结果的时候出现一些意料之外的情况。由于本次实验较为简单,这里只对工程对 IO 管脚约束,不进行时序约束,led_twinkle.xdc 文件输入 IO 管脚约束语句后,点击“保存”的图标或者按下键盘的 “Ctrl+S”进行保存。输入 IO 管脚约束语句后如下图所示:
点击 Text Editor 中的保存按钮后,就完成了约束的输入。
5 设计实现
6 下载比特流
比特流生成完毕之后,Vivado 会弹出提示窗口,我们点击取消关闭该窗口:
Vivado软件的使用相关推荐
- 2.Vivado软件基础操作
FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...
- xilinx fpga 开发工具vivado 软件的安装,使用详细教程
文章目录 xilinx fpga 开发工具vivado 软件的安装,使用详细教程 xilinx fpga 开发工具vivado 软件的安装,使用详细教程 点此下载vivado软件的安装说明文档 点此下 ...
- Vivado软件(用VerilogHDL)如何使用$readmemh和$readmemb函数
0 前言 博主我查了很多资料,虽然会使用Verilog的readmemh和readmemh和readmemh和readmemb函数,可是,在vivado软件中怎么用?文件放在哪里?没有一篇文章提及. ...
- vivado软件如何查看内部器件的仿真信号
有时候,我们需要查看内部模块的信号,那么,在vivado软件该如何操作呢? 运行仿真,可以得到这个界面,之后看左侧部分,可以查看内部的模块. 例如单击rom0 可以看见其内部信号,然后在想观察的信号, ...
- (193)FPGA上电后IO的默认状态(Vivado软件默认为z)
(193)FPGA上电后IO的默认状态(Vivado软件默认为z) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(Vivado软件默认 ...
- (192)FPGA上电后IO的默认状态(Vivado软件默认为1)
(192)FPGA上电后IO的默认状态(Vivado软件默认为1) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(Vivado软件默认 ...
- (191)FPGA上电后IO的默认状态(Vivado软件默认为0)
(191)FPGA上电后IO的默认状态(Vivado软件默认为0) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(Vivado软件默认 ...
- (6)Vivado软件开发流程(第2天)
(6)Vivado软件开发流程(第2天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Vivado软件开发流程(第2天) 5)技术交流 6)参考资料 2 FPG ...
- 使用Vivado软件进行硬件调试
文章目录 前言 一.例化ILA IP核调试 二.在网表中添加探针调试 总结 前言 本文的主要内容是使用Vivado软件进行硬件的调试,介绍例化ILA IP核和在网表中添加探针这两种硬件调试的方法,重点 ...
最新文章
- C# System.Timers.Timer中的坑,程序异常退出后timer依然运行问题
- Android移动开发之【Android实战项目】DAY10-App端耗流量场景问题及减少消耗办法
- Android华容道之一步一步实现-4-图像块移动算法
- 4路组相连cache设计_Cache组织方式
- VTK:演示调用数据的用法实战
- 02:输出最高分数的学生姓名
- jvm 性能调优工具之 jstat
- SET ARITHABORT ON 对UI的影响
- mongoose如何发送html页面,Mongoose/Express/Nodejs尝试从服务器到html传递变量
- 参数化登陆防止SQL注入攻击
- Salt-Minion配置文件详解
- 一个简单简洁的社交媒体共享菜单
- 微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付
- Docker安装JanusGraph
- [深度学习概念]·主流声学模型对比
- 宏碁暗影骑士擎2022-重装系统-检测不到硬盘
- 实验环境的搭建以及异或门的设计仿真实验
- 会说话的汤姆猫纪念徽章藏品上线,集齐赢实物盲盒!
- 网页常见的图标图片格式的区别
- 知识付费项目不知如何获客?引流技巧你又知道多少?
热门文章
- 看 阿里人的工作生活是怎样的|2017 阿里人影像纪录短片发布
- iOS滚动的导航条(仿网易新闻)
- Motorola和Borland结成联盟,以帮助开发者为Motorola下一代无线电话创建应用程序 (转)...
- AngularJs轻松入门(七)多视图切换
- linux系统中XLib在什么位置,什么是glibc?glibc是什么?什么是freetype?freetype是什么?什么是?Xlib是什么?什么是lo...
- 服务网关配置:Zuul
- NCT 127‘英雄回归’:最精英的一批练习生走着最难的一条路
- Apriori算法总结
- hide,hidden,display:none,visibility的区别
- 前端进度报告(2018.6.3)