set_data_check专题[使用,report_timing,setup/hold检查]

目录

 1.set_data_check基本概念及语法

2.检查path及report_timing报告格式

2.1 setup

2.2 hold

2.3 如何查看timing report

3.使用set_data_check完成信号间skew约束

3.1 setup/hold一起约束

3.2 只用setup约束


 1.set_data_check基本概念及语法

        set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

        虽然约束可以设置在任意两个data pin,但实际中我们只会关心从同一时钟域到另一个相同时钟域的信号之间的skew。

        其使用语法如下:

string set_data_check-from from_object| -rise_from from_object| -fall_from from_object-to to_object| -rise_to to_object| -fall_to to_object[-setup | -hold][-clock clock_object][check_value]

需要说明的是:

1.不指定-setup和-hold check_value会同时对setup和hold有效

2.-clock选项指定了related pin的一个launch clk来作为分析,否则一旦related pin有多个launch clk则所有的launch clk都会分析检查

简单的格式就是:

set_data_check -from [related pin] -to [constrained pin]                  

from的是related pin

to的是constrained pin

2.检查path及report_timing报告格式

设related pin为pin_A,pin_A的launch flip-flop为src_reg_a, launch clk为src_clk_a

设constrained pin为pin_B,pin_B的launch flip-flop为src_reg_b, launch clk为src_clk_b

则工具会分别分析related data path和constrained data path的timing,下面分setup和hold两种情况分别介绍timing分析过程

set_data_check -from [get_pins pin_A] -to [get_pins pin_B] -setup 1000
set_data_check -from [get_pins pin_A] -to [get_pins pin_B] -hold  5000                  

2.1 setup

1.分析constrained pin得到data arrival time

clock src_clk_b (rise edge)  0.0        0.0clock network delay          0.01       0.01src_reg_b/CP                 0.0        0.01src_reg_b/Q                  0.06       0.07...............pin_B                        0.0        0.xxdata arrival time                       0.xx

2.分析related pin得到 data required time

clock src_clk_a (rise edge)           0.0           0.0clock network delay                   0.02          0.02path margin                           0.5           0.52src_reg_a/CP                          0.0           0.52src_reg_a/Q                           0.05          0.57....................pin_A                                 0.0           0.yydata check setup time                 -1000         0.yy-1000data required time                                  0.yy-1000

  结果如下:

-----------------------------------------------------------------------------
data required time                                  0.yy-1000
data arrival time                                   -0.xx
-----------------------------------------------------------------------------
slack (VIOLATION)                                   -1000-0.xx+0.yy 

        从上面timing分析可知,无论related data path还是constrained data path的clock rise edge都为0,表明data check的 setup分析都是在当前clk沿-----即所谓的zero-cycle check。

        注:pin_A的src_reg_a/CP只有一个src_clk_a,一但有多个clk就会分析多个clk的related data path

2.2 hold

1.分析constrained pin得到data arrival time

clock src_clk_b (rise edge)  5.0        5.0clock network delay          0.01       5.01src_reg_b/CP                 0.0        5.01src_reg_b/Q                  0.06       5.07...............pin_B                        0.0        5.xxdata arrival time                       5.xx

我们发现clock src_clk_b (rise edge) 有5.0ns的delay,说明该constrained data path hold分析是向前推了一个时钟周期,和预期不一致。因为期望的是set_data_check setup/hold都在当前时钟check。所以要用mcp把hold检查向前拉一个clk

set_multicycle_path -1 -from [get_pins pin_A] -to [get_pins pin_B] -hold

设置multicycle之后的正确path timing如下:

clock src_clk_b (rise edge)  0.0        0.0clock network delay          0.01       0.01src_reg_b/CP                 0.0        0.01src_reg_b/Q                  0.06       0.07...............pin_B                        0.0        0.xxdata arrival time                       0.xx

        为什么会出现上面的情况呢,原因在于综合工具在做hold检查时总是会比setup提前一个clk,所以时序检查 setup检查在captureclk比当前clk晚一拍,hold是检查当前clk。而非时序检查setup检查在当前clk,hold检查是在前一clk,但实际set_data_check检查都要求是在当拍,所以为了输出正确的set_data_check的hold rpt,需要手动对set_data_check设置mcp

