Setup time & Hold time
一般來說,setup可以通過時鍾頻率來調整,而hold time是不行的,是一定要滿足的。
-
對於某個DFF來說,建立時間和保持時間可以認為是此器件固有的屬性。
-
在理想情況下,只要在時鍾沿來臨時,有效數據也來臨(時鍾沿之前或同時),則能夠正確采集到數據;而在時鍾沿之后(或同時),即使數據發生變化,也不會影響DFF的輸出了。然而在實際中,上升沿打開開關需要時間,邏輯門的狀態改變(電容充放電等)都需要時間,因此數據的采集是需要一定時間的,在這個時間內數據不能發生變化。上升沿時候開關關閉也需要時間,如果在這個時間段內數據有變化的話,那么新數據就有可能被傳遞到下一級,進而發生錯誤,所以數據必須保持一定時間不變。
-
在clk上升沿來之前,數據必須提前一個最小時間量“預先准備好”,這個最小時間量就是建立時間;
在clk上升沿來之后,數據必須保持一個最小時間量“不能變化”,這個最小時間量就是保持時間。
Setup time 檢查

對於上面的兩級DFF,setup time檢查就是要確保DFF1的Clk到DFF2的D端滿足時序要求。
簡單來說,就是檢查從DFF1的Clk到DFF2的D端這條path上,數據是否傳得太慢導致FF2的建立時間不能滿足。
完整的setup time檢查時序如下圖:

不滿足此公式的即為setup violation。
Hold time 檢查
相對與setup的檢查,hold的檢查與時鍾周期無關,它實際上檢查的是當前上升沿,本級DFF在采樣數據時會不會出錯。
簡單來說,就是查看上圖中DFF2在當前上升沿,會不會因為接到DFF2的D端上的數據變化太快導致無法滿足保持時間的要求。
時序分析圖如下:

根據時序圖可以得到:
STA要求上面式中的design margin>=0,即:
違反此式子就是hold violation.