一、時(shí)序計(jì)算基礎(chǔ)
組合邏輯的延遲T c ,從FF1/CK到FF1/Q的延遲為T q ,定義Treal = Tq + T c ,從建立時(shí)間和保持時(shí)間這兩個(gè)標(biāo)準(zhǔn)去考察T real 。
現(xiàn)在假設(shè)clk1和clk2相位對(duì)齊且沒有skew。我們考慮D2,當(dāng)clk1的第一個(gè)上升沿a發(fā)出數(shù)據(jù)1時(shí),需要經(jīng)過Treal的時(shí)間1才變成2;
在clk2的f沿,我們要想穩(wěn)定地采到2,需要在采樣窗口內(nèi)到達(dá),即2要在采樣沿f之前一段時(shí)間就到達(dá);因此要求Treal < Tperiod - Tsetup
另外,要想采到f沿的數(shù)據(jù)2,除了2要提前一點(diǎn)到之外,2還不能馬上變成3,即2要在采樣沿之后穩(wěn)定一段時(shí)間;
我們考慮e沿,e沿采1,要求a沿打出的2不能很快就到,即1變成2的時(shí)間要在Thold之后;因此要求Treal > T hold 。
所以,T2 = Thold < T real < (Tperiod - T setup )=T 1 ;T1和T2之間就是數(shù)據(jù)可以到達(dá)的范圍;
二、帶skew的時(shí)序分析
現(xiàn)在我們考慮skew對(duì)setup和hold的影響。
對(duì)于setup,當(dāng) Tcapture > Tlaunch時(shí)(正skew)
如果沒有skew,那么要求在A點(diǎn)之前1就要變成2,此時(shí)不符合要求。
但是有skew存在,setup檢查的點(diǎn)從A點(diǎn)延遲到B點(diǎn),setup檢查就滿足了。
此時(shí),Treal < (Tperiod - Tsetup + T skew ),即正的skew對(duì)setup有好處。
對(duì)于hold,當(dāng) Tcapture > Tlaunch時(shí)(正skew)
不考慮skew的情況下,c沿應(yīng)該采0,要求0在A之后再變化才算是采穩(wěn)了。當(dāng)有skew之后,采樣點(diǎn)變成了c沿再加上一個(gè)Thold的時(shí)間即B點(diǎn),0可能會(huì)采不穩(wěn)。
此時(shí)的要求變成了,Thold + Tskew < T real ,即正的skew讓hold更嚴(yán)格。
因此,T2 = (Thold + T skew ) < Treal < (Tperiod - Tsetup + T skew )=T 1 。
當(dāng)skew為負(fù)的時(shí)候,上述公式不變,只是 Tskew的值變成負(fù)數(shù)。
三、從慢速到快速
setup
clk_slow是9ns,clk_fast是6ns;取最小公倍數(shù),工具只考慮前18ns;
a打出數(shù)據(jù)1,b打出數(shù)據(jù)2,c打出數(shù)據(jù)3,d打出4;
f采1,g采2,i采3,j采4;
對(duì)于建立時(shí)間來講,g采2的窗口是最短的;對(duì)于g沿,還是一樣的分析方法,T2 < Treal < T1
此時(shí)T1 = Tb - Tsetup
hold
考慮hold,f沿采1,要求1在f沿到達(dá)之后還要保持Thold的時(shí)間,實(shí)際上很好滿足;事實(shí)上,2還要到b沿之后并經(jīng)過Treal的時(shí)間才會(huì)到;同理,g沿的hold也很好滿足;
最嚴(yán)苛的就是在e沿,要求0在Thold時(shí)間之后再變化。實(shí)際上是有可能發(fā)生違反的。此時(shí)T2 = T hold ,所以,T2 = T hold < T real < Tb - Tsetup =T 1 。
從慢到快和同頻同相的區(qū)別:
從慢到快,天然會(huì)存在重復(fù)采樣的問題。例如在上面的例子中,e采0,f采1,g采2,h采2(因?yàn)?還要等Treal時(shí)間之后才能到達(dá)),i采3,j采4。
即launch發(fā)出了:1 2 3 4,Capture采到了:1 2 2 3 4。
更為常見的例子是分頻的例子,例如clk1 6ns,clk2 12ns。那么capture采到的就是11 22 33 44。
可以通過修改RTL的方式來避免這樣的問題,見后續(xù)討論;
四、從快速到慢速
這里可以看到a沿發(fā)出bbb,c沿發(fā)出ccc;
如果clk_fast每一拍都發(fā)一個(gè)數(shù)據(jù),那么clk_slow必然會(huì)漏采數(shù)據(jù);
因此實(shí)際的數(shù)據(jù)周期并沒有那么快,在這個(gè)例子中,數(shù)據(jù)周期是12ns;即a和b沿發(fā)出bbb,c和d沿發(fā)出ccc;
此時(shí)我們的分析范圍是12ns和9ns的公倍數(shù),即36ns;3個(gè)周期的data,4個(gè)周期的clk_low;此時(shí)相當(dāng)于將從快到慢的問題轉(zhuǎn)化為了從慢到快的問題;
又看到了重復(fù)采樣的問題,h采到bbb,i采到ccc,j采到ddd,k也采到ddd;
我們可以想辦法消掉一個(gè)采樣沿。例如,在e沿發(fā)出j沿來采,setup最緊張,我們讓j沿不采,那么e沿發(fā)出k沿來采。
如下圖所示,在設(shè)計(jì)中做相應(yīng)的修改,工具會(huì)自動(dòng)插入一個(gè)門控時(shí)鐘,將clk1中沒有用到的時(shí)鐘沿屏蔽掉了(紅色虛線)。
在這個(gè)例子中,(1)產(chǎn)生了一個(gè)counter,我們的目的是對(duì)clk2每四個(gè)上升沿去掉一個(gè)上升沿;看到一個(gè)上升沿加1,大于等于4的時(shí)候再?gòu)?開始;
再利用counter產(chǎn)生一個(gè)D2_vld信號(hào),當(dāng)cnt為3的時(shí)候,D2_valid為0,其余情況都為1。
我們最終是要得到Q2。遇到一個(gè)clk2上升沿,先看D2_valid信號(hào)。G沿采到aaa,H沿采到bbb,I采到ccc;
到J的時(shí)候,D2_valid信號(hào)無效,沒有采樣,畢竟k也可以采到ddd;K采到ddd。
上述RTL也會(huì)在clk2上的分支上插入一個(gè)icg用來控制這個(gè)觸發(fā)器,將J沿消掉,icg由D2_vld信號(hào)控制。
五、multicycle約束
當(dāng)clk1和clk2是倍數(shù)關(guān)系的時(shí)候,使用multicycle的方式更合適。
從慢到快
例如,Clk1的A沿打2,但是Treal很大(組合邏輯很長(zhǎng),也可以插入FF,變成兩條path),大于Tb,到達(dá)endpoint的時(shí)候,clk2已經(jīng)過去一個(gè)周期了;
工具默認(rèn)E應(yīng)該采2,但是現(xiàn)在只能采到1,于是就會(huì)報(bào)違例;例如可以在F處分析,F(xiàn)處才需要變成2;
以clk2周期為單位(-end),我們以第一個(gè)上升沿為起點(diǎn),向右移動(dòng)2個(gè)clk1周期,即在F分析setup:
set_multicycle_path 2 -setup -endrom clk1 -to clk2
上面這句話,不光移動(dòng)了setup的檢查沿,還移動(dòng)了hold的檢查沿;
未設(shè)置multicycle_path 2時(shí),A是第一個(gè)launch沿,E是第一個(gè)capture沿,D是第零個(gè)capture沿;
當(dāng)設(shè)置multicycle_path 2時(shí),第一個(gè)capture沿從E移動(dòng)到F,那么第零個(gè)capture沿從D移動(dòng)到E(工具默認(rèn)在setup檢查沿的上一個(gè)上升沿檢查hold);
此時(shí),Tb + T hold < Treal < Tb - T setup ~ + Tb~;
即要求,數(shù)據(jù)1要一直保持到Tb + Thold之后才能變;其實(shí)數(shù)據(jù)1在clk2第一個(gè)上升沿D之后就可以變了;因此還需要做如下設(shè)置:
set_multicycle_path 1 –end –hold -from clk1 –to clk2
這條command只會(huì)移動(dòng)hold的檢查沿,以clk2周期為單位移動(dòng)向左移動(dòng)1個(gè)周期,將檢查沿移回到D;
即使設(shè)置了multicycle path,告訴工具了E沿不去check,RTL代碼也需要做相應(yīng)的修改(考慮計(jì)數(shù)器,生成使能信號(hào));以避免輸出在有觸發(fā)沿的時(shí)候翻轉(zhuǎn),造成亞穩(wěn)態(tài)的問題;
從快到慢
假設(shè)clk2是clk1的二分頻。如前所述,從快到慢的問題應(yīng)該先轉(zhuǎn)換為從慢到快的問題,再轉(zhuǎn)換為相同周期的問題。
例如,如果clk1是6ns,那么clk2是12ns,D2也是12ns,就和clk2有相同的周期了。因此,盡管從B到G是setup檢查最嚴(yán)格的,但實(shí)際上rtl也要做相應(yīng)修改,B沿不發(fā)數(shù)據(jù),A沿發(fā)1,C沿發(fā)2。
我們以clk1的周期為單位,將F沿向右移動(dòng)2個(gè)周期,即在G處分析setup:
set_multicycle_path 2 -setup -start -from Clk1 -to Clk2
然后,以clk1的周期為單位,將hold的檢查沿移回到F處:
set_multicycle_path 1 -hold -setup -from Clk1 -to Clk2;
-
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59665 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61012 -
時(shí)序分析
+關(guān)注
關(guān)注
2文章
127瀏覽量
22542 -
門控時(shí)鐘
+關(guān)注
關(guān)注
0文章
27瀏覽量
8933 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17104
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論