微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > primetime分析信号完整性的问题

primetime分析信号完整性的问题

时间:10-02 整理:3721RD 点击:
分析信号串扰,时序报告中为什么数据到达时间(data arrival time)和需要到达时间(data required time )使用的clk network delay(propagated)的值不一致?

贴timing report

Startpoint: u_clk_reset_logic/reset_stretch_reg
(rising edge-triggered flip-flop clocked by i_sysclk)
Endpoint: u_init/o_cct_wl2_reg
(removal check against rising-edge clock i_sysclk)
Path Group: **async_default**
Path Type: min
PointIncrPath
------------------------------------------------------------------------------
clock i_sysclk (rise edge)0.000.00
clock network delay (propagated)0.510.51
u_clk_reset_logic/reset_stretch_reg/CK (QDFFRBN)0.000.51 r
u_clk_reset_logic/reset_stretch_reg/Q (QDFFRBN)0.17 &0.68 r
u_clk_reset_logic/U63/O (BUF1CK)0.06 &0.74 r
u_clk_reset_logic/U2/O (BUF4)0.09 &0.83 r
u_clk_reset_logic/o_rst_except (clk_reset_logic)0.00 &0.83 r
u_init/i_rst_except (init)0.00 &0.83 r
u_init/o_cct_wl2_reg/RB (QDFFRBS)0.00 &0.83 r
data arrival time0.83
clock i_sysclk (rise edge)0.000.00
clock network delay (propagated)0.810.81
clock reconvergence pessimism-0.220.59
clock uncertainty0.200.79
u_init/o_cct_wl2_reg/CK (QDFFRBS)0.79 r
library removal time0.090.88
data required time0.88
------------------------------------------------------------------------------
data required time0.88
data arrival time-0.83
------------------------------------------------------------------------------
slack (VIOLATED)-0.05

加上 -path_type full_clock_expanded -derate -crosstalk_delta 选项

report_timing 加上该选项后,所报时钟路径延迟的总和与不加该选项是一致的。难道确实是信号串扰的影响?分析数据需要到达时间时,跟不分析信号完整性时primetime所报时钟路径延迟单元时间相比,此时延迟单元延迟时间变长。例如同样的BUF4CK 单元,在前者报出延时为0.07ns,而后者分析信号完整性时,报出延时为0.11ns。请问小编,这种情况如何处理?谢谢啊

当然是一样的结果,我要看的是加了选项后的详细报告

****************************************
Report : timing
-path_type full_clock_expanded
-delay_type min
-input_pins
-max_paths 500
-crosstalk_delta
-derate
Design : design_top
Version: D-2010.06-SP3-5
Date: Wed Jul3 11:59:53 2013
****************************************

