Vivado的Implementation都包含哪些步骤?
时间:2022-10-09
本文章向大家介绍Vivado的Implementation都包含哪些步骤?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Vivado的Implementation主要有三大步:
- opt_design,会生成opt_desgin.dcp
- place_design,会生成place_design.dcp
- route_design,会生成route_design.dcp
如果再详细一点:
- opt_design
在这一步,Vivado会对综合后的网表文件做一些优化,删除一些无用的或者Vivado认为可以冗余的逻辑,但如果代码中使用了
DONT_TOUCH
和MARK_DEBUG
,在此步骤就不会被优化掉。 - power_opt_design 这一步可以在opt_design后执行,也可以在place_design后执行,该步骤主要是用Xilinx的智能门控时钟方案来减少FPGA设计中的动态功耗,但并不会改变时钟和逻辑的设计。
- place_design
在布局时,Vivado的布局器会优先考虑下面三点:
- Timing Slace
- Wirelength
- Congestion 在布局之前,Vivado会进行DRC检查。但比较扯淡的是,如果DRC发现错误,很多情况下,下面的步骤并不会停止,直到生成bit文件时才报错,会让工程师误以为这一步没有问题。
- phys_opt_design
该步骤主要进行的优化如下:
- 对于高扇出的网络,如果在WNS的10%内具有负的裕量,则会考虑复制以降低高扇出;
- 对于临近的负载进行聚合,并为每个负载的集合复制一个驱动;
- 重新分析时序,如果时序有优化则会改动逻辑部分;
- 继续分析是否有高扇出,如果还有,则继续复制电路以降低高扇出。
- route_design
Vivado的router有两种工作模式:
- Normal模式,这是最常用也是默认的模式,在该模式下,布局器会以增量编译的方式对读入的文件进行布局,如果文件已经进行了部分布局,那么布局器会在此基础上继续布局,而不是从头开始。
- Re-Entrant模式,当我们要跑多个routing且各个routing之间有关联操作时使用该模式。如果是非Re-Entrant模式,布局器执行完成后,会清除内存空间,每次开始的时候都需要初始化。
Vivado会优先对全局资源进行布线,比如时钟、复位、I/O和其他专用资源;接下来就是根据时序的紧张程度进行布线,优先布线时序紧张的路径。
这里需要注意的是,在某些手动锁定的布线约束下,router通常无法对某些信号进行最佳布线,这往往是因为时序约束不规范导致的。如果我们仔细观察那些不是最优路径的网络,我们会发现问题经常出在时序约束上。
所以最好的方式就是在routing之前,查看place_design的时序报告,检查时序约束是否正确。所以对于大型工程,采用non-project方式可能更好一些,因为project模式下,我们直接点击Implementation就可以执行完所有的步骤了,往往中间的结果我们也不会很在意。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 实现秒转换成时分秒的方法
- Android实现简单用户注册案例
- Android原生视频播放VideoView的使用
- Android table布局开发实现简单计算器
- Android实现面包屑功能的代码(支持Fragment联动)
- Android自定义带动画效果的圆形ProgressBar
- Android App启动图启动界面(Splash)的简单实现代码
- WordPress头部去除window._wpemojiSettings代码
- Android小程序实现选项菜单
- Linux VPS安装Google Authenticator实现SSH登陆二次验证
- Android小程序实现访问联系人
- Android小程序实现切换背景颜色
- 浅析Android加载字体包及封装的方法
- android实现滑动标签页效果的代码解析
- Android PC端用ADB抓取指定应用日志实现步骤