Innovus自动修复Short的脚本分享

电子说

1.3w人已加入

描述

脚本主要内容:

在设计中有一些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

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非常宽裕,那么完全删掉它重新绕也没有问题。






审核编辑:刘清
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分