Startpoint: u_clk_reset_logic/reset_stretch_reg
(rising edge-triggered flip-flop clocked by i_sysclk)
Endpoint: u_init/o_cct_wl2_reg
(removal check against rising-edge clock i_sysclk)
Path Group: **async_default**
Path Type: min
PointDerateDeltaIncrPath
--------------------------------------------------------------------
clock i_sysclk (rise edge)0.000.00
clock source latency0.000.00
i_sysclk (in)0.00 &0.00 r
INV12CK_BC_2/I (INV12CK)1.000.000.00 &0.00 r
INV12CK_BC_2/O (INV12CK)1.000.02 &0.02 f
INV12CK_BC_3/I (INV8CK)1.000.000.00 &0.02 f
INV12CK_BC_3/O (INV8CK)1.000.02 &0.03 r
BUF8CK_G3B13I1/I (BUF6)1.000.000.00 &0.04 r
BUF8CK_G3B13I1/O (BUF6)1.000.05 &0.09 r
BUF12CK_G3B11I1/I (BUF8)1.000.000.00 &0.09 r
BUF12CK_G3B11I1/O (BUF8)1.000.05 &0.14 r
BUF8_G3B9I1/I (BUF6)1.000.000.00 &0.14 r
BUF8_G3B9I1/O (BUF6)1.000.05 &0.19 r
BUF8_G3B7I1/I (BUF8)1.000.000.00 &0.19 r
BUF8_G3B7I1/O (BUF8)1.000.05 &0.24 r
BUF4CK_G3B5I1/I (BUF8)1.000.000.00 &0.24 r
BUF4CK_G3B5I1/O (BUF8)1.000.05 &0.29 r
BUF6CK_G3B3I1/I (BUF4)1.000.000.00 &0.29 r
BUF6CK_G3B3I1/O (BUF4)1.000.07 &0.36 r
BUF4CK_G3B2I3/I (BUF6)1.000.000.00 &0.36 r
BUF4CK_G3B2I3/O (BUF6)1.000.07 &0.44 r
BUF2CK_G3B1I11/I (BUF2)1.000.000.00 &0.44 r
BUF2CK_G3B1I11/O (BUF2)1.000.07 &0.51 r
u_clk_reset_logic/i_sysclk_cts_4 (clk_reset_logic)
1.000.00 &0.51 r
u_clk_reset_logic/reset_stretch_reg/CK (QDFFRBN)
1.000.000.00 &0.51 r
u_clk_reset_logic/reset_stretch_reg/Q (QDFFRBN)
1.000.17 &0.68 r
u_clk_reset_logic/U63/I (BUF1CK)
1.000.000.00 &0.68 r
u_clk_reset_logic/U63/O (BUF1CK)
1.000.06 &0.74 r
u_clk_reset_logic/U2/I (BUF4)
1.000.000.00 &0.74 r
u_clk_reset_logic/U2/O (BUF4)
1.000.09 &0.83 r
u_clk_reset_logic/o_rst_except (clk_reset_logic)
1.000.00 &0.83 r
u_init/i_rst_except (init)1.000.00 &0.83 r
u_init/o_cct_wl2_reg/RB (QDFFRBS)
1.000.000.00 &0.83 r
data arrival time0.83
clock i_sysclk (rise edge)0.000.00
clock source latency0.000.00
i_sysclk (in)0.00 &0.00 r
INV12CK_BC_2/I (INV12CK)1.000.000.00 &0.00 r
INV12CK_BC_2/O (INV12CK)1.000.03 &0.03 f
INV12CK_BC_3/I (INV8CK)1.000.000.00 &0.03 f
INV12CK_BC_3/O (INV8CK)1.000.03 &0.05 r
BUF8CK_G3B13I1/I (BUF6)1.000.000.00 &0.06 r
BUF8CK_G3B13I1/O (BUF6)1.000.08 &0.14 r
BUF12CK_G3B11I1/I (BUF8)1.000.000.00 &0.14 r
BUF12CK_G3B11I1/O (BUF8)1.000.08 &0.22 r
BUF8_G3B9I1/I (BUF6)1.000.000.00 &0.22 r
BUF8_G3B9I1/O (BUF6)1.000.08 &0.30 r
BUF8_G3B7I1/I (BUF8)1.000.000.00 &0.30 r
BUF8_G3B7I1/O (BUF8)1.000.08 &0.38 r
BUF4CK_G3B5I1/I (BUF8)1.000.000.00 &0.38 r
BUF4CK_G3B5I1/O (BUF8)1.000.09 &0.47 r
BUF6CK_G3B3I1/I (BUF4)1.000.000.00 &0.47 r
BUF6CK_G3B3I1/O (BUF4)1.000.11 &0.58 r
BUF3_G3B2I1/I (BUF4CK)1.000.000.00 &0.58 r
BUF3_G3B2I1/O (BUF4CK)1.000.12 &0.70 r
u_init/cts_0_2 (init)1.000.00 &0.70 r
u_init/BUF2CK_G3B1I10/I (BUF4CK)
1.000.000.00 &0.70 r
u_init/BUF2CK_G3B1I10/O (BUF4CK)
1.000.11 &0.81 r
u_init/o_cct_wl2_reg/CK (QDFFRBS)
1.000.000.00 &0.81 r
clock reconvergence pessimism-0.220.59
clock uncertainty0.200.79
library removal time1.000.090.88
data required time0.88
--------------------------------------------------------------------
data required time0.88
data arrival time-0.83
--------------------------------------------------------------------
slack (VIOLATED)-0.05

