这一节学一学时序例外约束
时序例外约束是什么?时序例外约束指的是约束这些路径在综合时不让工具去分析它们。
时序例外约束包括:
set_max_delay/set_min_delay;
set_multicycle_path;
set_false_path ;
set_path_margin;
这类约束常见的形式如下图中所示:
优先级:
从图中可以看出,这类约束之间存在优先级的限制,同时约束本身也有优先级的存在。
比如:一次执行下面两条约束,尽管第二条执行较晚,但是工具还是会认定第一天约束设定的15为clk1到clk2之间路径的max delay值。
再比如:对图示路径一次进行如下四条时序例外约束,优胜者是第二条,但是如果再加最后一条约束false path的优先级最高,会取代之前所有的时序例外约束。
我们先学习一下set_max_delay/set_min_delay:
首先说明一下,这不是io约束,虽然好像有点像。
默认情况下,EDA工具会根据launch和capture时钟沿自动计算允许的最大和最小路径延迟,通过set_max_delay或者set_min_delay命令可以覆盖由EDA工具计算出的最大或者最小路径延迟。
例如,通过如下命令可以设置急促请你REG_A到REG_B之间的最大路径延迟为12ns
set_max_delay 12.0 -from [get_cells REGA] -to [get_cells REGB]
此时,当寄存器间的路径延时大于 "12-寄存器B的setup_time" 时发生timing violation
类似地,可以通过如下命令设置寄存器REGA到REGB之间的最小路径延时为2ns
set_min_delay 2.0 -from [get_cells REGA] -to [get_cells REGB]
此时,当寄存器间的路径延迟小于 “2+寄存器B的hold_time” 时发生hold violation
接下来重点看一下set_false_path的用法:
首先我们需要搞清楚的是什么路径我们要把它设置为false_path ?
通过这个文档描述可以得知,false_path是逻辑电路中实际存在的电路,但是要求它没有功能性,这个没有功能性如何理解?(其实就是数据bus路径,没有逻辑控制功能的path),所以,在时序分析的时候这些路径就可以被忽略。上面还举例说明了几种fasle_path的路径:跨时钟域逻辑,寄存器静态配置逻辑,resetn和test逻辑,异步fifo的读写逻辑。
下面分析说明上述false_path如何添加约束:
1:no_function_path如何添加false_path路径:
set_fasle_path -through cell1/pin1 -through cell2/pin2
set_false_path -through cell2/pin2 -through cell1/pin1
注意上面这两条约束是不一样的。
对于no_function path,还可以使用 -through 来代替 -from or -to ,使用-through选项可以避免选择start_point和end_point,而确保选择通过某个点的所有路径。
set_false_path -through [get_pins MUX1/a0] -through [get_pins MUX2/a1]
-through 选项的顺序非常关键,上面这句约束为例,路径约束先通过了pin MUX1/a0,然后通过pin MUX2/a1.
2:复位信号如何添加fasle_path路径:
set_false_path -from [get_port reset] -to [all_registers]
上述约束是添加从reset端口到所有寄存器的路径
3:跨时钟域路径如何添加约束:
set_false_path -from [get_clocks CLKA] -to [get_clocks CLKB]
set_false_path -from [get_clocks CLKB] -to [get_clocks CLKA]
在两个时钟域之间,设置false_path,应该是相互设置为false_path,所以是2条语句
4:异步双端口RAM或者异步FIFO,读写时钟为异步时钟,如何添加约束:
set_false_path -from [get_cells <write_register>] -to [get_cells <read_registers>]
然后我们看一看set_multicycle_path:
通常情况下,两个同步的reg进行timing_check时,组合逻辑的delay必须在一个时钟周期内到达,才能满足建立时间的要求,但是在某些情况下,从一个寄存器输出到另外一个寄存器的data端需要不止一个cycle的时间,而且这又不影响逻辑的功能。此时,我们可以把这样的path约束为multicycle path,下图中所示为一个3cycle的multicycle path的电路结构图和波形图。
对于上述path我们可以添加这样的约束:
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF/Q] -to [get_pins UFF1/D]
setup检查:
默认情况下,当UFF0/CK作为launch clock时(T=0ns时),在T=10ns时UFF1/CK采集到前一级过来的数据。
但是当我们通过上述约束设置以后,launch clk的沿推到了T=30ns,因此,两个寄存器之间的组合逻辑delay的要求就放松到了30ns,这样的状态下,Tsu是容易满足的。
hold检查:待补充!
我们再来看看set_path_margin:
通过set_path_margin命令,可以设置让某条路径的时序检查更为严格或者更为宽松。
set_path_margin 1.2 -from [get_cells FF4] -to [get_cells FF5]
上述命令使得信号在被寄存器FF5采样之前相对于原来的setup time提前1.2s到达稳定状态,当该命令所设置的值为正时,时序检查更为严格;当该命令所设置的值为负时,时序检查更为宽松。
如下图所示为设置set_path_margin 之后的时序报告,margin累计在data_required time中:
这一节学一学时序例外约束相关推荐
- vivado 时序例外约束
在不改变代码情况下,时序例外约束可以说是vivado中满足时序要求最有效的方法.因为vivado默认所有时钟路径之间都是同步的,会尝试分析和满足所有的路径.通过设置时序例外约束,告诉vivado软件不 ...
- VIVADO时序约束之时序例外(set_false_path)
前言 当FPGA设计中的逻辑行为不能满足默认的时序要求时,设计者需要使用时序例外语法对该逻辑行为进行处理,例如:有些结果只需每个一个或多个时钟周期捕获一次. vivado开发工具支持4个时序例外约束的 ...
- 学着学着Linux系统写篇心得
2019独角兽企业重金招聘Python工程师标准>>> 学着学着Linux系统写篇心得 本学期对于linux系统的学习,和自己买的一本<linux就该这么学>这本书,让我 ...
- 程序人生--一个程序员对学弟学妹建议
我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶.我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心.而许多搞不清指针是咋回事的B ...
- 【高考志愿填报-让你领先在起跑线上】学长给学弟学妹七点建议,字字珠玑!
文章大纲 一:前言 二: 选择什么学校和选择什么专业 (一): 选择学校需要前需要考虑的事情 (二): 辅助你做决策的工具 (三): 选择什么专业 三: 计算机专业如何 (一) 什么是计算机类专业: ...
- 写给湘大计算机相关专业的学弟学妹们
写给湘大计算机 写给湘大计算机相关专业的学弟学妹们 不管未来怎么样,但是作为一个大学四年真正奋斗过的学长,我觉得我比其他人更有资格写这样的一篇文章.希望能给湘大的学弟学妹们一些正能量. 奋斗篇 首先写 ...
- 软件测试到底是选择自学还是报培训机构(纯个人经验分享)----分享给正在迷茫的学弟学妹们!
我猜大概有不少小伙伴和我一样在毕业后迫不及待地找了一份工作,抱着一干到底的心态勤劳工作,但在最初的热情消磨后却陡然惊醒,发现目前的工作不仅薪酬不高,而且缺乏上升空间.然后想办法转行就成了当务之急. 1 ...
- 5 FPGA时序约束理论篇之两种时序例外
两种时序例外 多周期路径 上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿.如下图所示. 默认情况下,保持时间的检查是以建立时间的检查为 ...
- 福州理工学院C语言期末,如果有2020的毕业学弟学妹想考虑这个福州理工学院的话 作...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如果有2020的毕业学弟学妹想考虑这个福州理工学院的话 作为2019届的哥哥姐姐们劝你们快点逃!!!! 这个学校真的是我见过最奇葩的学校 说说这个学校在生 ...
最新文章
- 使用LDA(Linear Discriminant Analysis)进行降维(dimention reduction)详解和实战
- MVVM中轻松实现Command绑定任意事件的Command
- 十进制数和二进制数之间的转换
- 富交互Web应用中的撤销和前进
- 【LeetCode】剑指 Offer 16. 数值的整数次方
- SQL Server数据库log shipping 灾备(Part2 )
- 14-2 正则表达式
- python典型例题_经典动态规划例题整理(Python版)
- doubango安卓端的帧率太低,解决办法
- 行业揭秘:A股日内“T+0” 赚钱的方法
- ODB for mysql
- MATLAB-alphaShape三维使用
- 大数据发展呈现十大趋势
- python小工具开发_python音乐下载小工具源码(tkinter)
- SMBus与I2C的区别
- 图片轮播的实现(详解两种方法)
- 从“女记者”到“地产一姐”,龙湖吴亚军的“三不”人生
- LwIP常见问题FAQ
- HIT-ICS程序人生大作业
- 学设计要学python吗_设计师为什么要学习python编程语言
热门文章
- 要抢红包?Python来帮你~
- 第三方库实现中文词频分析和词语可视化(jieba,wordcloud库)
- 中文意思:人家说着玩儿,你怎么就认起真来了.2006年日语等级报名网站、报名与考试时间!
- 为什么要使用freeze 命令迁移模块
- 基于官方开源Wine7.22完美使用通达信、微信软件
- 苹果手机桌面计算机没6,iPhone6连接电脑没有反应的六个原因分析
- mysql备份文件类型_mysql8 参考手册--备份和恢复类型
- Springboot整合Netty注意事项
- 给普通人的Python——第五章(上)
- 迈克尔·杰克逊-布加勒斯特演唱会