今天小編給大家分享下吾愛IC社區星球上周十大后端精華主題。
Q1:星主,請教個問題,長tree的時候發現這個scan的tree 的skew差不多400p,我高亮了整個tree的schematic,我在想是不是我在這一系列mux前邊打斷,設置ignore pin,后邊create_clock那是不是就可以做平這個tree?
數字IC后端實現時鐘樹綜合系列教程 | Clock Tree,Clock Skew Group之間的區別和聯系
你如果不做任何處理,所有的sink點都會做平的,即clock skew不會這么大。只不過clock tree長度會比較長而已。你這個case需要分析幾個mux的另外一個輸入時鐘是什么?能否mux輸入端設置ignore,取決于mux前后的寄存器是否有時序交互。如果沒有,是可以這么做。否則就不行。
像下面這兩個典型時鐘結構,我們就需要對選擇器的各個輸入端做處理。比如第二張圖所示的無毛刺時鐘切換電路,該電路最后一級的輸入端和輸出端需要分別定義sink type和create_clock,否則整體clock tree會做得很長!
Q2:星主你好,我想請教一下create_clock 和create_gerated_clock 的sink 是否要做平問題。我看網上一些說法:create_clock 和create_gerated_clock 的sink 因為同屬于一顆clock tree,會默認做平,電路圖如下:
我覺得是不會做平,理由如下:
- create_clock 和create_gerated_clock 的spec 會產生不同clock tree,這是屬于不同clock tree了,并且還產生不同的skew group。
2)我在innovus gui和命令確認了 DFF1和DFF2的clock skew 是遠遠大于我設置cts_target_skew的(如果是做平,理論DFF1和DFF2的skew 應該與我cts_target_skew差異不大)。并且確認了cts spec 沒有mopdify_ccopt_skew_group -add_ignore_pins 命令把我DFF1/CK, DFF2/CK給ignore 掉。星主,請問一下,我想法是對的嗎?
如果是在分頻寄存器輸出定義generated clock,效果如下圖所示。FF1和FF2肯定會比較balance的。因為FF2這路多出一顆寄存器CK-Q的delay,所以FF1這路clock path上工具會插不少clock inverter的。
如果是在分頻器輸出create_clock,那么效果圖如下圖所示。FF1和FF2都在各自的clock tree上,skew一定比較大。FF1只會和分頻寄存器做balance。
你的時鐘結構圖我幫你畫出來了(clock mux的B端 你也可以進一步完善)。正常是要做clock balance的。這個需要將clock spec文件中這兩顆寄存器相關信息截圖看下,確認工具是否有對這兩個點做了一些特殊處理。
另外我建議你單獨做下ccopt_design -cts 然后再分析下。做tree之前記得把這個設置設上。正常后端實現流程不要把CTS和postCTS兩個階段合并一起做!
set_ccopt_property extract_clock_generator_skew_groups false
Q3:星主你好,想總結一下 timing report中 incr 延時后的特殊符號的意義。我了解到 * 代表工具抽的sdf延時,請問空白或其他特殊符號(如 # )代表了哪些意思,感謝!
一張圖搞定這個問題。PT時序signoff看到的report中只能是真實RC反標&,其他任何符號都是錯的。只要是咱們社區IC訓練營學員的,這個肯定非常熟悉,每次時序signoff分析pt時序報告都會講到這個。
數字IC后端筆試面試題庫 | 經典時序計算題
Q4:Memory是否可以擺放在core區域和timing path合理性問題
- 圖中所示的timing path是否合理?為什么?如何做優化?
2)Memory是否可以擺放在core區域中間?把memory擺放在core區域的利弊分別是什么?
Q5:星主,最近做的項目遇到了IR問題 有個違例點在buffer v10上,這個bufferv10驅動的是長線 200多um 領導的讓在長線中間插個buffer 后面也解掉了,請問這是什么原理?
線短了單個buf負載變小,對應電流會變小,新加的buf在不同位置,原先位置的iavg會變小,所以對ir drop確實有點收益。
包括把cell驅動變小或換成閾值電壓更高的cell,其實也是可以改善ir drop的。
數字IC設計后端實現前期預防IR Drop的方法匯總
Q6: TSMC28nm 1P8M Powerplan設計規劃問題
Q7: 星主,問一個有趣的事情,同一個db,同樣的命令,為啥nworst 1我這里報只有一個slack,同事那兒就變成三個了?
你們當前active的analysis view數量不一致哦,這個還是非常明確的。不能view下slack是不太一樣的。
最后發現是有個同學在flow中將如下變量設置成true了,改成false就一模一樣了。
set_global timing_report_group_based_mode true
Q8:星主,想問一下,設計存在mem2cgate的path,invs有啥命令讓icg靠近mem擺放嗎,或者這類path如何優化timing呢?
一般memory相關的ICG我們都是建議手工擺放好位置,fixed住。優化到ICG enable的timing path,我們主要有以下幾種方法。
1)placement階段設置更大的clock gating check
2)使用early clock flow,在placement階段提前看到ICG和寄存器memory之間的天然skew
3)綜合階段和PR階段控制fanout(可以改善timing)
- power aware的clock gating cell placement
甚至我們如果想精細化調timing和clock tree,我們還需要manual place這些ICG clock gating cell和相應的寄存器。
Q9: 星主,請教個問題,harden做lvs check結果如下圖,extract open是我給harden打的text,分別為m5的VDDI,m7的VDD,我去掉text我lvs會fail,不去掉的話我這兒顯示open,在top(hell)上也能顯示出來open,所以我這兒的open究竟算不算真錯?另外我給top出gds前還需要打text嗎?
模塊內部M5沒有連成一個整體導致的。頂層在模塊蓋上高層的pg后就沒問題了。你給top出gds不需要打text的,因為你出模塊lef給頂層了,頂層可以看得到你模塊內部高層PG的。
Q10: Calibre插dummy后對時序和IR Drop的影響?