青铜和王者的区别,在于遇到问题时的debug能力。本文盘点ICC2中debug的方法,进阶之路上助你一臂之力。
看timing report,发现,net没优化。什么原因?
是因为dont touch?
是因为dont touch network?
是因为buffer电压不对?
是因为没有driver?
driver是inout?
...
不要猜了!
直接用check_bufferability(感觉像广告),
顾名思义,就是check这个net为什么加不了buffer。使用方法:
来举个例子:
常见于io_pad, 由于pad是inout属性,而与该net相连的port也是inout,则会出现多驱动的问题。
当然,其他的原因也会报出来,例如:
Timig为啥没修掉?分析之前先用工具分析一下,仅仅是max transition一项,就有这么多可能性:
Entire net is dont touch
Net between pad cell and port
Tristate nets
Nets with multiple drivers
Nets with port far from the core area
Nets are highly blocked
Net is partially blocked
Net is crossing high density area
Large input transition of driver
Nets in read-only sub blocks
Connect to excluded cell of XMB
Connect to excluded cell of HMB
Nets across different exclusive MBS
Nets across different hard MBS
Nets on clock network
Some segments of the net are dont_ touch
High fanout nets(> 80)
Nets C rossing different voltage areas
Nets with small violation(> -0. 005)
Nets are too short
Nets are long(> 400. 0um)
当然这些仍然不能把原因全部包含,所以,还有一个原因叫“UNKNOWN”。
这个命令,默认是检查transition。
你还可以分析其他的constraint violation,例如setup。
也可以针对于我们关系的具体的endpoint进行分析
analysis_design_violations -end_points $endpoints -type setup
自己试试吧。