| 
 | 1 | + | 
 | 2 | +#------------------------------------------#  | 
 | 3 | +# Pre-defined Constraints  | 
 | 4 | +#------------------------------------------#  | 
 | 5 | + | 
 | 6 | +# Clock network  | 
 | 7 | +if {[info exists ::env(CLOCK_PORT)] && $::env(CLOCK_PORT) != ""} {  | 
 | 8 | +	set clk_input $::env(CLOCK_PORT)  | 
 | 9 | +	create_clock [get_ports $clk_input] -name clk -period $::env(CLOCK_PERIOD)  | 
 | 10 | +	puts "\[INFO\]: Creating clock {clk} for port $clk_input with period: $::env(CLOCK_PERIOD)"  | 
 | 11 | +} else {  | 
 | 12 | +	set clk_input __VIRTUAL_CLK__  | 
 | 13 | +	create_clock -name clk -period $::env(CLOCK_PERIOD)  | 
 | 14 | +	puts "\[INFO\]: Creating virtual clock with period: $::env(CLOCK_PERIOD)"  | 
 | 15 | +}  | 
 | 16 | +if { ![info exists ::env(SYNTH_CLK_DRIVING_CELL)] } {  | 
 | 17 | +	set ::env(SYNTH_CLK_DRIVING_CELL) $::env(SYNTH_DRIVING_CELL)  | 
 | 18 | +}  | 
 | 19 | +if { ![info exists ::env(SYNTH_CLK_DRIVING_CELL_PIN)] } {  | 
 | 20 | +	set ::env(SYNTH_CLK_DRIVING_CELL_PIN) $::env(SYNTH_DRIVING_CELL_PIN)  | 
 | 21 | +}  | 
 | 22 | + | 
 | 23 | +# Clock non-idealities  | 
 | 24 | +set_propagated_clock [all_clocks]  | 
 | 25 | +set_clock_uncertainty $::env(CLOCK_UNCERTAINTY_CONSTRAINT) [get_clocks {clk}]  | 
 | 26 | +puts "\[INFO\]: Setting clock uncertainity to: $::env(CLOCK_UNCERTAINTY_CONSTRAINT)"  | 
 | 27 | +set_clock_transition $::env(CLOCK_TRANSITION_CONSTRAINT) [get_clocks {clk}]  | 
 | 28 | +puts "\[INFO\]: Setting clock transition to: $::env(CLOCK_TRANSITION_CONSTRAINT)"  | 
 | 29 | + | 
 | 30 | +# Maximum transition time for the design nets  | 
 | 31 | +set_max_transition $::env(MAX_TRANSITION_CONSTRAINT) [current_design]  | 
 | 32 | +puts "\[INFO\]: Setting maximum transition to: $::env(MAX_TRANSITION_CONSTRAINT)"  | 
 | 33 | + | 
 | 34 | +# Maximum fanout  | 
 | 35 | +set_max_fanout $::env(MAX_FANOUT_CONSTRAINT) [current_design]  | 
 | 36 | +puts "\[INFO\]: Setting maximum fanout to: $::env(MAX_FANOUT_CONSTRAINT)"  | 
 | 37 | + | 
 | 38 | +# Timing paths delays derate  | 
 | 39 | +set_timing_derate -early [expr {1-$::env(TIME_DERATING_CONSTRAINT)/100}]  | 
 | 40 | +set_timing_derate -late [expr {1+$::env(TIME_DERATING_CONSTRAINT)/100}]  | 
 | 41 | +puts "\[INFO\]: Setting timing derate to: $::env(TIME_DERATING_CONSTRAINT) %"  | 
 | 42 | + | 
 | 43 | +#------------------------------------------#  | 
 | 44 | +# Retrieved Constraints  | 
 | 45 | +#------------------------------------------#  | 
 | 46 | + | 
 | 47 | +# Clock source latency  | 
 | 48 | +set clk_max_latency 4.85  | 
 | 49 | +set clk_min_latency 2.22  | 
 | 50 | +set_clock_latency -source -max $clk_max_latency [get_clocks {clk}]  | 
 | 51 | +set_clock_latency -source -min $clk_min_latency [get_clocks {clk}]  | 
 | 52 | +puts "\[INFO\]: Setting clock latency range: $clk_min_latency : $clk_max_latency"  | 
 | 53 | + | 
 | 54 | +# Clock input Transition  | 
 | 55 | +set clk_tran 1.37  | 
 | 56 | +set_input_transition $clk_tran [get_ports $clk_input]  | 
 | 57 | +puts "\[INFO\]: Setting clock transition: $clk_tran"  | 
 | 58 | + | 
 | 59 | +# Input delays  | 
 | 60 | +set_input_delay -max 10.38  -clock [get_clocks {clk}] [get_ports {HTRANS[*]}]  | 
 | 61 | +set_input_delay -max 10.97  -clock [get_clocks {clk}] [get_ports {HWRITE}]  | 
 | 62 | +set_input_delay -max 11.76  -clock [get_clocks {clk}] [get_ports {HSIZE[*]}]  | 
 | 63 | +set_input_delay -max 12.12  -clock [get_clocks {clk}] [get_ports {HADDR[*]}]  | 
 | 64 | +set_input_delay -max 4.01   -clock [get_clocks {clk}] [get_ports {HRESETn}]  | 
 | 65 | +set_input_delay -max 4.58   -clock [get_clocks {clk}] [get_ports {HREADY}]  | 
 | 66 | +set_input_delay -max 6.11   -clock [get_clocks {clk}] [get_ports {HWDATA[*]}]  | 
 | 67 | +set_input_delay -min 0.63   -clock [get_clocks {clk}] [get_ports {HWRITE}]  | 
 | 68 | +set_input_delay -min 0.7    -clock [get_clocks {clk}] [get_ports {HADDR[*]}]  | 
 | 69 | +set_input_delay -min 0.83   -clock [get_clocks {clk}] [get_ports {HSIZE[*]}]  | 
 | 70 | +set_input_delay -min 0.87   -clock [get_clocks {clk}] [get_ports {HTRANS[*]}]  | 
 | 71 | +set_input_delay -min 1.05   -clock [get_clocks {clk}] [get_ports {HWDATA[*]}]  | 
 | 72 | +set_input_delay -min 1.18   -clock [get_clocks {clk}] [get_ports {HREADY}]  | 
 | 73 | +set_input_delay -min 2.33   -clock [get_clocks {clk}] [get_ports {HRESETn}]  | 
 | 74 | + | 
 | 75 | +# Input Transition  | 
 | 76 | +set_input_transition -max 0.12 [get_ports {HSIZE[*]}]  | 
 | 77 | +set_input_transition -max 0.13 [get_ports {HREADY}]  | 
 | 78 | +set_input_transition -max 0.26 [get_ports {HWRITE}]  | 
 | 79 | +set_input_transition -max 0.32 [get_ports {HTRANS[*]}]  | 
 | 80 | +set_input_transition -max 0.49 [get_ports {HWDATA[*]}]  | 
 | 81 | +set_input_transition -max 0.62 [get_ports {HRESETn}]  | 
 | 82 | +set_input_transition -max 0.67 [get_ports {HADDR[*]}]  | 
 | 83 | +set_input_transition -min 0.04 [get_ports {HADDR[*]}]  | 
 | 84 | +set_input_transition -min 0.04 [get_ports {HWDATA[*]}]  | 
 | 85 | +set_input_transition -min 0.12 [get_ports {HSIZE[*]}]  | 
 | 86 | +set_input_transition -min 0.26 [get_ports {HWRITE}]  | 
 | 87 | +set_input_transition -min 0.27 [get_ports {HRESETn}]  | 
 | 88 | +set_input_transition -min 0.28 [get_ports {HREADY}]  | 
 | 89 | +set_input_transition -min 0.32 [get_ports {HTRANS[*]}]  | 
 | 90 | + | 
 | 91 | +# Output delays  | 
 | 92 | +set_output_delay -max 7.54   -clock [get_clocks {clk}] [get_ports {HRDATA[*]}]  | 
 | 93 | +set_output_delay -max 9.8    -clock [get_clocks {clk}] [get_ports {HREADYOUT}]  | 
 | 94 | +set_output_delay -min 0.01   -clock [get_clocks {clk}] [get_ports {HRDATA[*]}]  | 
 | 95 | +set_output_delay -min 0.83   -clock [get_clocks {clk}] [get_ports {HREADYOUT}]  | 
 | 96 | + | 
 | 97 | +# Output loads  | 
 | 98 | +set avg_load 0.10  | 
 | 99 | +set max_load 0.29  | 
 | 100 | +set_load $max_load [all_outputs]  | 
0 commit comments