對(duì)于時(shí)鐘樹綜合,各位后端工程師應(yīng)該都很熟悉,做好一個(gè)模塊/一個(gè)chip的時(shí)鐘樹,對(duì)整個(gè)項(xiàng)目的功耗和Timing影響都是巨大的。一個(gè)優(yōu)秀的后端工程師,也不會(huì)只是單純的放置幾個(gè)TAP點(diǎn),來工具根據(jù)source group來自己分點(diǎn)做Tree,這樣只會(huì)跑flow 做樹的工程師在面對(duì)工具搞不定的復(fù)雜時(shí)鐘結(jié)構(gòu)的時(shí)候,只能束手無(wú)策,導(dǎo)致繞線完返修,花費(fèi)很多時(shí)間在signoff階段,對(duì)時(shí)序和功耗硬修,甚至導(dǎo)致流片delay,今天我們就來根據(jù)項(xiàng)目經(jīng)驗(yàn)來幫助大家做出更好,更完美的時(shí)鐘樹!
圖一 一個(gè)最常見的muti Clock的時(shí)鐘樹結(jié)構(gòu)
首先我們要明白做樹的最終目的—當(dāng)然是為了PPA的提升,其實(shí)不做樹可不可以?當(dāng)然可以!當(dāng)你當(dāng)前的模塊規(guī)模比較小,且沒啥時(shí)序風(fēng)險(xiǎn)和PV,PI風(fēng)險(xiǎn)的時(shí)候,甚至可以不做樹。但是時(shí)鐘結(jié)構(gòu)復(fù)雜/時(shí)序功耗本身就有風(fēng)險(xiǎn)的模塊就不行了,樹做的不好將會(huì)導(dǎo)致ecoRoute完signoff階段的時(shí)序收不下來,功耗很差,甚至根本沒法收斂,導(dǎo)致最后回退版本,老老實(shí)實(shí)回去做樹!那小編覺得就完全沒有必要了,我們以innovus為例,來幫助大家快速做到對(duì)樹的收斂,從而對(duì)CTS有更深的理解,而非只會(huì)跑flow看結(jié)果。
其實(shí)對(duì)于CTS這個(gè)步驟,我們可以把從初始時(shí)鐘結(jié)構(gòu)到最終的時(shí)鐘樹結(jié)構(gòu)分為三個(gè)階段,并且在這三個(gè)階段分別去存對(duì)應(yīng)的Database,以方便分析究竟是哪一步出問題了?
第一部分—分點(diǎn),這一部分主要靠工具去完成,工具會(huì)識(shí)別后端工程師提供的source group(這個(gè)根據(jù)工程師設(shè)置的tap點(diǎn)來定組),并將同一skew group下source group下面的對(duì)應(yīng)tap點(diǎn)(可以是MUX,BUFF,INV,ICG等等)的OutPutPin的generate clk視為一樣的時(shí)鐘結(jié)構(gòu),進(jìn)而工具會(huì)clone主Gating下除Sink點(diǎn)以外的原本時(shí)鐘路徑上的邏輯單元和時(shí)序單元,并將整條Path包含Sink點(diǎn)掛到離其最近,時(shí)序更優(yōu)的Tap點(diǎn)下,這一分點(diǎn)形成初始樹的過程,在Innovus下通過以下命令實(shí)現(xiàn):
對(duì)于復(fù)雜的時(shí)鐘結(jié)構(gòu),即多個(gè)分頻時(shí)鐘,倍頻CRG子時(shí)鐘,工具沒辦法很好的去分點(diǎn)或者說沒有過多的考慮時(shí)序,而是單純考慮距離,對(duì)Sink點(diǎn)進(jìn)行暴力切分,導(dǎo)致Common Path的長(zhǎng)度非常的短,共同路徑由source port到clone gating變成只有source port到主 ICG,這有可能會(huì)使得不同分點(diǎn)下的兩個(gè)Sink的local skew偏大,進(jìn)而影響postCTS后的timing。這種情況我們可以通過分點(diǎn)完后自己手動(dòng)ec掛點(diǎn)/分點(diǎn)前在Spec約束文件添加preserve port來控制工具的分點(diǎn)結(jié)果。
第二部分—Cluster解DRV,這一部分也主要靠工具去完成,在開始這步驟之前,工程師需要檢測(cè)對(duì)于部分Net有么有設(shè)置dont touch,有沒有設(shè)置ideal net,以免CTS綜合后發(fā)現(xiàn)部分CK Cell的transition過大,一追溯發(fā)現(xiàn)是DRV沒有解決,這一部分引起latency增大的原因其實(shí)主要是因?yàn)镻lacement擺放CK cell位置的不合理,使得時(shí)鐘路徑發(fā)生了detour,增加了Net delay和部分本可以不存在的解transiton的INV。這一部分遇到問題的主要解決辦法為:1.檢查place階段是不是有些Sink的局部density過大/過小,導(dǎo)致工具在修D(zhuǎn)RV的時(shí)候拉扯較遠(yuǎn)/沒有位置擺放INV;2.手動(dòng)ec,將最后一級(jí)INV的Fanout Sink直接掛到最近一級(jí)Clone的gating上,再解DRV(記得帶個(gè)強(qiáng)驅(qū)動(dòng)的BUFF一起掛,否則可能會(huì)因?yàn)閏lone gating的outputload突然增大而導(dǎo)致transition解的不好,傳遞到下幾級(jí),導(dǎo)致latency增大)
第三部分—Full階段長(zhǎng)樹,這一部分工具會(huì)根據(jù)你的Spec約束來對(duì)Sink之間的Skew進(jìn)行平衡,在innovus中我們一般通過ccopt_design來進(jìn)行長(zhǎng)tree和OPT同步的操作,實(shí)際上innovus在ccopt階段初期,首先會(huì)確定placement的信息,其中包括density和DRC的相關(guān)信息的check,然后在準(zhǔn)備階段,innovus會(huì)刷新一遍IO的skew,并判斷各個(gè)skewgroup之間的關(guān)系,哪個(gè)是主clk,哪個(gè)是generateclk,是否存在復(fù)制關(guān)系?在判斷完skewgroup的復(fù)制關(guān)系后,innovus會(huì)進(jìn)行early global route,進(jìn)行快速繞線,以判斷有沒有繞線風(fēng)險(xiǎn),并且檢查檢查NDR以及track的完整性等等。
所以基于以上工具的三個(gè)階段操作,后端APR工程師們需要明確分點(diǎn)做樹的階段目標(biāo)是什么?1.降低latency,以與其他模塊的時(shí)鐘樹串起來對(duì)齊;2.降低local skew,以減少后期fix timing工作量,降低timing風(fēng)險(xiǎn);3.增加common path的delay,目的也是為了降低latency和local skew;4.減少CK cell的數(shù)量,有利于降低面積和功耗。在這里,小編基于日常項(xiàng)目給出幾種做短樹的latency和做小skew的方法:
增加TAP點(diǎn)的數(shù)量,這個(gè)方法雖然可以有效的降低skew和latency,但是會(huì)帶來功耗負(fù)擔(dān)以及面積浪費(fèi),并且隨著TAP點(diǎn)增加到一定數(shù)量,收益其實(shí)會(huì)逐漸收斂。所以這個(gè)方法后端工程師最好建立在規(guī)定數(shù)量TAP點(diǎn)實(shí)在修不下來delay和skew的時(shí)候再使用。
修改target來優(yōu)化工具的分點(diǎn)和balance長(zhǎng)樹,內(nèi)容主要包括(注: 修改要在clk spec生產(chǎn)后,即generate spec后分點(diǎn)前)
增加new skrewgroup以及generated clk來指導(dǎo)工具解drv和長(zhǎng)tree(這個(gè)主要優(yōu)化latency,skew變化并不大),以圖一的CLK結(jié)構(gòu)為例子,F(xiàn)ast Clk下MUX的ZN端可以設(shè)置generate CLK,并以這個(gè)為source,設(shè)置一個(gè)新的skew group.
Size up時(shí)鐘路徑上的icg以及buffer/inv,logic等instance,這樣可以增加驅(qū)動(dòng),降低transition,進(jìn)而降低latency(這種方式不僅會(huì)優(yōu)化latency,skew也會(huì)由一定的優(yōu)化),比如D4的DCCKBUF換成D8的BUFF,H12的BUFF換成H9的BUFF等等。
可以通過提樹/推樹的xxx ps的方法,來做長(zhǎng)做短樹,Place階段推樹/cts階段設(shè)置insertation delay都有利于樹的做短(這個(gè)方法主要影響的是balance長(zhǎng)tree階段),這個(gè)通??梢葬槍?duì)cluster階段latency不大,但是balance長(zhǎng)tree階段突然樹長(zhǎng)變長(zhǎng)的path,例如
修改Space中的CK Pin的類型,有些不影響Timing的前提下把Pin設(shè)置成為stop ignore throughpin(這個(gè)方法主要影響的是balance長(zhǎng)tree階段)
一些ec操作,一般是工具分點(diǎn)/解DRV有問題的時(shí)候,才需要工程師去手動(dòng),比如重新掛點(diǎn),presever pin,手動(dòng)clone icg掛點(diǎn)等等
掌握了以上這些內(nèi)容,想必各位ICer將會(huì)對(duì)CTS有更深的理解,CTS的實(shí)現(xiàn)其實(shí)隨著模塊時(shí)鐘復(fù)雜的變化會(huì)有更多其他方法去降低Latency以及Skew,例如調(diào)整flowPlan,與前端商量修改RTL代碼的時(shí)鐘結(jié)構(gòu),修改綜合時(shí)候map的lib cell,引入Mesh Cell等等。但是所有的一切,都是為了芯片有個(gè)更好的PPA,這樣才能讓你和大家的加班沒有白費(fèi)!
審核編輯:劉清
-
DRV
+關(guān)注
關(guān)注
0文章
18瀏覽量
20639 -
時(shí)鐘樹
+關(guān)注
關(guān)注
0文章
53瀏覽量
10732 -
Mux
+關(guān)注
關(guān)注
0文章
38瀏覽量
23352 -
CTS
+關(guān)注
關(guān)注
0文章
35瀏覽量
14057
原文標(biāo)題:細(xì)聊時(shí)鐘樹綜合CTS階段如何去降低Latency和Skew
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論