以前去地平線面試的時候被問到了multicycle path的一點問題,其實這個問題我應該知道,看過《Constraining Designs for Synthesis and Timing Analysis A Practical Guide to Synopsys Design Constraints (SDC)》,但當時回答的很差。html
看這篇文章須要現對創建時間、保持時間的概念有一些瞭解。面試
通常狀況下數據在任意時鐘沿發射,在下一個時鐘沿被捕獲,可是有時設計者須要延遲幾個時鐘週期data才被捕獲,這就是多週期路徑。異步
默認的創建時間時序:async
多週期的創建時間時序:ide
對於上面的時鐘,默認是在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。約束變寬鬆了。
ui
可是這樣的話,在進行hold time分析的時候,工具會對捕獲寄存器捕獲沿以前的那一個時鐘沿,也就是C沿進行hold analysis。這樣的話hold time analysis變成了spa
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個週期code
上面例子中發射時鐘週期爲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指定移動的週期數。
發射時鐘週期爲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
-start:移動源時鐘(發射時鐘)沿;
-end :移動目的時鐘(捕獲時鐘)沿;
-setup -start N:向左移動發射時鐘沿;
-hold -start N-1:向右移動發射時鐘沿;
-setup -end N:向右移動捕獲時鐘沿;
-hold -end N-1:向左移動捕獲時鐘沿;
如上圖所示,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
set_multicycle_path -fall -from reset_n -setup 3 set_multicycle_path -fall -from reset_n -hold 2
在跨時鐘路徑中,通常會生命爲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捕獲,組合邏輯延遲擴展了一個捕獲週期。這樣就將組異步路徑合邏輯延遲約束在一個捕獲週期多一點。
參考:
原文出處:https://www.cnblogs.com/east1203/p/11523737.html