set_false_path和set_clock_groups有什麼區別?

時鐘之間的關係在靜態時序分析(STA)中起著至關重要的作用。由於

1)時鐘數量增多

2)不同的時鐘產生電路

3)時鐘域互動之間的互動

當前ASIC設計具有高度複雜的時鐘方案。高效率的時鐘關係約束才能產生高效率的STA。

一個設計中可以存在許多時鐘。但是,並非所有時鐘都相互互動。必須向STA分析工具宣告這些時鐘之間的關係,以防止分析這些時鐘之間的路徑。因為預設情況下,所有時鐘域都是同步的。

對於非同步時鐘,當我們書寫SDC時,可以使用set_false_path語句來指定由於非同步時鐘導致的timing exceptions。

set_false_path-from [get_clocks CLKA] -to [get_clocks CLKB]]。

只能指定單方向路徑的timing exceptions。如果需要指定雙向的timing exceptions,則需要

set_false_path -from [get_clocks CLKA]-to [get_clocks CLKB]]

set_false_path -from [get_clocks CLKB]-to [get_clocks CLKA]]

現在有一種更有效的方法來指定設計中的非同步時鐘關係。 set_clock_groups是一種在Synthesis、P&R和STA工具中指定設計中時鐘關係更加有效的方法。

set_clock_groups -asynchronous -group CLKA-group CLKB

此命令有三個選項。

-asynchronous,

-logical_exclusive

-physically_exclusive。

-asynchronous

兩個(或多個)時鐘是非同步時,這意味著它們之間沒有相位關係。

set_clock_groups –asynchronous –name my_ASYNC -group {CLKA CLKA_div2} -group {CLK_OSC}

set_false_path和set_clock_groups有什麼區別?

工具不會分析CLKA 和CLK_OSC、CLKA_div2 和 CLK_OSC之間的時序,但是會分析他們之間的Crosstalk。

上述命令意為:

1。 CLKA和CLKA_div2相互同步

2。 CLKA&CLKA_div2和CLK_OSC相互非同步

每個group裡面的clocks相互同步,group之間的clocks相互非同步

上述,命令等價為

set_false_path-from [get_clocks CLKA] -to [get_clocks CLK_OSC]

set_false_path -from [get_clocks CLKA_div2] -to [get_clocks CLK_OSC]

set_false_path-from [get_clocks CLK_OSC] -to [get_clocks CLKA]

set_false_path-from [get_clocks CLK_OSC] -to [get_clocks CLKA_div2]

-logical_exclusive

當設計中存在兩個時鐘,但它們之間沒有任何路徑時,可以說這兩個時鐘在邏輯上是互斥的( logically exclusive )。

例如下面的示例,透過一個MUX選擇兩個或多個時鐘中的一個。這樣的時鐘之間將沒有任何時序路徑。

set_false_path和set_clock_groups有什麼區別?

set_clock_groups – logically_exclusive –name my_MUXED -group {CLKA} -group {CLKB}

上述約束等價於:

#solution 1: set_case_analysis

# mode 1

set_case_analysis 1 [get_portsSEL]

# mode 2

set_case_analysis 0 [get_portsSEL]

#solution 2: use false path

set_false_path-from [get_clocks CLK1] -to [get_clocks CLK2]

set_false_path-from [get_clocks CLK2] -to [get_clocks CLK1]

工具會分析他們之間的Crosstalk

–physically_exclusive

如果時鐘不在設計中同時存在。例如時鐘在同一主埠上定義,但工作在兩種不同的模式下。這些時鐘之間將沒有SI互動。

set_false_path和set_clock_groups有什麼區別?

set_clock_groups –physically_exclusive -group {SYS_CLK} -group {TEST_CLK} # use physically exclusive

可以透過remove_clock_groups刪除clock_groups宣告

在大型設計中,可能有數百或數千個時鐘。如果使用“set_fase_path”,則每個時鐘對將需要2個約束,那麼約束的語句將成倍增長!

使用“set_clock_groups”和“set_fase_path”在時序分析效果上一樣,但是更乾淨,更易於維護。