數(shù)字設(shè)計(jì)中的時(shí)鐘與約束
本文作者 IClearner 在此特別鳴謝
最近做完了synopsys的DC workshop,涉及到時(shí)鐘的建模/約束,這里就來(lái)聊聊數(shù)字中的時(shí)鐘(與建模)吧。主要內(nèi)容如下所示:
·同步電路與異步電路;
·時(shí)鐘/時(shí)鐘樹(shù)的屬性:偏移(skew)與時(shí)鐘的抖動(dòng)(jitter)、延時(shí)(latency)、轉(zhuǎn)換(transition)時(shí)間;
·內(nèi)部時(shí)鐘;
·多路復(fù)用時(shí)鐘;
·門(mén)控時(shí)鐘;
·行波時(shí)鐘;
·雙沿時(shí)鐘;
·Design Compiler中的時(shí)鐘約束。
·補(bǔ)充:時(shí)鐘分配策略
1、同步電路與異步電路
首先來(lái)談?wù)勍诫娐放c異步電路。那么首先就要知道什么是同步電路、什么是異步電路?
對(duì)于同步時(shí)序電路,不同的文章有不同的說(shuō)法,大致有下面的定義方法:
①對(duì)于比較嚴(yán)格的定義:一個(gè)電路是同步電路,需要滿足一下條件:
·每一個(gè)電路元件是寄存器或者是組合電路;
·至少有一個(gè)電路元件是是寄存器;
·所有寄存器都接收同一個(gè)時(shí)鐘電路;
·若有環(huán)路,則環(huán)路至少包含一個(gè)寄存器。
在上面的嚴(yán)格定義下,可以得到下面的電路不是同步電路:
:是組合邏輯,不符合定義;:是組合邏輯和鎖存器,不符合定義;
下面的形式肯定是同步電路:
:寄存器的時(shí)鐘都是CLK
下面的電路嚴(yán)格上說(shuō)不算是同步電路:
:因?yàn)橛疫叺臅r(shí)鐘經(jīng)過(guò)兩個(gè)反相器的延時(shí),時(shí)鐘信號(hào)不同了。
②對(duì)于不算很嚴(yán)格的同步電路定義有:
·所有時(shí)鐘的時(shí)鐘來(lái)自同一個(gè)時(shí)鐘源:比如下面的(分頻)電路
CLKA、CLKC、CLKD、CLKE都是由300M這個(gè)時(shí)鐘源分頻而來(lái),因此這個(gè)系統(tǒng)屬于同步電路系統(tǒng)。
·當(dāng)不是來(lái)自同一個(gè)時(shí)鐘源時(shí),只要CLOCK的周期有倍數(shù)關(guān)系并且相互之間的相位關(guān)系是固定的就可以算是同步電路,比如, 電路中用了10ns, 5ns,
2.5ns
三個(gè)時(shí)鐘,這三個(gè)時(shí)鐘不是由同一個(gè)時(shí)鐘源分頻來(lái)的,但是這三個(gè)時(shí)鐘的周期有倍數(shù)關(guān)系并且相位關(guān)系固定:10ns是5ns的2倍,是2.5ns的兩倍,之間是整數(shù)倍關(guān)系;相位關(guān)系是固定的,因此也算是同步電路。
CLOCK之間沒(méi)有倍數(shù)關(guān)系或者相互之間的相位關(guān)系不是固定的,比如電路中用5ns, 3ns
兩個(gè)CLOCK,這兩個(gè)時(shí)鐘不是來(lái)自同一個(gè)時(shí)鐘源,兩者之間沒(méi)有周期關(guān)系,因此是異步電路。
關(guān)于是不是同步時(shí)鐘的問(wèn)題,還要具體情況具體分析,在后面的垮時(shí)鐘域也會(huì)涉及有關(guān)同步時(shí)鐘的問(wèn)題,這里就不再繼續(xù)闡述了,以免越解釋越麻煩。
此外也有的資料顯示:同步電路是由時(shí)序電路(寄存器和各種觸發(fā)器)和組合邏輯電路構(gòu)成的電路。同步時(shí)序邏輯電路的特點(diǎn)是各觸發(fā)器的時(shí)鐘端全部連接在一起,并接在系統(tǒng)時(shí)鐘端,只有當(dāng)時(shí)鐘脈沖到來(lái)時(shí),電路的狀態(tài)才能改變。改變后的狀態(tài)將一直保持到下一個(gè)時(shí)鐘脈沖的到來(lái),此時(shí)無(wú)論外部輸入
x 有無(wú)變化,狀態(tài)表中的每個(gè)狀態(tài)都是穩(wěn)定的。
2、時(shí)鐘/時(shí)鐘樹(shù)的屬性
一般的時(shí)鐘,我們都指的是全局時(shí)鐘,全局時(shí)鐘在芯片中的體現(xiàn)形式是時(shí)鐘樹(shù)。
時(shí)鐘樹(shù),是個(gè)由許多緩沖單元(buffer cell)平衡搭建的時(shí)鐘網(wǎng)狀結(jié)構(gòu),如下圖所示:
首先不得不說(shuō),實(shí)際的時(shí)鐘除了周期/頻率、相位、沿、電平屬性外,還有其他的屬性,也就是:不是下面這樣子規(guī)規(guī)整整的:
為什么呢?那是因?yàn)闀r(shí)鐘有下面的屬性(“實(shí)際的buff”):
①時(shí)鐘的偏移(skew):時(shí)鐘分支信號(hào)在到達(dá)寄存器的時(shí)鐘端口過(guò)程中,都存在有線網(wǎng)等延時(shí),由于延時(shí),到達(dá)寄存器時(shí)鐘端口的時(shí)鐘信號(hào)存在有相位差,也就是不能保證每一個(gè)沿都對(duì)齊,這種差異稱為時(shí)鐘偏移(clock
skew),也叫時(shí)鐘偏斜。時(shí)鐘的偏移如下圖所示:
此外,時(shí)鐘skew與時(shí)鐘頻率并沒(méi)有直接關(guān)系,skew與時(shí)鐘線的長(zhǎng)度及被時(shí)鐘線驅(qū)動(dòng)的時(shí)序單元的負(fù)載電容、個(gè)數(shù)有關(guān)。
②時(shí)鐘抖動(dòng)(jitter):相對(duì)于理想時(shí)鐘沿實(shí)際時(shí)鐘存在不隨時(shí)間積累的、時(shí)而超前、時(shí)而滯后的偏移稱為時(shí)鐘抖動(dòng),簡(jiǎn)稱抖動(dòng),如下圖所示:
時(shí)鐘的抖動(dòng)可以分為隨機(jī)抖動(dòng)(Random Jitter,簡(jiǎn)稱Rj)和固有抖動(dòng)(Deterministic jitter):
·隨機(jī)抖動(dòng)的來(lái)源為熱噪聲、Shot Noise和Flick
Noise,與電子器件和半導(dǎo)體器件的電子和空穴特性有關(guān),比如ECL工藝的PLL比TTL和CMOS工藝的PLL有更小的隨機(jī)抖動(dòng);
·固定抖動(dòng)的來(lái)源為:開(kāi)關(guān)電源噪聲、串?dāng)_、電磁干擾等等,與電路的設(shè)計(jì)有關(guān),可以通過(guò)優(yōu)化設(shè)計(jì)來(lái)改善,比如選擇合適的電源濾波方案、合理的PCB布局和布線。
也就是說(shuō):jitter與時(shí)鐘頻率無(wú)直接關(guān)系。
時(shí)鐘的偏移和時(shí)鐘的抖動(dòng)都影響著時(shí)鐘網(wǎng)絡(luò)分枝的延遲差異(相位差異),在Design
Compiler里面,我們用時(shí)鐘的不確定性(uncertainty)來(lái)表示這兩種情況的影響。
③時(shí)鐘的轉(zhuǎn)換時(shí)間(transition)
:時(shí)鐘的上升沿跳變到下降沿或者時(shí)鐘下降沿跳變到上升沿的時(shí)間,這個(gè)時(shí)間并不是如左下圖所示那樣完全沒(méi)有跳變時(shí)鐘的,而是像右下圖那樣,時(shí)鐘沿的跳變時(shí)間就是時(shí)鐘的轉(zhuǎn)換時(shí)間(后面約束的時(shí)候會(huì)有相關(guān)的解釋)。
理想: 帶轉(zhuǎn)換時(shí)間的時(shí)鐘:
時(shí)鐘的轉(zhuǎn)換時(shí)間與與單元的延時(shí)時(shí)間(也就是器件特性)還有電容負(fù)載有關(guān)。
④時(shí)鐘的延時(shí)(latency) :時(shí)鐘從時(shí)鐘源(比如說(shuō)晶振)出發(fā)到達(dá)觸發(fā)器時(shí)鐘端口的延時(shí),稱為時(shí)鐘的延時(shí),包含時(shí)鐘源延遲(source
latency)和時(shí)鐘網(wǎng)絡(luò)的延遲(network latency),如下圖所示:
時(shí)鐘源延遲(clock source latency),也稱為插入延遲(insertion
delay),是時(shí)鐘信號(hào)從其實(shí)際時(shí)鐘原點(diǎn)到設(shè)計(jì)中時(shí)鐘定義點(diǎn)(時(shí)鐘的輸入引腳)的傳輸時(shí)間,上圖是3ns。
時(shí)鐘網(wǎng)絡(luò)的延遲( clock network
latency)是時(shí)鐘信號(hào)從其定義的點(diǎn)(端口或引腳)到寄存器時(shí)鐘引腳的傳輸,經(jīng)過(guò)緩沖器和連線產(chǎn)生的延遲(latency),上圖是1ns。
OK,時(shí)鐘的附加的buff屬性差不多就是這樣了。
3、內(nèi)部時(shí)鐘
記得我剛剛學(xué)習(xí)FPGA的時(shí)候,在verilog代碼中,經(jīng)常使用內(nèi)部產(chǎn)生的時(shí)鐘,也就是用內(nèi)部的一個(gè)信號(hào)充當(dāng)另外一個(gè)always塊的時(shí)鐘沿敏感列表,如下圖所示:
實(shí)際上,這種內(nèi)部時(shí)鐘不建議使用,一個(gè)是因?yàn)楫a(chǎn)生內(nèi)部時(shí)鐘的邏輯是有延時(shí)的,導(dǎo)致A_clk產(chǎn)生也會(huì)延時(shí),Data與A_clk會(huì)有延時(shí),就會(huì)有亞穩(wěn)態(tài)的穩(wěn)壓;另外一個(gè)就是由觸發(fā)器生成A_clk的驅(qū)動(dòng)能力問(wèn)題。
4、多路復(fù)用時(shí)鐘
在一個(gè)系統(tǒng)里面,很有可能會(huì)用到多個(gè)時(shí)鐘輪流驅(qū)動(dòng)一些觸發(fā)器,為了適應(yīng)不同的數(shù)據(jù)速率要求,進(jìn)行時(shí)鐘切換。有時(shí)為了節(jié)約功耗,也會(huì)把高速時(shí)鐘切換到低速時(shí)鐘,或者進(jìn)行時(shí)鐘休眠操作,多路時(shí)鐘如下圖所示:
這樣的時(shí)鐘一般情況下也會(huì)導(dǎo)致一些問(wèn)題,比如時(shí)鐘切換時(shí)導(dǎo)致后面驅(qū)動(dòng)的寄存器建立時(shí)間不足,當(dāng)滿足一定的條件時(shí),這種多路復(fù)用器的時(shí)鐘也是可以使用的,要滿足的要求有:
·時(shí)鐘復(fù)用電路一旦上電工作之后,就不要對(duì)復(fù)用邏輯進(jìn)行更改,以免更改之后產(chǎn)生不確定錯(cuò)誤。
·在測(cè)試的時(shí)候,設(shè)計(jì)電路繞過(guò)時(shí)鐘多路邏輯來(lái)選擇普通的時(shí)鐘,也就是使用普通的時(shí)鐘進(jìn)行測(cè)試。
·在時(shí)鐘進(jìn)行切換的時(shí)候,寄存器要處于復(fù)位的狀態(tài),以免在切換之后建立時(shí)間不夠而進(jìn)入亞穩(wěn)態(tài)。
·在時(shí)鐘切換的時(shí)候,可能會(huì)產(chǎn)生一些短暫的錯(cuò)誤,但是這些錯(cuò)誤對(duì)整個(gè)系統(tǒng)沒(méi)有影響。
對(duì)于系統(tǒng)要求非常嚴(yán)格的,比如時(shí)鐘切換很頻繁,有不能夠在復(fù)位的時(shí)候切換,而且也不允許有短暫的錯(cuò)誤,那么時(shí)鐘就不能這樣子進(jìn)行切換了,就要使用其他的時(shí)鐘切換方案或者進(jìn)行時(shí)鐘同步了。至于多時(shí)鐘切換的方案,以后有時(shí)間再學(xué)習(xí)補(bǔ)充。
5、門(mén)控時(shí)鐘
門(mén)控時(shí)鐘可是低功耗設(shè)計(jì)的寵兒,關(guān)于門(mén)控時(shí)鐘的資料也有一大堆,下面就來(lái)寫(xiě)寫(xiě)門(mén)控時(shí)鐘吧。
門(mén)控時(shí)鐘也就是在使能信號(hào)有效的時(shí)候,把時(shí)鐘打開(kāi);使能信號(hào)無(wú)效的時(shí)候,時(shí)鐘關(guān)閉。時(shí)鐘關(guān)閉之后,它所驅(qū)動(dòng)的寄存器就不會(huì)反正,因此也就降低了動(dòng)態(tài)功耗。
門(mén)控時(shí)鐘最開(kāi)始的電路是:
這種門(mén)控時(shí)鐘bug多,我們先來(lái)看看這種電路的bug波形是怎么樣的,也就是知道問(wèn)題所在,好讓我們改進(jìn):
從波形圖中可以看到,門(mén)控使能信號(hào)如果在時(shí)鐘的高電平的時(shí)候開(kāi)啟或者關(guān)閉,就會(huì)導(dǎo)致產(chǎn)生的門(mén)控時(shí)鐘高電平被截?cái)啵兂擅?;門(mén)控使能信號(hào)對(duì)在時(shí)鐘低電平時(shí)跳變對(duì)產(chǎn)生的門(mén)控時(shí)鐘沒(méi)有影響。因此我們的針對(duì)點(diǎn)就是高電平時(shí)的翻轉(zhuǎn)。
因此我們就可以通過(guò)設(shè)置一種電路,讓門(mén)控使能信號(hào)在通過(guò)這個(gè)邏輯電路之后,僅僅在時(shí)鐘低電平的時(shí)候進(jìn)行翻轉(zhuǎn),而在時(shí)鐘高電平的時(shí)候,不能翻轉(zhuǎn)也就是保持。從而我們就想到了低電平觸發(fā)的鎖存器,使能信號(hào)通過(guò)低電平的鎖存器之后,如果使能信號(hào)在高電平跳變,鎖存器的輸出信號(hào)是不會(huì)改變的,電路圖如下所示:
波形如下所示:
這里需要注意的是:
當(dāng)門(mén)控使能信號(hào)是高電平有效的時(shí)候,也就是高電平打開(kāi)門(mén)控時(shí)鐘,低電平關(guān)閉門(mén)控時(shí)鐘,那么就使用上面的電路,也就是:低電平觸發(fā)的鎖存器+與門(mén)。
當(dāng)門(mén)控使能信號(hào)是低電平有效的時(shí)候,那么就要換成:高電平觸發(fā)的鎖存器+或門(mén)。
PS:當(dāng)涉及毛刺的問(wèn)題的時(shí)候,特別是由于使能信號(hào)與時(shí)鐘而產(chǎn)生的毛刺,鎖存器起很大的作用。
一般情況,在進(jìn)行芯片設(shè)計(jì)的時(shí)候,我們不必自己設(shè)計(jì)門(mén)控時(shí)鐘,大多是ASIC/SoC生產(chǎn)商都有對(duì)應(yīng)的門(mén)控時(shí)鐘單元。
6、行波時(shí)鐘
行波時(shí)鐘,也就是一個(gè)觸發(fā)器的輸出用作另一個(gè)觸發(fā)器的時(shí)鐘輸入,經(jīng)常用在異步計(jì)數(shù)器和分頻電路設(shè)計(jì)中,如下圖所示:
異步計(jì)數(shù)器/分頻時(shí)鐘雖然原理簡(jiǎn)單、設(shè)計(jì)方便,但級(jí)連時(shí)鐘(行波時(shí)鐘)最容易造成時(shí)鐘偏差,級(jí)數(shù)多了,很可能會(huì)影響其控制的觸發(fā)器的建立時(shí)間和保持時(shí)間,使設(shè)計(jì)難度加大;轉(zhuǎn)換的方法是采用同步計(jì)數(shù)器。
7、雙邊沿時(shí)鐘
雙邊沿時(shí)鐘的系統(tǒng)是指在時(shí)鐘的上升沿和下降沿都進(jìn)行數(shù)據(jù)傳輸:
很顯然,這樣子數(shù)據(jù)的傳輸速率就增加一倍了。DDR就是采用雙邊沿傳輸數(shù)據(jù)的技術(shù),傳輸示意圖如下所示:
然而一般情況下,我們不建議使用雙邊沿時(shí)鐘,這是因?yàn)椋?/p>
·由于上下沿都用,要求時(shí)鐘的質(zhì)量很高,一般的時(shí)鐘源很難達(dá)到,成本高。
·由于時(shí)鐘的抖動(dòng)等不確定因素的存在,容易使時(shí)鐘的占空比發(fā)生改變,因此容易引起建立時(shí)間和保持時(shí)間的違規(guī)。
·當(dāng)使用的雙沿時(shí)鐘之后,時(shí)鐘的約束變得復(fù)雜,此外當(dāng)某處發(fā)生違規(guī)之后,違規(guī)的路徑的查找難度比單沿時(shí)鐘大。
·還有一點(diǎn)就是測(cè)試難度比較大,雙沿電路的測(cè)試電路必定有別與單沿的測(cè)試電路。進(jìn)行掃描測(cè)試時(shí),上下沿的時(shí)鐘先都得插入多路復(fù)用器進(jìn)行選擇。
8、Design Compiler中的時(shí)鐘約束
對(duì)實(shí)際的時(shí)鐘進(jìn)行建模/約束了,實(shí)際上就是對(duì)這幾個(gè)屬性進(jìn)行設(shè)置,下面講解在Design Compiler中怎么進(jìn)行約束。
在默認(rèn)的情況下,邏輯綜合時(shí),即使一個(gè)時(shí)鐘要驅(qū)動(dòng)很多寄存器,DC也不會(huì)在時(shí)鐘的連線上加時(shí)鐘緩沖器(clock
buffer)以加強(qiáng)驅(qū)動(dòng)能力,時(shí)鐘輸輸入端直接連接到所有寄存器的時(shí)鐘引腳,也就是說(shuō),對(duì)于高扇出(high
fanout)的時(shí)鐘連線,DC不會(huì)對(duì)它做設(shè)計(jì)規(guī)則的檢查和優(yōu)化,如下左圖所示。在時(shí)鐘連線上加上時(shí)鐘緩沖器或作時(shí)鐘樹(shù)的綜合(clock tree
synthesis)一般由后端(back
end)工具完成,后端工具根據(jù)整個(gè)設(shè)計(jì)的物理布局(placement)數(shù)據(jù),進(jìn)行時(shí)鐘樹(shù)的綜合。加入時(shí)鐘緩沖器后,使整個(gè)時(shí)鐘樹(shù)滿足skew,
latency和transition的目標(biāo)。時(shí)鐘樹(shù)綜合后的電路如右下圖所示。
左上圖的時(shí)鐘網(wǎng)絡(luò)是理想的,其延遲(latency)和時(shí)鐘的偏差(skew)及轉(zhuǎn)變時(shí)間(transition)默認(rèn)值為零。顯然,理想時(shí)鐘網(wǎng)絡(luò)與實(shí)際的情況不同,使用理想時(shí)鐘網(wǎng)絡(luò)將產(chǎn)生過(guò)于樂(lè)觀的時(shí)間結(jié)果。為了能在綜合時(shí)比較準(zhǔn)確地描述時(shí)鐘樹(shù),我們需要為實(shí)際的時(shí)鐘樹(shù)建模,使邏輯綜合的結(jié)果能與版圖(layout)的結(jié)果相匹配。
好吧,上面都不是重點(diǎn),下面才是內(nèi)容:
我們用下面的命令建立時(shí)鐘那幾個(gè)屬性模型:
create_cloclk、set_clock_uncertainty、set_clock_latency、set_clock_transition分別進(jìn)行時(shí)鐘的周期、偏移、延時(shí)、轉(zhuǎn)換約束:
時(shí)鐘偏差的建模:
set_clock_uncertainty:對(duì)時(shí)鐘的偏移和抖動(dòng)進(jìn)行建模,也就是對(duì)時(shí)鐘的偏差進(jìn)行建模,具體使用為:
假設(shè)時(shí)鐘周期為10ns,時(shí)鐘的建立偏差為0. 5ns,用下面命令來(lái)定義進(jìn)行約束:
create_clock -period 10 [get_ports CLK]
set_ clock_ uncertainty -setup 0.5 [get_clocks CLK]
理想的時(shí)鐘:
只對(duì)建立時(shí)間的偏差時(shí)鐘建模:
如果對(duì)建立時(shí)間和保持時(shí)間都進(jìn)行偏差建模,則有:
在默認(rèn)的情況下,“set-clock_uncertainty”命令如果不加開(kāi)關(guān)選項(xiàng)“-setup”或“-hold”,那么該命令給時(shí)鐘賦予相同的建立和保持偏差值。
這是一種對(duì)偏差建模的方式,也就是對(duì)建立時(shí)間和保持時(shí)間進(jìn)行建模的方式;除此之外,還可以對(duì)時(shí)鐘的上升沿和下降沿進(jìn)行偏差建模,比如上升沿的偏差是0.2ns,下降沿的偏差是0.5ns,則有:
set_ clock_ uncertainty -rise 0.2 -fall 0.5 [get_clocks CLK]
一般情況下,我們只約束建立時(shí)間,也就是只用第一種方式進(jìn)行時(shí)鐘偏差建模。
當(dāng)對(duì)建立時(shí)間偏差建模之后,這時(shí),時(shí)鐘周期、時(shí)鐘偏差和建立時(shí)間的關(guān)系如下圖所示:
假設(shè)時(shí)鐘周期是10ns,建立時(shí)間偏差是0.5ns,觸發(fā)器的建立時(shí)間是0.2ns,這時(shí)候從圖中就可以看到,留給寄存器間的路徑的裕量就減少了,也就是說(shuō),對(duì)寄存器間的約束就變得更加嚴(yán)格了,寄存器的翻轉(zhuǎn)延時(shí)、組合邏輯延時(shí)與線網(wǎng)延時(shí)等這些延時(shí)的和必須小于9.3ns,否則就違反了FF2的建立時(shí)間。這一點(diǎn)是要注意的。
對(duì)于保持時(shí)間,在未考慮時(shí)鐘偏移之前,前面說(shuō)了,組合邏輯的延時(shí)要大于觸發(fā)器的保持時(shí)間(具體原因參考前面的描述),當(dāng)對(duì)時(shí)鐘偏差建模之后,這時(shí),時(shí)鐘周期、時(shí)鐘偏差和保持時(shí)間的時(shí)序關(guān)系如下所示:
時(shí)鐘轉(zhuǎn)換時(shí)間的建模:
由于時(shí)鐘并不是理想的方波,用set_ clock_
transition來(lái)模擬時(shí)鐘的轉(zhuǎn)換(transition)時(shí)間。默認(rèn)的上升轉(zhuǎn)換時(shí)間為從電壓的20%上升至80%的時(shí)間,下降的轉(zhuǎn)換時(shí)間為從電壓的80%下降至20%的時(shí)間。如果set_clock_transition命令中不加開(kāi)關(guān)選項(xiàng)“-setup”或“-hold“
,那么該命令給時(shí)鐘賦予相同的上升和下降轉(zhuǎn)換時(shí)間。一般情況下,我們只約束最大的轉(zhuǎn)換時(shí)間,如最大轉(zhuǎn)換時(shí)間是0.2ns,那么就加上-max選項(xiàng):
set_clock_transition -max 0.2 [get_clocks CLK]
時(shí)鐘延遲的建模:
時(shí)鐘從時(shí)鐘源(比如說(shuō)晶振)出發(fā)到達(dá)觸發(fā)器時(shí)鐘端口的延時(shí),稱為時(shí)鐘的延時(shí),包含時(shí)鐘源延遲(source latency)和時(shí)鐘網(wǎng)絡(luò)的延遲(network
latency)。我們使用set_clock_latency進(jìn)行時(shí)鐘延時(shí)的建模。一般情況下,我們把時(shí)鐘源延遲(source
latency)和時(shí)鐘網(wǎng)絡(luò)的延遲(network
latency)分開(kāi)來(lái),因?yàn)闀r(shí)鐘源延時(shí)需要建模,是因?yàn)镈C是真的不知道這延時(shí)是多大,但是對(duì)于時(shí)鐘網(wǎng)絡(luò)的延遲,DC在布局布線前不知道,但是在布局布線后就可以計(jì)算出來(lái)時(shí)鐘網(wǎng)絡(luò)的延時(shí)了,因此在布局布線之后進(jìn)行綜合時(shí),就沒(méi)有必要對(duì)時(shí)鐘網(wǎng)絡(luò)進(jìn)行延時(shí),因此就要把這兩個(gè)延時(shí)分開(kāi)來(lái)進(jìn)行約束。
先說(shuō)布局布線之前:時(shí)鐘周期為10ns,時(shí)鐘源到芯片的時(shí)鐘端口時(shí)間是3ns,時(shí)鐘端口都內(nèi)部觸發(fā)器的時(shí)間是1ns,如下圖所示,
那么就用下面的命令進(jìn)行建模:
create_clock -period 10 [get-ports CLK]
set_clock_latency -source 3 [get_clocks CLK]
set_clock_latency 1 [get_clocks CLK]
通常情況下,我們約束最大的延時(shí),也就是加上-max的選項(xiàng),表示最大延時(shí)是多少(如set_clock_latency -source -max 3
[get_clocks CLK] 就是時(shí)鐘源到芯片時(shí)鐘端口最大的時(shí)間是3ns)。
布局布線之后:就可以計(jì)算實(shí)際的線網(wǎng)延時(shí),就要使用
set_propagated_clock [ get_clocks CLK] 這個(gè)命令代替上面的
set_clock_latency 1 [get_clocks CLK]這個(gè)命令。
基本的時(shí)鐘建模就OK了,下面進(jìn)行總結(jié)并給出我們這個(gè)例子中使用的約束腳本,理想時(shí)鐘和實(shí)際時(shí)鐘的對(duì)比,如下圖所示:
因此總結(jié)就是,對(duì)實(shí)際時(shí)鐘的建模/約束如下所示:
補(bǔ)充1:時(shí)鐘分配策略
時(shí)鐘的分頻從規(guī)劃初始就應(yīng)該考慮,也就是從系統(tǒng)層面上去考慮,而不是等到后端設(shè)計(jì)時(shí)再考慮。時(shí)鐘分配策略考慮因素有:
系統(tǒng)的時(shí)鐘分配計(jì)劃(主要是時(shí)鐘樹(shù)方案、各個(gè)模塊的時(shí)鐘頻率等);
時(shí)鐘的最小延時(shí)(主要是根據(jù)系統(tǒng)運(yùn)行的速度來(lái)定義最小的延時(shí)要求,這個(gè)與時(shí)鐘分配計(jì)劃應(yīng)該是有重疊的地方,具體我不是很了解);
時(shí)鐘緩沖(這個(gè)是考慮負(fù)載的問(wèn)題,往往也是在設(shè)計(jì)時(shí)鐘樹(shù)時(shí)應(yīng)該考慮的問(wèn)題);
消除時(shí)鐘偏移(時(shí)鐘偏移總是存在的,如何降到最小或使其達(dá)到預(yù)期的效果,也是要考慮的);
門(mén)控時(shí)鐘、軟硬件協(xié)同設(shè)計(jì)等省電模式的考慮(這個(gè)需要具體問(wèn)題具體分析了,還可以從低功耗設(shè)計(jì)的角度進(jìn)行觀察)。
附注:
本文的參考文獻(xiàn)有:
Design Compiler 1 ,synopsys workshop
專用集成電路設(shè)計(jì)實(shí)用教程,虞希清
數(shù)字設(shè)計(jì)和計(jì)算機(jī)體系結(jié)構(gòu),(美)DavidMoneyHarris等
The art of Hardware Architecture ,Mohit Aroa
IC設(shè)計(jì)基礎(chǔ),西安電子科技大學(xué)出版社
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603317 -
時(shí)鐘
+關(guān)注
關(guān)注
10文章
1733瀏覽量
131479 -
數(shù)字設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
47瀏覽量
22299 -
同步電路
+關(guān)注
關(guān)注
1文章
60瀏覽量
13311 -
異步電路
+關(guān)注
關(guān)注
2文章
48瀏覽量
11102
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論