天天看点

静态时序分析4——时序特例Timing exception学习目标:时序特例 

学习目标:

  • 定义时序特例
  • 时序特例的合法起点和终点 
  • 报告忽略的时序特例的命令
  •  给定多周期路径和规范,应用多周期路径约束

时序特例 

 什么是时序特例?

 跟default默认情况下检查不同的检查设置都可以归为timing exception。 

timing constraint几大块:

  • 时钟定义和时钟之间的关系。(design部分提供)
  • timing exception(不是所有的path都在一个cycle里面进行检查。但是时序例外必须是真实情况的反应,自己不要随便加)
  • IO constraint端口信号约束。
  • 静态信号、长值信号(长时间是某个值的信号)(有的也归在timing exception)

时序特例是改变默认单时钟检查的constraint。

//定义时钟,设置输入输出端口延时,工具默认是单周期检查
Create_clock
Set_input_delay
Set_output_delay
           

timing exception相关命令:

set_false_path
/*
false_path,对某个点定义后,不对它进行时序检查
不去进行时序检查 情况:
(1)design加入某个设计,但是芯片不需要这个功能。
(2)功能也用,但是优先级不高,芯片真正功能上用不到,可能是用来测试、监督信号。
(3)信号在整个芯片生命周期中,近乎是静态值。比如,在上电时动一下,或者,实现某一个功能应用时动一下(可以设置但是不推荐使用false,安全起见,设置为multicycle)
*/

set_multicycle_path   

/*
multicycle path多周期path,数据路径延时比较大,一个周期跑不到,或者功能实现不需要一个周期跑到
信号太长,一个周期传不过去。
情况:
从设计上来说:
(1)一些运算器data path特别长,功能不一定要一定在一个周期上做完,可以几个周期。
(2)信号切换不频繁,类似静态信号,长时间处于某个电平。
从后端便利性来说:
(3)从写constraint便利性考虑,减少constraint的复杂
*/

set_max_delay
/*
定义两个点之间的绝对延时。
(1)跨时钟域。异步逻辑,不会进行时序检查。一些设计中两个domin虽然异步,但是信号之间的传输延迟不能超过几个cycle,有时序要求。
(2)存在一个balance,好几个信号,在一定范围内同时到达。
*/

set_min_delay
/*
定义两点之间的绝对的最小延时
*/

//set_max_delay和set_min_delay一般成对出现。

report_exceptions //看看exception constraint

reset_path //重置timing path
           
//这些指令的语法:
//从那个点开始到那个点结束的约束
option有:
-from     //起始点
-to    //到哪里
-through    //经过哪个点

-rise_from
-fall_from
           

时序例外的合法起点和终点 

时序例外要从有效的startpoint开始到有效的endpoint结束。否则constraint会被ignore 。

起点startpoint:

  • Input Ports
  • Clock Pins of Registers

终点endpoint:

  • Output Ports
  • register除了clock pin的其他端口(reset pin、set pin、En pin<使能端口>、data pin)

减少时序例外的数量

 以下各项分别代表多少个例外?

静态时序分析4——时序特例Timing exception学习目标:时序特例 
set false path -from Q2 reg[*]/CP


set false path -from g2_reg[*]/CP -to 93_reg[*]/D    //*代替任意字符


set false path -from g2 reg[1]/CP-to reg[1]/D

//    .
//    .
//    .
set false path-from Q2 reg[32]/CP -to reg[32]/D


set false path -from clk2 -to clk3    //clock2 domin到clock3 domin这条路径设置为false

/*
这四个命令是等效的。
判断那个命令更好:
越精细化定位到startpoint和endpoint越好,太宽泛不好,有可能把其他不该false的路径false了。
*/
           

使用 -through 选项

–through 选项需要更多 CPU 用于大型设计

除非必要,否则不要使用 –through 

(工具计算起点终点花费时间多,而且没有人能保证through某个点的时候,把endpoint和startpoint写全部考虑清楚,容易误伤真实要检查的点)

当有一个引脚时使用 set_disable_timing 而不是 –through

Set_false_path –through U1/A

Set_disable_timing U1/A    
//disable timing arc,时序检查信息传不过这个逻辑,经过这个点的逻辑都被打断了
           

时序例外检查

report_exceptions –ignored //工具ignore的constraint报出来,看看哪里出问题做检查
check_timing
/*
option很多,有些时序没有clock也会报出来,有clock,但是没有timing path叫做unconstraint_endpoint,是因为加了timing exception路径被打断了,没法构成有效的时序路径
*/
           

时序例外的优先级

  • 同一指令优先级,越具体设置,优先级越高。
  • 不同指令优先级,false大于multicycle。

仅应用所需的时序例外

静态时序分析4——时序特例Timing exception学习目标:时序特例 
Set_false_path –to FF2/D –setup    //两条path都受影响
Set_false_path –from FF0/CP –to FF2/D -hold    //1-2保留了,0-2影响
           

 多周期路径

 加法器

静态时序分析4——时序特例Timing exception学习目标:时序特例 

时钟周期10ns,需要60ns计算时间。单cycle跑不了,需要六个cycle。

时序约束,用multicycle。

加了multicycle,指令:

create_clock –period 10 [get_ports CLK]
set_multicycle_path –setup 6 –to [get_pins “C_reg[*]/D”]
           

设置六倍的cycle,推六个cycle在周期60处做时序检查setup检查 

hold怎么去进行检查?

hold也会跟着走,少一个cycle 

create_clock –period 10 [get_ports CLK]
set_multicycle_path –setup 6 –to [get_pins “C_reg[*]/D”]
Set_multicycle_path –hold 5 –to [get_pins “C_reg[*]/D”

//multicycle设置成对出现
           

对应不同的hold check情况:

(1)数据很短,信号变化很快,但是传输路径长。

(2)数据很慢,经过长时间传到被采集的地方 。

静态时序分析4——时序特例Timing exception学习目标:时序特例 
静态时序分析4——时序特例Timing exception学习目标:时序特例 

继续阅读