腳本主要內容:
在設計中有一些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非常寬裕,那么完全刪掉它重新繞也沒有問題。
審核編輯:劉清
-
DRC
+關注
關注
2文章
149瀏覽量
36229 -
Innovus
+關注
關注
1文章
20瀏覽量
2705
原文標題:Innovus自動修復Short的腳本分享(附腳本思路詳細講解)
文章出處:【微信號:集成電路設計及EDA教程,微信公眾號:集成電路設計及EDA教程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論