-
:转载时请以超链接形式标明文章原始出处和作者信息及
注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong
一个比较全的例子,不过还有比较多的特殊情况。
对于PLL,会被认为是黑盒子,时钟穿越不过.所以需要对pll创建qtm模型,再在输出端create_generated_clock;或者在pll输出端create clock,设置source latency。
create_clock -name SCLK -p 20 [get_ports Sclk]
create_clock -name PCLK -p 8 [get_ports Pclk]
create_generated_clock -name PCLKX8 -multiply_by 8 -source [get_attribute [get_clocks PCLK] sources] [get_pins PLL/pllx8]
create_generated_clock -name sclk_gate -divide_by 1 -combinational -source [get_attribute [get_clocks SCLK] sources] [get_pins NAND2/Y]
create_generated_clock -name clk_div2 -divide_by 2 -source [get_attribute [get_ports sclk_gate] sources] [get_pins DIV/clk_div2]
create_generated_clock -name clk_div4 -divide_by 4 -source [get_attribute [get_ports sclk_gate] sources] [get_pins DIV/clk_div4]
create_generated_clock -name clk_div8 -divide_by 8 -source [get_attribute [get_ports sclk_gate] sources] [get_pins DIV/clk_div8]之只所以在门控时钟后面generated clock,因为到nand2的输出端有2条时钟路径。如果不指明使用组合逻辑路径,时序分析的时候clock latency会2个的,launch,capture会选择不同的latency。
另:如果在选择器之前create clock,dc2007会认为只有一个时钟可以穿越。dc2009会认为2个时钟都可以穿越。
set_clock_group -async -group PCLK -group PCLKX8 -group {SCLK sclk_gate} -group clk_div2 -group clk_div4 -group clk_div8set_clock_group -logical -group PCLKX8 -group clk_div2
set_clock_group -logical -group clk_div8 -group SCLK
set_clock_group -physical -group PCLKX8 -group clk_div2
set_clock_group -physical -group clk_div8 -group SCLK
有些后端工具不认识set_clock_group命令,可以将其转换成set_false_path
对于选择时钟推荐做法:在选择器之前create clock,设置logical group。如果想使用比较真实的延迟计算,SI计算,将选择器之前的2个时钟设置成physical group,这个原因以后说下。如果master clock和generated clock之间没相关路径可以直接设置成async group。