mcp的用法请在下面的链接中再详细介绍report_timing与sequential check和non-sequential check及MCP_cy413026的博客-CSDN博客

2.分析related pin得到 data required time

clock src_clk_a (rise edge)           0.0           0.0clock network delay                   0.02          0.02path margin                          -0.5          -0.48src_reg_a/CP                          0.0          -0.48src_reg_a/Q                           0.05         -0.43....................pin_A                                 0.0          -0.yydata check setup time                 5000         5000-0.yydata required time                                 5000-0.yy

  结果如下:

-----------------------------------------------------------------------------
data required time                                  5000-0.yy
data arrival time                                   -0.xx
-----------------------------------------------------------------------------
slack (VIOLATION)                                   -5000+0.xx+0.yy 

2.3 如何查看timing report

        只有report_timing命令可以查看timing report,但是不同类型的path,使用该命令有些许不同,对于时序检查包括maxDelay的检查都是:

report_timing -from [get_pins start_points] -to [get_pins endpoint] -delay_type max
report_timing -from [get_pins start_points] -to [get_pins endpoint] -delay_type min  

        而对于set_data_check的timing report只有-to没有-from,如下:

report_timing -to [get_pins constrained_pin] -delay_type max
report_timing -to [get_pins constrained_pin] -delay_type min  

3.使用set_data_check完成信号间skew约束

        设我们要约束信号之间的skew在[-0.4:0.3] ns之间,该怎样使用set_data_check下约束呢?我们以I2S的ws与sdo信号为例说明,并设ws为related_pin. 为达到这个效果有两种写法。

        我们分别设ws_o的arrival timing为t0,sdo的arrival timing为t1。因为ws_o信号为related_pin,在timing分析中可以认为是clk,所以对于setup分析,要求data到达时间比clk到达时间至少早T_{setup}的时间;对于hold分析,要求data变化到达时间比clk到达时间晚至少T_{hold}。所以有以下时间关系:

t0-t1>=T_{setup}

t1-t0>=T_{hold}

当然也可以画时序图来描述,这里不在赘述,可参考:

SDC | set_data_check-腾讯云开发者社区-腾讯云应@Fly 天 同学的要求,码一遍set_data_check, 关于SDC 有好几个兄弟号都写了很多,可以到『IC 技术圈』中找对应文章去看。icon-default.png?t=N7T8https://cloud.tencent.com/developer/article/1621568

在本人另一篇博客中给出了grayCode的约束实例:

timingPath/set_data_check和set_max_delay/set_multicycle_path_cy413026的博客-CSDN博客那么约束起效果后,结果就是dst_gray_code[3:1] 3bit信号到达寄存器D端的时间在dst_gray_code[0]到达D端时刻t的 [t-0.3 : t+0.4]范围内,这样对于grayCode来说是否可以呢?可以正向用set_max_delay+set_date_check来约束,分别设定某类接口的maxDelay和信号之间【clk,多bit数据,控制信号等】的skew。set_data_check 和set_max_delay是有很大区别的,约束,比如一些高速接口相关信号间的约束。https://blog.csdn.net/cy413026/article/details/131603623

 

3.1 setup/hold一起约束

set_data_check -from [get_pins xxx/adif/ws_o] -to [get_pins xxx/adif/sdo] -setup -0.3
set_data_check -from [get_pins xxx/adif/ws_o] -to [get_pins xxx/adif/sdo] -hold  -0.4

对于setup约束 可以得到一个时间关系:

t0-t1>=T_{setup}=-0.3 

也即

t1-t0<=0.3

对于hold约束 可以得到一个时间关系:

t1-t0>=T_{hold}=-0.4

综合起来就是:

-0.4<=t1-t0<=0.3

约束的效果就是sdo在ws到达时间的[-0.4:0.3]范围内到达。

3.2 只用setup约束

set_data_check -from [get_pins xxx/adif/ws_o] -to [get_pins xxx/adif/sdo]  -setup -0.3
set_data_check -from [get_pins xxx/adif/sdo]  -to [get_pins xxx/adif/ws_o] -setup -0.4

两个都是setup约束可以得到如下两个时间关系:

t0-t1>=T_{setup}=-0.3

t1-t0>=T_{setup}=-0.4

综合起来和3.1节的结果一致。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部