要做好floorplan需要掌握哪些知識跟技能?
首先熟悉data flow對擺floorplan 有好處,對於減少chip的congestion 是有幫助的,但是也不是必需的,尤其是EDA工具快速發展的當今,比如Innovus 最新的MP特性,可以自動對cell和macro 一起做place,結果相當不錯,省了很多事情。
其次,需要了解 design的 power mesh,工藝的DRC rule ,IP 的base layer的spacing rule,memory能否abut ,IP channel 里擺放的cell 供電夠不夠,最小的spacing 可以到多少, channel里的resource 夠不夠, analog IP 擺放的位置跟pad 的關系, customer routing 好不好出,這些都是做 top floorplan 時需要預先考慮的。
通常,遇到floorplan問題,大致的debug步驟跟方法有哪些?
Floorplan 的問題主要會導致overflow 偏高,或者timing 較差。timing較差的話可以通過看timing path 分析DFF和IP的關系,來得出IP擺放是否合理。如果用的是Innovus, 可以用ameba view 來查看 module 的分布,看看什么module 被扯的很散來得出IP沒有擺放合理。
如果是overflow 比較差,可以通過查看overflow 的hotspot 來觀察hotspot的分布,還有 hotspot所在的module。現在innovus 對於hot spot的module都可以很好地通過降低module local density的方法處理得很好。一般的 hotspot 基本上都是由穿過該區域的routing 引起的,這樣就需要考慮到IP的擺放是不是有違dataflow。
如何衡量floorplan的QA?
Floorplan的QA 主要是在不影響timing 和congestion的前提下合理布局使得芯片面積可以盡量小。net length, timing result 都是衡量floorplan的標准
-
innovus 提供了很多方便的button來擺放memory 比如等距離alignIP ,對齊IP,非常靈活。
-
另外有很多IP之間的customer routing 需要在floorplan階段就考慮進去, innovus 在customer routing 上也有很方便的各種button ,比如從選中的線取名字autofill the net name. 可以指定想用的via type,指定寬度或者NDRrule 自動加 shielding, 在畫線的時候還可以show 出 target pin與當前所畫shape 之間的飛線,還可以auto snap shape 到pin上,這些都可以省去很多手工操作。
-
另外通過預先畫好region,再planDesign的方式控制同一個hierarchy的memory 擺在一起。
-
更簡單的方法就是通過mix_place 設好 memory的spacing rule,還有加soft blocakge和 hard blockage的range,就可以直接把memory和 standard cell 擺好,完全不需要手工操作。
Placement
要做好placement需要掌握哪些知識跟技能?
place基本分兩步來做: coase placement 跟 opt. 這些東西在innovus 只要設好了process相關的default setting,如果不是特別critical 的design, tool都會handle的很好,不需要手工干預什么。
遇到critical的design,需要分析local density,congestion 和timing,需要注意的是,在place 階段 clock都是ideal的,所以很多icg 的timing 是看不精確的,只有到cts 做完之后才能看到這些icg 的精確timing,所以需要對critical icg 額外地加一些clock gating check的margin。
通常,遇到placement問題,大致的debug步驟跟方法有哪些?
placement 遇到的主要問題是timing,還有一些place導致的潛在的DRC問題。
-
如果是timing問題,首先看timing report, 如果logic level很長,那就需要大概估算下當前的frequecy 是不是可以meet,需不需要前端重新綜合;如果本身logic level 不長,但是有很多buffer在path上,那要看下這條path是屬於一個hierarchy還是多個hierarchy,屬於一個hierarchy的話在ameba view里看下這個hierarchy 在place之后的分布,如果分布的比較散,注意看下是因為什么原因導致分布的不好,一般有可能是IO的place 和macro的floorplan沒有做好,把跟兩塊都有聯系的logic 扯的太遠,所以需要調整floorplan。如果調整floorplan也無法解決,可以嘗試加useful skew 的方法來meet timing。
-
另外在stdcell 區域看到的congestion的hot spot要格外注意,有可能是復雜的mux 放在一起導致的,需要加額外的module padding,或者需要前端禁用pin density高的cell 重新綜合。
如何衡量placement的QA?
placement的目標是在幫后續優化留夠margin的基礎上盡可地提高density 使chip面積最小化。place的QA主要靠后續CTS, routing的結果來衡量。如果一個design place timing沒問題,但是到了routing 卻發現route不通那也沒啥用。
Innovus的placement可以根據congestion有效降低local density。
-
Innovus在根據timing做place 方面的表現非常搶眼,可以根據對timing critical的path進行集中的place達到合理的module分布。
-
Innovus還提供了early clock flow,即在place 之前就把ccopt的setting和ccopt spec 讀進design,然后設一些earlyclock flow的setting,那么在coarse place之后, tool就會根據目前flip flop的擺放開始build tree, NDR的routing 所需要的資源也會比一般的place 估計的更准一點。clock routing 引入的congestion 也可以在早期得到處理。
-
Innovus可以在place階段通過auto useful skew 自動進行clock latency的調整,使得timing critical的design 的timing 不再難做。此步驟會生成latency.sdc的文件,用該文件報的timing就是已經把clock latency算在內而得出的。之后在生成ccopt spec的時候,該文件也會自動轉換成ccopt spec里的clock pin的insertion delay, ccopt也會honor這個skew. early clockflow和 auto useful skew 是一對好伙伴,一起使用效果更好喲。
-
在advanced node上一些因為place導致的后期的routing和pg pin access (via pillar)和pg之間的DRC, innovus 也可以在早期就detect到,通過checkPlace還可以報出這些violation。
-
Innovus還有個比較厲害的功能叫layer promotion 會自動把critical path 的early global routing 的layer promote 到高層去,使得一樣的距離net上的delay更小。而且這個layer 的promotion 會一直keep到routing stage 會在真正的routing 的時候 honor 這些routing 的promotion。
要做好CTS需要掌握哪些知識跟技能?
-
common sense就是知道CTS在干嘛, CTS就是build所有clock的clock tree 使得理想情況下clock能同時到達所有的FF,然而現實沒那么理想,到各個FF的clock總是有長有短,所以只要求這個長短在一定的范圍內即可,這個范圍將要吞掉一部分在place中留下的margin。
-
要了解自己的design,知道其中的clock哪些是main clock, 哪些是test clock 或者頻率較低的clock。對不同的clock 做不同的constrain 和setting 可以使CTS更加有效。比如對不critical的clock 不必設很嚴格的NDR,不用很大的width和spacing可以節省routing resource。此外要預知clock 對clock gating timing的影響,這些影響是在ideal clock 的時候看不到的。所以需要做一些特殊的setting使得這些icg 更靠近root 端以減小CTS對clock gating的影響。
-
要知道design中哪些clock之間有talk,那么這些clock 需要balance。IP內部的clock latency需要設多少insertion_delay等,情況太復雜不能一一贅述,總之一切都是以setup和hold能meet為首要目標。
通常,遇到CTS問題,大致的debug步驟跟方法有哪些?
CTS承上啟下,遇到的問題一般情況比較復雜,既有可能跟place相關也有可能跟routing相關,因為default的CTS流程都會將clock routing上,然后做完clock routing之后再重新fix一下skew 和transition。
通常CTS遇到的問題,就是skew 比較大, latency比較長,
-
對於latency比較長,可以根據design 大小分析這個latency是不是合理,也可以看log 在第一步clusterting做完報出來的clock latency的最大值,如果clustering 做完latency 還比較小那么可以看看log 是在哪一步導致latency 突然變長進行具體分析。
-
可以查看skew在每一步的變化,在innovus 的log里可以搜索“Primary reporting” 這樣的關鍵字來查看每一步做完之后 latency 和skew的變化,來分析是哪一步導致的問題。大多數問題都是在clock routing之后出現的,這個時候需要分析clock routing的setting是否合理,NDR是不是足夠,還有看看clock cell有沒有給對, driven是不是夠大。
-
對於skew 較大、latency過長的問題還需要分析design的clock structure,看看有沒有不需要balance的FF,比如一些clock generator 的FF 可以設ignore pin 從clock tree 中去掉。如果設了ignore pin 那么CTS是會修Clock transition 但不會跟別的FF做balance,如果設了exclude pin 那么就是完全不修transition在后面postcts 的時候修data transition。還有一些counter 可以設skew group,即這些FF相互之間balance 但是不跟別的FF balance,那么保證的counter之間的timing 可以meet 還可以不跟別的FF balance 不會被physical上較遠的FF拉長。
如何衡量CTS的QA?
CTS的QA主要就是latency和skew ,好的CTS做完不會導致hold 插很多buffer,就說明skew是合理的。另外就是保證common path足夠長,這個都是tool 在不復雜的情況下能保證的。如果情況復雜,就需要人為的干預做一些anchor buffer 並且fix 住, guide CCOPT 更好的balance。
-
Innovus 最NB的就是CCOPT, CCOPT的NB之處就是concurrent 優化timing和build tree,在build tree的過程中看timing 優化timing 然后重寫skew tree 來meet timing。 ccopt 看到的critical 不是path 而是critical loop。一個timing loop里的slack之和除以stage number 具體可以參看user guide :).
-
做了ccopt 之后就可以很好地處理一下在place階段處理不好的clock gating 的timing還有怎么都修不掉的setup,但是前提是得保證你的SDC 足夠正確,要不然有false path 讓ccopt 看到它會很努力的修這些false path,導致別的path 都被skew 了一輪,而且還會導致比較長的run time。所以好東西一定要好好的用起來喲。
要做好Route需要掌握哪些知識跟技能?
routing當然了解design 最高能routing到多少層,哪些層是double pattern,哪些層是厚的metal。還有 std cell 出pin多少層。當然這些你也可以不需要掌握,只要PG打好就是一個routeDesign 的事兒,至少你得知道你的process 吧,在route 的setting 里把相應的process指定好基本上default 的setting 就能handle 一個design了。
通常,遇到Route問題,大致的debug步驟跟方法有哪些?
遇到的問題主要有 runtime太久, run完之后short 和DRC 太多,還有就是routing之后timing degrade的問題。
-
run time如果太久的話可以查看下過程中的log里的DRC在哪個layer 或者是哪種類型,如果是底層layer比較多可以在routing之前的db上做個checkPlace 看看有沒有一些place 沒做好導致的routing DRC。如果出現在高層layer或者某種類型的DRC特別多,可以設少一點的end iteration 重新run下,快速得到一個中間結果看看高層的layer是什么問題導致DRC無法修掉。
-
在充分的routing和repair之后發現DRC和short比較多的情況下,也需要分析類型比較多的DRC是怎么導致的,如果是因為cell的擺放引起的,那么可以看checkPlace 能不能報出這些問題,如果能報出可以用refinePlace 重新把cell 移開,如果checkPlace 報不出可以自己寫一些edge rule來挪開這些cell。
-
另外還有一些是從thin的layer 到thick layer跳層的大孔比thin layer的track 大,導致這些via 和thin layer routing的short 或者spacing的DRC。這些問題可以通過調整routing 的setting 來解決。
-
還有一些DRC可能是因為tool 的repair iteration不夠引起的,可以通過ecoRoute-fix_drc 再修一輪來fix 這些剩下來的DRC。
-
routing之后的timing degrade 是一個普遍的問題,原因很多,有的是因為congestion 區域太多,使得tool 自動detour了經過這片區域的net,使得net length 變長timing degrade. 還有就是SI 引起的timing degrade。這些問題都可以通過postroute 通過size up 一些cell 來修回來。
如何衡量Route的QA?
routing的DRC和timing 是routing 要meet的目標。 DRC要在手工可修的范圍;timing 即使degrade也要在所留的margin之內。那么這樣的routing就達標了。
-
Innovus routing最大的優勢就是 DRC和calibre的correlation 非常的好,基本上calibre上的DRC在innovus 里都能被識別到。
-
另外目前的innovus routing還可以做到在routing的過程中優化timing使得routing的結果和postRoute 的結果 correlation 非常好。
要做好DRC需要掌握哪些知識跟技能?
修DRC需要了解design rule,還需要會使用innovus里一些editwire的button和gui。
通常,遇到DRC問題,大致的debug步驟跟方法有哪些?
DRC的問題主要就是tool 沒有handle好,在用了ecoRoute -fix_drc之后如果還是沒有改善那么就需要手工去handle了,這個時候熟練運用各種innovus的快捷鍵會對修drc有很大的幫助。
如何衡量DRC的QA?
DRC的QA就是修干凈了,在calibre里沒有報出錯了。
因為innovus 和calibre 的DRC correlation非常好,尤其是在advanced node上,所以基本上在innovus里fix 干凈的DRC在signoff tool里就很少有沒有fix的drc了。
Innovus手工操作速度快且方便,可以自動snap wire, via, snap到track, snap到pin都沒問題。不想snap 還可以關掉。畫線可以自動gen 出孔,不想gen 也可以關掉,總之是又迅速又便捷。
