最近在學SDRAM,聽說SDRAM涉及到靜態時序分析,那還說什么呢學吧。
在看到create_clock與create_generated_clock時我徹底疑惑了, 即然有了create_clock何必還要create_generated_clock呢,google一翻后得到一個結論,create_generated_clock是用於衍生時鍾,TimeQuest作STA分析時會自動計算source clock 到generated_clock之間的skew.我又不明白了即然TimeQuest可以計算時鍾偏斜,那直接對source clock進行create_clock不就行了,TimeQuest不就會自動對其衍生時鍾偏斜進行分析了么。可能這個問題太低級了,大牛覺得太顯然對此一略而過,也可能是我理解能力太差,大牛寫了我沒領會到,不管怎么樣我是百思不得其解,早晨醒來就有了一個猜想。TimeQuest號稱STA工具,那么他應該不會理解衍生時鍾的邏輯功能,只能單純的根據uTco、clock skew、data path等時間值對setup time、hold time、removal time、recoveral time的余量進行分析。也就是說TimeQuest只會對內部邏輯延時進行計算不進行邏輯分析,實際上TimeQuest並不知道你的衍生時鍾與源時鍾之間的關系。因此需要create_generated_clock對衍生時鍾進行說明,下面用圖來說明一下。
假設使用邏輯衍生出的理想時序如下圖:
圖中clock為源時鍾,invert_clock為衍生時鍾,與源時鍾相移180度,如果僅使用create_clock來對clock時行約束,那么,TimeQuest在進行STA時對invert_clock的時鍾所理解的波形應該如下圖:
在上圖中,clock skew僅僅是由時鍾衍生邏輯產生的延時,不包括邏輯產生的相移,也就是說TimeQuest無法理解clock進行一塊邏輯后出來的具體時鍾與源時鍾的真正關系,僅能靠一些路徑延遲與DFF或LUT的參數來計算時鍾延時。
而如果我們使用create_generated_clock對invert_clock進行約束后,TimeQuest在進行STA時對invert_clock的時鍾所理解應該如下圖:
也就是說只有對衍生時鍾進行create_generated_clock約束,TimeQuest才能正確的理解波形,換句話說,一些走線延時、LUT、DFF的參數產生的問題由TimeQuest來自動搞定,如果是由於我們自己用邏輯產生的影響(如上圖相位偏移),我們必須報告給TimeQuest,TimeQuest才正在靜態時序分析時進行正確的計算。由於上面的TimeQuest所有過程均為我猜測得出,所以有不對的地方,請大家拍磚。