再加两个 -net -trans 选项

Startpoint: u_clk_reset_logic/reset_stretch_reg
(rising edge-triggered flip-flop clocked by i_sysclk)
Endpoint: u_init/o_cct_wl2_reg
(removal check against rising-edge clock i_sysclk)
Path Group: **async_default**
Path Type: min
PointFanoutDTransTransDerateDeltaIncrPath
------------------------------------------------------------------------------------------
clock i_sysclk (rise edge)0.000.00
clock source latency0.000.00
i_sysclk (in)0.000.00 &0.00 r
i_sysclk (net)1
INV12CK_BC_2/I (INV12CK)0.000.001.000.000.00 &0.00 r
INV12CK_BC_2/O (INV12CK)0.021.000.02 &0.02 f
i_sysclk_BC (net)1
INV12CK_BC_3/I (INV8CK)0.000.021.000.000.00 &0.02 f
INV12CK_BC_3/O (INV8CK)0.031.000.02 &0.03 r
i_sysclk_BC_1 (net)2
BUF8CK_G3B13I1/I (BUF6)0.000.031.000.000.00 &0.04 r
BUF8CK_G3B13I1/O (BUF6)0.031.000.05 &0.09 r
i_sysclk_BC_1_G3B1I1 (net)1
BUF12CK_G3B11I1/I (BUF8)0.000.031.000.000.00 &0.09 r
BUF12CK_G3B11I1/O (BUF8)0.041.000.05 &0.14 r
i_sysclk_BC_1_G3B2I1 (net)1
BUF8_G3B9I1/I (BUF6)0.000.041.000.000.00 &0.14 r
BUF8_G3B9I1/O (BUF6)0.031.000.05 &0.19 r
i_sysclk_BC_1_G3B3I1 (net)1
BUF8_G3B7I1/I (BUF8)0.000.031.000.000.00 &0.19 r
BUF8_G3B7I1/O (BUF8)0.031.000.05 &0.24 r
i_sysclk_BC_1_G3B4I1 (net)1
BUF4CK_G3B5I1/I (BUF8)0.000.031.000.000.00 &0.24 r
BUF4CK_G3B5I1/O (BUF8)0.041.000.05 &0.29 r
i_sysclk_BC_1_G3B5I1 (net)2
BUF6CK_G3B3I1/I (BUF4)0.000.041.000.000.00 &0.29 r
BUF6CK_G3B3I1/O (BUF4)0.061.000.07 &0.36 r
i_sysclk_BC_1_G3B6I1 (net)3
BUF4CK_G3B2I3/I (BUF6)0.000.061.000.000.00 &0.36 r
BUF4CK_G3B2I3/O (BUF6)0.081.000.07 &0.44 r
i_sysclk_BC_1_G3B7I3 (net)7
BUF2CK_G3B1I11/I (BUF2)0.000.081.000.000.00 &0.44 r
BUF2CK_G3B1I11/O (BUF2)0.061.000.07 &0.51 r
i_sysclk_BC_1_G3B8I11 (net)
7
u_clk_reset_logic/i_sysclk_cts_4 (clk_reset_logic)
0.001.000.00 &0.51 r
u_clk_reset_logic/i_sysclk_cts_4 (net)
u_clk_reset_logic/reset_stretch_reg/CK (QDFFRBN)
0.000.061.000.000.00 &0.51 r
u_clk_reset_logic/reset_stretch_reg/Q (QDFFRBN)
0.071.000.17 &0.68 r
u_clk_reset_logic/n18 (net)
2
u_clk_reset_logic/U63/I (BUF1CK)
0.000.071.000.000.00 &0.68 r
u_clk_reset_logic/U63/O (BUF1CK)0.051.000.06 &0.74 r
u_clk_reset_logic/n80 (net)
1
u_clk_reset_logic/U2/I (BUF4)0.000.051.000.000.00 &0.74 r
u_clk_reset_logic/U2/O (BUF4)0.111.000.09 &0.83 r
u_clk_reset_logic/o_rst_except (net)
9
u_clk_reset_logic/o_rst_except (clk_reset_logic)
0.001.000.00 &0.83 r
rst_except (net)
u_init/i_rst_except (init)0.001.000.00 &0.83 r
u_init/i_rst_except (net)
u_init/o_cct_wl2_reg/RB (QDFFRBS)
0.000.111.000.000.00 &0.83 r
data arrival time0.83
clock i_sysclk (rise edge)0.000.00
clock source latency0.000.00
i_sysclk (in)0.000.00 &0.00 r
i_sysclk (net)1
INV12CK_BC_2/I (INV12CK)0.000.001.000.000.00 &0.00 r
INV12CK_BC_2/O (INV12CK)0.021.000.03 &0.03 f
i_sysclk_BC (net)1
INV12CK_BC_3/I (INV8CK)0.000.021.000.000.00 &0.03 f
INV12CK_BC_3/O (INV8CK)0.031.000.03 &0.05 r
i_sysclk_BC_1 (net)2
BUF8CK_G3B13I1/I (BUF6)0.000.031.000.000.00 &0.06 r
BUF8CK_G3B13I1/O (BUF6)0.031.000.08 &0.14 r
i_sysclk_BC_1_G3B1I1 (net)1
BUF12CK_G3B11I1/I (BUF8)0.000.031.000.000.00 &0.14 r
BUF12CK_G3B11I1/O (BUF8)0.041.000.08 &0.22 r
i_sysclk_BC_1_G3B2I1 (net)1
BUF8_G3B9I1/I (BUF6)0.000.041.000.000.00 &0.22 r
BUF8_G3B9I1/O (BUF6)0.031.000.08 &0.30 r
i_sysclk_BC_1_G3B3I1 (net)1
BUF8_G3B7I1/I (BUF8)0.000.031.000.000.00 &0.30 r
BUF8_G3B7I1/O (BUF8)0.031.000.08 &0.38 r
i_sysclk_BC_1_G3B4I1 (net)1
BUF4CK_G3B5I1/I (BUF8)0.000.031.000.000.00 &0.38 r
BUF4CK_G3B5I1/O (BUF8)0.041.000.09 &0.47 r
i_sysclk_BC_1_G3B5I1 (net)2
BUF6CK_G3B3I1/I (BUF4)0.000.041.000.000.00 &0.47 r
BUF6CK_G3B3I1/O (BUF4)0.061.000.11 &0.58 r
i_sysclk_BC_1_G3B6I1 (net)3
BUF3_G3B2I1/I (BUF4CK)0.000.061.000.000.00 &0.58 r
BUF3_G3B2I1/O (BUF4CK)0.061.000.12 &0.70 r
i_sysclk_BC_1_G3B7I1 (net)4
u_init/cts_0_2 (init)0.001.000.00 &0.70 r
u_init/cts_0_2 (net)
u_init/BUF2CK_G3B1I10/I (BUF4CK)
0.000.061.000.000.00 &0.70 r
u_init/BUF2CK_G3B1I10/O (BUF4CK)0.051.000.11 &0.81 r
u_init/i_sysclk_BC_1_G3B8I10 (net)
5
u_init/o_cct_wl2_reg/CK (QDFFRBS)
0.000.051.000.000.00 &0.81 r
clock reconvergence pessimism-0.220.59
clock uncertainty0.200.79
library removal time1.000.090.88
data required time0.88
------------------------------------------------------------------------------------------
data required time0.88
data arrival time-0.83
------------------------------------------------------------------------------------------
slack (VIOLATED)-0.05

