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