時序約束之 set clock groups

2021-10-09 03:51:30 字數 1189 閱讀 1064

一、簡述

對於非同步時鐘,通常會使用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...