顶起!

比较2条clock路径,可以看到2点不同
1)每个cell的延迟,原因还是无法确定,你读入了几个db文件?好在它们的差别大部分都被CRPR补了回来
2)clock path 最后几个buf不同是造成violation的主要原因
解决方法是
先找出1)的原因,如果还是有violation,就当是真的,修吧

我比较过正常primetime时序报告和使能信号完整性分析的时序报告:分析数据需要到达时间(data required time)时,跟不分析信号完整性时primetime所报时钟路径延迟单元时间相比,此时延迟单元延迟时间变长。例如同样的BUF4CK 单元,在前者报出延时为0.07ns,而后者分析信号完整性时,报出延时为0.11ns。也就是说两种情况下,相同cell的延迟时间不一样,所以分析SI时出现hold违反而不分析SI时时序实现收敛。请问小编,分析SI时这种情况怎么处理?
主要脚本如下:
# Turn on CRPR
set timing_remove_clock_reconvergence_pessimism true
set timing_dynamic_loop_breaking true
set timing_enable_preset_clear_arcs true
set si_enable_analysis true

set_operating_conditions -analysis_type on_chip_variation -max WCCOM -max_library lib_name
read_parasitics -keep_capacitive_coupling -format SPEF -verbose $be_dir/design_top.spef.max
其余就是读布局布线后的网表,SDC约束文件,其余采用系统默认设置。

