new_tree
对于你这条path,我画了个简单的电路图,如上图。
你这条path明显是同一个clock下的半周期check path。
造成violation的原因是tree没长好,skew太大。
1. 如果你这个module rxRX下的FF不需要和其他module下的FF做balance
我推荐的方法使在common path上找一个buf,作如下设置:
set_clock_tree_exceptions -exclude_pins "$buf/A"
create_clock -name new_clk -period $num -waveform { 0$num/2 } [get_pins {$buf/Z}] set_clock_uncertainty $num/10 [get_clocks {new_clk}] set_clock_transition -rise -max $num/10 [get_clocks{new_clk}] set_clock_transition -fall -max $num/10 [get_clocks{new_clk}] set_clock_transition -rise -min $num/10 [get_clocks{new_clk}] set_clock_transition-fall -min $num/10 [get_clocks {new_clk}]
2.如果你这个module rxRX下的FF需要和其他module下的FF做balance
可以将rxRX的FF设为float pin。
set all_reg [all_registers ]
set dbg_all_regs [get_cells $all_reg -filter "full_name=rxRX/*"]
set dbg_all_regs_pins [get_pins -of $dbg_all_regs -filter "name==CLK"]
foreach_in_collection clk_pin $dbg_all_regs_pins {
set_clock_tree_exceptions -float_pins $clk_pin -float_pin_max_delay_rise -$num -float_pin_max_delay_fall -$num -float_pin_min_delay_rise -$num -float_pin_min_delay_fall -$num
}
注意两段代码中每个$num,需要你自己set。 |