DC中transition的问题求助
我就困惑了,既然约束都不满足,怎么能有正常的时序报告呢。
直接上图
max_transition
RequiredActual
NetTransitionTransitionSlack
-----------------------------------------------------------------
U_sram_controller/n243 (dont_touch)
0.5010.39-9.89(VIOLATED)
U_sram_controller/n1239 (dont_touch)
0.509.21-8.71(VIOLATED)
U_sram_controller/n729 (dont_touch)
0.506.49-5.99(VIOLATED)
U_sram_controller/N746 (dont_touch)
0.506.47-5.97(VIOLATED)
U_sram_controller/n683 (dont_touch)
0.504.51-4.01(VIOLATED)
U_sram_controller/N9515 (dont_touch)
0.503.59-3.09(VIOLATED)
U_sram_controller/N9230 (dont_touch)
0.503.57-3.07(VIOLATED)
U_sram_controller/N9166 (dont_touch)
0.503.44-2.94(VIOLATED)
U_sram_controller/n165 (dont_touch)
0.503.42-2.92(VIOLATED)
U_sram_controller/n684 (dont_touch)
0.503.24-2.74(VIOLATED)
U_sram_controller/n1240 (dont_touch)
0.503.18-2.68(VIOLATED)
U_sram_push_pull_eng/N312 (dont_touch)
0.502.99-2.49(VIOLATED)
U_sram_push_pull_eng/N478 (dont_touch)
0.502.50-2.00(VIOLATED)
U_sram_controller/n151 (dont_touch)
0.502.43-1.93(VIOLATED)
U_sram_controller/n261 (dont_touch)
0.502.26-1.76(VIOLATED)
以上都是不满足的情况,而且我只是设置clk 和rst是dont_touch但这上面显示的全都是dont_touch。这个我认为是因为这些路径都是由clk或rst去驱动的,不知道这理解是不是正确的。
但是,我的关键路径却又是满足我的要求的
clock clock (rise edge)10.0010.00
clock network delay (ideal)0.0010.00
U_sram_controller/data_out2_reg[0]/CK (FFEDQHDLX)0.0010.00 r
library setup time-0.169.84
data required time9.84
--------------------------------------------------------------------------
data required time9.84
data arrival time-8.79
--------------------------------------------------------------------------
slack (MET)1.05
哪位大神给解释下。为什么transition都那么大了,他的关键路径却还满足?
顺便在提几个问题。用什么命令可以直接检测slack,比如我想把slack规定在一个范围内,那就得用迭代的方法。但怎么能取出slack的这个数值?
综合怎么去加紧约束,就输入输出延时、负载、连续、驱动这些。那器件还不是这些器件啊,他该有多少延迟还是那么多延时。你怎么去让一个设计本来只能跑100M的提升到120M啊?
transition的约束太紧了,这个violation完全可以忽略的,PR再fix
set_dont_touch命令的作用你没有搞明白,所以才会有这样子的困惑,希望你能首先理解你所使用约束命令的作用
我记得你在使用report_constraints 命令时,加上它的选项-options,可以得到你想要的reports
一个design工作频率一方面跟特定工艺相关,另一方面也跟电路设计本身有关
transition和slack本来就不是直接联系的
transition是DRC
你要确定这些dont-touch是不是rst需要自己去查网表,问我们也没用
这个不就是不插buffer吗。因为后端会用特殊的处理。这就是不明白,既然在DC里他没有插BUFFER,那么他的电平转换时间就会很高的呀,那么就会影响他的时序啊。但为什么综合出来貌似分析关键路径的时候又没有考虑这些地方
谢谢,不过能不能说得详细一点。为什么不考虑,大概怎么处理
transition是transition, 指上升下降时间,和timing slack无关.
你这如果是clock或reset, 应该设成ideal network, 这样dc认为这些net是理想的, 不去管这些net的transition.
你设了dont touch, 意思是让DC不要去优化这些net, 如果这些net不是ideal net并且fanout又很高,自然会有很大的transition violation, 但如果你的timing constration比较松, 那timing还是可以满足的.
我觉得设个set_max_transition? [current_design]试试
7#正解啊
clk 和rst设ideal network
给后端时再拿掉
时钟会做时钟树,HFN会进行HFNS
你对transition 没理解,transtion 跟delay 是有关系,但是不能说明,transition 很大,就会不满足时序,这个要看你的约束,你约束的紧一些,如果fanout再大,你就能发现问题
楼上的有很多误解。我只说我对transition的理解,说的不对的对方,欢迎拍砖!
首先,工具是怎样计算cell delay的?工具是通过一个cell input transition和output capcitance,通过lib中的查找表计算出delay的。查找表是一个transition和capcitance的二维查找表,横坐标是cap,纵坐标是transition。
对于查找表来说cap和transition是有范围的,这也是库中为什么会有max_transition和 max_capcitance的数值。
如果transition或者capcitance超过了这个范围,也就是出现了violation,那么工具会通过插值算法来计算得到cell 的delay,而这种算法只是一种近似,也就是说计算出来cell的delay值其实是和实际的delay有差别的。
所以在这种情况下,path的timing仍然可以计算出来,但是已经不准确了,这就是为什么我们要在后端修复transition和capcitance的原因。
小编在综合的时候遇到这个问题,只要你认为综合约束没有大的问题,可以忽略掉,到后端pr修复。
小编的另外几个问题,没有看明白想问什么
我只是举例来说明,transtion 越大,delay 也会相对变大,当然不能超过library的设定值,这就是为什么我们要设置max_fan_out ,man_transtion ,来检查design rule。
回答小编第二个问题, 加紧时序约束方法很多,首先cell delay 跟 transtion 和 cap 有关,所以你改变transtion 跟load ,都会改变cell delay, net delay 也是如此。 再则 设置约束要考虑chip 在真实环境中最worst 和最best的情况,这些都会影响时序。这也是为什么我们要分析很多corner的原因。 你要看你是否 考虑了wire load, clock skew 。clock latency, 等等等,很多
不好意思,请教一下,为何clock 可以设置成 ideal network? 时钟如果不检查transition, 时序不会有风险吗?
谢谢!
顶贴赚积分