之前去地平線面試的時候被問到了multicycle path的一點問題,其實這個問題我應該知道,看過《Constraining Designs for Synthesis and Timing Analysis A Practical Guide to Synopsys Design Constraints (SDC)》,但當時回答的不好。
看這篇文章需要現對建立時間、保持時間的概念有一些了解。
0. 多周期路徑
一般情況下數據在任意時鍾沿發射,在下一個時鍾沿被捕獲,但是有時設計者需要延遲幾個時鍾周期data才被捕獲,這就是多周期路徑。
默認的建立時間時序:
多周期的建立時間時序:
1. 發射時鍾和捕獲時鍾相同
對於上面的時鍾,默認是在A沿發射,B沿捕獲。在進行建立時間分析時,我們希望在A沿發射數據,在D沿捕獲數據,我們可以通過-setup選項,指定多周期路徑為3個周期。
set_multicycle_path -setup 3 -from xxx -to xxx
setup time analysis變成了:Tc-q +Tlogic +Tsetup < 3*T+skew。約束變寬松了。
但是這樣的話,在進行hold time分析的時候,工具會對捕獲寄存器捕獲沿之前的那一個時鍾沿,也就是C沿進行hold analysis。這樣的話hold time analysis變成了
Tc-q + Tlogic > Thold + 2*T,但這增加了電路的復雜性(需要插入一些buffer來增加延遲),沒有必要,通過-hold選項,將hold edge向左移動2個周期
set_multicycle_path -hold 2 -from *** -to ***
注意:-setup制定多周期路徑為N個周期,-hold使hold edge向左移動N-1個周期
2. 發射時鍾和捕獲時鍾不同
2.1 捕獲時鍾周期倍長於發射時鍾周期
上面例子中發射時鍾周期為10ns,捕獲時鍾周期為20ns。
默認情況下,setup analysis在B沿發射,N沿捕獲,組合邏輯路徑最大為10ns。對於hold analysis與保持時鍾沿沒關系,在hold analysis中,可以在A時鍾沿發射,M時鍾沿捕獲,或者在C時鍾沿發射,N時鍾沿捕獲。
因為捕獲時鍾周期大於采樣時鍾周期,所以在一個捕獲周期中,只能發射一個data。對於在N時鍾沿捕獲的情況,可以在A或者B時鍾沿發射數據。在A發射可以增加額外的10ns的延遲余量。通過-start選項可以聲明兩個源時鍾周期的路徑,這使得發射沿從B移動到A。當然要指明是-setup。
set_multicycle_path -setup -start 2 -from xxx -to xxx
對於hold check有兩種情況:
1. A發射M捕獲。
2.B發射N捕獲。
對於上面兩種hold check情況,第二種約束更強,組合邏輯需要增加額外的10ns。我們希望hold check恢復到默認的位置,A發射M捕獲(或者B發射N捕獲),希望lauch edge從B移動到C,通過-start 和- hold選項。
set_multicycle_path -hold -start 1 -from xxx -to xxx
-hold指定移動的周期數。
2.2 發射時鍾周期倍長於捕獲時鍾周期
發射時鍾周期為20ns,捕獲時鍾周期為10ns。
默認的setup check是M發射B捕獲;hold check是 M發射A捕獲。
M發射,希望在C捕獲,這樣可以增加額外的10ns的延遲裕量。這可以通過-end選項來指定2個目的時鍾周期的路徑。
set_multicycle_path -setup -end 2 -from xxx -to xxx
-setup指定路徑的周期數,為N
但這會使得hold check變成M發射B捕獲,希望它恢復到默認情況,用-end選項指明捕獲沿向左移動一個目的時鍾周期。
set_multicycle_path -hold -end 1 -from xxx -to xxx
-hold指定移動的周期數,為N-1
2.3 總結
-start:移動源時鍾(發射時鍾)沿;
-end :移動目的時鍾(捕獲時鍾)沿;
-setup -start N:向左移動發射時鍾沿;
-hold -start N-1:向右移動發射時鍾沿;
-setup -end N:向右移動捕獲時鍾沿;
-hold -end N-1:向左移動捕獲時鍾沿;
3. examples
3.1 FSM
如上圖所示,enable邏輯通過一個N個周期的狀態機。那么對於從F1發出的actual data,可以在N個周期內到達F3的輸入,所以約束如下:
set_multicycle_path -setup N -end -from Cs -through F1/Q -to Cd
set_multicycle_path -hold N-1 -end -from Cs -through F1/Q -to Cd
3.2 reset
set_multicycle_path -fall -from reset_n -setup 3 set_multicycle_path -fall -from reset_n -hold 2
3.3 Large data path macros
3.4 異步時鍾
在跨時鍾路徑中,一般會生命為fault path,這樣STA工具不會對這條路徑進行時序分析,那么路徑可以有任意大小的delay,但是設計者可能想要約束這一段路徑的延遲,如下
set_multicycle_path -from [get_clocks C1] -to [get_clocks C2] -setup 2 set_multicycle_path -from [get_clocks C1] -to [get_clocks C2] -hold 1
原來是在A發射P捕獲,但將路徑設置為兩個捕獲周期之后,在A發射Q捕獲,組合邏輯延遲擴展了一個捕獲周期。這樣就將組異步路徑合邏輯延遲約束在一個捕獲周期多一點。
參考: