INVS 對(duì)時(shí)鐘二分頻器(reg-clkgen)的理解和處理
時(shí)間:2025-11-17 23:08:37
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在時(shí)鐘樹(shù)的設(shè)計(jì)中,有很多方式處理分頻時(shí)鐘,常見(jiàn)的無(wú)外乎兩種模式:
- 時(shí)鐘二分頻器(reg-clkgen)
- 門(mén)控時(shí)鐘
INVS ccopt 系統(tǒng)簡(jiǎn)介
INVS在useful skew顯然具備強(qiáng)大的優(yōu)勢(shì),其中的ccopt flow,擁有靈活,高效和用戶友好等多種特性,其獨(dú)特的思維方式,給用戶在CTS階段提供了更多的選擇和漂亮的QoR數(shù)據(jù)。從SDC到ccopt系統(tǒng)轉(zhuǎn)化,讓INVS采用一種類似數(shù)字孿生(digital twins)的方式,將SDC里邊的相關(guān)命令,一一映射到ccopt系統(tǒng)中,主要來(lái)自于下列三個(gè)主命令:- create_ccopt_clock_tree <=> create_clock
- create_ccopt_generated_clock_tree <=> create_gernerated_clock
- set_ccopt_property <==> other CTS setup
- SDC里邊的配置和設(shè)定,可以在ccopt系統(tǒng)里邊進(jìn)行修正和調(diào)整,而無(wú)需讀入CTS專用的SDC
- CTS的配置通過(guò)導(dǎo)出可讀文件進(jìn)行抽取,繼承和維護(hù):create_ccopt_clock_tree_spec
- 在ccopt_design開(kāi)始之前,可以靈活使用set_ccopt_property 命令干預(yù)ccopt的實(shí)現(xiàn)方式,而不用擔(dān)心對(duì)原生的SDC產(chǎn)生影響。
時(shí)鐘傳播的單調(diào)性
CTS的實(shí)現(xiàn)中,無(wú)論是ICC/ICC2還是INVS,都會(huì)強(qiáng)調(diào);unate(單調(diào)性)- unaet:?jiǎn)握{(diào)傳播:譬如:正向單調(diào)性的buffer,反向單調(diào)性的inveter
- none-unate:非單調(diào)傳播:XOR,MUX,F(xiàn)F
可以看到,在FF1的傳播路徑上,CLK時(shí)鐘是正單調(diào)性,這樣計(jì)算CLK-> FF1’CK的路徑的時(shí)候CTS工具會(huì)只會(huì)看正沿。但是到了CLK->FF2’CK的路徑上,由于XOR的none-unate特性,CTS工具計(jì)算latency的時(shí)候需要同時(shí)關(guān)注正相關(guān)和負(fù)相關(guān)的兩種情況,在late和early的兩種corner的影響下,這個(gè)計(jì)算量會(huì)成倍的增加,同時(shí)也會(huì)對(duì)實(shí)際的clock tree做了悲觀化。因?yàn)閷?shí)際情況下:XOR的enable大概率是一個(gè)半靜態(tài)信號(hào),這個(gè)會(huì)間接提高CTS的難度。由于設(shè)計(jì)的不明確性,可以用過(guò)約束來(lái)歸類這種問(wèn)題。
時(shí)鐘二分頻器(reg-clkgen)和CG
從上述時(shí)鐘CTS實(shí)現(xiàn)的角度來(lái)看,基于寄存器的時(shí)鐘二分頻器(reg-clkgen)是典型的none-unate器件,而通常的CG則是一個(gè)典型的unate器件。所以,從時(shí)鐘樹(shù)構(gòu)建的上看,CG是一個(gè)被推薦的時(shí)鐘網(wǎng)絡(luò)結(jié)構(gòu),但時(shí)鐘二分頻器(reg-clkgen)不是的。由于CG的結(jié)構(gòu)類似下列:
通常CG的尾部是一個(gè)or或者一個(gè)and,在std-lib中,這兩類門(mén)很常見(jiàn),通常會(huì)有很多種驅(qū)動(dòng)類型,這種正是CTS需要的風(fēng)格:功能單一,驅(qū)動(dòng)多樣,這個(gè)對(duì)于構(gòu)建CTS會(huì)非常友好。反觀寄存器,相較or/and,不會(huì)有這么多的選擇類型,加之延遲較大,這個(gè)也會(huì)間接影響clock latency的質(zhì)量
時(shí)鐘二分頻器的CTS實(shí)現(xiàn)
對(duì)于傳統(tǒng)的組合邏輯,CTS實(shí)現(xiàn)無(wú)非面臨兩種選擇:- 單調(diào)性傳播:AND,OR,CG, BUF, INV
- 非單調(diào)性傳播:MUX、 XOR 。、
# root clock create_clock -name CLK [get_port CLK] -period 1 -waveform {0 0.5} # generated clock create_generated_clock -name gen_clk1 -source [get_port CLK] -divided_by 2 -master_clock [get_clock CLK] [get_pin FF1/Q]
對(duì)于上述拓?fù)浣Y(jié)構(gòu),CTS的難點(diǎn)不在于divided信號(hào),而在于gen_clk1_enable。眾所周知,從CLK向下看,F(xiàn)F1/FF_A/FF_B同屬于CLK domain,但是由于FF1的特殊性,會(huì)導(dǎo)致FF1‘D上的時(shí)序會(huì)成為一個(gè)gen_clk1時(shí)鐘路徑上的檢查點(diǎn),這個(gè)有點(diǎn)像clock gating檢查,但又不全是。對(duì)于傳統(tǒng)的CG檢查,INVS有自己獨(dú)到大處理方式。對(duì)于這類檢查,INVS提供了一個(gè)有趣的配置選項(xiàng):
這個(gè)extract_clock_generator_skew_groups的選項(xiàng)是說(shuō):如果配置為true(default value),那么ccopt在創(chuàng)建clock_tree_spec的時(shí)候,除過(guò)正常的基于clock的-auto_sink模式進(jìn)行skew_group創(chuàng)建,還會(huì)基于ff_clkgen結(jié)構(gòu)的分頻時(shí)鐘(時(shí)鐘二分頻器)再獨(dú)立創(chuàng)建一個(gè)使用 _clock_gen打頭的新的skew_group,這個(gè)SG會(huì)包括這個(gè)ff_clkgen的所有fanin以及它自己,和原始的SG相比,這個(gè)SG擁有更高的優(yōu)先級(jí)。
create_ccopt_skew_group -name CLK_SG -source clk -auto_sinks create_ccopt_skew_group -name _clock_gen_CLK_FF1_SG -source clk -sinks {FF_A FF_B FF1} -rank 1
這種處理方式需要用戶格外注意,如果用戶擁有類似下列更為復(fù)雜的拓?fù)浣Y(jié)果,INVS默認(rèn)的處理方法可能并不適用于你的設(shè)計(jì):
由于這里會(huì)有下列的timing path
- FF_A/FF_B -> FF1
- FF_A/FF_B/FF1 -> FF3/FF4
但是,在當(dāng)今百家爭(zhēng)鳴的年代,已經(jīng)很少看到有人可以靜下心來(lái)仔仔細(xì)細(xì)的研究coding style了,這個(gè)時(shí)候還想TO,那么靈活運(yùn)用后端工具進(jìn)行補(bǔ)刀,可能是一種適應(yīng)當(dāng)下情景的變通方式吧。
【敲黑板劃重點(diǎn)】
靈活使用ccopt,而不是簡(jiǎn)單的一路回車(chē),可能會(huì)去的意想不到的收獲





