對于時鐘樹綜合,各位后端工程師應該都很熟悉,做好一個模塊/一個chip的時鐘樹,對整個項目 的功耗和Timing影響都是巨大的。一個優(yōu)秀的后端工程師,也不會只是單純的放置幾個TAP點,來工具 根據source group來自己分點做Tree,這樣只會跑flow 做樹的工程師在面對工具搞不定的復雜時鐘結構 的時候,只能束手無策,導致繞線完返修,花費很多時間在signoff階段,對時序和功耗硬修,甚至導致 流片delay,今天我們就來根據項目經驗來幫助大家做出更好,更完美的時鐘樹! 首先我們要明白做樹的最終目的—當然是為了PPA的提升,其實不做樹可不可以?當然可以!當你 當前的模塊規(guī)模比較小,且沒啥時序風險和PV,PI風險的時候,甚至可以不做樹。但是時鐘結構復雜/時 序功耗本身就有風險的模塊就不行了,樹做的不好將會導致ecoRoute完signoff階段的時序收不下來,功 耗很差,甚至根本沒法收斂,導致最后回退版本,老老實實回去做樹!那小編覺得就完全沒有必要了, 我們以innovus為例,來幫助大家快速做到對樹的收斂,從而對CTS有更深的理解,而非只會跑flow看結 果。 其實對于CTS這個步驟,我們可以把從初始時鐘結構到最終的時鐘樹結構分為三個階段,并且在這三 個階段分別去存對應的Database,以方便分析究竟是哪一步出問題了? 第一部分—分點,這一部分主要靠工具去完成,工具會識別后端工程師提供的source group(這個根據 工程師設置的tap點來定組),并將同一skew group下source group下面的對應tap點(可以是 MUX,BUFF,INV,ICG等等)的OutPutPin的generate clk視為一樣的時鐘結構,進而工具會 clone主Gating下除Sink點以外的原本時鐘路徑上的邏輯單元和時序單元,并將整條Path包含Sink點掛 到離其最近,時序更優(yōu)的Tap點下,這一分點形成初始樹的過程,在Innovus下通過以下命令實現: 對于復雜的時鐘結構,即多個分頻時鐘,倍頻CRG子時鐘,工具沒辦法很好的去分點或者說沒有過多的 考慮時序,而是單純考慮距離,對Sink點進行暴力切分,導致Common Path的長度非常的短,共同路 徑由source port到clone gating變成只有source port到主 ICG,這有可能會使得不同分點下的兩個Sink 的local skew偏大,進而影響postCTS后的timing。這種情況我們可以通過分點完后自己手動ec掛點/分 點前在Spec約束文件添加preserve port來控制工具的分點結果。 第二部分—Cluster解DRV,這一部分也主要靠工具去完成,在開始這步驟之前,工程師需要檢測對于 部分Net有么有設置dont touch,有沒有設置ideal net,以免CTS綜合后發(fā)現部分CK Cell的 transition過大,一追溯發(fā)現是DRV沒有解決,這一部分引起latency增大的原因其實主要是因為 Placement擺放CK cell位置的不合理,使得時鐘路徑發(fā)生了detour,增加了Net delay和部分本可以不 存在的解transiton的INV。這一部分遇到問題的主要解決辦法為:1.檢查place階段是不是有些Sink的 局部density過大/過小,導致工具在修DRV的時候拉扯較遠/沒有位置擺放INV;2.手動ec,將最后一級 INV的Fanout Sink直接掛到最近一級Clone的gating上,再解DRV(記得帶個強驅動的BUFF一起掛, 否則可能會因為clone gating的outputload突然增大而導致transition解的不好,傳遞到下幾級,導 致latency增大) 第三部分—Full階段長樹,這一部分工具會根據你的Spec約束來對Sink之間的Skew進行平衡,在 innovus中我們一般通過ccopt\_design來進行長tree和OPT同步的操作,實際上innovus在ccopt階段初 期,首先會確定placement的信息,其中包括density和DRC的相關信息的check,然后在準備階段, innovus會刷新一遍IO的skew,并判斷各個skewgroup之間的關系,哪個是主clk,哪個是generate clk,是否存在復制關系?在判斷完skewgroup的復制關系后,innovus會進行early global route,進行 快速繞線,以判斷有沒有繞線風險,并且檢查檢查NDR以及track的完整性等等。 所以基于以上工具的三個階段操作,后端APR工程師們需要明確分點做樹的階段目標是什么?1.降 低latency,以與其他模塊的時鐘樹串起來對齊;2.降低local skew,以減少后期fix timing工作量,降低 timing風險;3.增加common path的delay,目的也是為了降低latency和local skew;4.減少CK cell的 數量,有利于降低面積和功耗。在這里,小編基于日常項目給出幾種做短樹的latency和做小skew的方 法:
掌握了以上這些內容,想必各位ICer將會對CTS有更深的理解,CTS的實現其實隨著模塊時鐘復雜 的變化會有更多其他方法去降低Latency以及Skew,例如調整flowPlan,與前端商量修改RTL代碼 的時鐘結構,修改綜合時候map的lib cell,引入Mesh Cell等等。但是所有的一切,都是為了芯片 有個更好的PPA,這樣才能讓你和大家的加班沒有白費!我是處芯積律,感謝大家閱讀。 作者:處芯積律 |
|