星球創(chuàng)建了一個專屬Q(mào)Q交流群,,上傳了積累多年的IC后端筆記,,最近剛上傳2萬字125頁的ICC2教程,,同時也會不定時發(fā)一些紅包,,感興趣的可以加入,。我相信這絕對是你能找到的最全的后端設(shè)計資料(理論+實踐操作+腳本),沒有之一??! 目前已上傳的筆記有: 低功耗設(shè)計技術(shù)總結(jié)-3萬字,129頁 IR drop的分析與修復(fù)總結(jié)-4.3千字,,20頁 數(shù)字后端理論及實踐-ICC干貨筆記-11萬字,,423頁 數(shù)字后端理論及實踐-Innouvs教程-5.7萬字,,316頁 ICC2教程-星球精編版-2萬字,,125頁(最新上傳)
...... 本文選自知識星球,,同時星球里面分享了ICC2/ICC/Innovus解決Short問題的腳本,這里分享一下相應(yīng)的鏈接: 《ICC/ICC2/Innovus 短路(Short)問題該如何解決,?附tcl腳本》《ICC2教程 - 超實用DRC LVS檢查,、修復(fù)命令及腳本分享》《Innovus修復(fù)Short的腳本分享(附腳本思路詳細(xì)講解)》《ICC教程 - 超實用DRC LVS修復(fù)命令及腳本分享》在設(shè)計中有一些short,跑幾輪ecoRoute -fix_drc都無法解決的情況下,,我們可以刪除一些short的shape來讓工具重新ecoRoute來解決,,如果數(shù)量有幾十甚至上百個,那么手工操作就不太現(xiàn)實了,,可以用腳本來實現(xiàn),,這里分享的就是這樣一個腳本。 注意:如果short數(shù)量非常多且比較集中(hotspot)的情況下,,就需要去看你的congestion狀態(tài)了,,如果congestion狀態(tài)很差,那么這些short多半是無法完全解決的,,必須從congestion上入手,。這里分享一個自己編寫的腳本,腳本可以根據(jù)error browser里面verify_drc的結(jié)果來找到short的shape,,然后刪除它,,由于Clock nets對timing的影響比較大,,所以這里并未刪除clock shape,,只刪除signal的shape,再之后運行ecoRoute修復(fù)open即可,。前面星球里面寫了個推文是講解如何用dbGet來得到error browser里面的結(jié)果并寫腳本解決一些overlap的問題(能熟練掌握的話那么你的innovus腳本水平就比較溜了),,這里我們換一種方法用get_db來講解一下如何去實現(xiàn)。《Tcl練習(xí)題答案 - CTS之后發(fā)現(xiàn)clock cell和tap cell有overlap的問題,,如何寫腳本解決,?》同時星球里面分享了get_db/set_db的詳細(xì)教程,感興趣的也可以看下:《get_db命令教程 與 Innovus Stylus Common UI教程》set_verify_drc_mode -check_only all \-report DTMF_CHIP.drc.rpt \-limit 1000 -ignore_cell_blockage true命令get_db current_design .markers.subtype 可以得到當(dāng)前設(shè)計中error browser里面的所有subtype,,比如Metal_Short, Parallel_Run_Length_Spacing等,。[DEV]innovus 63> get_db current_design .markers.subtype[DEV]innovus 64> get_db current_design .markers -if {.subtype==Metal_Short}[DEV]innovus 65> get_db marker:0x7ffeda4d2200 .layer.name下面的命令可以報出error browser里面的message:[DEV]innovus 66> get_db marker:0x7ffeda4d2200 .messageRegular Wire of Net DTMF_INST/TDSP_DS_CS_INST/CTS_2 & Regular Wire of Net tdsp_portO[9]下面的命令可以報出error發(fā)生的坐標(biāo):[DEV]innovus 67> get_db marker:0x7ffeda4d2200 .bbox{810.67 664.72 810.95 665.28}下面的命令可以報出error發(fā)生位置的wire,,如果其他層的wire也落在這個bbox里面的話可能會干擾我們,所以我們可以用-layers來只報告有short的layer:[DEV]innovus 68> dbQuery -area {810.67 664.72 810.95 665.28} -objType wire -layers Metal50x7fff7a5e3718 0x7fff7a0f8058[DEV]innovus 69> get_db [dbQuery -area {810.67 664.72 810.95 665.28} -objType wire -layers Metal5] .net.nametdsp_portO[9] DTMF_INST/TDSP_DS_CS_INST/CTS_2再之后,,我們可以在short發(fā)生的box區(qū)域內(nèi)找到不是clock nets的那段wire,,是否是clock可以通過下面的命令來識別:[DEV]innovus 75> get_db [dbQuery -area {810.67 664.72 810.95 665.28} -objType wire -layers Metal5] .net.use[DEV]innovus 82> get_db [get_db [dbQuery -area {810.67 664.72 810.95 665.28} -objType wire -layers Metal5] .net] -if {.use != clock}{net:DTMF_CHIP/tdsp_portO[9]}之后刪除那段signal wire之后用ecoRoute重新繞即可。setMultiCpuUsage -localCpu 16get_db current_design .markers -if {.subtype == Metal_Short} -foreach {set box [get_db $object .bbox]set layer_name [get_db $object .layer.name]select_obj [get_db [dbQuery -area $box -layers $layer_name -objType wire] -if {.net.use != clock}]define_proc_arguments hq_fix_shorts -info 'Fix shorts based on DRC results'執(zhí)行proc hq_fix_shorts之后的結(jié)果:之后執(zhí)行ecoRoute并檢查DRC和Open即可,。有星粉反映工具有下面的命令可以實現(xiàn)相似的目的:20版:editDelete -regular_wire_with_drc這個命令會去解所有的DRC,,而不止是Short,可是我們一般用刪除shape去解short,,而非所有DRC,,并且這個命令會去刪除整個net的繞線,動作非常大,,所有不推薦大家直接使用,。我來分享一下兩者之間的區(qū)別,并推薦大家使用分享的腳本而非直接使用這個命令,,原因也會講一下,。editDelete -regular_wire_with_drc:優(yōu)點:只會刪regular net,因此不會動PG,。缺點:整個net都刪掉了,,一個net可能好幾百um(示例中一個500+的net整個刪除了),因為一個地方的小short導(dǎo)致整個net刪除,,對timing影響比較大,,而腳本分析的方法不存在這種問題。還有就是如果發(fā)現(xiàn)sigal nets和clock nets short了,,那么兩個net全部會被刪掉,。而clock nets對timing影響很大,所以如果要用這種方法最好把cts nets全部fix住,。優(yōu)點:只會刪short的area里面的data signal nets,,不會動PG和clock nets,因此比較有保證,,不會對timing和IR drop等有大的影響,。缺點:某些情況下,只刪除局部的short shape可能無法解決這個short,,工具可能還是會在那個地方去繞,。這個時候就需要刪除更多的shape了,可以手工來選擇性刪除,。如果net所在的path的timing非常寬裕,,那么完全刪掉它重新繞也沒有問題。
|