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}
工具不會分析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_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_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”在時序分析效果上一樣,但是更乾淨,更易於維護。