电子说
脚本主要内容:
在设计中有一些short,跑几轮ecoRoute -fix_drc都无法解决的情况下,我们可以删除一些short的shape来让工具重新ecoRoute来解决,如果数量有几十甚至上百个,那么手工操作就不太现实了,可以用脚本来实现,这里分享的就是这样一个脚本。
注意:如果short数量非常多且比较集中(hotspot)的情况下,就需要去看你的congestion状态了,如果congestion状态很差,那么这些short多半是无法完全解决的,必须从congestion上入手。
这里分享一个自己编写的脚本,脚本可以根据error browser里面verify_drc的结果来找到short的shape,然后删除它,由于Clock nets对timing的影响比较大,所以这里并未删除clock shape,只删除signal的shape,再之后运行ecoRoute修复open即可。
前面星球里面写了个推文是讲解如何用dbGet来得到error browser里面的结果并写脚本解决一些overlap的问题(能熟练掌握的话那么你的innovus脚本水平就比较溜了),这里我们换一种方法用get_db来讲解一下如何去实现。
首先运行下面的命令来报出所有的DRC:
#Verify Route DRC
set_verify_drc_mode -check_only all
-report DTMF_CHIP.drc.rpt
-limit 1000 -ignore_cell_blockage true
verify_drc
命令get_db current_design .markers.subtype 可以得到当前设计中error browser里面的所有subtype,比如Metal_Short, Parallel_Run_Length_Spacing等。
[DEV]innovus 63> get_db current_design .markers.subtype
Metal_Short
可以用-if来筛选出Metal_Short:
[DEV]innovus 64> get_db current_design .markers -if {.subtype==Metal_Short}
marker:0x7ffeda4d2200
下面的命令可以报出short发生的层:
[DEV]innovus 65> get_db marker:0x7ffeda4d2200 .layer.name
Metal5
......
.....
有星粉反映工具有下面的命令可以实现相似的目的:
19版:editDeleteViolation
20版:editDelete -regular_wire_with_drc
这个命令会去解所有的DRC,而不止是Short,可是我们一般用删除shape去解short,而非所有DRC,并且这个命令会去删除整个net的绕线,动作非常大,所有不推荐大家直接使用。
我来分享一下两者之间的区别,并推荐大家使用分享的脚本而非直接使用这个命令,原因也会讲一下。
editDelete -regular_wire_with_drc:
优点:只会删regular net,因此不会动PG。
缺点:整个net都删掉了,一个net可能好几百um(示例中一个500+的net整个删除了),一个地方的小short整个net删除,对timing影响比较大,而脚本分析的方法不存在这种问题。
还有就是如果发现sigal nets和clock nets short了,那么两个net全部会被删掉。而clock nets对timing影响很大,所以如果要用这种方法最好把cts nets全部fix住。
脚本分享的方法:
优点:只会删short的area里面的data signal nets,不会动PG和clock nets,因此比较有保证,不会对timing和IR drop等有大的影响。
缺点:某些情况下,只删除局部的short shape可能无法解决这个short,工具可能还是会在那个地方去绕。这个时候就需要删除更多的shape了,可以手工来选择性删除。如果net所在的path的timing非常宽裕,那么完全删掉它重新绕也没有问题。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !