时序例外约束是什么?时序例外约束指的是约束这些路径在综合时不让工具去分析它们。

时序例外约束包括:

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中:

这一节学一学时序例外约束相关推荐

  1. vivado 时序例外约束

    在不改变代码情况下,时序例外约束可以说是vivado中满足时序要求最有效的方法.因为vivado默认所有时钟路径之间都是同步的,会尝试分析和满足所有的路径.通过设置时序例外约束,告诉vivado软件不 ...

  2. VIVADO时序约束之时序例外(set_false_path)

    前言 当FPGA设计中的逻辑行为不能满足默认的时序要求时,设计者需要使用时序例外语法对该逻辑行为进行处理,例如:有些结果只需每个一个或多个时钟周期捕获一次. vivado开发工具支持4个时序例外约束的 ...

  3. 学着学着Linux系统写篇心得

    2019独角兽企业重金招聘Python工程师标准>>> 学着学着Linux系统写篇心得 本学期对于linux系统的学习,和自己买的一本<linux就该这么学>这本书,让我 ...

  4. 程序人生--一个程序员对学弟学妹建议

    我始终认为,对一个初学者来说,IT界的技术风潮是不可追赶.我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心.而许多搞不清指针是咋回事的B ...

  5. 【高考志愿填报-让你领先在起跑线上】学长给学弟学妹七点建议,字字珠玑!

    文章大纲 一:前言 二: 选择什么学校和选择什么专业 (一): 选择学校需要前需要考虑的事情 (二): 辅助你做决策的工具 (三): 选择什么专业 三: 计算机专业如何 (一) 什么是计算机类专业: ...

  6. 写给湘大计算机相关专业的学弟学妹们

    写给湘大计算机 写给湘大计算机相关专业的学弟学妹们 不管未来怎么样,但是作为一个大学四年真正奋斗过的学长,我觉得我比其他人更有资格写这样的一篇文章.希望能给湘大的学弟学妹们一些正能量. 奋斗篇 首先写 ...

  7. 软件测试到底是选择自学还是报培训机构(纯个人经验分享)----分享给正在迷茫的学弟学妹们!

    我猜大概有不少小伙伴和我一样在毕业后迫不及待地找了一份工作,抱着一干到底的心态勤劳工作,但在最初的热情消磨后却陡然惊醒,发现目前的工作不仅薪酬不高,而且缺乏上升空间.然后想办法转行就成了当务之急. 1 ...

  8. 5 FPGA时序约束理论篇之两种时序例外

    两种时序例外 多周期路径   上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿.如下图所示.   默认情况下,保持时间的检查是以建立时间的检查为 ...

  9. 福州理工学院C语言期末,如果有2020的毕业学弟学妹想考虑这个福州理工学院的话 作...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如果有2020的毕业学弟学妹想考虑这个福州理工学院的话 作为2019届的哥哥姐姐们劝你们快点逃!!!! 这个学校真的是我见过最奇葩的学校 说说这个学校在生 ...

最新文章

  1. 使用LDA(Linear Discriminant Analysis)进行降维(dimention reduction)详解和实战
  2. MVVM中轻松实现Command绑定任意事件的Command
  3. 十进制数和二进制数之间的转换
  4. 富交互Web应用中的撤销和前进
  5. 【LeetCode】剑指 Offer 16. 数值的整数次方
  6. SQL Server数据库log shipping 灾备(Part2 )
  7. 14-2 正则表达式
  8. python典型例题_经典动态规划例题整理(Python版)
  9. doubango安卓端的帧率太低,解决办法
  10. 行业揭秘:A股日内“T+0” 赚钱的方法
  11. ODB for mysql
  12. MATLAB-alphaShape三维使用
  13. 大数据发展呈现十大趋势
  14. python小工具开发_python音乐下载小工具源码(tkinter)
  15. SMBus与I2C的区别
  16. 图片轮播的实现(详解两种方法)
  17. 从“女记者”到“地产一姐”,龙湖吴亚军的“三不”人生
  18. LwIP常见问题FAQ
  19. HIT-ICS程序人生大作业
  20. 学设计要学python吗_设计师为什么要学习python编程语言

热门文章

  1. 要抢红包?Python来帮你~
  2. 第三方库实现中文词频分析和词语可视化(jieba,wordcloud库)
  3. 中文意思:人家说着玩儿,你怎么就认起真来了.2006年日语等级报名网站、报名与考试时间!
  4. 为什么要使用freeze 命令迁移模块
  5. 基于官方开源Wine7.22完美使用通达信、微信软件
  6. 苹果手机桌面计算机没6,iPhone6连接电脑没有反应的六个原因分析
  7. mysql备份文件类型_mysql8 参考手册--备份和恢复类型
  8. Springboot整合Netty注意事项
  9. 给普通人的Python——第五章(上)
  10. 迈克尔·杰克逊-布加勒斯特演唱会