1、基本概念
靜態(tài)時序分析中最基本的就是setup和hold時序分析,其檢查的是觸發(fā)器時鐘端CK與數(shù)據(jù)輸入端D之間的時序關(guān)系。
(1)Setup Time
setup time是指在時鐘有效沿(下圖為上升沿)之前,數(shù)據(jù)輸入端信號必須保持穩(wěn)定的最短時間。

圖1 觸發(fā)器的setup要求
(2)Hold time
hold time是指在時鐘有效沿(下圖為上升沿)之后,數(shù)據(jù)輸入端信號必須保持穩(wěn)定的最短時間。hold time時序檢查確保新數(shù)據(jù)不會在觸發(fā)器穩(wěn)定輸出初始數(shù)據(jù)之前過早到達(dá)D端而覆蓋其初始數(shù)據(jù)。

圖2 觸發(fā)器的hold要求
2、Setup & Hold詳細(xì)分析
以圖3為例,分析建立時間及保持時間。發(fā)送數(shù)據(jù)的觸發(fā)器稱為Launch flip-flop,接收/捕獲數(shù)據(jù)的觸發(fā)器稱為Capture flip-flop。兩觸發(fā)器時鐘端信號為同一時鐘。
如圖3所示,launch_path為:
CLKM→BUF(launch)→UFF0/CK→UFF0/Q→Comb_logic→UFF1/D;
capture path為:
CLKM→BUF(capture)→UFF1/CK;

圖3 兩個觸發(fā)器(flip-flop)組成的簡單電路
(1)Setup Time
兩觸發(fā)器間的數(shù)據(jù)傳輸通常在一個時鐘周期內(nèi)完成。
數(shù)據(jù)到達(dá)UFF1/D所需時間Arrival time為:
Ta = T_launch + T_ck2q + T_dp
滿足setup要求時所允許的最長時間Required time為:
Tr = T_capture + T_clk - T_setup
因此setup time要求可表示為:Tr - Ta = T_margin >= 0。
根據(jù)圖4,setup time要求還可表示為:
T_launch + T_ck2q + T_dp + T_margin + T_setup = T_capture + T_clk
其中:
T_launch:CLKM到UFF0時鐘端CK的延時
T_ck2q:UFF0的CK->Q的傳輸時間
T_dp:組合邏輯延時
T_margin:設(shè)計裕量
T_setup:UFF1的setup時間要求
T_capture:CLKM到UFF1時鐘端CK的延時
T_clk: 時鐘周期
由此可見,setup檢查發(fā)生在不同時鐘邊沿,與時鐘頻率有關(guān)。
(2)Hold Time
數(shù)據(jù)到達(dá)UFF1/D所需時間Arrival time為:
Ta = T_launch + T_ck2q + T_dp
滿足hold要求時所允許的最短時間Required time為:
Tr = T_capture + T_hold
因此hold time要求可表示為:Ta - Tr = T_margin >= 0。
根據(jù)圖4,hold time要求還可表示為:
T_launch + T_ck2q + T_dp = T_capture + T_hold + T_margin
其中:
T_launch:CLKM到UFF0時鐘端CK的延時
T_ck2q:UFF0的CK->Q的傳輸時間
T_dp:組合邏輯延時
T_hold:UFF1的hold時間要求
T_margin:設(shè)計裕量
T_capture:CLKM到UFF1時鐘端的延時
T_clk: 時鐘周期
由此可見,hold檢查發(fā)生在同一時鐘邊沿,與時鐘頻率無關(guān)。

圖4 setup & hold時序分析
(3)總結(jié)
setup time是針對Capture edge來說,待傳輸數(shù)據(jù)不能來太晚;hold time是針對Capture edge來說,新數(shù)據(jù)不能來太早,以確保待傳輸數(shù)據(jù)保持一段時間。總結(jié)為一句話:當(dāng)前待傳輸?shù)臄?shù)據(jù),相對于Capture edge來說,必須早來(setup time)晚走(hold time)。
3、Setup & Hold違例解決方法
(1)Setup需滿足以下條件:
T_launch + T_ck2q + T_dp + T_setup <= T_capture + T_clk
記Clock Skew: T_skew = T_capture- T_launch,即:
T_ck2q + T_dp + T_setup <= T_skew + T_clk
因此,setup violation修復(fù)方法包括:
① T_clk:增加T_clk,也就是降頻
② T_dp:優(yōu)化組合邏輯延時,具體包括:
a. 增加一個中間觸發(fā)器來切割Timing Path,分割組合邏輯延時(流水線結(jié)構(gòu))
b. 對于有較大負(fù)載的節(jié)點可以考慮插buffer、邏輯復(fù)制的方法來優(yōu)化扇出,減少關(guān)鍵路徑上的負(fù)載(插Buffer,邏輯復(fù)制)
c. 小Cell換成大Cell,更換更大驅(qū)動的Cell,增強(qiáng)驅(qū)動能力
d. 更換SVT/LVT的Cell
③ T_skew:采用positive skew(T_skew >0),但是要注意可能引入的hold問題,以及前后級的margin問題
④ T_ck2q:更換更快的時序邏輯單元,如HVT->LVT
(2)Hold需滿足以下條件:
T_launch + T_ck2q + T_dp >= T_capture + T_hold
記Clock Skew: T_skew = T_capture- T_launch,即:
T_ck2q + T_dp >= T_skew + T_hold
因此,hold violation修復(fù)方法包括:
① T_dp:增加組合路徑延時,通過插buffer、插delay cell、更換驅(qū)動、更換閾值的方法(組合邏輯深度的增加會增加芯片的面積、布線資源、功耗,可能產(chǎn)生在慢速工藝庫條件下建立時間違例)
② T_skew:減小skew,甚至采用negative skew,但需做好時鐘樹的balance。
③ 插入低電平有效的鎖存器(Lock-up Latch):高電平期間,鎖存器輸出保持不變,相當(dāng)于人為將數(shù)據(jù)推遲了半個時鐘周期,以保證滿足hold時間要求。
原文鏈接:https://zhuanlan.zhihu.com/p/278523793