一、簡述
對於非同步時鐘,通常會使用set_clock_groups、set_false_path做時序約束,使得不對跨非同步時鐘做時序分析。這樣做可以縮短綜合編譯時間,且將寶貴的片內資源用在其他必要的時序約束上。
set_clock_groups 將不會對不同group的時鐘做時序分析,對同一group的時鐘不受影響。
不同於set_false_path約束,set_false_path是有方向的(-from -to 只能做單方向的時序約束),set_clock_groups 將會對-group的不同group的時鐘雙向約束。
二、同步時鐘和非同步時鐘的區別
所以這裡需要講清楚的是,什麼情況下可以做非同步處理。
1.什麼是同步時鐘?
兩個時鐘之間的相位關係是固定的。一般這種情況下,這兩個時鐘具有相同的源時鐘。比如乙個主時鐘和乙個被2分頻的生成時鐘。生成時鐘一般是通過pll、cmt等生成。
2.什麼是非同步時鐘?
兩個時鐘無法明確其相位關係。比如兩個時鐘通過兩個晶振產生,這種情況下,這兩個時鐘的相位關係是不確定的。
3.不重疊時鐘(unexpandable clocks)
這種情況指的是,兩個時鐘雖然具有固定的相位關係,但是在1000個時鐘週期內相位不重疊。比如同乙個主時鐘,通過mmcm,產生clk0和clk1.
clk0的時鐘週期為5.125ns。
clk1的時鐘週期為6.666ns。
這種情況下,這兩個時鐘可以作為非同步處理。
三、建立非同步時鐘groups
如何使用set_clock_groups建立非同步時鐘約束。
假設,有源時鐘clk0,通過mmcm生成時鐘usrclk0,usrclk1。另乙個源時鐘clk1,通過gtx,生成時鐘gtclk,則時序約束如下:
set_clock_groups -name async_clk0_clk1 -asynchronous -group \
-group
如果不清楚源時鐘的生成時鐘名,可以使用-include_generated_clocks選項,舉例如下:
set_clock_groups -name async_clk0_clk1 -asynchronous \
-group [get_clocks -include_generated_clocks clk0] \
-group [get_clocks -include_generated_clocks clk1]
時序分析之IO約束
時序分析的基本原理 無圖,先略。io約束的基本原理 io約束有輸入延遲約束和輸出延遲約束。輸入延遲和輸出延遲約束的方法完全一致。因此,只需要了解輸入延遲的約束即可。輸入延遲的約束需要用到最基本的時序分析模型。由於編譯工具並不清楚io介面處的時序和相位關係。因此,不做時序約束的話,將可能導致不能正確的...
靜態時序和時序約束
靜態時序中,組成設計的元件分類成組合邏輯和時序邏輯兩大類。在vivado中,設計是否滿足效能要求是由靜態時序分析 static timing analysis,sta 來校驗和驗證的,在靜態時序分析sta中元件的功能並不重要,重要的是元件的效能。在vivado中,靜態時序引擎是基於基本元件,這意味著...
Quartus II 時序約束
時序約束對於增加設計的穩定性和可靠性是必不可少的,對於複雜時序的設計,很多時候問題就出在時序問題上。quartus ii 所帶的timequest timing analyzer可以方便設計者進行時序約束的設計,管理和分析。本文以quartus ii 10.0軟體為例介紹時序約束的新增和sdc sy...