如何找到Violation Path的公共路径?
时间:10-02
整理:3721RD
点击:
在fix setup 时,效率较低的方法是: 针对出问题的path进行size_cell 或者 insert_buffer。
同样,对于fix hold , 效率较低的方法是:针对出问题的path的起点、终点或者 path 插入buffer/delay cell。
效率高一些的方法,自然是找到这些出Violation Path的公共path,但是怎么通过timing报告,来抓取到公共Path呢?
通过timing_path的属性可以得到 slack,start_point,end_point,但是似乎不容易找到公共的Path。
这个是不是需要去理解Verilog 代码结构?
在ICC中,看到的只有Register与Register的关系,网表的连接结构好像从后端的角度,关心得比较少。
同样,对于fix hold , 效率较低的方法是:针对出问题的path的起点、终点或者 path 插入buffer/delay cell。
效率高一些的方法,自然是找到这些出Violation Path的公共path,但是怎么通过timing报告,来抓取到公共Path呢?
通过timing_path的属性可以得到 slack,start_point,end_point,但是似乎不容易找到公共的Path。
这个是不是需要去理解Verilog 代码结构?
在ICC中,看到的只有Register与Register的关系,网表的连接结构好像从后端的角度,关心得比较少。
Up up
如果想偷懒的话,synopsys有个现成的叫DMSA的东东,就是用来干这个的。
如果想自己开发的话,这是gate level的东西看RTL貌似帮助不大。timing_path属性中有points的,电路对应的数据结构是有向图。
DMSA=Distributed Multi-Scenario Analysis,是吧。
这也是工具再用fix_eco_timing来fix timing。
其实我是想知道基本的原理,怎么根据那些Violation path来找到公共的Path
具体分析path level 上的fanout and fanin 是相对比较省事的方法。
在有大的fanout上来insert buffer或者 size up 这个driver 解决?但是这也不一定是公共的Path呀?
好像你没注意到3楼的第二句:)
path有个points属性,那么,最直观的一个算法,就是:
for {所有violating path} {
for {path上的所有point} {
point_name_counter++;
}
}
最后看看那个point得票最多呗。
pt command:
report_bottleneck