我也怀疑是SI的作用,但是为什么在report里面看不到,已经用了-crosstalk_delta选项了
你还是得告诉我,到底读入了那些db file,把它们列出来

分析max是SI就读了worst library,寄生参数spef文件 ,网表 ,时序约束文件。我们的lib 只有worst 和best 两个。
没有在读设么db文件啊。

那就奇怪了,
先把它当真的,fix吧
PT关于SI的设定有很多,我都是copy以前积累下来的,没有全记下来,只记得还有timing window和一些阈值的设定不能少,你自己看看PT的设定,试试有什么变化

好的,非常感谢热心帮助。violation 是50ps,如果考虑设置的uncertainty 200ps,是否可以认为实际电路没有违反呢?

那要看200ps uncertainty是怎么来的

是我在综合时序约束加的,由此产生的sdc文件给后端使用。做PT分析时当然也使用这个sdc文件。

我说的意思是“根据什么定的200ps”

最初是根据经验,之后后端布局布线后给出的时钟树时序报告中显示:
Operating Conditionworst
Clock global Skew0.061
Longest path delay1.228
Shortest path delay1.167

为了留比较大的margin,就没有做进一步修改。

你去读一下置顶FAQ的Q1.8

我的设置跟你所表述不矛盾,设计中没有锁相环,时钟来自外部输入,不没考虑pll jitter ,只是做了预估skew。
postCTS后,为了设计更鲁棒,就保留了之前的预估skew。这么做有问题吗?

多加margin当然保险,但是对于high speed design,有可能就做不出来了
而且你这种解释暴露了你对jitter和skew的理解不是十分正确

怎么会呢?skew 是由于时钟到不同触发器时钟端时间不同引起,跟后端时钟树相关;而jitter是时钟本身固有的抖动,它对性能始终是造成负面的影响。我预估的200ps 也主要考虑jitter等不确定因素。

小编的意思是说你的200ps是怎么计算出来的,jitter按多少估计,公式在哪儿? 经验值也总得有个出处。一般PLL手册都会有不同公式来计算jitter的大小。另外foundry会有一般signoff的参考,uncertainty, derate这种数值一般会有参考的。另外uncertainty和global skew有啥关系么?cts之后,所有时钟点都已经定了,STA可以不考虑这个估计值了吧。

公式就不说了,网上到处都是。我们设计中的时钟不是来自pll。cts后,当然时钟的时序都已经确定了,但在做pt时,仍然设置uncertainty是为了设计更可靠。uncertainty 跟skew和jitter都相关,后端时钟树报告显示了最长的skew是60几个ps,说明cts之前的预估有些悲观,但考虑可靠性,就不需要再迭代了。

个人认为uncertainty做完cts留下来,是因为你的path group是默认的**async_default**,为了对异步时钟的check更加稳健,所以没remove。
但是我又看到rpt中是同一个clk(i_sysclk)的hold check,有些疑惑,建议查看sdc。

uncertainty是我在sdc设置的,做pt当然会使用

我再查看了下你的path rpt,我猜u_init/o_cct_wl2_reg/RB是复位端,这个path是复位信号的hold check,所以放在默认的**async_default**中。既然是同一个clock的hold check,因此,uncertainty是必然要去掉的。
在cmd中加上“remove_clock_uncertainty [all_clocks]”。
原因陈涛大哥说得很清楚。

同一个clock的hold check,去掉jitter,保留skew。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top