積體電路設計

時序裕量(slack)

想像你得在 3:00 前趕到登機口,而你其實 2:48 就慢悠悠地走到了。那多出來的十二分鐘就是你的緩衝——就算走錯一個路口、排隊慢了一點,你也還趕得上。在晶片時序裡,時序裕量(slack)正是這樣的緩衝,只不過是以零點幾奈秒來計:它衡量一個訊號到達目的地時,比它必須趕上的截止時刻還多出多少餘裕時間。

更準確地說,兩個暫存器之間的每一條路徑都有一個要求到達時間(訊號最晚允許在什麼時刻到達,仍能在下一個時脈邊緣被安全鎖存)和一個實際到達時間(訊號經過邏輯層層傳遞後真正出現的時刻)。對於建立時間檢查,裕量就是二者之差:要求減去實際。裕量為正,說明訊號提前趕到、還留有餘地——這條路徑通過。裕量為零,說明它在最後一刻才到。裕量為負則意味著它遲到了:時脈想抓取資料時,資料還沒穩定下來,於是這條路徑時序失敗,晶片在那個時脈速度下就跑不可靠。

時序裕量是靜態時序分析為設計中每一條路徑給出的頭號數字,而裕量最差(最小)的那條路徑就是關鍵路徑——它是決定你最高時脈頻率的瓶頸,無論這個最差裕量是勉強為正、還是已經深陷負值。整個時序收斂的核心,就是把負裕量的路徑揪出來逐一修復:加速慢邏輯、調整單元尺寸、重構路徑——或者,如果目標本就定得太激進,就放寬一條時序約束(這會拉低你最終簽核的頻率),直到每條路徑都落到零或更高。工程師常用最差負裕量(WNS)來指最差的那一條路徑,用總負裕量(TNS)來指所有失敗端點累加起來的虧欠。

setup slack = required arrival time − actual arrival time

建立時間裕量等於截止時刻減去訊號實際到達的時刻;為正就表示它趕到時還有餘裕。

「slack」這個詞聽起來像壞事——偷懶、鬆懈——但在時序裡恰恰相反:正裕量正是你想要的,是一份從容的餘地。容易搞混的是它的正負號約定。裕量為 −0.2 ns 的路徑是失敗的,差了 200 皮秒;而 +0.2 ns 則表示你還有 200 皮秒的餘裕,甚至可以把時脈再往上推一點。

又稱
timing slackslack timetiming margin时序裕量時序裕量