|
| 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