要作好floorplan須要掌握哪些知識跟技能?前端
首先熟悉data flow對擺floorplan 有好處,對於減小chip的congestion 是有幫助的,可是也不是必需的,尤爲是EDA工具快速發展的當今,好比Innovus 最新的MP特性,能夠自動對cell和macro 一塊兒作place,結果至關不錯,省了不少事情。node
其次,須要瞭解 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 時須要預先考慮的。ide
一般,遇到floorplan問題,大體的debug步驟跟方法有哪些?工具
Floorplan 的問題主要會致使overflow 偏高,或者timing 較差。timing較差的話能夠經過看timing path 分析DFF和IP的關係,來得出IP擺放是否合理。若是用的是Innovus, 能夠用ameba view 來查看 module 的分佈,看看什麼module 被扯的很散來得出IP沒有擺放合理。oop
若是是overflow 比較差,能夠經過查看overflow 的hotspot 來觀察hotspot的分佈,還有 hotspot所在的module。如今innovus 對於hot spot的module均可以很好地經過下降module local density的方法處理得很好。通常的 hotspot 基本上都是由穿過該區域的routing 引發的,這樣就須要考慮到IP的擺放是否是有違dataflow。佈局
如何衡量floorplan的QA?post
Floorplan的QA 主要是在不影響timing 和congestion的前提下合理佈局使得芯片面積能夠儘可能小。net length, timing result 都是衡量floorplan的標準優化
innovus 提供了不少方便的button來擺放memory 好比等距離alignIP ,對齊IP,很是靈活。 ui
另外有不少IP之間的customer routing 須要在floorplan階段就考慮進去, innovus 在customer routing 上也有很方便的各類button ,好比從選中的線取名字autofill the net name. 能夠指定想用的via type,指定寬度或者NDRrule 自動加 shielding, 在畫線的時候還能夠show 出 target pin與當前所畫shape 之間的飛線,還能夠auto snap shape 到pin上,這些均可以省去不少手工操做。idea
另外經過預先畫好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 也能夠關掉,總之是又迅速又便捷。