时序例外约束(falsePath/maxminDelay/multiCyc/pathMargin)

时序例外约束用于指导EDA工具在综合时对特定路径的处理。set_max_delay和set_min_delay用于设置路径的最大和最小延迟限制,防止建立时间和保持时间违规。set_false_path用于标记无功能性的路径,使其在时序分析中被忽略,如跨时钟域、复位信号和无逻辑控制的数据总线路径。set_multicycle_path则允许路径延迟超过单个时钟周期,常用于异步传输。set_path_margin调整路径的时序余量,可使检查更严格或宽松。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

时序例外约束包括:

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路径


   
   
  1. set_fasle_path - through cell 1 /pin 1 - through cell 2 /pin 2
  2. set_ false_path - through cell 2 /pin 2 - through cell 1 /pin 1

注意上面这两条约束是不一样的。

对于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:跨时钟域路径如何添加约束:


   
   
  1. set_ false_path - from [ get_clocks CLKA] - to [ get_clocks CLKB]
  2. 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我们可以添加这样的约束:


   
   
  1. create_clock -name CLKM -period 10 [ get_ports CLKM]
  2. set_multicycle_path 3 -setup - from [ get_pins UFF /Q] - to [ get_pins UFF 1 /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中:

set_path_margin是一个命令,用于设置路径的容差或保留余地,以确保电路中的时序要求得到满足。该命令可以通过指定路径的起点和终点来设置路径的容差,以确保在路径上的信号传输过程中,不会超过指定的延迟或时钟周期。另外,还可以使用set_path_margin命令来设置特定路径的容差,以确保其与其他路径之间的时序要求得到平衡。 例如,使用set_path_margin命令可以设置复位信号路径的容差,以避免复位信号传输过程中产生的时序问题。可以通过指定复位信号的起点和终点来设置该路径的容差,从而确保复位信号的稳定性和可靠性。 此外,对于需要设置no_function路径的情况,还可以使用set_false_path命令。通过使用-through选项,可以指定路径经过的特定点,而不需要选择起点和终点。这样可以确保路径中的所有信号都不会触发功能逻辑,从而避免不必要的时序问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [这一节学一学时序例外约束](https://blog.csdn.net/dongdongnihao_/article/details/125119798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值