對于復雜時鐘樹的約束,整體思路,見到clock mux需要加create_generated_clock用來創建clock,在clock mux的input和output都得加,并且需要定義其group信息,以便后續綜合和PR工具更好優化處理
電路圖示例

1 create端口時鐘
create_clock -name RCO -period 20 -waveform { 0 10 } [ get_ports RCO ] create_clock -name HXT -period 20 -waveform { 0 10 } [ get_ports HXT ] create_clock -name PLL -period 6.25 -waveform { 0 3 } [ get_ports PLL ] create_clock -name SLEEP -period 31250 -waveform { 0 15625 } [ get_ports SLEEP ] create_clock -name LEX -period 30517.58 -waveform { 0 15258 } [ get_ports LXT ] set_clock_uncertainty -setup/-hold [ period 10% ] [ get_clocks RCO ] set_clock_uncertainty -setup/-hold [ period 10% ] [ get_clocks HXT ] set_clock_uncertainty -setup/-hold [ period 10% ] [ get_clocks PLL ] set_clock_uncertainty -setup/-hold [ period 10% ] [ get_clocks SLEEP ] set_clock_uncertainty -setup/-hold [ period 10% ] [ get_clocks LXT ]
bash
2 create generated clock
創建clock mux m0上的clock為示例
create_generated_clock -name m0_I0 -master_clock RCO -source [ get_ports RCO ] \ -add -divide 1 [ get_pins m0/I0 ] create_generated_clock -name m0_I1 -master_clock HXT -source [ get_ports HXT ] \ -add -divide 1 [ get_pins m0/I1 ] set_clock_groups -logically_exclusive -group { m0_I0 } -group { m0_I1 } create_generated_clock -name m0_Y0 -master_clock m0_I0 -source [ get_pins m0/I0 ] \ -add -divide 1 [ get_pins m0/Y ] create_generated_clock -name m0_Y1 -master_clock m0_I1 -source [ get_pins m0/I1 ] \ -add -divide 1 [ get_pins m0/Y ] set_clock_groups -physically_exclusive -group { m0_Y0 } -group { m0_Y1 }
bash
3 set_case_analysis定義某個節點上的generated clock
如命令含義所示,就是按照case語句去分情況定義同一個clock。對上上圖中的電路,整理思路如下:
假設clk_sel = {m3/s, m2/s, m1/s, m0/s}
clk_sel = 00x0: create_generated_clock -name clk_buf -master_clock m3_Y0_0_0
clk_sel = 00x1: create_generated_clock -name clk_buf -master_clock m3_Y0_0_1
clk_sel = 01xx: create_generated_clock -name clk_buf -master_clock m3_Y0_0
clk_sel = 1x0x: create_generated_clock -name clk_buf -master_clock m3_Y1_0
clk_sel = 1x1x: create_generated_clock -name clk_buf -master_clock m3_Y1_1
set_case_analysis 0 [ get_pins m3/s ] set_case_analysis 0 [ get_pins m2/s ] set_case_analysis 0 [ get_pins m0/s ] create_generated_clock -name clk_buf -master_clock m3_Y0_0_0 -source [ get_pins m3/Y ] \ -add -divide 1 [ get_pins clk_buf/Y ] set_case_analysis 0 [ get_pins m3/s ] set_case_analysis 0 [ get_pins m2/s ] set_case_analysis 1 [ get_pins m0/s ] create_generated_clock -name clk_buf -master_clock m3_Y0_0_1 -source [ get_pins m3/Y ] \ -add -divide 1 [ get_pins clk_buf/Y ] set_case_analysis 0 [ get_pins m3/s ] set_case_analysis 1 [ get_pins m2/s ] create_generated_clock -name clk_buf -master_clock m3_Y0_0 -source [ get_pins m3/Y ] \ -add -divide 1 [ get_pins clk_buf/Y ] set_case_analysis 1 [ get_pins m3/s ] set_case_analysis 0 [ get_pins m1/s ] create_generated_clock -name clk_buf -master_clock m3_Y1_0 -source [ get_pins m3/Y ] \ -add -divide 1 [ get_pins clk_buf/Y ] set_case_analysis 1 [ get_pins m3/s ] set_case_analysis 1 [ get_pins m1/s ] create_generated_clock -name clk_buf -master_clock m3_Y1_1 -source [ get_pins m3/Y ] \ -add -divide 1 [ get_pins clk_buf/Y ]
bash
聲明:屬個人學習筆記,里面可能包含諸多錯誤之處,如果恰好被英俊瀟灑 傾國傾城的你發現了,麻煩指正,祝您牛逼!多謝!
參考文獻
感謝up主,祝up主老師,工作順利,生活愉快,永遠牛逼!

|