数字后端设计实现之时钟树综合实践篇
數字后端設計實現之時鐘樹綜合實踐篇
文章右側廣告為官方硬廣告,與吾愛IC社區無關,用戶勿點。點擊進去后出現任何損失與社區無關。
時鐘樹綜合定義
時鐘樹綜合就是指從某個 clock 的 root 點長到各個 sink 點的 clock buffer/inverter tree。工具試圖將某個 clock 所屬的所有 sinks 做到相同長度。從概念上,我們可以得到幾個要點。
圖 1 時鐘樹
CTS 之前你應該先搞清楚以下幾點(非常重要)
-
clock 的 root 點需要定義清楚。這個可以通過 create_clock 來定義。如果是 create_generated_clock,它的 master clock 需要定義清楚。同時要求 generate clock 與 master clock 是可以 trace 通的
-
clock 的 sinks
-
哪些 clock 是同步,哪些是異步的
-
分析時鐘結構,大致畫出其結構圖。如果時鐘結構比較復雜,建議編寫 CTS constraint,來引導工具 build tree
-
定義好 stop pin ignore pin exclude pin floating pin 等
-
哪些 clock 是需要做 inter-balance 的
衡量時鐘樹的幾大指標
合理的時鐘結構能夠加速 Timing 收斂(時鐘樹綜合中級篇)
時鐘樹綜合(clock tree synthesis)基礎篇
設置 DRC 參數
設置 max_transition max_capacitance max_fanout 等參數。對于 clock 的 max transition 的設置,應該根據 clock 的頻率來設置。高頻率的 clock,需要額外設置嚴格點。
指定 clock inverter list
set_clock_tree_references -references $cts_clock_inv_list
set_clock_tree_references -references $cts_clock_inv_list -sizing_only
set_clock_tree_references -references $cts_clock_inv_list -delay_insertion_only
clock inverter cell list 的選擇往往比較有講究。一般情況下 fab 都會給出建議。往往是驅動中等的幾類 cell。以 TSMC28 為例,官方建議 clock inverter 應該選用三款 cell,分別是 CKND8,CKD12,CKD16 的 cell。
大驅動的 clock inverter(比如 CKND20,CKD24)容易出現EM 問題。
而小驅動的 clock inverter(比如 CKND2), 受 PVT 影響比較大,容易出現較大的工藝偏差。
用來 build clock tree 的 clock inverter 必須使用 LVT 或者 SVT,而且必須保證 clock tree 上只有一種 VT。HVT cell 禁止使用在 clock tree 上,因為工藝偏差較大,導致 signoff 的 timing 和實測嚴重不 match,甚至導致功能錯誤。
設置 don’t_use cell list
設置 floating pin 和 inter-clock balance
很多時候我們為了將某些 reg 做短(可能是 timing 考慮,可能是 clock latency 的要求),此時需要設置 floating pin。有的 hierarchical design,我們需要告訴工具子模塊中的 clock latency 長度,也要設置 floating pin。
當兩個時鐘并不是同步的,但是他們的某些 register 會進行 talk。默認情況下,CTS build CLOCK1 和 CLOCK2 時,會各自 build clock tree,不會做 inter-clock balance,如圖 2 所示。
圖 2 未做 inter-clock balance
因此,我們需要設置 inter-clock balance 選項。設置命令如下:
set_inter_clock_delay_options -balance_group “Clk1 Clk2” -balance_group_name group2
圖 3 inter-clock balance 后
設置 NDR rule
為了防止 clock 上的 SI 和 EM,我們需要對時鐘信號線進行 non-default rule 的設置。通常設置兩倍寬度,兩倍間距(當然也有更大,根據實際情況進行更改)。
define_routing_rule CTS_NDR_RULE
-widths {M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15}
-spacings {M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15}
由于標準單元出 pin 大部分是 M1/M2,如果設置 ndr rule,會導致很多 DRC。因此,可以將最 leaf 端采用默認的線寬和線間距來走線。
set_clock_tree_options -routing_rule_ rule -use_default_routing_for_sinks 1
為了使得 clock tree 質量更好,我們往往將高層用來作為時鐘信號的走線。
set_clock_tree_options -layer_list {M7 M8}
圖 4 NDR setting
除了對 clock net 設置 NDR 外,還需要對某些對時鐘質量要求比較高的 clock,進行 shielding。
route_zrt_group -all_clock_nets
圖 5 shielding 示意圖
define_routing_rule ${rule_prefix}_shielding_rule -default_reference_rule
-widths {M2 0.10 M3 0.10 M4 0.10 M5 0.10 M6 0.20}
-spacings {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}
-shield_widths {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}
-shield_spacings {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}
create_zrt_shield -mode reshield -with_ground VSS -nets $shielding_nets -align_to_shape_end true
Apply IO Latency
set_latency_adjustment_options -from_clock clk -to_clock virtual_clk(如果 IO port 是用 virtual clock 來 constraint 的,通過此命令來進行 IO Latency 的 apply)
update_clock_latency
圖 6 IO Latency adjustment
時鐘樹綜合后需要將 clock tree 上的 cell 進行 mark,防止工具后續進行 timing 優化而對 clock tree 進行改動。
mark_clock_tree -clock_trees [all_clocks] -clock_synthesized
build clock tree 的兩種方法
-
comile_clock_tree 和 optimize_clock_tree
-
clock_opt -only_cts
大家可以分別用這兩種方法去實踐下,結果差不多。
查看時鐘樹結果
可以從 log 中看到每個 clock 長 tree 的情況,比如 clock latency,clock skew, 某個 clock domain 中最長的 clock path 和最短的 clock path。
圖 7 時鐘樹綜合 log
同時,還可以通過以下命令來查看更多關于 clock tree 的信息。
report_clock_tree -clock_trees CLK -structure -drc_violators –summary
時鐘樹結果主要 focus on clock skew, clock latency。 查看工具做出來的 skew 和 latency 是否符合設計要求,是否是最優的。如果不是,請根據實際情況進行調整和優化。
限于篇幅,本文還未介紹 CTS 中一個比較牛逼的功能——CCD(Concurrent Clock And Data)。這個功能用好了,往往可以使得設計的性能和功耗有個明顯的提升(這個 feature 如果沒用好,你可能會覺得它就是一個坑)。
關于 flow 中 CCD(Concurrent Clock And Data),后續會結合 ARM CortexA 系列 CPU 的后端實現來做一個分享。會以文檔的形式推送到吾愛 IC 社區的知識星球上。應部分粉絲要求,近期知識星球上還會發布 ICC 和 ICC2 lab 對應的實踐演練(由小編親自實操 lab,進行知識點延伸,并以文檔形式分布,絕對比官方的詳細!)
這幾天,粉絲越來越多了,提問的人也越來越多了。有的是重復的問題,有的則是新問題。對于之前我回答過的問題,想通過找歷史回答記錄,似乎很困難(要么去翻群歷史消息,要么去翻個人歷史消息)。
所以個人覺得這個不是長久之計,知識和解答不容易隨著時間的積累而慢慢沉淀下來。所以小編注冊了知識星球(原小密圈),建立了一個數字后端技術交流圈(需要付費,志愿加入原則)。
在這里,各位可以提問,小編會在 24 小時內給予解答(也可以發表你對某個知識點的看法,項目中遇到的難點,困惑或者職業發展規劃等)。
反正它是一個縮減版的論壇,增強了大家的互動性。更為重要的是,微信有知識星球的小程序入口。星球二維碼如下,可以掃描或者長按識別二維碼進入。目前已經有六位星球成員,感謝六位童鞋的支持!
相關文章推薦(不看保證后悔)
【驚呆了!】你居然還在用 flatten 方式進行 timing signoff
數字后端面試問答 No.16-18
合理的時鐘結構能夠加速 Timing 收斂(時鐘樹綜合中級篇)
數字后端面試問答 No.13-15(每日三問)
【機密】從此沒有難做的 floorplan(數字后端設計實現 floorplan 篇)
數字后端面試問答 No.10-12(每日三問)
數字后端面試問題 No.7-9(每日三問)
聽說 Latch 可以高效修 hold 違例(Timing borrowing 及其應用)
15 天零基礎入門到精通 python - 最全的視頻教程
數字后端面試問答 No.4-6(每日三問)
IR Drop 分析之 Redhawk 分析流程
CRPR 能補償 crosstalk 嗎?
原來電路最高工作頻率是這么算出來的(STA 基礎篇)
數字后端面試問答 No.1-3(每日三問)
秒殺數字后端實現中 clock gating 使能端 setup violation 問題
教你輕松調 DCT 和 ICC 之間 Timing 與 Congestion 的一致性
數字芯片設計實現中修復 setup 違例的方法匯總
數字 IC 設計中 ECO 的那些事,其實并不是事!
Scan chain reordering 怎么用你知道嗎?
如何評價數字后端設計中 floorplan 的好壞?
數字后端實現時 congestion 比較嚴重,你 hold 得住嗎?
數字后端實現 place 過程進階
Final netlist release 前,你應該做好哪些工作?
基于 Physical Aware 的動態功耗優化實現方案
深入淺出講透 set_multicycle_path,從此徹底掌握它
【大師必備】最全的數字 IC 設計經典書籍電子版下載
你與數字后端大神的差距在這里,快來瞧瞧!
數字后端實現時 congestion 比較嚴重,你 hold 得住嗎?
時鐘樹綜合(clock tree synthesis)基礎篇
【福利】數字 IC 后端各種 Userguide 下載
好了,今天的內容分享就到這里。另外,因為公眾號更改推送規則,小編分享的每篇干貨不一定能及時推送給各位。為了避免錯過精彩內容,請關注星標公眾號,點擊 “在看”,點贊并分享到朋友圈,讓推送算法知道你是社區的老鐵,這樣就不會錯過任何精彩內容了。
如果你想和小編有更進一步的溝通交流的機會,歡迎加入小編知識星球,讓我們一起學習成長,共同進步。相信在這里能讓你成就一個更完美的自己。
小編知識星球簡介(如果你渴望進步,期望高薪,喜歡交流,歡迎加入 ****):
在這里,目前已經規劃并正著手做的事情:
-
ICC/ICC2 lab 的編寫
-
基于 ARM CPU 的后端實現流程
-
利用 ICC 中 CCD(Concurrent Clock Data)實現高性能模塊的設計實現
-
基于 ARM 四核 CPU 數字后端 Hierarchical Flow 實現教程
-
時鐘樹結構分析
-
低功耗設計實現
-
定期將項目中碰到的問題以案例的形式做技術分享
-
基于 90nm 項目案例實現教程(ICC 和 Innovus 配套教程)
-
數字 IC 行業百科全書
吾愛 IC 社區知識星球星主為公眾號” 吾愛 IC 社區” 號主,從事數字 ic 后端設計實現工作近八年,擁有55nm,40nm,28nm,22nm,14nm等先進工藝節點成功流片經驗,成功tapeout 過三十多顆芯片。
這里是一個數字 IC 設計實現高度垂直細分領域的知識社群,是數字 IC 設計實現領域中最大,最高端的知識交流和分享的社區,這里聚集了無數數字 ic 前端設計,后端實現,模擬 layout 工程師們。
在這里大家可以多建立連接,多交流,多拓展人脈圈,甚至可以組織線下活動。在這里你可以就數字 ic 后端設計實現領域的相關問題進行提問,也可以就職業發展規劃問題進行咨詢,也可以把困擾你的問題拿出來一起討論交流。對于提問的問題盡量做到有問必答,如遇到不懂的,也會通過查閱資料或者請教專家來解答問題。在這里鼓勵大家積極發表主題,提問,從而促進整個知識社群的良性循環。每個月小編會針對活躍用戶進行打賞。
最重要的是在這里,能夠借助這個知識社群,短期內實現年薪百萬的夢想!不管你信不信,反正已經進來的朋友肯定是相信的!相遇是一種緣分,相識更是一種難能可貴的情分!如若有緣你我一定會相遇相識!知識星球二維碼如下,可以掃描或者長按識別二維碼進入。目前已經有 858 位星球成員,感謝這858 位童鞋的支持!歡迎各位渴望進步,期望高薪的鐵桿粉絲加入!終極目標是打造實現本知識星球全員年薪百萬的宏偉目標。
歡迎關注 “吾愛 IC 社區”
微信號:ic-backend2018
https://mp.weixin.qq.com/s/uR8PDNv86-HBegvscVOXCA
總結
以上是生活随笔為你收集整理的数字后端设计实现之时钟树综合实践篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年最值得学习的5款开源Java框
- 下一篇: 每天学习点--------第五天(201