算是轉的原文 http://www.edaboard.com/thread139461.html#post604717
核心就是setup time和hold time
HOLD violations are dangerous than SETUP.
To keep it simple way, SETUP timing depends on the frequency of operation. But HOLD time is not.
先來定義幾個后面會用到的變量
Tclk = Frequency of operation (can be variable)
Tcq = Flop clock to Flop q delay (fixed/constant)
Tcomb = Delay on the combinational logic between the Flops (can be variable)
Tsetup = Setup time of a Flop (fixed/constant)
Thold = Hold time of a Flop (fixed/constant)
Tskew = Delay between clock edges of two adjacent flops (delay offered by clock path) (can be variable)
一、首先來看setup time,其正常工作要滿足的公式為
Tclk > Tcq + Tcomb + Tsetup - Tskew
如果出現了setup violation那么就意味着上面的公式變成了
Tclk < Tcq + Tcomb + Tsetup - Tskew
我們分兩種case來考慮出現的setup violation,
1. 設計電路的過程中
在設計時,可以看到,上面的式子中,我們有3個變量可以來操作,Tclk, Tcomb, Tskew
1)這里首先的想法是增大Tclk,就是降低系統的工作頻率此時就可以令式子滿足條件,但是往往這個是不科學的,一般都是最后才想到要降低系統時鍾頻率來來滿足setup time
2)減小Tcomb,具體就像什么pipeline或者是在不改變邏輯功能的前提下,改變成其他樣式的組合邏輯,進行組合邏輯的優化,或者是改變扇出系數使得延時減小,或者是增大cell的尺寸來使得延時減小都是可以施行的措施。
3)增大Tskew,就是在時鍾路徑上插入buffer來使得Tskew變大,當然是在不影響hold timing的情況下。
2. 芯片回來了
看上面的式子,在芯片回來時,我們能改變的就只有Tclk,相當於我們只能使得工作頻率降低,來使得setup violation消除。
二、再看hold time,其正常工作的公式為
Thold < Tcq + Tcomb - Tskew
如果hold violation出現就意味着
Thold > Tcq + Tcomb - Tskew
此時電路的Thold不被滿足,還是分兩種case來討論
1. 設計過程中
對於上面的式子,有兩個變量可以操作,就是Tcomb和Tskew
1)增大Tcomb,那么能做的就是在data path上面插入buffer來增加組合邏輯延時,但是相對的,當你插入buffer增大延時的時候,相應的setup time就會變差,相當於是一個tradeoff了。所以通常這不是一個最好的選擇(So this may not be the perfect solution always)。
2)減小Tskew,這個方法通常都依賴於PR工程師了,所以一般都是在PR的時候來修正hold time。
2. 流片歸來
看看上面的式子,你手上還有牌可出么?沒有,所以在流片回來時,如果hold violation出現,那么你就什么都做不了了(等死吧,孩子)。所以才說hold violation要比setup violation更可怕。但是另一方面,你也可以給芯片提供一個ss的條件(當然只是一個臨時的權宜之策),比如給芯片一個低電壓,高溫來使得芯片的延時都變大,避過hold violation,沒准可以測試一下基本功能。