bus repeater addition
diff --git a/gds/user_project_wrapper.gds.gz b/gds/user_project_wrapper.gds.gz index 7a7c00b..ba62c85 100644 --- a/gds/user_project_wrapper.gds.gz +++ b/gds/user_project_wrapper.gds.gz Binary files differ
diff --git a/lef/user_project_wrapper.lef.gz b/lef/user_project_wrapper.lef.gz index a78fc25..97c7e2c 100644 --- a/lef/user_project_wrapper.lef.gz +++ b/lef/user_project_wrapper.lef.gz Binary files differ
diff --git a/openlane/bus_rep_east/config.tcl b/openlane/bus_rep_east/config.tcl new file mode 100755 index 0000000..ca9cb80 --- /dev/null +++ b/openlane/bus_rep_east/config.tcl
@@ -0,0 +1,135 @@ +# SPDX-FileCopyrightText: 2021 , Dinesh Annayya +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org> + +# Global +# ------ + +set script_dir [file dirname [file normalize [info script]]] +# Name +set ::env(DESIGN_NAME) bus_rep_east + + +set ::env(DESIGN_IS_CORE) "1" +set ::env(FP_PDN_CORE_RING) {1} + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "" +set ::env(CLOCK_NET) "" + +set ::env(SYNTH_MAX_FANOUT) 4 +set ::env(SYNTH_BUFFERING) {0} + + +## CTS BUFFER +set ::env(CTS_CLK_MAX_WIRE_LENGTH) {250} +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" + +# Sources +# ------- + +# Local sources + no2usb sources +set ::env(VERILOG_FILES) "\ + $::env(DESIGN_DIR)/../../verilog/rtl/bus_rep/bus_rep_east.sv \ + " + +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + +set ::env(SYNTH_PARAMETERS) "BUS_REP_WD=45 " + +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +#set ::env(SDC_FILE) $::env(DESIGN_DIR)/base.sdc +#set ::env(BASE_SDC_FILE) $::env(DESIGN_DIR)/base.sdc + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + + +# Floorplanning +# ------------- + +set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg +set ::env(MACRO_PLACEMENT_CFG) $::env(DESIGN_DIR)/macro.cfg + +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 3420 50" + +#set ::env(GRT_OBS) "met4 0 0 300 1725" + +# If you're going to use multiple power domains, then keep this disabled. +set ::env(RUN_CVC) 0 + +#set ::env(PDN_CFG) $::env(DESIGN_DIR)/pdn.tcl + + + +set ::env(PL_TIME_DRIVEN) 1 +set ::env(PL_TARGET_DENSITY) "0.20" +set ::env(CELL_PAD) "8" +set ::env(GRT_ADJUSTMENT) 0.2 + +# helps in anteena fix +set ::env(USE_ARC_ANTENNA_CHECK) "0" + + +#set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 4 + +## CTS +set ::env(CLOCK_TREE_SYNTH) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) "0" +set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) "0" + +## Routing +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" + +#LVS Issue - DEF Base looks to having issue +set ::env(MAGIC_EXT_USE_GDS) {1} + +#set ::env(GLB_RT_MAXLAYER) 3 +set ::env(RT_MAX_LAYER) {met3} +set ::env(FP_PDN_LOWER_LAYER) {met2} +set ::env(FP_PDN_UPPER_LAYER) {met3} + +set ::env(FP_IO_HLAYER) {met2} +set ::env(FP_IO_VLAYER) {met1} + +#Lef +set ::env(MAGIC_GENERATE_LEF) {1} +set ::env(MAGIC_WRITE_FULL_LEF) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 1 +set ::env(PL_RESIZER_MAX_CAP_MARGIN) 2 +set ::env(PL_RESIZER_MAX_WIRE_LENGTH) "500" +set ::env(PL_RESIZER_MAX_SLEW_MARGIN) "2.0" + +set ::env(ECO_ENABLE) {0} +#set ::env(CURRENT_STEP) "synthesis" +#set ::env(LAST_STEP) "parasitics_sta" + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "1" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/bus_rep_east/interactive.tcl b/openlane/bus_rep_east/interactive.tcl new file mode 100755 index 0000000..5b5c6c8 --- /dev/null +++ b/openlane/bus_rep_east/interactive.tcl
@@ -0,0 +1,337 @@ +#!/usr/bin/env tclsh +# Copyright 2020-2022 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +package require openlane; # provides the utils as well +proc run_placement_step {args} { + if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { + set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) + } + + run_placement +} + +proc run_cts_step {args} { + if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { + set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) + } + + run_cts + run_resizer_timing + if { $::env(RSZ_USE_OLD_REMOVER) == 1} { + remove_buffers_from_nets + } +} + +proc run_routing_step {args} { + if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { + set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) + } + if { $::env(ECO_ENABLE) == 0 } { + run_routing + } +} + +proc run_parasitics_sta_step {args} { + if { ! [ info exists ::env(PARSITICS_CURRENT_DEF) ] } { + set ::env(PARSITICS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PARSITICS_CURRENT_DEF) + } + + if { $::env(RUN_SPEF_EXTRACTION) && ($::env(ECO_ENABLE) == 0)} { + run_parasitics_sta + } +} + +proc run_diode_insertion_2_5_step {args} { + if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { + set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) + } + if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { + run_antenna_check + heal_antenna_violators; # modifies the routed DEF + } + +} + +proc run_irdrop_report_step {args} { + if { $::env(RUN_IRDROP_REPORT) } { + run_irdrop_report + } +} + +proc run_lvs_step {{ lvs_enabled 1 }} { + if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { + set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) + } + + if { $lvs_enabled && $::env(RUN_LVS) } { + run_magic_spice_export; + run_lvs; # requires run_magic_spice_export + } + +} + +proc run_drc_step {{ drc_enabled 1 }} { + if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { + set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) + } + if { $drc_enabled } { + if { $::env(RUN_MAGIC_DRC) } { + run_magic_drc + } + if {$::env(RUN_KLAYOUT_DRC)} { + run_klayout_drc + } + } +} + +proc run_antenna_check_step {{ antenna_check_enabled 1 }} { + if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { + set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) + } + if { $antenna_check_enabled } { + run_antenna_check + } +} + +proc run_erc_step {args} { + if { $::env(RUN_CVC) } { + run_erc + } +} + +proc run_eco_step {args} { + if { $::env(ECO_ENABLE) == 1 } { + run_eco_flow + } +} + +proc run_magic_step {args} { + if {$::env(RUN_MAGIC)} { + run_magic + } +} + +proc run_klayout_step {args} { + if {$::env(RUN_KLAYOUT)} { + run_klayout + } + if {$::env(RUN_KLAYOUT_XOR)} { + run_klayout_gds_xor + } +} + +proc run_post_run_hooks {} { + if { [file exists $::env(DESIGN_DIR)/hooks/post_run.py]} { + puts_info "Running post run hook" + set result [exec $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py] + puts_info "$result" + } else { + puts_info "hooks/post_run.py not found, skipping" + } +} + +proc run_floorplan {args} { + # |----------------------------------------------------| + # |---------------- 2. FLOORPLAN ------------------| + # |----------------------------------------------------| + # + # intial fp + init_floorplan + + # check for deprecated io variables + if { [info exists ::env(FP_IO_HMETAL)]} { + set ::env(FP_IO_HLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_HMETAL) - 1}]] + puts_warn "You're using FP_IO_HMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_HLAYER) {$::env(FP_IO_HLAYER)}" + } + + if { [info exists ::env(FP_IO_VMETAL)]} { + set ::env(FP_IO_VLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_VMETAL) - 1}]] + puts_warn "You're using FP_IO_VMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_VLAYER) {$::env(FP_IO_VLAYER)}" + } + + + # place io + if { [info exists ::env(FP_PIN_ORDER_CFG)] } { + place_io_ol + } else { + if { [info exists ::env(FP_CONTEXT_DEF)] && [info exists ::env(FP_CONTEXT_LEF)] } { + place_io + global_placement_or + place_contextualized_io \ + -lef $::env(FP_CONTEXT_LEF) \ + -def $::env(FP_CONTEXT_DEF) + } else { + place_io + } + } + + apply_def_template + + #if { [info exist ::env(EXTRA_LEFS)] } { + if { [info exist ::env(MACRO_PLACEMENT_CFG)] } { + file copy -force $::env(MACRO_PLACEMENT_CFG) $::env(placement_tmpfiles)/macro_placement.cfg + manual_macro_placement -f + } else { + # global_placement_or + # basic_macro_placement + } + #} + + if { $::env(RUN_TAP_DECAP_INSERTION) } { + tap_decap_or + } + + scrot_klayout -layout $::env(CURRENT_DEF) -log $::env(floorplan_logs)/screenshot.log + + run_power_grid_generation +} + + + +proc run_flow {args} { + set options { + {-design optional} + {-from optional} + {-to optional} + {-save_path optional} + {-override_env optional} + } + set flags {-save -run_hooks -no_lvs -no_drc -no_antennacheck -gui} + parse_key_args "run_non_interactive_mode" args arg_values $options flags_map $flags -no_consume + + prep {*}$args + # signal trap SIGINT save_state; + + if { [info exists flags_map(-gui)] } { + or_gui + return + } + if { [info exists arg_values(-override_env)] } { + load_overrides $arg_values(-override_env) + } + + set LVS_ENABLED 1 + set DRC_ENABLED 1 + + set ANTENNACHECK_ENABLED [expr ![info exists flags_map(-no_antennacheck)] ] + + set steps [dict create \ + "synthesis" "run_synthesis" \ + "floorplan" "run_floorplan" \ + "placement" "run_placement_step" \ + "cts" "run_cts_step" \ + "routing" "run_routing_step" \ + "parasitics_sta" "run_parasitics_sta_step" \ + "eco" "run_eco_step" \ + "diode_insertion" "run_diode_insertion_2_5_step" \ + "irdrop" "run_irdrop_report_step" \ + "gds_magic" "run_magic_step" \ + "gds_klayout" "run_klayout_step" \ + "lvs" "run_lvs_step $LVS_ENABLED " \ + "drc" "run_drc_step $DRC_ENABLED " \ + "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED " \ + "cvc" "run_lef_cvc" + ] + + if { [info exists arg_values(-from) ]} { + puts_info "Starting flow at $arg_values(-from)..." + set ::env(CURRENT_STEP) $arg_values(-from) + } elseif { [info exists ::env(CURRENT_STEP) ] } { + puts_info "Resuming flow from $::env(CURRENT_STEP)..." + } else { + set ::env(CURRENT_STEP) "synthesis" + } + + set_if_unset arg_values(-from) $::env(CURRENT_STEP) + set_if_unset arg_values(-to) "cvc" + + set exe 0; + dict for {step_name step_exe} $steps { + if { [ string equal $arg_values(-from) $step_name ] } { + set exe 1; + } + + if { $exe } { + # For when it fails + set ::env(CURRENT_STEP) $step_name + [lindex $step_exe 0] [lindex $step_exe 1] ; + } + + if { [ string equal $arg_values(-to) $step_name ] } { + set exe 0: + break; + } + + } + + # for when it resumes + set steps_as_list [dict keys $steps] + set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] + set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] + + # Saves to <RUN_DIR>/results/final + save_final_views + + # Saves to design directory or custom + if { [info exists flags_map(-save) ] } { + if { ! [info exists arg_values(-save_path)] } { + set arg_values(-save_path) $::env(DESIGN_DIR) + } + save_final_views\ + -save_path $arg_values(-save_path)\ + -tag $::env(RUN_TAG) + } + calc_total_runtime + save_state + generate_final_summary_report + + check_timing_violations + + if { [info exists arg_values(-save_path)]\ + && $arg_values(-save_path) != "" } { + set ::env(HOOK_OUTPUT_PATH) "[file normalize $arg_values(-save_path)]" + } else { + set ::env(HOOK_OUTPUT_PATH) $::env(RESULTS_DIR)/final + } + + if {[info exists flags_map(-run_hooks)]} { + run_post_run_hooks + } + + puts_success "Flow complete." + + show_warnings "Note that the following warnings have been generated:" +} + +run_flow {*}$argv
diff --git a/openlane/bus_rep_east/macro.cfg b/openlane/bus_rep_east/macro.cfg new file mode 100644 index 0000000..e84abca --- /dev/null +++ b/openlane/bus_rep_east/macro.cfg
@@ -0,0 +1,46 @@ +u_rp\[0\].u_buf 7.82 10.88 FN +u_rp\[1\].u_buf 85.1 10.88 FN +u_rp\[2\].u_buf 162.38 10.88 FN +u_rp\[3\].u_buf 239.66 10.88 FN +u_rp\[4\].u_buf 316.94 10.88 FN +u_rp\[5\].u_buf 394.22 10.88 FN +u_rp\[6\].u_buf 471.5 10.88 FN +u_rp\[7\].u_buf 548.78 10.88 FN +u_rp\[8\].u_buf 626.06 10.88 FN +u_rp\[9\].u_buf 703.34 10.88 FN +u_rp\[10\].u_buf 780.62 10.88 FN +u_rp\[11\].u_buf 857.9 10.88 FN +u_rp\[12\].u_buf 935.18 10.88 FN +u_rp\[13\].u_buf 1012.46 10.88 FN +u_rp\[14\].u_buf 1089.74 10.88 FN +u_rp\[15\].u_buf 1167.02 10.88 FN +u_rp\[16\].u_buf 1244.3 10.88 FN +u_rp\[17\].u_buf 1321.58 10.88 FN +u_rp\[18\].u_buf 1398.86 10.88 FN +u_rp\[19\].u_buf 1476.14 10.88 FN +u_rp\[20\].u_buf 1553.42 10.88 FN +u_rp\[21\].u_buf 1630.7 10.88 FN +u_rp\[22\].u_buf 1707.98 10.88 FN +u_rp\[23\].u_buf 1785.26 10.88 FN +u_rp\[24\].u_buf 1862.54 10.88 FN +u_rp\[25\].u_buf 1939.82 10.88 FN +u_rp\[26\].u_buf 2017.1 10.88 FN +u_rp\[27\].u_buf 2094.38 10.88 FN +u_rp\[28\].u_buf 2171.66 10.88 FN +u_rp\[29\].u_buf 2248.94 10.88 FN +u_rp\[30\].u_buf 2326.22 10.88 FN +u_rp\[31\].u_buf 2403.5 10.88 FN +u_rp\[32\].u_buf 2480.78 10.88 FN +u_rp\[33\].u_buf 2558.06 10.88 FN +u_rp\[34\].u_buf 2635.34 10.88 FN +u_rp\[35\].u_buf 2712.62 10.88 FN +u_rp\[36\].u_buf 2789.9 10.88 FN +u_rp\[37\].u_buf 2867.18 10.88 FN +u_rp\[38\].u_buf 2944.46 10.88 FN +u_rp\[39\].u_buf 3021.74 10.88 FN +u_rp\[40\].u_buf 3099.02 10.88 FN +u_rp\[41\].u_buf 3176.3 10.88 FN +u_rp\[42\].u_buf 3253.58 10.88 FN +u_rp\[43\].u_buf 3330.86 10.88 FN +u_rp\[44\].u_buf 3408.14 10.88 FN +
diff --git a/openlane/bus_rep_east/pdn.tcl b/openlane/bus_rep_east/pdn.tcl new file mode 100644 index 0000000..1fe689b --- /dev/null +++ b/openlane/bus_rep_east/pdn.tcl
@@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 + +# Power nets +set ::power_nets $::env(VDD_PIN) +set ::ground_nets $::env(GND_PIN) + +set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5" + +pdngen::specify_grid stdcell { + name grid + rails { + met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0} + } + straps { + met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)} + met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)} + } + connect {{met1 met4} {met4 met5}} +} + +pdngen::specify_grid macro { + power_pins "VPWR" + ground_pins "VGND" + blockages "li1 met1 met2 met3 met4" + straps { + } + connect {{met4_PIN_ver met5}} +} + +set ::halo 5 + +# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area +set ::rails_start_with "POWER" ; + +# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area +set ::stripes_start_with "POWER" ;
diff --git a/openlane/bus_rep_east/pin_order.cfg b/openlane/bus_rep_east/pin_order.cfg new file mode 100644 index 0000000..bfe94f9 --- /dev/null +++ b/openlane/bus_rep_east/pin_order.cfg
@@ -0,0 +1,99 @@ +#BUS_SORT + +#MANUAL_PLACE + +#N +ch_out\[0\] 0 0 225 +ch_out\[1\] +ch_in\[2\] +ch_out\[3\] +ch_out\[4\] +ch_in\[5\] +ch_out\[6\] +ch_out\[7\] +ch_in\[8\] +ch_out\[9\] +ch_out\[10\] +ch_in\[11\] +ch_out\[12\] +ch_out\[13\] +ch_in\[14\] +ch_out\[15\] +ch_out\[16\] +ch_in\[17\] +ch_out\[18\] +ch_out\[19\] +ch_in\[20\] +ch_out\[21\] +ch_out\[22\] +ch_in\[23\] +ch_out\[24\] +ch_out\[25\] +ch_in\[26\] +ch_out\[27\] +ch_out\[28\] +ch_in\[29\] +ch_out\[30\] +ch_out\[31\] +ch_in\[32\] +ch_out\[33\] +ch_out\[34\] +ch_in\[35\] +ch_out\[36\] +ch_out\[37\] +ch_in\[38\] +ch_out\[39\] +ch_out\[40\] +ch_in\[41\] +ch_out\[42\] +ch_out\[43\] +ch_in\[44\] + +#S +ch_in\[0\] 1140 0 6 +ch_in\[1\] +ch_out\[2\] +ch_in\[3\] +ch_in\[4\] +ch_out\[5\] +ch_in\[6\] +ch_in\[7\] +ch_out\[8\] +ch_in\[9\] +ch_in\[10\] +ch_out\[11\] +ch_in\[12\] +ch_in\[13\] +ch_out\[14\] +ch_in\[15\] +ch_in\[16\] +ch_out\[17\] +ch_in\[18\] +ch_in\[19\] +ch_out\[20\] +ch_in\[21\] +ch_in\[22\] +ch_out\[23\] +ch_in\[24\] +ch_in\[25\] +ch_out\[26\] +ch_in\[27\] +ch_in\[28\] +ch_out\[29\] +ch_in\[30\] +ch_in\[31\] +ch_out\[32\] +ch_in\[33\] +ch_in\[34\] +ch_out\[35\] +ch_in\[36\] +ch_in\[37\] +ch_out\[38\] +ch_in\[39\] +ch_in\[40\] +ch_out\[41\] +ch_in\[42\] +ch_in\[43\] +ch_out\[44\] + +
diff --git a/openlane/bus_rep_north/config.tcl b/openlane/bus_rep_north/config.tcl new file mode 100755 index 0000000..e077c33 --- /dev/null +++ b/openlane/bus_rep_north/config.tcl
@@ -0,0 +1,136 @@ +# SPDX-FileCopyrightText: 2021 , Dinesh Annayya +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org> + +# Global +# ------ + +set script_dir [file dirname [file normalize [info script]]] +# Name +set ::env(DESIGN_NAME) bus_rep_north + + +set ::env(DESIGN_IS_CORE) "1" +set ::env(FP_PDN_CORE_RING) {1} + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "" +set ::env(CLOCK_NET) "" + +set ::env(SYNTH_MAX_FANOUT) 4 +set ::env(SYNTH_BUFFERING) {0} + + +## CTS BUFFER +set ::env(CTS_CLK_MAX_WIRE_LENGTH) {250} +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" + +# Sources +# ------- + +# Local sources + no2usb sources +set ::env(VERILOG_FILES) "\ + $::env(DESIGN_DIR)/../../verilog/rtl/bus_rep/bus_rep_north.sv \ + " + +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + +set ::env(SYNTH_PARAMETERS) "BUS_REP_WD=27 \ + BUS_BUF_WD=42 " + +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +#set ::env(SDC_FILE) $::env(DESIGN_DIR)/base.sdc +#set ::env(BASE_SDC_FILE) $::env(DESIGN_DIR)/base.sdc + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + + +# Floorplanning +# ------------- + +set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg +set ::env(MACRO_PLACEMENT_CFG) $::env(DESIGN_DIR)/macro.cfg + +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 2650 50" + +#set ::env(GRT_OBS) "met4 0 0 300 1725" + +# If you're going to use multiple power domains, then keep this disabled. +set ::env(RUN_CVC) 0 + +#set ::env(PDN_CFG) $::env(DESIGN_DIR)/pdn.tcl + + + +set ::env(PL_TIME_DRIVEN) 1 +set ::env(PL_TARGET_DENSITY) "0.20" +set ::env(CELL_PAD) "8" +set ::env(GRT_ADJUSTMENT) 0.2 + +# helps in anteena fix +set ::env(USE_ARC_ANTENNA_CHECK) "0" + + +#set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 4 + +## CTS +set ::env(CLOCK_TREE_SYNTH) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) "0" +set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) "0" + +## Routing +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" + +#LVS Issue - DEF Base looks to having issue +set ::env(MAGIC_EXT_USE_GDS) {1} + +#set ::env(GLB_RT_MAXLAYER) 3 +set ::env(RT_MAX_LAYER) {met3} +set ::env(FP_PDN_LOWER_LAYER) {met2} +set ::env(FP_PDN_UPPER_LAYER) {met3} + +set ::env(FP_IO_HLAYER) {met2} +set ::env(FP_IO_VLAYER) {met1} + +#Lef +set ::env(MAGIC_GENERATE_LEF) {1} +set ::env(MAGIC_WRITE_FULL_LEF) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 1 +set ::env(PL_RESIZER_MAX_CAP_MARGIN) 2 +set ::env(PL_RESIZER_MAX_WIRE_LENGTH) "500" +set ::env(PL_RESIZER_MAX_SLEW_MARGIN) "2.0" + +set ::env(ECO_ENABLE) {0} +#set ::env(CURRENT_STEP) "synthesis" +#set ::env(LAST_STEP) "parasitics_sta" + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "1" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/bus_rep_north/interactive.tcl b/openlane/bus_rep_north/interactive.tcl new file mode 100755 index 0000000..5b5c6c8 --- /dev/null +++ b/openlane/bus_rep_north/interactive.tcl
@@ -0,0 +1,337 @@ +#!/usr/bin/env tclsh +# Copyright 2020-2022 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +package require openlane; # provides the utils as well +proc run_placement_step {args} { + if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { + set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) + } + + run_placement +} + +proc run_cts_step {args} { + if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { + set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) + } + + run_cts + run_resizer_timing + if { $::env(RSZ_USE_OLD_REMOVER) == 1} { + remove_buffers_from_nets + } +} + +proc run_routing_step {args} { + if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { + set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) + } + if { $::env(ECO_ENABLE) == 0 } { + run_routing + } +} + +proc run_parasitics_sta_step {args} { + if { ! [ info exists ::env(PARSITICS_CURRENT_DEF) ] } { + set ::env(PARSITICS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PARSITICS_CURRENT_DEF) + } + + if { $::env(RUN_SPEF_EXTRACTION) && ($::env(ECO_ENABLE) == 0)} { + run_parasitics_sta + } +} + +proc run_diode_insertion_2_5_step {args} { + if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { + set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) + } + if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { + run_antenna_check + heal_antenna_violators; # modifies the routed DEF + } + +} + +proc run_irdrop_report_step {args} { + if { $::env(RUN_IRDROP_REPORT) } { + run_irdrop_report + } +} + +proc run_lvs_step {{ lvs_enabled 1 }} { + if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { + set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) + } + + if { $lvs_enabled && $::env(RUN_LVS) } { + run_magic_spice_export; + run_lvs; # requires run_magic_spice_export + } + +} + +proc run_drc_step {{ drc_enabled 1 }} { + if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { + set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) + } + if { $drc_enabled } { + if { $::env(RUN_MAGIC_DRC) } { + run_magic_drc + } + if {$::env(RUN_KLAYOUT_DRC)} { + run_klayout_drc + } + } +} + +proc run_antenna_check_step {{ antenna_check_enabled 1 }} { + if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { + set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) + } + if { $antenna_check_enabled } { + run_antenna_check + } +} + +proc run_erc_step {args} { + if { $::env(RUN_CVC) } { + run_erc + } +} + +proc run_eco_step {args} { + if { $::env(ECO_ENABLE) == 1 } { + run_eco_flow + } +} + +proc run_magic_step {args} { + if {$::env(RUN_MAGIC)} { + run_magic + } +} + +proc run_klayout_step {args} { + if {$::env(RUN_KLAYOUT)} { + run_klayout + } + if {$::env(RUN_KLAYOUT_XOR)} { + run_klayout_gds_xor + } +} + +proc run_post_run_hooks {} { + if { [file exists $::env(DESIGN_DIR)/hooks/post_run.py]} { + puts_info "Running post run hook" + set result [exec $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py] + puts_info "$result" + } else { + puts_info "hooks/post_run.py not found, skipping" + } +} + +proc run_floorplan {args} { + # |----------------------------------------------------| + # |---------------- 2. FLOORPLAN ------------------| + # |----------------------------------------------------| + # + # intial fp + init_floorplan + + # check for deprecated io variables + if { [info exists ::env(FP_IO_HMETAL)]} { + set ::env(FP_IO_HLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_HMETAL) - 1}]] + puts_warn "You're using FP_IO_HMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_HLAYER) {$::env(FP_IO_HLAYER)}" + } + + if { [info exists ::env(FP_IO_VMETAL)]} { + set ::env(FP_IO_VLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_VMETAL) - 1}]] + puts_warn "You're using FP_IO_VMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_VLAYER) {$::env(FP_IO_VLAYER)}" + } + + + # place io + if { [info exists ::env(FP_PIN_ORDER_CFG)] } { + place_io_ol + } else { + if { [info exists ::env(FP_CONTEXT_DEF)] && [info exists ::env(FP_CONTEXT_LEF)] } { + place_io + global_placement_or + place_contextualized_io \ + -lef $::env(FP_CONTEXT_LEF) \ + -def $::env(FP_CONTEXT_DEF) + } else { + place_io + } + } + + apply_def_template + + #if { [info exist ::env(EXTRA_LEFS)] } { + if { [info exist ::env(MACRO_PLACEMENT_CFG)] } { + file copy -force $::env(MACRO_PLACEMENT_CFG) $::env(placement_tmpfiles)/macro_placement.cfg + manual_macro_placement -f + } else { + # global_placement_or + # basic_macro_placement + } + #} + + if { $::env(RUN_TAP_DECAP_INSERTION) } { + tap_decap_or + } + + scrot_klayout -layout $::env(CURRENT_DEF) -log $::env(floorplan_logs)/screenshot.log + + run_power_grid_generation +} + + + +proc run_flow {args} { + set options { + {-design optional} + {-from optional} + {-to optional} + {-save_path optional} + {-override_env optional} + } + set flags {-save -run_hooks -no_lvs -no_drc -no_antennacheck -gui} + parse_key_args "run_non_interactive_mode" args arg_values $options flags_map $flags -no_consume + + prep {*}$args + # signal trap SIGINT save_state; + + if { [info exists flags_map(-gui)] } { + or_gui + return + } + if { [info exists arg_values(-override_env)] } { + load_overrides $arg_values(-override_env) + } + + set LVS_ENABLED 1 + set DRC_ENABLED 1 + + set ANTENNACHECK_ENABLED [expr ![info exists flags_map(-no_antennacheck)] ] + + set steps [dict create \ + "synthesis" "run_synthesis" \ + "floorplan" "run_floorplan" \ + "placement" "run_placement_step" \ + "cts" "run_cts_step" \ + "routing" "run_routing_step" \ + "parasitics_sta" "run_parasitics_sta_step" \ + "eco" "run_eco_step" \ + "diode_insertion" "run_diode_insertion_2_5_step" \ + "irdrop" "run_irdrop_report_step" \ + "gds_magic" "run_magic_step" \ + "gds_klayout" "run_klayout_step" \ + "lvs" "run_lvs_step $LVS_ENABLED " \ + "drc" "run_drc_step $DRC_ENABLED " \ + "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED " \ + "cvc" "run_lef_cvc" + ] + + if { [info exists arg_values(-from) ]} { + puts_info "Starting flow at $arg_values(-from)..." + set ::env(CURRENT_STEP) $arg_values(-from) + } elseif { [info exists ::env(CURRENT_STEP) ] } { + puts_info "Resuming flow from $::env(CURRENT_STEP)..." + } else { + set ::env(CURRENT_STEP) "synthesis" + } + + set_if_unset arg_values(-from) $::env(CURRENT_STEP) + set_if_unset arg_values(-to) "cvc" + + set exe 0; + dict for {step_name step_exe} $steps { + if { [ string equal $arg_values(-from) $step_name ] } { + set exe 1; + } + + if { $exe } { + # For when it fails + set ::env(CURRENT_STEP) $step_name + [lindex $step_exe 0] [lindex $step_exe 1] ; + } + + if { [ string equal $arg_values(-to) $step_name ] } { + set exe 0: + break; + } + + } + + # for when it resumes + set steps_as_list [dict keys $steps] + set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] + set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] + + # Saves to <RUN_DIR>/results/final + save_final_views + + # Saves to design directory or custom + if { [info exists flags_map(-save) ] } { + if { ! [info exists arg_values(-save_path)] } { + set arg_values(-save_path) $::env(DESIGN_DIR) + } + save_final_views\ + -save_path $arg_values(-save_path)\ + -tag $::env(RUN_TAG) + } + calc_total_runtime + save_state + generate_final_summary_report + + check_timing_violations + + if { [info exists arg_values(-save_path)]\ + && $arg_values(-save_path) != "" } { + set ::env(HOOK_OUTPUT_PATH) "[file normalize $arg_values(-save_path)]" + } else { + set ::env(HOOK_OUTPUT_PATH) $::env(RESULTS_DIR)/final + } + + if {[info exists flags_map(-run_hooks)]} { + run_post_run_hooks + } + + puts_success "Flow complete." + + show_warnings "Note that the following warnings have been generated:" +} + +run_flow {*}$argv
diff --git a/openlane/bus_rep_north/macro.cfg b/openlane/bus_rep_north/macro.cfg new file mode 100644 index 0000000..f743181 --- /dev/null +++ b/openlane/bus_rep_north/macro.cfg
@@ -0,0 +1,27 @@ +u_rp\[0\].u_buf 7.82 10.88 FN +u_rp\[1\].u_buf 97.98 10.88 FN +u_rp\[2\].u_buf 188.14 10.88 FN +u_rp\[3\].u_buf 278.3 10.88 FN +u_rp\[4\].u_buf 368.46 10.88 FN +u_rp\[5\].u_buf 458.62 10.88 FN +u_rp\[6\].u_buf 548.78 10.88 FN +u_rp\[7\].u_buf 638.94 10.88 FN +u_rp\[8\].u_buf 729.1 10.88 FN +u_rp\[9\].u_buf 819.26 10.88 FN +u_rp\[10\].u_buf 909.42 10.88 FN +u_rp\[11\].u_buf 999.58 10.88 FN +u_rp\[12\].u_buf 1089.74 10.88 FN +u_rp\[13\].u_buf 1179.9 10.88 FN +u_rp\[14\].u_buf 1270.06 10.88 FN +u_rp\[15\].u_buf 1360.22 10.88 FN +u_rp\[16\].u_buf 1450.38 10.88 FN +u_rp\[17\].u_buf 1540.54 10.88 FN +u_rp\[18\].u_buf 1630.7 10.88 FN +u_rp\[19\].u_buf 1720.86 10.88 FN +u_rp\[20\].u_buf 1811.02 10.88 FN +u_rp\[21\].u_buf 1901.18 10.88 FN +u_rp\[22\].u_buf 1991.34 10.88 FN +u_rp\[23\].u_buf 2081.5 10.88 FN +u_rp\[24\].u_buf 2171.66 10.88 FN +u_rp\[25\].u_buf 2261.82 10.88 FN +u_rp\[26\].u_buf 2351.98 10.88 FN
diff --git a/openlane/bus_rep_north/pdn.tcl b/openlane/bus_rep_north/pdn.tcl new file mode 100644 index 0000000..1fe689b --- /dev/null +++ b/openlane/bus_rep_north/pdn.tcl
@@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 + +# Power nets +set ::power_nets $::env(VDD_PIN) +set ::ground_nets $::env(GND_PIN) + +set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5" + +pdngen::specify_grid stdcell { + name grid + rails { + met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0} + } + straps { + met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)} + met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)} + } + connect {{met1 met4} {met4 met5}} +} + +pdngen::specify_grid macro { + power_pins "VPWR" + ground_pins "VGND" + blockages "li1 met1 met2 met3 met4" + straps { + } + connect {{met4_PIN_ver met5}} +} + +set ::halo 5 + +# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area +set ::rails_start_with "POWER" ; + +# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area +set ::stripes_start_with "POWER" ;
diff --git a/openlane/bus_rep_north/pin_order.cfg b/openlane/bus_rep_north/pin_order.cfg new file mode 100644 index 0000000..3fc1b58 --- /dev/null +++ b/openlane/bus_rep_north/pin_order.cfg
@@ -0,0 +1,149 @@ +#BUS_SORT + +#MANUAL_PLACE + +#N +ch_out\[0\] 0 0 250 +ch_out\[1\] +ch_in\[2\] +ch_out\[3\] +ch_out\[4\] +ch_in\[5\] +ch_out\[6\] +ch_out\[7\] +ch_in\[8\] +ch_out\[9\] +ch_out\[10\] +ch_in\[11\] +ch_out\[12\] +ch_out\[13\] +ch_in\[14\] +ch_out\[15\] +ch_out\[16\] +ch_in\[17\] +ch_out\[18\] +ch_out\[19\] +ch_in\[20\] +ch_out\[21\] +ch_out\[22\] +ch_in\[23\] +ch_out\[24\] +ch_out\[25\] +ch_in\[26\] + +#S +buf_in\[0\] 0100 0 4 +buf_out\[1\] +buf_out\[2\] +buf_in\[3\] +buf_out\[4\] +buf_out\[5\] +buf_in\[6\] +buf_out\[7\] +buf_out\[8\] +buf_in\[9\] +buf_out\[10\] +buf_out\[11\] +buf_in\[12\] +buf_out\[13\] +buf_out\[14\] +buf_in\[15\] +buf_out\[16\] +buf_out\[17\] +buf_in\[18\] +buf_out\[19\] +buf_out\[20\] +buf_in\[21\] +buf_out\[22\] +buf_out\[23\] +buf_in\[24\] +buf_out\[25\] +buf_out\[26\] +buf_in\[27\] +buf_out\[28\] +buf_out\[29\] +buf_in\[30\] +buf_out\[31\] +buf_out\[32\] +buf_in\[33\] +buf_out\[34\] +buf_out\[35\] +buf_in\[36\] +buf_out\[37\] +buf_out\[38\] +buf_in\[39\] +buf_out\[40\] +buf_out\[41\] + +buf_in\[41\] 2000 0 4 +buf_in\[40\] +buf_out\[39\] +buf_in\[38\] +buf_in\[37\] +buf_out\[36\] +buf_in\[35\] +buf_in\[34\] +buf_out\[33\] +buf_in\[32\] +buf_in\[31\] +buf_out\[30\] +buf_in\[29\] +buf_in\[28\] +buf_out\[27\] +buf_in\[26\] +buf_in\[25\] +buf_out\[24\] +buf_in\[23\] +buf_in\[22\] +buf_out\[21\] +buf_in\[20\] +buf_in\[19\] +buf_out\[18\] +buf_in\[17\] +buf_in\[16\] +buf_out\[15\] +buf_in\[14\] +buf_in\[13\] +buf_out\[12\] +buf_in\[11\] +buf_in\[10\] +buf_out\[9\] +buf_in\[8\] +buf_in\[7\] +buf_out\[6\] +buf_in\[5\] +buf_in\[4\] +buf_out\[3\] +buf_in\[2\] +buf_in\[1\] +buf_out\[0\] + + + +ch_in\[0\] 2400 0 16 +ch_in\[1\] +ch_out\[2\] +ch_in\[3\] +ch_in\[4\] +ch_out\[5\] +ch_in\[6\] +ch_in\[7\] +ch_out\[8\] +ch_in\[9\] +ch_in\[10\] +ch_out\[11\] +ch_in\[12\] +ch_in\[13\] +ch_out\[14\] +ch_in\[15\] +ch_in\[16\] +ch_out\[17\] +ch_in\[18\] +ch_in\[19\] +ch_out\[20\] +ch_in\[21\] +ch_in\[22\] +ch_out\[23\] +ch_in\[24\] +ch_in\[25\] +ch_out\[26\]
diff --git a/openlane/bus_rep_south/config.tcl b/openlane/bus_rep_south/config.tcl new file mode 100755 index 0000000..4271584 --- /dev/null +++ b/openlane/bus_rep_south/config.tcl
@@ -0,0 +1,135 @@ +# SPDX-FileCopyrightText: 2021 , Dinesh Annayya +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org> + +# Global +# ------ + +set script_dir [file dirname [file normalize [info script]]] +# Name +set ::env(DESIGN_NAME) bus_rep_south + + +set ::env(DESIGN_IS_CORE) "1" +set ::env(FP_PDN_CORE_RING) {1} + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "" +set ::env(CLOCK_NET) "" + +set ::env(SYNTH_MAX_FANOUT) 4 +set ::env(SYNTH_BUFFERING) {0} + + +## CTS BUFFER +set ::env(CTS_CLK_MAX_WIRE_LENGTH) {250} +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" + +# Sources +# ------- + +# Local sources + no2usb sources +set ::env(VERILOG_FILES) "\ + $::env(DESIGN_DIR)/../../verilog/rtl/bus_rep/bus_rep_south.sv \ + " + +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + +set ::env(SYNTH_PARAMETERS) "BUS_REP_WD=271 " + +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +#set ::env(SDC_FILE) $::env(DESIGN_DIR)/base.sdc +#set ::env(BASE_SDC_FILE) $::env(DESIGN_DIR)/base.sdc + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + + +# Floorplanning +# ------------- + +set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg +set ::env(MACRO_PLACEMENT_CFG) $::env(DESIGN_DIR)/macro.cfg + +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 2650 50" + +#set ::env(GRT_OBS) "met4 0 0 300 1725" + +# If you're going to use multiple power domains, then keep this disabled. +set ::env(RUN_CVC) 0 + +#set ::env(PDN_CFG) $::env(DESIGN_DIR)/pdn.tcl + + + +set ::env(PL_TIME_DRIVEN) 1 +set ::env(PL_TARGET_DENSITY) "0.20" +set ::env(CELL_PAD) "8" +set ::env(GRT_ADJUSTMENT) 0.2 + +# helps in anteena fix +set ::env(USE_ARC_ANTENNA_CHECK) "0" + + +#set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 4 + +## CTS +set ::env(CLOCK_TREE_SYNTH) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) "0" +set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) "0" + +## Routing +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" + +#LVS Issue - DEF Base looks to having issue +set ::env(MAGIC_EXT_USE_GDS) {1} + +#set ::env(GLB_RT_MAXLAYER) 3 +set ::env(RT_MAX_LAYER) {met3} +set ::env(FP_PDN_LOWER_LAYER) {met2} +set ::env(FP_PDN_UPPER_LAYER) {met3} + +set ::env(FP_IO_HLAYER) {met2} +set ::env(FP_IO_VLAYER) {met1} + +#Lef +set ::env(MAGIC_GENERATE_LEF) {1} +set ::env(MAGIC_WRITE_FULL_LEF) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 1 +set ::env(PL_RESIZER_MAX_CAP_MARGIN) 2 +set ::env(PL_RESIZER_MAX_WIRE_LENGTH) "600" +set ::env(PL_RESIZER_MAX_SLEW_MARGIN) "2.0" + +set ::env(ECO_ENABLE) {0} +#set ::env(CURRENT_STEP) "synthesis" +#set ::env(LAST_STEP) "parasitics_sta" + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "1" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/bus_rep_south/interactive.tcl b/openlane/bus_rep_south/interactive.tcl new file mode 100755 index 0000000..5b5c6c8 --- /dev/null +++ b/openlane/bus_rep_south/interactive.tcl
@@ -0,0 +1,337 @@ +#!/usr/bin/env tclsh +# Copyright 2020-2022 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +package require openlane; # provides the utils as well +proc run_placement_step {args} { + if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { + set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) + } + + run_placement +} + +proc run_cts_step {args} { + if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { + set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) + } + + run_cts + run_resizer_timing + if { $::env(RSZ_USE_OLD_REMOVER) == 1} { + remove_buffers_from_nets + } +} + +proc run_routing_step {args} { + if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { + set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) + } + if { $::env(ECO_ENABLE) == 0 } { + run_routing + } +} + +proc run_parasitics_sta_step {args} { + if { ! [ info exists ::env(PARSITICS_CURRENT_DEF) ] } { + set ::env(PARSITICS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PARSITICS_CURRENT_DEF) + } + + if { $::env(RUN_SPEF_EXTRACTION) && ($::env(ECO_ENABLE) == 0)} { + run_parasitics_sta + } +} + +proc run_diode_insertion_2_5_step {args} { + if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { + set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) + } + if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { + run_antenna_check + heal_antenna_violators; # modifies the routed DEF + } + +} + +proc run_irdrop_report_step {args} { + if { $::env(RUN_IRDROP_REPORT) } { + run_irdrop_report + } +} + +proc run_lvs_step {{ lvs_enabled 1 }} { + if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { + set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) + } + + if { $lvs_enabled && $::env(RUN_LVS) } { + run_magic_spice_export; + run_lvs; # requires run_magic_spice_export + } + +} + +proc run_drc_step {{ drc_enabled 1 }} { + if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { + set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) + } + if { $drc_enabled } { + if { $::env(RUN_MAGIC_DRC) } { + run_magic_drc + } + if {$::env(RUN_KLAYOUT_DRC)} { + run_klayout_drc + } + } +} + +proc run_antenna_check_step {{ antenna_check_enabled 1 }} { + if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { + set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) + } + if { $antenna_check_enabled } { + run_antenna_check + } +} + +proc run_erc_step {args} { + if { $::env(RUN_CVC) } { + run_erc + } +} + +proc run_eco_step {args} { + if { $::env(ECO_ENABLE) == 1 } { + run_eco_flow + } +} + +proc run_magic_step {args} { + if {$::env(RUN_MAGIC)} { + run_magic + } +} + +proc run_klayout_step {args} { + if {$::env(RUN_KLAYOUT)} { + run_klayout + } + if {$::env(RUN_KLAYOUT_XOR)} { + run_klayout_gds_xor + } +} + +proc run_post_run_hooks {} { + if { [file exists $::env(DESIGN_DIR)/hooks/post_run.py]} { + puts_info "Running post run hook" + set result [exec $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py] + puts_info "$result" + } else { + puts_info "hooks/post_run.py not found, skipping" + } +} + +proc run_floorplan {args} { + # |----------------------------------------------------| + # |---------------- 2. FLOORPLAN ------------------| + # |----------------------------------------------------| + # + # intial fp + init_floorplan + + # check for deprecated io variables + if { [info exists ::env(FP_IO_HMETAL)]} { + set ::env(FP_IO_HLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_HMETAL) - 1}]] + puts_warn "You're using FP_IO_HMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_HLAYER) {$::env(FP_IO_HLAYER)}" + } + + if { [info exists ::env(FP_IO_VMETAL)]} { + set ::env(FP_IO_VLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_VMETAL) - 1}]] + puts_warn "You're using FP_IO_VMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_VLAYER) {$::env(FP_IO_VLAYER)}" + } + + + # place io + if { [info exists ::env(FP_PIN_ORDER_CFG)] } { + place_io_ol + } else { + if { [info exists ::env(FP_CONTEXT_DEF)] && [info exists ::env(FP_CONTEXT_LEF)] } { + place_io + global_placement_or + place_contextualized_io \ + -lef $::env(FP_CONTEXT_LEF) \ + -def $::env(FP_CONTEXT_DEF) + } else { + place_io + } + } + + apply_def_template + + #if { [info exist ::env(EXTRA_LEFS)] } { + if { [info exist ::env(MACRO_PLACEMENT_CFG)] } { + file copy -force $::env(MACRO_PLACEMENT_CFG) $::env(placement_tmpfiles)/macro_placement.cfg + manual_macro_placement -f + } else { + # global_placement_or + # basic_macro_placement + } + #} + + if { $::env(RUN_TAP_DECAP_INSERTION) } { + tap_decap_or + } + + scrot_klayout -layout $::env(CURRENT_DEF) -log $::env(floorplan_logs)/screenshot.log + + run_power_grid_generation +} + + + +proc run_flow {args} { + set options { + {-design optional} + {-from optional} + {-to optional} + {-save_path optional} + {-override_env optional} + } + set flags {-save -run_hooks -no_lvs -no_drc -no_antennacheck -gui} + parse_key_args "run_non_interactive_mode" args arg_values $options flags_map $flags -no_consume + + prep {*}$args + # signal trap SIGINT save_state; + + if { [info exists flags_map(-gui)] } { + or_gui + return + } + if { [info exists arg_values(-override_env)] } { + load_overrides $arg_values(-override_env) + } + + set LVS_ENABLED 1 + set DRC_ENABLED 1 + + set ANTENNACHECK_ENABLED [expr ![info exists flags_map(-no_antennacheck)] ] + + set steps [dict create \ + "synthesis" "run_synthesis" \ + "floorplan" "run_floorplan" \ + "placement" "run_placement_step" \ + "cts" "run_cts_step" \ + "routing" "run_routing_step" \ + "parasitics_sta" "run_parasitics_sta_step" \ + "eco" "run_eco_step" \ + "diode_insertion" "run_diode_insertion_2_5_step" \ + "irdrop" "run_irdrop_report_step" \ + "gds_magic" "run_magic_step" \ + "gds_klayout" "run_klayout_step" \ + "lvs" "run_lvs_step $LVS_ENABLED " \ + "drc" "run_drc_step $DRC_ENABLED " \ + "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED " \ + "cvc" "run_lef_cvc" + ] + + if { [info exists arg_values(-from) ]} { + puts_info "Starting flow at $arg_values(-from)..." + set ::env(CURRENT_STEP) $arg_values(-from) + } elseif { [info exists ::env(CURRENT_STEP) ] } { + puts_info "Resuming flow from $::env(CURRENT_STEP)..." + } else { + set ::env(CURRENT_STEP) "synthesis" + } + + set_if_unset arg_values(-from) $::env(CURRENT_STEP) + set_if_unset arg_values(-to) "cvc" + + set exe 0; + dict for {step_name step_exe} $steps { + if { [ string equal $arg_values(-from) $step_name ] } { + set exe 1; + } + + if { $exe } { + # For when it fails + set ::env(CURRENT_STEP) $step_name + [lindex $step_exe 0] [lindex $step_exe 1] ; + } + + if { [ string equal $arg_values(-to) $step_name ] } { + set exe 0: + break; + } + + } + + # for when it resumes + set steps_as_list [dict keys $steps] + set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] + set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] + + # Saves to <RUN_DIR>/results/final + save_final_views + + # Saves to design directory or custom + if { [info exists flags_map(-save) ] } { + if { ! [info exists arg_values(-save_path)] } { + set arg_values(-save_path) $::env(DESIGN_DIR) + } + save_final_views\ + -save_path $arg_values(-save_path)\ + -tag $::env(RUN_TAG) + } + calc_total_runtime + save_state + generate_final_summary_report + + check_timing_violations + + if { [info exists arg_values(-save_path)]\ + && $arg_values(-save_path) != "" } { + set ::env(HOOK_OUTPUT_PATH) "[file normalize $arg_values(-save_path)]" + } else { + set ::env(HOOK_OUTPUT_PATH) $::env(RESULTS_DIR)/final + } + + if {[info exists flags_map(-run_hooks)]} { + run_post_run_hooks + } + + puts_success "Flow complete." + + show_warnings "Note that the following warnings have been generated:" +} + +run_flow {*}$argv
diff --git a/openlane/bus_rep_south/macro.cfg b/openlane/bus_rep_south/macro.cfg new file mode 100644 index 0000000..535d4ee --- /dev/null +++ b/openlane/bus_rep_south/macro.cfg
@@ -0,0 +1,254 @@ +u_rp\[0\].u_buf 7.82 10.88 FN +u_rp\[1\].u_buf 7.82 16.32 FN +u_rp\[2\].u_buf 20.7 10.88 FN +u_rp\[3\].u_buf 20.7 16.32 FN +u_rp\[4\].u_buf 33.58 10.88 FN +u_rp\[5\].u_buf 33.58 16.32 FN +u_rp\[6\].u_buf 46.46 10.88 FN +u_rp\[7\].u_buf 46.46 16.32 FN +u_rp\[8\].u_buf 59.34 10.88 FN +u_rp\[9\].u_buf 59.34 16.32 FN +u_rp\[10\].u_buf 72.22 10.88 FN +u_rp\[11\].u_buf 72.22 16.32 FN +u_rp\[12\].u_buf 85.1 10.88 FN +u_rp\[13\].u_buf 85.1 16.32 FN +u_rp\[14\].u_buf 97.98 10.88 FN +u_rp\[15\].u_buf 97.98 16.32 FN +u_rp\[16\].u_buf 110.86 10.88 FN +u_rp\[17\].u_buf 110.86 16.32 FN +u_rp\[18\].u_buf 123.74 10.88 FN +u_rp\[19\].u_buf 123.74 16.32 FN +u_rp\[20\].u_buf 136.62 10.88 FN +u_rp\[21\].u_buf 136.62 16.32 FN +u_rp\[22\].u_buf 149.5 10.88 FN +u_rp\[23\].u_buf 149.5 16.32 FN +u_rp\[24\].u_buf 162.38 10.88 FN +u_rp\[25\].u_buf 162.38 16.32 FN +u_rp\[26\].u_buf 175.26 10.88 FN +u_rp\[27\].u_buf 175.26 16.32 FN +u_rp\[28\].u_buf 188.14 10.88 FN +u_rp\[29\].u_buf 188.14 16.32 FN +u_rp\[30\].u_buf 201.02 10.88 FN +u_rp\[31\].u_buf 201.02 16.32 FN +u_rp\[32\].u_buf 213.9 10.88 FN +u_rp\[33\].u_buf 213.9 16.32 FN +u_rp\[34\].u_buf 226.78 10.88 FN +u_rp\[35\].u_buf 226.78 16.32 FN +u_rp\[36\].u_buf 239.66 10.88 FN +u_rp\[37\].u_buf 239.66 16.32 FN +u_rp\[38\].u_buf 252.54 10.88 FN +u_rp\[39\].u_buf 252.54 16.32 FN +u_rp\[40\].u_buf 265.42 10.88 FN +u_rp\[41\].u_buf 265.42 16.32 FN +u_rp\[42\].u_buf 278.3 10.88 FN +u_rp\[43\].u_buf 278.3 16.32 FN +u_rp\[44\].u_buf 291.18 10.88 FN +u_rp\[45\].u_buf 291.18 16.32 FN +u_rp\[46\].u_buf 304.06 10.88 FN +u_rp\[47\].u_buf 304.06 16.32 FN +u_rp\[48\].u_buf 316.94 10.88 FN +u_rp\[49\].u_buf 316.94 16.32 FN +u_rp\[50\].u_buf 329.82 10.88 FN +u_rp\[51\].u_buf 329.82 16.32 FN +u_rp\[52\].u_buf 342.7 10.88 FN +u_rp\[53\].u_buf 342.7 16.32 FN +u_rp\[54\].u_buf 355.58 10.88 FN +u_rp\[55\].u_buf 355.58 16.32 FN +u_rp\[56\].u_buf 368.46 10.88 FN +u_rp\[57\].u_buf 368.46 16.32 FN +u_rp\[58\].u_buf 381.34 10.88 FN +u_rp\[59\].u_buf 381.34 16.32 FN +u_rp\[60\].u_buf 394.22 10.88 FN +u_rp\[61\].u_buf 394.22 16.32 FN +u_rp\[62\].u_buf 407.1 10.88 FN +u_rp\[63\].u_buf 407.1 16.32 FN +u_rp\[64\].u_buf 419.98 10.88 FN +u_rp\[65\].u_buf 419.98 16.32 FN +u_rp\[66\].u_buf 432.86 10.88 FN +u_rp\[67\].u_buf 432.86 16.32 FN +u_rp\[68\].u_buf 445.74 10.88 FN +u_rp\[69\].u_buf 445.74 16.32 FN +u_rp\[70\].u_buf 458.62 10.88 FN +u_rp\[71\].u_buf 458.62 16.32 FN +u_rp\[72\].u_buf 471.5 10.88 FN +u_rp\[73\].u_buf 471.5 16.32 FN +u_rp\[74\].u_buf 484.38 10.88 FN +u_rp\[75\].u_buf 484.38 16.32 FN +u_rp\[76\].u_buf 497.26 10.88 FN +u_rp\[77\].u_buf 497.26 16.32 FN +u_rp\[78\].u_buf 510.14 10.88 FN +u_rp\[79\].u_buf 510.14 16.32 FN +u_rp\[80\].u_buf 523.02 10.88 FN +u_rp\[81\].u_buf 523.02 16.32 FN +u_rp\[82\].u_buf 535.9 10.88 FN +u_rp\[83\].u_buf 535.9 16.32 FN +u_rp\[84\].u_buf 548.78 10.88 FN +u_rp\[85\].u_buf 548.78 16.32 FN +u_rp\[86\].u_buf 561.66 10.88 FN +u_rp\[87\].u_buf 561.66 16.32 FN +u_rp\[88\].u_buf 574.54 10.88 FN +u_rp\[89\].u_buf 574.54 16.32 FN +u_rp\[90\].u_buf 587.42 10.88 FN +u_rp\[91\].u_buf 587.42 16.32 FN +u_rp\[92\].u_buf 600.3 10.88 FN +u_rp\[93\].u_buf 600.3 16.32 FN +u_rp\[94\].u_buf 613.18 10.88 FN +u_rp\[95\].u_buf 613.18 16.32 FN +u_rp\[96\].u_buf 626.06 10.88 FN +u_rp\[97\].u_buf 626.06 16.32 FN +u_rp\[98\].u_buf 638.94 10.88 FN +u_rp\[99\].u_buf 638.94 16.32 FN +u_rp\[100\].u_buf 651.82 10.88 FN +u_rp\[101\].u_buf 651.82 16.32 FN +u_rp\[102\].u_buf 664.7 10.88 FN +u_rp\[103\].u_buf 664.7 16.32 FN +u_rp\[104\].u_buf 677.58 10.88 FN +u_rp\[105\].u_buf 677.58 16.32 FN +u_rp\[106\].u_buf 690.46 10.88 FN +u_rp\[107\].u_buf 703.34 10.88 FN +u_rp\[108\].u_buf 716.22 10.88 FN +u_rp\[109\].u_buf 729.1 10.88 FN +u_rp\[110\].u_buf 741.98 10.88 FN +u_rp\[111\].u_buf 754.86 10.88 FN +u_rp\[112\].u_buf 767.74 10.88 FN +u_rp\[113\].u_buf 780.62 10.88 FN +u_rp\[114\].u_buf 793.5 10.88 FN +u_rp\[115\].u_buf 806.38 10.88 FN +u_rp\[116\].u_buf 819.26 10.88 FN +u_rp\[117\].u_buf 832.14 10.88 FN +u_rp\[118\].u_buf 845.02 10.88 FN +u_rp\[119\].u_buf 857.9 10.88 FN +u_rp\[120\].u_buf 870.78 10.88 FN +u_rp\[121\].u_buf 883.66 10.88 FN +u_rp\[122\].u_buf 896.54 10.88 FN +u_rp\[123\].u_buf 909.42 10.88 FN +u_rp\[124\].u_buf 922.3 10.88 FN +u_rp\[125\].u_buf 935.18 10.88 FN +u_rp\[126\].u_buf 948.06 10.88 FN +u_rp\[127\].u_buf 960.94 10.88 FN +u_rp\[128\].u_buf 973.82 10.88 FN +u_rp\[129\].u_buf 986.7 10.88 FN +u_rp\[130\].u_buf 999.58 10.88 FN +u_rp\[131\].u_buf 1012.46 10.88 FN +u_rp\[132\].u_buf 1025.34 10.88 FN +u_rp\[133\].u_buf 1038.22 10.88 FN +u_rp\[134\].u_buf 1051.1 10.88 FN +u_rp\[135\].u_buf 1063.98 10.88 FN +u_rp\[136\].u_buf 1076.86 10.88 FN +u_rp\[137\].u_buf 1089.74 10.88 FN +u_rp\[138\].u_buf 1102.62 10.88 FN +u_rp\[139\].u_buf 1115.5 10.88 FN +u_rp\[140\].u_buf 1128.38 10.88 FN +u_rp\[141\].u_buf 1141.26 10.88 FN +u_rp\[142\].u_buf 1154.14 10.88 FN +u_rp\[143\].u_buf 1167.02 10.88 FN +u_rp\[144\].u_buf 1179.9 10.88 FN +u_rp\[145\].u_buf 1192.78 10.88 FN +u_rp\[146\].u_buf 1205.66 10.88 FN +u_rp\[147\].u_buf 1218.54 10.88 FN +u_rp\[148\].u_buf 1231.42 10.88 FN +u_rp\[149\].u_buf 1244.3 10.88 FN +u_rp\[150\].u_buf 1257.18 10.88 FN +u_rp\[151\].u_buf 1270.06 10.88 FN +u_rp\[152\].u_buf 1282.94 10.88 FN +u_rp\[153\].u_buf 1295.82 10.88 FN +u_rp\[154\].u_buf 1308.7 10.88 FN +u_rp\[155\].u_buf 1321.58 10.88 FN +u_rp\[156\].u_buf 1334.46 10.88 FN +u_rp\[157\].u_buf 1347.34 10.88 FN +u_rp\[158\].u_buf 1360.22 10.88 FN +u_rp\[159\].u_buf 1373.1 10.88 FN +u_rp\[160\].u_buf 1385.98 10.88 FN +u_rp\[161\].u_buf 1398.86 10.88 FN +u_rp\[162\].u_buf 1411.74 10.88 FN +u_rp\[163\].u_buf 1424.62 10.88 FN +u_rp\[164\].u_buf 1437.5 10.88 FN +u_rp\[165\].u_buf 1450.38 10.88 FN +u_rp\[166\].u_buf 1463.26 10.88 FN +u_rp\[167\].u_buf 1476.14 10.88 FN +u_rp\[168\].u_buf 1489.02 10.88 FN +u_rp\[169\].u_buf 1501.9 10.88 FN +u_rp\[170\].u_buf 1514.78 10.88 FN +u_rp\[171\].u_buf 1527.66 10.88 FN +u_rp\[172\].u_buf 1540.54 10.88 FN +u_rp\[173\].u_buf 1553.42 10.88 FN +u_rp\[174\].u_buf 1566.3 10.88 FN +u_rp\[175\].u_buf 1579.18 10.88 FN +u_rp\[176\].u_buf 1592.06 10.88 FN +u_rp\[177\].u_buf 1604.94 10.88 FN +u_rp\[178\].u_buf 1617.82 10.88 FN +u_rp\[179\].u_buf 1630.70 10.88 FN +u_rp\[180\].u_buf 1643.58 10.88 FN +u_rp\[181\].u_buf 1656.46 10.88 FN +u_rp\[182\].u_buf 1669.34 10.88 FN +u_rp\[183\].u_buf 1682.22 10.88 FN +u_rp\[184\].u_buf 1695.10 10.88 FN +u_rp\[185\].u_buf 1707.98 10.88 FN +u_rp\[186\].u_buf 1720.86 10.88 FN +u_rp\[187\].u_buf 1733.74 10.88 FN +u_rp\[188\].u_buf 1746.62 10.88 FN +u_rp\[189\].u_buf 1759.50 10.88 FN +u_rp\[190\].u_buf 1772.38 10.88 FN +u_rp\[191\].u_buf 1785.26 10.88 FN +u_rp\[192\].u_buf 1798.14 10.88 FN +u_rp\[193\].u_buf 1811.02 10.88 FN +u_rp\[194\].u_buf 1823.90 10.88 FN +u_rp\[195\].u_buf 1836.78 10.88 FN +u_rp\[196\].u_buf 1849.66 10.88 FN +u_rp\[197\].u_buf 1862.54 10.88 FN +u_rp\[198\].u_buf 1875.42 10.88 FN +u_rp\[199\].u_buf 1888.30 10.88 FN +u_rp\[200\].u_buf 1901.18 10.88 FN +u_rp\[201\].u_buf 1914.06 10.88 FN +u_rp\[202\].u_buf 1926.94 10.88 FN +u_rp\[203\].u_buf 1939.82 10.88 FN +u_rp\[204\].u_buf 1952.70 10.88 FN +u_rp\[205\].u_buf 1965.58 10.88 FN +u_rp\[206\].u_buf 1978.46 10.88 FN +u_rp\[207\].u_buf 1991.34 10.88 FN +u_rp\[208\].u_buf 2004.22 10.88 FN +u_rp\[209\].u_buf 2017.10 10.88 FN +u_rp\[210\].u_buf 2029.98 10.88 FN +u_rp\[211\].u_buf 2042.86 10.88 FN +u_rp\[212\].u_buf 2055.74 10.88 FN +u_rp\[213\].u_buf 2068.62 10.88 FN +u_rp\[214\].u_buf 2081.50 10.88 FN +u_rp\[215\].u_buf 2094.38 10.88 FN +u_rp\[216\].u_buf 2107.26 10.88 FN +u_rp\[217\].u_buf 2120.14 10.88 FN +u_rp\[218\].u_buf 2133.02 10.88 FN +u_rp\[219\].u_buf 2145.90 10.88 FN +u_rp\[220\].u_buf 2158.78 10.88 FN +u_rp\[221\].u_buf 2171.66 10.88 FN +u_rp\[222\].u_buf 2184.54 10.88 FN +u_rp\[223\].u_buf 2197.42 10.88 FN +u_rp\[224\].u_buf 2210.30 10.88 FN +u_rp\[225\].u_buf 2223.18 10.88 FN +u_rp\[226\].u_buf 2236.06 10.88 FN +u_rp\[227\].u_buf 2248.94 10.88 FN +u_rp\[228\].u_buf 2261.82 10.88 FN +u_rp\[229\].u_buf 2274.70 10.88 FN +u_rp\[230\].u_buf 2287.58 10.88 FN +u_rp\[231\].u_buf 2300.46 10.88 FN +u_rp\[232\].u_buf 2313.34 10.88 FN +u_rp\[233\].u_buf 2326.22 10.88 FN +u_rp\[234\].u_buf 2339.10 10.88 FN +u_rp\[235\].u_buf 2351.98 10.88 FN +u_rp\[236\].u_buf 2364.86 10.88 FN +u_rp\[237\].u_buf 2377.74 10.88 FN +u_rp\[238\].u_buf 2390.62 10.88 FN +u_rp\[239\].u_buf 2403.50 10.88 FN +u_rp\[240\].u_buf 2416.38 10.88 FN +u_rp\[241\].u_buf 2429.26 10.88 FN +u_rp\[242\].u_buf 2442.14 10.88 FN +u_rp\[243\].u_buf 2455.02 10.88 FN +u_rp\[244\].u_buf 2467.90 10.88 FN +u_rp\[245\].u_buf 2480.78 10.88 FN +u_rp\[246\].u_buf 2493.66 10.88 FN +u_rp\[247\].u_buf 2506.54 10.88 FN +u_rp\[248\].u_buf 2519.42 10.88 FN +u_rp\[249\].u_buf 2532.30 10.88 FN +u_rp\[250\].u_buf 2545.18 10.88 FN +u_rp\[251\].u_buf 2558.06 10.88 FN +u_rp\[252\].u_buf 2570.94 10.88 FN +
diff --git a/openlane/bus_rep_south/pdn.tcl b/openlane/bus_rep_south/pdn.tcl new file mode 100644 index 0000000..1fe689b --- /dev/null +++ b/openlane/bus_rep_south/pdn.tcl
@@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 + +# Power nets +set ::power_nets $::env(VDD_PIN) +set ::ground_nets $::env(GND_PIN) + +set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5" + +pdngen::specify_grid stdcell { + name grid + rails { + met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0} + } + straps { + met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)} + met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)} + } + connect {{met1 met4} {met4 met5}} +} + +pdngen::specify_grid macro { + power_pins "VPWR" + ground_pins "VGND" + blockages "li1 met1 met2 met3 met4" + straps { + } + connect {{met4_PIN_ver met5}} +} + +set ::halo 5 + +# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area +set ::rails_start_with "POWER" ; + +# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area +set ::stripes_start_with "POWER" ;
diff --git a/openlane/bus_rep_south/pin_order.cfg b/openlane/bus_rep_south/pin_order.cfg new file mode 100644 index 0000000..042f35a --- /dev/null +++ b/openlane/bus_rep_south/pin_order.cfg
@@ -0,0 +1,566 @@ +#BUS_SORT + +#MANUAL_PLACE + +#N +ch_out\[0\] 1000 0 8 +ch_out\[1\] +ch_in\[2\] +ch_out\[3\] +ch_out\[4\] +ch_out\[5\] +ch_out\[6\] +ch_out\[7\] +ch_in\[8\] +ch_out\[9\] +ch_out\[10\] +ch_out\[11\] +ch_in\[12\] +ch_out\[13\] +ch_out\[14\] +ch_out\[15\] +ch_in\[16\] +ch_out\[17\] +ch_out\[18\] +ch_out\[19\] +ch_in\[20\] +ch_out\[21\] +ch_out\[22\] +ch_out\[23\] +ch_in\[24\] + +ch_out\[25\] +ch_out\[26\] +ch_in\[27\] +ch_out\[28\] +ch_out\[29\] +ch_in\[30\] +ch_out\[31\] +ch_out\[32\] +ch_in\[33\] +ch_out\[34\] +ch_out\[35\] +ch_in\[36\] +ch_out\[37\] +ch_out\[38\] +ch_in\[39\] +ch_out\[40\] +ch_out\[41\] +ch_in\[42\] +ch_out\[43\] +ch_out\[44\] +ch_in\[45\] +ch_out\[46\] +ch_out\[47\] +ch_in\[48\] +ch_out\[49\] +ch_out\[50\] +ch_in\[51\] +ch_out\[52\] +ch_out\[53\] +ch_in\[54\] +ch_out\[55\] +ch_out\[56\] +ch_in\[57\] +ch_out\[58\] +ch_out\[59\] +ch_in\[60\] +ch_out\[61\] +ch_out\[62\] +ch_in\[63\] +ch_out\[64\] +ch_out\[65\] +ch_in\[66\] +ch_out\[67\] +ch_out\[68\] +ch_in\[69\] +ch_out\[70\] +ch_out\[71\] +ch_in\[72\] +ch_out\[73\] +ch_out\[74\] +ch_in\[75\] +ch_out\[76\] +ch_out\[77\] +ch_in\[78\] +ch_out\[79\] +ch_out\[80\] +ch_in\[81\] +ch_out\[82\] +ch_out\[83\] +ch_in\[84\] +ch_out\[85\] +ch_out\[86\] +ch_in\[87\] +ch_out\[88\] +ch_out\[89\] +ch_in\[90\] +ch_out\[91\] +ch_out\[92\] +ch_in\[93\] +ch_out\[94\] +ch_out\[95\] +ch_in\[96\] +ch_out\[97\] +ch_out\[98\] +ch_in\[99\] +ch_out\[100\] +ch_out\[101\] +ch_in\[102\] +ch_out\[103\] +ch_out\[104\] +ch_in\[105\] + + + + +ch_out\[106\] 1800 0 8 +ch_in\[107\] +ch_out\[108\] +ch_in\[109\] +ch_out\[110\] +ch_in\[111\] +ch_out\[112\] +ch_in\[113\] +ch_out\[114\] +ch_in\[115\] +ch_out\[116\] +ch_in\[117\] +ch_out\[118\] +ch_in\[119\] +ch_out\[120\] +ch_in\[121\] +ch_out\[122\] +ch_in\[123\] +ch_out\[124\] +ch_in\[125\] +ch_out\[126\] +ch_in\[127\] +ch_out\[128\] +ch_in\[129\] +ch_out\[130\] +ch_in\[131\] +ch_out\[132\] +ch_in\[133\] +ch_out\[134\] +ch_in\[135\] +ch_out\[136\] +ch_in\[137\] +ch_out\[138\] +ch_in\[139\] +ch_out\[140\] +ch_in\[141\] +ch_out\[142\] +ch_in\[143\] +ch_out\[144\] +ch_in\[145\] +ch_out\[146\] +ch_in\[147\] +ch_out\[148\] +ch_in\[149\] +ch_out\[150\] +ch_in\[151\] +ch_out\[152\] +ch_in\[153\] +ch_out\[154\] +ch_in\[155\] +ch_out\[156\] +ch_in\[157\] +ch_out\[158\] +ch_in\[159\] +ch_out\[160\] +ch_in\[161\] +ch_out\[162\] +ch_in\[163\] +ch_out\[164\] +ch_in\[165\] +ch_out\[166\] +ch_in\[167\] +ch_out\[168\] +ch_in\[169\] +ch_out\[170\] +ch_in\[171\] +ch_out\[172\] +ch_in\[173\] +ch_out\[174\] +ch_in\[175\] +ch_out\[176\] +ch_in\[177\] +ch_in\[178\] +ch_in\[179\] +ch_in\[180\] +ch_in\[181\] +ch_in\[182\] +ch_in\[183\] +ch_in\[184\] +ch_in\[185\] +ch_in\[186\] +ch_in\[187\] +ch_in\[188\] +ch_in\[189\] +ch_in\[190\] +ch_in\[191\] +ch_in\[192\] +ch_in\[193\] +ch_in\[194\] +ch_in\[195\] +ch_in\[196\] +ch_in\[197\] +ch_in\[198\] +ch_in\[199\] +ch_in\[200\] +ch_in\[201\] +ch_in\[202\] +ch_in\[203\] +ch_in\[204\] +ch_in\[205\] + +ch_in\[206\] 2200 0 4 +ch_in\[207\] +ch_in\[208\] +ch_in\[209\] +ch_in\[210\] +ch_in\[211\] +ch_in\[212\] +ch_in\[213\] +ch_in\[214\] +ch_in\[215\] +ch_in\[216\] +ch_in\[217\] +ch_in\[218\] +ch_in\[219\] + +ch_in\[220\] +ch_in\[221\] +ch_in\[222\] +ch_in\[223\] +ch_in\[224\] +ch_in\[225\] +ch_in\[226\] +ch_in\[227\] +ch_in\[228\] +ch_in\[229\] +ch_in\[230\] +ch_in\[231\] +ch_in\[232\] +ch_in\[233\] +ch_in\[234\] +ch_in\[235\] +ch_in\[236\] +ch_in\[237\] + +ch_in\[238\] 2400 0 4 +ch_in\[239\] +ch_in\[240\] +ch_in\[241\] +ch_in\[242\] +ch_in\[243\] +ch_in\[244\] +ch_in\[245\] +ch_in\[246\] +ch_in\[247\] +ch_in\[248\] +ch_in\[249\] +ch_in\[250\] +ch_in\[251\] +ch_in\[252\] +ch_in\[253\] +ch_in\[254\] +ch_in\[255\] +ch_in\[256\] +ch_in\[257\] +ch_in\[258\] +ch_in\[259\] +ch_in\[260\] +ch_in\[261\] +ch_in\[262\] +ch_in\[263\] +ch_in\[264\] +ch_in\[265\] +ch_in\[266\] +ch_in\[267\] +ch_in\[268\] +ch_in\[269\] +ch_out\[270\] + + +#S +ch_in\[0\] 0 0 16 +ch_in\[1\] +ch_out\[2\] +ch_in\[3\] +ch_in\[4\] +ch_in\[5\] +ch_in\[6\] +ch_in\[7\] +ch_out\[8\] +ch_in\[9\] +ch_in\[10\] +ch_in\[11\] +ch_out\[12\] +ch_in\[13\] +ch_in\[14\] +ch_in\[15\] +ch_out\[16\] +ch_in\[17\] +ch_in\[18\] +ch_in\[19\] +ch_out\[20\] +ch_in\[21\] +ch_in\[22\] +ch_in\[23\] +ch_out\[24\] +ch_in\[25\] +ch_in\[26\] +ch_out\[27\] +ch_in\[28\] +ch_in\[29\] +ch_out\[30\] +ch_in\[31\] +ch_in\[32\] +ch_out\[33\] +ch_in\[34\] +ch_in\[35\] +ch_out\[36\] +ch_in\[37\] +ch_in\[38\] +ch_out\[39\] +ch_in\[40\] +ch_in\[41\] +ch_out\[42\] +ch_in\[43\] +ch_in\[44\] +ch_out\[45\] +ch_in\[46\] +ch_in\[47\] +ch_out\[48\] +ch_in\[49\] +ch_in\[50\] +ch_out\[51\] +ch_in\[52\] +ch_in\[53\] +ch_out\[54\] +ch_in\[55\] +ch_in\[56\] +ch_out\[57\] +ch_in\[58\] +ch_in\[59\] +ch_out\[60\] +ch_in\[61\] +ch_in\[62\] +ch_out\[63\] +ch_in\[64\] +ch_in\[65\] +ch_out\[66\] +ch_in\[67\] +ch_in\[68\] +ch_out\[69\] +ch_in\[70\] +ch_in\[71\] +ch_out\[72\] +ch_in\[73\] +ch_in\[74\] +ch_out\[75\] +ch_in\[76\] +ch_in\[77\] +ch_out\[78\] +ch_in\[79\] +ch_in\[80\] +ch_out\[81\] +ch_in\[82\] +ch_in\[83\] +ch_out\[84\] +ch_in\[85\] +ch_in\[86\] +ch_out\[87\] +ch_in\[88\] +ch_in\[89\] +ch_out\[90\] +ch_in\[91\] +ch_in\[92\] +ch_out\[93\] +ch_in\[94\] +ch_in\[95\] +ch_out\[96\] +ch_in\[97\] +ch_in\[98\] +ch_out\[99\] +ch_in\[100\] +ch_in\[101\] +ch_out\[102\] +ch_in\[103\] +ch_in\[104\] +ch_out\[105\] + + +ch_in\[106\] 600 0 32 +ch_out\[107\] +ch_in\[108\] +ch_out\[109\] +ch_in\[110\] +ch_out\[111\] +ch_in\[112\] +ch_out\[113\] +ch_in\[114\] +ch_out\[115\] +ch_in\[116\] +ch_out\[117\] +ch_in\[118\] +ch_out\[119\] +ch_in\[120\] +ch_out\[121\] +ch_in\[122\] +ch_out\[123\] +ch_in\[124\] +ch_out\[125\] + +ch_in\[126\] 810 0 32 +ch_out\[127\] +ch_in\[128\] +ch_out\[129\] +ch_in\[130\] +ch_out\[131\] +ch_in\[132\] +ch_out\[133\] +ch_in\[134\] +ch_out\[135\] +ch_in\[136\] +ch_out\[137\] +ch_in\[138\] +ch_out\[139\] +ch_in\[140\] +ch_out\[141\] + + + +ch_in\[142\] 1100 0 32 +ch_out\[143\] +ch_in\[144\] +ch_out\[145\] +ch_in\[146\] +ch_out\[147\] +ch_in\[148\] +ch_out\[149\] +ch_in\[150\] +ch_out\[151\] +ch_in\[152\] +ch_out\[153\] +ch_in\[154\] +ch_out\[155\] +ch_in\[156\] +ch_out\[157\] +ch_in\[158\] +ch_out\[159\] +ch_in\[160\] +ch_out\[161\] +ch_in\[162\] +ch_out\[163\] +ch_in\[164\] +ch_out\[165\] +ch_in\[166\] +ch_out\[167\] +ch_in\[168\] +ch_out\[169\] +ch_in\[170\] +ch_out\[171\] +ch_in\[172\] +ch_out\[173\] +ch_in\[174\] +ch_out\[175\] +ch_in\[176\] +ch_out\[177\] +ch_out\[178\] +ch_out\[179\] +ch_out\[180\] +ch_out\[181\] +ch_out\[182\] +ch_out\[183\] +ch_out\[184\] +ch_out\[185\] +ch_out\[186\] +ch_out\[187\] +ch_out\[188\] +ch_out\[189\] +ch_out\[190\] +ch_out\[191\] +ch_out\[192\] +ch_out\[193\] +ch_out\[194\] +ch_out\[195\] +ch_out\[196\] +ch_out\[197\] +ch_out\[198\] +ch_out\[199\] +ch_out\[200\] +ch_out\[201\] +ch_out\[202\] +ch_out\[203\] +ch_out\[204\] +ch_out\[205\] + +ch_out\[206\] 1800 0 32 +ch_out\[207\] +ch_out\[208\] +ch_out\[209\] +ch_out\[210\] +ch_out\[211\] +ch_out\[212\] +ch_out\[213\] +ch_out\[214\] +ch_out\[215\] +ch_out\[216\] +ch_out\[217\] +ch_out\[218\] +ch_out\[219\] +ch_out\[220\] +ch_out\[221\] +ch_out\[222\] +ch_out\[223\] +ch_out\[224\] +ch_out\[225\] +ch_out\[226\] +ch_out\[227\] +ch_out\[228\] +ch_out\[229\] +ch_out\[230\] +ch_out\[231\] +ch_out\[232\] +ch_out\[233\] +ch_out\[234\] +ch_out\[235\] +ch_out\[236\] +ch_out\[237\] +ch_out\[238\] +ch_out\[239\] +ch_out\[240\] +ch_out\[241\] +ch_out\[242\] +ch_out\[243\] +ch_out\[244\] +ch_out\[245\] +ch_out\[246\] +ch_out\[247\] +ch_out\[248\] +ch_out\[249\] +ch_out\[250\] +ch_out\[251\] +ch_out\[252\] +ch_out\[253\] +ch_out\[254\] +ch_out\[255\] +ch_out\[256\] +ch_out\[257\] +ch_out\[258\] +ch_out\[259\] +ch_out\[260\] +ch_out\[261\] +ch_out\[262\] +ch_out\[263\] +ch_out\[264\] +ch_out\[265\] +ch_out\[266\] +ch_out\[267\] +ch_out\[268\] +ch_out\[269\] +ch_in\[270\] +
diff --git a/openlane/bus_rep_west/config.tcl b/openlane/bus_rep_west/config.tcl new file mode 100755 index 0000000..37dacb0 --- /dev/null +++ b/openlane/bus_rep_west/config.tcl
@@ -0,0 +1,135 @@ +# SPDX-FileCopyrightText: 2021 , Dinesh Annayya +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileContributor: Modified by Dinesh Annayya <dinesha@opencores.org> + +# Global +# ------ + +set script_dir [file dirname [file normalize [info script]]] +# Name +set ::env(DESIGN_NAME) bus_rep_west + + +set ::env(DESIGN_IS_CORE) "1" +set ::env(FP_PDN_CORE_RING) {1} + +# Timing configuration +set ::env(CLOCK_PERIOD) "10" +set ::env(CLOCK_PORT) "" +set ::env(CLOCK_NET) "" + +set ::env(SYNTH_MAX_FANOUT) 4 +set ::env(SYNTH_BUFFERING) {0} + + +## CTS BUFFER +set ::env(CTS_CLK_MAX_WIRE_LENGTH) {250} +set ::env(CTS_CLK_BUFFER_LIST) "sky130_fd_sc_hd__clkbuf_4 sky130_fd_sc_hd__clkbuf_8" +set ::env(CTS_SINK_CLUSTERING_SIZE) "16" +set ::env(CLOCK_BUFFER_FANOUT) "8" + +# Sources +# ------- + +# Local sources + no2usb sources +set ::env(VERILOG_FILES) "\ + $::env(DESIGN_DIR)/../../verilog/rtl/bus_rep/bus_rep_west.sv \ + " + +set ::env(SYNTH_DEFINES) [list SYNTHESIS ] + +set ::env(SYNTH_PARAMETERS) "BUS_REP_WD=42 " + +set ::env(SYNTH_READ_BLACKBOX_LIB) 1 +#set ::env(SDC_FILE) $::env(DESIGN_DIR)/base.sdc +#set ::env(BASE_SDC_FILE) $::env(DESIGN_DIR)/base.sdc + +set ::env(LEC_ENABLE) 0 + +set ::env(VDD_PIN) [list {vccd1}] +set ::env(GND_PIN) [list {vssd1}] + + +# Floorplanning +# ------------- + +set ::env(FP_PIN_ORDER_CFG) $::env(DESIGN_DIR)/pin_order.cfg +set ::env(MACRO_PLACEMENT_CFG) $::env(DESIGN_DIR)/macro.cfg + +set ::env(FP_SIZING) absolute +set ::env(DIE_AREA) "0 0 3250 50" + +#set ::env(GRT_OBS) "met4 0 0 300 1725" + +# If you're going to use multiple power domains, then keep this disabled. +set ::env(RUN_CVC) 0 + +#set ::env(PDN_CFG) $::env(DESIGN_DIR)/pdn.tcl + + + +set ::env(PL_TIME_DRIVEN) 1 +set ::env(PL_TARGET_DENSITY) "0.20" +set ::env(CELL_PAD) "8" +set ::env(GRT_ADJUSTMENT) 0.2 + +# helps in anteena fix +set ::env(USE_ARC_ANTENNA_CHECK) "0" + + +#set ::env(GLB_RT_MAX_DIODE_INS_ITERS) 10 +set ::env(DIODE_INSERTION_STRATEGY) 4 + +## CTS +set ::env(CLOCK_TREE_SYNTH) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_TIMING_OPTIMIZATIONS) 0 +set ::env(PL_RESIZER_BUFFER_INPUT_PORTS) "0" +set ::env(PL_RESIZER_BUFFER_OUTPUT_PORTS) "0" + +## Routing +set ::env(GLB_RESIZER_TIMING_OPTIMIZATIONS) "0" + +#LVS Issue - DEF Base looks to having issue +set ::env(MAGIC_EXT_USE_GDS) {1} + +#set ::env(GLB_RT_MAXLAYER) 3 +set ::env(RT_MAX_LAYER) {met3} +set ::env(FP_PDN_LOWER_LAYER) {met2} +set ::env(FP_PDN_UPPER_LAYER) {met3} + +set ::env(FP_IO_HLAYER) {met2} +set ::env(FP_IO_VLAYER) {met1} + +#Lef +set ::env(MAGIC_GENERATE_LEF) {1} +set ::env(MAGIC_WRITE_FULL_LEF) {0} + +## Placement +set ::env(PL_RESIZER_DESIGN_OPTIMIZATIONS) 1 +set ::env(PL_RESIZER_MAX_CAP_MARGIN) 2 +set ::env(PL_RESIZER_MAX_WIRE_LENGTH) "500" +set ::env(PL_RESIZER_MAX_SLEW_MARGIN) "2.0" + +set ::env(ECO_ENABLE) {0} +#set ::env(CURRENT_STEP) "synthesis" +#set ::env(LAST_STEP) "parasitics_sta" + +set ::env(QUIT_ON_TIMING_VIOLATIONS) "0" +set ::env(QUIT_ON_MAGIC_DRC) "1" +set ::env(QUIT_ON_LVS_ERROR) "1" +set ::env(QUIT_ON_SLEW_VIOLATIONS) "0"
diff --git a/openlane/bus_rep_west/interactive.tcl b/openlane/bus_rep_west/interactive.tcl new file mode 100755 index 0000000..5b5c6c8 --- /dev/null +++ b/openlane/bus_rep_west/interactive.tcl
@@ -0,0 +1,337 @@ +#!/usr/bin/env tclsh +# Copyright 2020-2022 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +package require openlane; # provides the utils as well +proc run_placement_step {args} { + if { ! [ info exists ::env(PLACEMENT_CURRENT_DEF) ] } { + set ::env(PLACEMENT_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PLACEMENT_CURRENT_DEF) + } + + run_placement +} + +proc run_cts_step {args} { + if { ! [ info exists ::env(CTS_CURRENT_DEF) ] } { + set ::env(CTS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(CTS_CURRENT_DEF) + } + + run_cts + run_resizer_timing + if { $::env(RSZ_USE_OLD_REMOVER) == 1} { + remove_buffers_from_nets + } +} + +proc run_routing_step {args} { + if { ! [ info exists ::env(ROUTING_CURRENT_DEF) ] } { + set ::env(ROUTING_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ROUTING_CURRENT_DEF) + } + if { $::env(ECO_ENABLE) == 0 } { + run_routing + } +} + +proc run_parasitics_sta_step {args} { + if { ! [ info exists ::env(PARSITICS_CURRENT_DEF) ] } { + set ::env(PARSITICS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(PARSITICS_CURRENT_DEF) + } + + if { $::env(RUN_SPEF_EXTRACTION) && ($::env(ECO_ENABLE) == 0)} { + run_parasitics_sta + } +} + +proc run_diode_insertion_2_5_step {args} { + if { ! [ info exists ::env(DIODE_INSERTION_CURRENT_DEF) ] } { + set ::env(DIODE_INSERTION_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DIODE_INSERTION_CURRENT_DEF) + } + if { ($::env(DIODE_INSERTION_STRATEGY) == 2) || ($::env(DIODE_INSERTION_STRATEGY) == 5) } { + run_antenna_check + heal_antenna_violators; # modifies the routed DEF + } + +} + +proc run_irdrop_report_step {args} { + if { $::env(RUN_IRDROP_REPORT) } { + run_irdrop_report + } +} + +proc run_lvs_step {{ lvs_enabled 1 }} { + if { ! [ info exists ::env(LVS_CURRENT_DEF) ] } { + set ::env(LVS_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(LVS_CURRENT_DEF) + } + + if { $lvs_enabled && $::env(RUN_LVS) } { + run_magic_spice_export; + run_lvs; # requires run_magic_spice_export + } + +} + +proc run_drc_step {{ drc_enabled 1 }} { + if { ! [ info exists ::env(DRC_CURRENT_DEF) ] } { + set ::env(DRC_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(DRC_CURRENT_DEF) + } + if { $drc_enabled } { + if { $::env(RUN_MAGIC_DRC) } { + run_magic_drc + } + if {$::env(RUN_KLAYOUT_DRC)} { + run_klayout_drc + } + } +} + +proc run_antenna_check_step {{ antenna_check_enabled 1 }} { + if { ! [ info exists ::env(ANTENNA_CHECK_CURRENT_DEF) ] } { + set ::env(ANTENNA_CHECK_CURRENT_DEF) $::env(CURRENT_DEF) + } else { + set ::env(CURRENT_DEF) $::env(ANTENNA_CHECK_CURRENT_DEF) + } + if { $antenna_check_enabled } { + run_antenna_check + } +} + +proc run_erc_step {args} { + if { $::env(RUN_CVC) } { + run_erc + } +} + +proc run_eco_step {args} { + if { $::env(ECO_ENABLE) == 1 } { + run_eco_flow + } +} + +proc run_magic_step {args} { + if {$::env(RUN_MAGIC)} { + run_magic + } +} + +proc run_klayout_step {args} { + if {$::env(RUN_KLAYOUT)} { + run_klayout + } + if {$::env(RUN_KLAYOUT_XOR)} { + run_klayout_gds_xor + } +} + +proc run_post_run_hooks {} { + if { [file exists $::env(DESIGN_DIR)/hooks/post_run.py]} { + puts_info "Running post run hook" + set result [exec $::env(OPENROAD_BIN) -exit -no_init -python $::env(DESIGN_DIR)/hooks/post_run.py] + puts_info "$result" + } else { + puts_info "hooks/post_run.py not found, skipping" + } +} + +proc run_floorplan {args} { + # |----------------------------------------------------| + # |---------------- 2. FLOORPLAN ------------------| + # |----------------------------------------------------| + # + # intial fp + init_floorplan + + # check for deprecated io variables + if { [info exists ::env(FP_IO_HMETAL)]} { + set ::env(FP_IO_HLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_HMETAL) - 1}]] + puts_warn "You're using FP_IO_HMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_HLAYER) {$::env(FP_IO_HLAYER)}" + } + + if { [info exists ::env(FP_IO_VMETAL)]} { + set ::env(FP_IO_VLAYER) [lindex $::env(TECH_METAL_LAYERS) [expr {$::env(FP_IO_VMETAL) - 1}]] + puts_warn "You're using FP_IO_VMETAL in your configuration, which is a deprecated variable that will be removed in the future." + puts_warn "We recommend you update your configuration as follows:" + puts_warn "\tset ::env(FP_IO_VLAYER) {$::env(FP_IO_VLAYER)}" + } + + + # place io + if { [info exists ::env(FP_PIN_ORDER_CFG)] } { + place_io_ol + } else { + if { [info exists ::env(FP_CONTEXT_DEF)] && [info exists ::env(FP_CONTEXT_LEF)] } { + place_io + global_placement_or + place_contextualized_io \ + -lef $::env(FP_CONTEXT_LEF) \ + -def $::env(FP_CONTEXT_DEF) + } else { + place_io + } + } + + apply_def_template + + #if { [info exist ::env(EXTRA_LEFS)] } { + if { [info exist ::env(MACRO_PLACEMENT_CFG)] } { + file copy -force $::env(MACRO_PLACEMENT_CFG) $::env(placement_tmpfiles)/macro_placement.cfg + manual_macro_placement -f + } else { + # global_placement_or + # basic_macro_placement + } + #} + + if { $::env(RUN_TAP_DECAP_INSERTION) } { + tap_decap_or + } + + scrot_klayout -layout $::env(CURRENT_DEF) -log $::env(floorplan_logs)/screenshot.log + + run_power_grid_generation +} + + + +proc run_flow {args} { + set options { + {-design optional} + {-from optional} + {-to optional} + {-save_path optional} + {-override_env optional} + } + set flags {-save -run_hooks -no_lvs -no_drc -no_antennacheck -gui} + parse_key_args "run_non_interactive_mode" args arg_values $options flags_map $flags -no_consume + + prep {*}$args + # signal trap SIGINT save_state; + + if { [info exists flags_map(-gui)] } { + or_gui + return + } + if { [info exists arg_values(-override_env)] } { + load_overrides $arg_values(-override_env) + } + + set LVS_ENABLED 1 + set DRC_ENABLED 1 + + set ANTENNACHECK_ENABLED [expr ![info exists flags_map(-no_antennacheck)] ] + + set steps [dict create \ + "synthesis" "run_synthesis" \ + "floorplan" "run_floorplan" \ + "placement" "run_placement_step" \ + "cts" "run_cts_step" \ + "routing" "run_routing_step" \ + "parasitics_sta" "run_parasitics_sta_step" \ + "eco" "run_eco_step" \ + "diode_insertion" "run_diode_insertion_2_5_step" \ + "irdrop" "run_irdrop_report_step" \ + "gds_magic" "run_magic_step" \ + "gds_klayout" "run_klayout_step" \ + "lvs" "run_lvs_step $LVS_ENABLED " \ + "drc" "run_drc_step $DRC_ENABLED " \ + "antenna_check" "run_antenna_check_step $ANTENNACHECK_ENABLED " \ + "cvc" "run_lef_cvc" + ] + + if { [info exists arg_values(-from) ]} { + puts_info "Starting flow at $arg_values(-from)..." + set ::env(CURRENT_STEP) $arg_values(-from) + } elseif { [info exists ::env(CURRENT_STEP) ] } { + puts_info "Resuming flow from $::env(CURRENT_STEP)..." + } else { + set ::env(CURRENT_STEP) "synthesis" + } + + set_if_unset arg_values(-from) $::env(CURRENT_STEP) + set_if_unset arg_values(-to) "cvc" + + set exe 0; + dict for {step_name step_exe} $steps { + if { [ string equal $arg_values(-from) $step_name ] } { + set exe 1; + } + + if { $exe } { + # For when it fails + set ::env(CURRENT_STEP) $step_name + [lindex $step_exe 0] [lindex $step_exe 1] ; + } + + if { [ string equal $arg_values(-to) $step_name ] } { + set exe 0: + break; + } + + } + + # for when it resumes + set steps_as_list [dict keys $steps] + set next_idx [expr [lsearch $steps_as_list $::env(CURRENT_STEP)] + 1] + set ::env(CURRENT_STEP) [lindex $steps_as_list $next_idx] + + # Saves to <RUN_DIR>/results/final + save_final_views + + # Saves to design directory or custom + if { [info exists flags_map(-save) ] } { + if { ! [info exists arg_values(-save_path)] } { + set arg_values(-save_path) $::env(DESIGN_DIR) + } + save_final_views\ + -save_path $arg_values(-save_path)\ + -tag $::env(RUN_TAG) + } + calc_total_runtime + save_state + generate_final_summary_report + + check_timing_violations + + if { [info exists arg_values(-save_path)]\ + && $arg_values(-save_path) != "" } { + set ::env(HOOK_OUTPUT_PATH) "[file normalize $arg_values(-save_path)]" + } else { + set ::env(HOOK_OUTPUT_PATH) $::env(RESULTS_DIR)/final + } + + if {[info exists flags_map(-run_hooks)]} { + run_post_run_hooks + } + + puts_success "Flow complete." + + show_warnings "Note that the following warnings have been generated:" +} + +run_flow {*}$argv
diff --git a/openlane/bus_rep_west/macro.cfg b/openlane/bus_rep_west/macro.cfg new file mode 100644 index 0000000..5bd9eb4 --- /dev/null +++ b/openlane/bus_rep_west/macro.cfg
@@ -0,0 +1,42 @@ +u_rp\[0\].u_buf 7.82 10.88 FN +u_rp\[1\].u_buf 85.1 10.88 FN +u_rp\[2\].u_buf 162.38 10.88 FN +u_rp\[3\].u_buf 239.66 10.88 FN +u_rp\[4\].u_buf 316.94 10.88 FN +u_rp\[5\].u_buf 394.22 10.88 FN +u_rp\[6\].u_buf 471.5 10.88 FN +u_rp\[7\].u_buf 548.78 10.88 FN +u_rp\[8\].u_buf 626.06 10.88 FN +u_rp\[9\].u_buf 703.34 10.88 FN +u_rp\[10\].u_buf 780.62 10.88 FN +u_rp\[11\].u_buf 857.9 10.88 FN +u_rp\[12\].u_buf 935.18 10.88 FN +u_rp\[13\].u_buf 1012.46 10.88 FN +u_rp\[14\].u_buf 1089.74 10.88 FN +u_rp\[15\].u_buf 1167.02 10.88 FN +u_rp\[16\].u_buf 1244.3 10.88 FN +u_rp\[17\].u_buf 1321.58 10.88 FN +u_rp\[18\].u_buf 1398.86 10.88 FN +u_rp\[19\].u_buf 1476.14 10.88 FN +u_rp\[20\].u_buf 1553.42 10.88 FN +u_rp\[21\].u_buf 1630.7 10.88 FN +u_rp\[22\].u_buf 1707.98 10.88 FN +u_rp\[23\].u_buf 1785.26 10.88 FN +u_rp\[24\].u_buf 1862.54 10.88 FN +u_rp\[25\].u_buf 1939.82 10.88 FN +u_rp\[26\].u_buf 2017.1 10.88 FN +u_rp\[27\].u_buf 2094.38 10.88 FN +u_rp\[28\].u_buf 2171.66 10.88 FN +u_rp\[29\].u_buf 2248.94 10.88 FN +u_rp\[30\].u_buf 2326.22 10.88 FN +u_rp\[31\].u_buf 2403.5 10.88 FN +u_rp\[32\].u_buf 2480.78 10.88 FN +u_rp\[33\].u_buf 2558.06 10.88 FN +u_rp\[34\].u_buf 2635.34 10.88 FN +u_rp\[35\].u_buf 2712.62 10.88 FN +u_rp\[36\].u_buf 2789.9 10.88 FN +u_rp\[37\].u_buf 2867.18 10.88 FN +u_rp\[38\].u_buf 2944.46 10.88 FN +u_rp\[39\].u_buf 3021.74 10.88 FN +u_rp\[40\].u_buf 3099.02 10.88 FN +u_rp\[41\].u_buf 3176.3 10.88 FN
diff --git a/openlane/bus_rep_west/pdn.tcl b/openlane/bus_rep_west/pdn.tcl new file mode 100644 index 0000000..1fe689b --- /dev/null +++ b/openlane/bus_rep_west/pdn.tcl
@@ -0,0 +1,49 @@ +# SPDX-FileCopyrightText: 2020 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# SPDX-License-Identifier: Apache-2.0 + +# Power nets +set ::power_nets $::env(VDD_PIN) +set ::ground_nets $::env(GND_PIN) + +set ::macro_blockage_layer_list "li1 met1 met2 met3 met4 met5" + +pdngen::specify_grid stdcell { + name grid + rails { + met1 {width 0.48 pitch $::env(PLACE_SITE_HEIGHT) offset 0} + } + straps { + met4 {width 1.6 pitch $::env(FP_PDN_VPITCH) offset $::env(FP_PDN_VOFFSET)} + met5 {width 1.6 pitch $::env(FP_PDN_HPITCH) offset $::env(FP_PDN_HOFFSET)} + } + connect {{met1 met4} {met4 met5}} +} + +pdngen::specify_grid macro { + power_pins "VPWR" + ground_pins "VGND" + blockages "li1 met1 met2 met3 met4" + straps { + } + connect {{met4_PIN_ver met5}} +} + +set ::halo 5 + +# POWER or GROUND #Std. cell rails starting with power or ground rails at the bottom of the core area +set ::rails_start_with "POWER" ; + +# POWER or GROUND #Upper metal stripes starting with power or ground rails at the left/bottom of the core area +set ::stripes_start_with "POWER" ;
diff --git a/openlane/bus_rep_west/pin_order.cfg b/openlane/bus_rep_west/pin_order.cfg new file mode 100644 index 0000000..74e6240 --- /dev/null +++ b/openlane/bus_rep_west/pin_order.cfg
@@ -0,0 +1,91 @@ +#BUS_SORT + +#MANUAL_PLACE + +#S +ch_in\[0\] 0 0 225 +ch_out\[1\] +ch_out\[2\] +ch_in\[3\] +ch_out\[4\] +ch_out\[5\] +ch_in\[6\] +ch_out\[7\] +ch_out\[8\] +ch_in\[9\] +ch_out\[10\] +ch_out\[11\] +ch_in\[12\] +ch_out\[13\] +ch_out\[14\] +ch_in\[15\] +ch_out\[16\] +ch_out\[17\] +ch_in\[18\] +ch_out\[19\] +ch_out\[20\] +ch_in\[21\] +ch_out\[22\] +ch_out\[23\] +ch_in\[24\] +ch_out\[25\] +ch_out\[26\] +ch_in\[27\] +ch_out\[28\] +ch_out\[29\] +ch_in\[30\] +ch_out\[31\] +ch_out\[32\] +ch_in\[33\] +ch_out\[34\] +ch_out\[35\] +ch_in\[36\] +ch_out\[37\] +ch_out\[38\] +ch_in\[39\] +ch_out\[40\] +ch_out\[41\] + +#N +ch_out\[0\] 100 0 4 +ch_in\[1\] +ch_in\[2\] +ch_out\[3\] +ch_in\[4\] +ch_in\[5\] +ch_out\[6\] +ch_in\[7\] +ch_in\[8\] +ch_out\[9\] +ch_in\[10\] +ch_in\[11\] +ch_out\[12\] +ch_in\[13\] +ch_in\[14\] +ch_out\[15\] +ch_in\[16\] +ch_in\[17\] +ch_out\[18\] +ch_in\[19\] +ch_in\[20\] +ch_out\[21\] +ch_in\[22\] +ch_in\[23\] +ch_out\[24\] +ch_in\[25\] +ch_in\[26\] +ch_out\[27\] +ch_in\[28\] +ch_in\[29\] +ch_out\[30\] +ch_in\[31\] +ch_in\[32\] +ch_out\[33\] +ch_in\[34\] +ch_in\[35\] +ch_out\[36\] +ch_in\[37\] +ch_in\[38\] +ch_out\[39\] +ch_in\[40\] +ch_in\[41\]
diff --git a/openlane/mac_wrapper/base.sdc b/openlane/mac_wrapper/base.sdc index 5fa6c01..25354a8 100644 --- a/openlane/mac_wrapper/base.sdc +++ b/openlane/mac_wrapper/base.sdc
@@ -47,13 +47,13 @@ # mdio Clock Domain ######################################## set_input_delay -max 6.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_in}] -set_input_delay -min 1.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_in}] +set_input_delay -min -2.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_in}] set_output_delay -max 6.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out}] set_output_delay -max 6.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out_en}] -set_output_delay -min 1.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out}] -set_output_delay -min 1.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out_en}] +set_output_delay -min -2.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out}] +set_output_delay -min -2.0000 -clock [get_clocks {mdio_clk}] -add_delay [get_ports {mdio_out_en}] ######################################## # phy_rx_clk Clock Domain @@ -63,10 +63,10 @@ set_input_delay -max 6.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rx_er}] set_input_delay -max 6.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rxd[*]}] -set_input_delay -min 1.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_crs}] -set_input_delay -min 1.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rx_dv}] -set_input_delay -min 1.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rx_er}] -set_input_delay -min 1.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rxd[*]}] +set_input_delay -min -2.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_crs}] +set_input_delay -min -2.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rx_dv}] +set_input_delay -min -2.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rx_er}] +set_input_delay -min -2.0000 -clock [get_clocks {phy_rx_clk}] -add_delay [get_ports {phy_rxd[*]}] ######################################## @@ -77,9 +77,9 @@ set_output_delay -max 6.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_tx_er}] set_output_delay -max 6.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_txd[*]}] -set_output_delay -min 1.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_tx_en}] -set_output_delay -min 1.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_tx_er}] -set_output_delay -min 1.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_txd[*]}] +set_output_delay -min -2.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_tx_en}] +set_output_delay -min -2.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_tx_er}] +set_output_delay -min -2.0000 -clock [get_clocks {phy_tx_clk}] -add_delay [get_ports {phy_txd[*]}] ######################################## # APP Clock Domain
diff --git a/openlane/pinmux_top/base.sdc b/openlane/pinmux_top/base.sdc index 8a5a360..4b58878 100644 --- a/openlane/pinmux_top/base.sdc +++ b/openlane/pinmux_top/base.sdc
@@ -6,15 +6,18 @@ ############################################################################### # Timing Constraints ############################################################################### -create_clock -name mclk -period 10.0000 [get_ports {mclk}] -set_clock_uncertainty -rise_from [get_clocks {mclk}] -rise_to [get_clocks {mclk}] -hold 0.2500 -set_clock_uncertainty -rise_from [get_clocks {mclk}] -rise_to [get_clocks {mclk}] -setup 0.2500 -set_clock_uncertainty -rise_from [get_clocks {mclk}] -fall_to [get_clocks {mclk}] -hold 0.2500 -set_clock_uncertainty -rise_from [get_clocks {mclk}] -fall_to [get_clocks {mclk}] -setup 0.2500 -set_clock_uncertainty -fall_from [get_clocks {mclk}] -rise_to [get_clocks {mclk}] -hold 0.2500 -set_clock_uncertainty -fall_from [get_clocks {mclk}] -rise_to [get_clocks {mclk}] -setup 0.2500 -set_clock_uncertainty -fall_from [get_clocks {mclk}] -fall_to [get_clocks {mclk}] -hold 0.2500 -set_clock_uncertainty -fall_from [get_clocks {mclk}] -fall_to [get_clocks {mclk}] -setup 0.2500 +create_clock -name mclk -period 10.0000 [get_ports {mclk}] +create_clock -name mdio_refclk -period 10.0000 [get_pins {u_clkgen.u_mdio_ref_mux.u_mux_l10/X}] + +set_clock_uncertainty -setup 0.2500 [all_clocks] +set_clock_uncertainty -hold 0.2500 [all_clocks] + +set_clock_groups \ + -name clock_group \ + -logically_exclusive \ + -group [get_clocks {mclk}]\ + -group [get_clocks {mdio_refclk}] + set ::env(SYNTH_TIMING_DERATE) 0.05 puts "\[INFO\]: Setting timing derate to: [expr {$::env(SYNTH_TIMING_DERATE) * 10}] %" @@ -43,55 +46,15 @@ set_output_delay -min 1.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {reg_rdata[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_done[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_correct[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_done[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt0[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt1[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt2[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt3[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt4[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt5[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt6[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt7[*]}] -set_input_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_sdo[*]}] - -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_done[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_correct[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_done[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt0[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt1[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt2[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt3[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt4[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt5[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt6[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_error_cnt7[*]}] -set_input_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_sdo[*]}] - - -set_output_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_en}] -set_output_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_run[*]}] -set_output_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_load[*]}] -set_output_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_sdi[*]}] -set_output_delay -max 6.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_shift[*]}] - -set_output_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_en}] -set_output_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_run[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_load[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_sdi[*]}] -set_output_delay -min 2.0000 -clock [get_clocks {mclk}] -add_delay [get_ports {bist_shift[*]}] # Set max delay for clock skew set_max_delay 3.5 -from [get_ports {wbd_clk_int}] -set_max_delay 2.5 -from wbd_clk_int -to wbd_clk_glbl +set_max_delay 2.5 -from wbd_clk_int -to wbd_clk_skew -set_case_analysis 0 [get_ports {cfg_cska_glbl[0]}] -set_case_analysis 0 [get_ports {cfg_cska_glbl[1]}] -set_case_analysis 0 [get_ports {cfg_cska_glbl[2]}] -set_case_analysis 0 [get_ports {cfg_cska_glbl[3]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[0]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[1]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[2]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[3]}] set_case_analysis 0 [get_ports {scan_en}] set_case_analysis 0 [get_ports {scan_mode}]
diff --git a/openlane/pinmux_top/config.tcl b/openlane/pinmux_top/config.tcl index 5a07219..4a4ef2c 100755 --- a/openlane/pinmux_top/config.tcl +++ b/openlane/pinmux_top/config.tcl
@@ -26,7 +26,7 @@ # Timing configuration set ::env(CLOCK_PERIOD) "10" -set ::env(CLOCK_PORT) "mclk" +set ::env(CLOCK_PORT) "mclk u_clkgen.u_mdio_ref_mux.u_mux_l10.X" set ::env(SYNTH_MAX_FANOUT) 4 set ::env(SYNTH_BUFFERING) {0} @@ -42,13 +42,14 @@ # Local sources + no2usb sources set ::env(VERILOG_FILES) "\ - $::env(DESIGN_DIR)/../../verilog/rtl/lib/clk_skew_adjust.gv \ - $::env(DESIGN_DIR)/../../verilog/rtl/lib/ctech_cells.sv \ + $::env(DESIGN_DIR)/../../verilog/rtl/lib/clk_skew_adjust.gv \ + $::env(DESIGN_DIR)/../../verilog/rtl/lib/ctech_cells.sv \ $::env(DESIGN_DIR)/../../verilog/rtl/lib/registers.v \ $::env(DESIGN_DIR)/../../verilog/rtl/lib/clk_ctl.v \ $::env(DESIGN_DIR)/../../verilog/rtl/glbl/src/glbl_cfg.sv \ - $::env(DESIGN_DIR)/../../verilog/rtl/pinmux/src/pinmux_top.sv \ + $::env(DESIGN_DIR)/../../verilog/rtl/pinmux/src/pinmux_top.sv \ $::env(DESIGN_DIR)/../../verilog/rtl/pinmux/src/pinmux.sv \ + $::env(DESIGN_DIR)/../../verilog/rtl/pinmux/src/clkgen.sv \ " set ::env(SYNTH_READ_BLACKBOX_LIB) 1
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl index 1f284fa..477d363 100755 --- a/openlane/user_project_wrapper/config.tcl +++ b/openlane/user_project_wrapper/config.tcl
@@ -71,6 +71,10 @@ $::env(DESIGN_DIR)/../../verilog/gl/pinmux_top.v\ $::env(DESIGN_DIR)/../../verilog/gl/mbist_wrapper.v\ $::env(DESIGN_DIR)/../../verilog/gl/mac_wrapper.v\ + $::env(DESIGN_DIR)/../../verilog/gl/bus_rep_south.v \ + $::env(DESIGN_DIR)/../../verilog/gl/bus_rep_north.v \ + $::env(DESIGN_DIR)/../../verilog/gl/bus_rep_east.v \ + $::env(DESIGN_DIR)/../../verilog/gl/bus_rep_west.v \ " set ::env(EXTRA_LEFS) "\ @@ -80,7 +84,12 @@ $::env(DESIGN_DIR)/../../lef/mbist_wrapper.lef \ $::env(DESIGN_DIR)/../../lef/mac_wrapper.lef \ $::env(DESIGN_DIR)/../../lef/wb_interconnect.lef \ - $::env(DESIGN_DIR)/../../lef/wb_host.lef" + $::env(DESIGN_DIR)/../../lef/wb_host.lef\ + $::env(DESIGN_DIR)/../../lef/bus_rep_south.lef \ + $::env(DESIGN_DIR)/../../lef/bus_rep_north.lef \ + $::env(DESIGN_DIR)/../../lef/bus_rep_east.lef \ + $::env(DESIGN_DIR)/../../lef/bus_rep_west.lef \ + " set ::env(EXTRA_GDS_FILES) "\ $::env(PDK_ROOT)/$::env(PDK)/libs.ref/sky130_sram_macros/gds/sky130_sram_2kbyte_1rw1r_32x512_8.gds \ @@ -89,7 +98,12 @@ $::env(DESIGN_DIR)/../../gds/mbist_wrapper.gds \ $::env(DESIGN_DIR)/../../gds/mac_wrapper.gds \ $::env(DESIGN_DIR)/../../gds/wb_interconnect.gds \ - $::env(DESIGN_DIR)/../../gds/wb_host.gds" + $::env(DESIGN_DIR)/../../gds/wb_host.gds \ + $::env(DESIGN_DIR)/../../gds/bus_rep_south.gds \ + $::env(DESIGN_DIR)/../../gds/bus_rep_north.gds \ + $::env(DESIGN_DIR)/../../gds/bus_rep_east.gds \ + $::env(DESIGN_DIR)/../../gds/bus_rep_west.gds \ + " set ::env(SYNTH_DEFINES) [list SYNTHESIS ] @@ -176,7 +190,11 @@ u_sram4_2kb vccd1 vssd1 vccd1 vssd1,\ u_sram5_2kb vccd1 vssd1 vccd1 vssd1,\ u_sram6_2kb vccd1 vssd1 vccd1 vssd1,\ - u_sram7_2kb vccd1 vssd1 vccd1 vssd1\ + u_sram7_2kb vccd1 vssd1 vccd1 vssd1,\ + u_rp_south vccd1 vssd1 vccd1 vssd1,\ + u_rp_north vccd1 vssd1 vccd1 vssd1,\ + u_rp_east vccd1 vssd1 vccd1 vssd1,\ + u_rp_west vccd1 vssd1 vccd1 vssd1\ "
diff --git a/openlane/user_project_wrapper/macro.cfg b/openlane/user_project_wrapper/macro.cfg index 2f3f5be..a8111ff 100644 --- a/openlane/user_project_wrapper/macro.cfg +++ b/openlane/user_project_wrapper/macro.cfg
@@ -1,18 +1,23 @@ -u_wb_host 1800 325 N -u_pinmux 2100 1400 N -u_mac_wrap 2100 700 N +u_wb_host 1800 425 N +u_pinmux 2100 1500 N +u_mac_wrap 2100 800 N -u_intercon 1800 700 N +u_intercon 1800 800 N -u_mbist0 150 0700 N -u_sram0_2kb 150 0200 FS -u_sram1_2kb 950 0200 FS -u_sram2_2kb 150 1000 N -u_sram3_2kb 950 1000 N +u_mbist0 150 0800 N +u_sram0_2kb 150 0300 FS +u_sram1_2kb 975 0300 FS +u_sram2_2kb 150 1100 N +u_sram3_2kb 975 1100 N -u_mbist1 150 2000 N -u_sram4_2kb 150 1500 FS -u_sram5_2kb 950 1500 FS -u_sram6_2kb 150 2300 N -u_sram7_2kb 950 2300 N +u_mbist1 150 2100 N +u_sram4_2kb 150 1600 FS +u_sram5_2kb 975 1600 FS +u_sram6_2kb 150 2400 N +u_sram7_2kb 975 2400 N + +u_rp_south 100 20 N +u_rp_north 100 3400 N +u_rp_east 2820 50 E +u_rp_west 50 100 E
diff --git a/openlane/user_project_wrapper/pdn_cfg.tcl b/openlane/user_project_wrapper/pdn_cfg.tcl index 1bf35f4..58899e3 100644 --- a/openlane/user_project_wrapper/pdn_cfg.tcl +++ b/openlane/user_project_wrapper/pdn_cfg.tcl
@@ -157,12 +157,39 @@ define_pdn_grid \ -macro \ - -default \ - -name macro \ + -name macro_1 \ + -instances "u_wb_host u_pinmux u_mac_wrap u_intercon u_mbist0 u_sram0_2kb u_sram1_2kb u_sram2_2kb u_sram3_2kb u_mbist1 u_sram4_2kb u_sram5_2kb u_sram6_2kb u_sram7_2kb" \ -starts_with POWER \ -halo "$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)" add_pdn_connect \ - -grid macro \ + -grid macro_1 \ -layers "$::env(FP_PDN_LOWER_LAYER) $::env(FP_PDN_UPPER_LAYER)" +################################## +# u_rp_North & u_rp_south Power Hook Up +# Power connect met-3 to met-4 +################################## + +define_pdn_grid \ + -macro \ + -name macro_2 \ + -instances "u_rp_south u_rp_north" \ + -starts_with POWER \ + -halo "$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)" + +add_pdn_connect -grid macro_2 -layers "met3 met4" + +################################## +# u_rp_east Power Hook Up +# Power connect met-3 to met-5 +################################## + +define_pdn_grid \ + -macro \ + -name macro_3 \ + -instances "u_rp_east u_rp_west" \ + -starts_with POWER \ + -halo "$::env(FP_PDN_HORIZONTAL_HALO) $::env(FP_PDN_VERTICAL_HALO)" + +add_pdn_connect -grid macro_3 -layers "met3 met5"
diff --git a/sdc/bus_rep_east.sdc b/sdc/bus_rep_east.sdc new file mode 100644 index 0000000..ce3f697 --- /dev/null +++ b/sdc/bus_rep_east.sdc
@@ -0,0 +1,199 @@ +############################################################################### +# Created by write_sdc +# Sun Dec 25 16:46:22 2022 +############################################################################### +current_design bus_rep_east +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name __VIRTUAL_CLK__ -period 10.0000 +set_clock_uncertainty 0.2500 __VIRTUAL_CLK__ +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[0]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[10]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[11]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[12]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[13]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[14]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[15]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[16]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[17]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[18]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[19]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[1]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[20]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[21]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[22]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[23]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[24]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[25]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[26]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[27]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[28]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[29]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[2]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[30]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[31]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[32]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[33]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[34]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[35]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[36]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[37]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[38]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[39]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[3]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[40]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[41]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[42]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[43]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[44]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[4]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[5]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[6]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[7]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[8]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[9]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[0]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[10]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[11]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[12]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[13]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[14]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[15]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[16]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[17]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[18]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[19]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[1]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[20]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[21]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[22]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[23]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[24]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[25]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[26]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[27]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[28]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[29]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[2]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[30]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[31]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[32]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[33]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[34]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[35]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[36]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[37]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[38]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[39]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[3]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[40]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[41]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[42]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[43]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[44]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[4]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[5]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[6]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[7]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[8]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[9]}] +############################################################################### +# Environment +############################################################################### +set_load -pin_load 0.0334 [get_ports {ch_out[44]}] +set_load -pin_load 0.0334 [get_ports {ch_out[43]}] +set_load -pin_load 0.0334 [get_ports {ch_out[42]}] +set_load -pin_load 0.0334 [get_ports {ch_out[41]}] +set_load -pin_load 0.0334 [get_ports {ch_out[40]}] +set_load -pin_load 0.0334 [get_ports {ch_out[39]}] +set_load -pin_load 0.0334 [get_ports {ch_out[38]}] +set_load -pin_load 0.0334 [get_ports {ch_out[37]}] +set_load -pin_load 0.0334 [get_ports {ch_out[36]}] +set_load -pin_load 0.0334 [get_ports {ch_out[35]}] +set_load -pin_load 0.0334 [get_ports {ch_out[34]}] +set_load -pin_load 0.0334 [get_ports {ch_out[33]}] +set_load -pin_load 0.0334 [get_ports {ch_out[32]}] +set_load -pin_load 0.0334 [get_ports {ch_out[31]}] +set_load -pin_load 0.0334 [get_ports {ch_out[30]}] +set_load -pin_load 0.0334 [get_ports {ch_out[29]}] +set_load -pin_load 0.0334 [get_ports {ch_out[28]}] +set_load -pin_load 0.0334 [get_ports {ch_out[27]}] +set_load -pin_load 0.0334 [get_ports {ch_out[26]}] +set_load -pin_load 0.0334 [get_ports {ch_out[25]}] +set_load -pin_load 0.0334 [get_ports {ch_out[24]}] +set_load -pin_load 0.0334 [get_ports {ch_out[23]}] +set_load -pin_load 0.0334 [get_ports {ch_out[22]}] +set_load -pin_load 0.0334 [get_ports {ch_out[21]}] +set_load -pin_load 0.0334 [get_ports {ch_out[20]}] +set_load -pin_load 0.0334 [get_ports {ch_out[19]}] +set_load -pin_load 0.0334 [get_ports {ch_out[18]}] +set_load -pin_load 0.0334 [get_ports {ch_out[17]}] +set_load -pin_load 0.0334 [get_ports {ch_out[16]}] +set_load -pin_load 0.0334 [get_ports {ch_out[15]}] +set_load -pin_load 0.0334 [get_ports {ch_out[14]}] +set_load -pin_load 0.0334 [get_ports {ch_out[13]}] +set_load -pin_load 0.0334 [get_ports {ch_out[12]}] +set_load -pin_load 0.0334 [get_ports {ch_out[11]}] +set_load -pin_load 0.0334 [get_ports {ch_out[10]}] +set_load -pin_load 0.0334 [get_ports {ch_out[9]}] +set_load -pin_load 0.0334 [get_ports {ch_out[8]}] +set_load -pin_load 0.0334 [get_ports {ch_out[7]}] +set_load -pin_load 0.0334 [get_ports {ch_out[6]}] +set_load -pin_load 0.0334 [get_ports {ch_out[5]}] +set_load -pin_load 0.0334 [get_ports {ch_out[4]}] +set_load -pin_load 0.0334 [get_ports {ch_out[3]}] +set_load -pin_load 0.0334 [get_ports {ch_out[2]}] +set_load -pin_load 0.0334 [get_ports {ch_out[1]}] +set_load -pin_load 0.0334 [get_ports {ch_out[0]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[44]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[43]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[42]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[41]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[40]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[39]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[38]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[37]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[36]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[35]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[34]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[33]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[32]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[31]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[30]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[29]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[28]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[27]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[26]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[25]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[24]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[23]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[22]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[21]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[20]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[19]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[18]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[17]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[16]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[15]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[14]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[13]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[12]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[11]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[10]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[9]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[8]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[7]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[6]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[5]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[4]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[3]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[2]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[1]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[0]}] +set_timing_derate -early 0.9500 +set_timing_derate -late 1.0500 +############################################################################### +# Design Rules +############################################################################### +set_max_fanout 4.0000 [current_design]
diff --git a/sdc/bus_rep_north.sdc b/sdc/bus_rep_north.sdc new file mode 100644 index 0000000..6d1c336 --- /dev/null +++ b/sdc/bus_rep_north.sdc
@@ -0,0 +1,295 @@ +############################################################################### +# Created by write_sdc +# Sun Dec 25 14:44:19 2022 +############################################################################### +current_design bus_rep_north +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name __VIRTUAL_CLK__ -period 10.0000 +set_clock_uncertainty 0.2500 __VIRTUAL_CLK__ +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[0]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[10]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[11]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[12]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[13]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[14]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[15]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[16]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[17]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[18]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[19]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[1]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[20]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[21]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[22]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[23]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[24]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[25]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[26]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[27]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[28]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[29]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[2]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[30]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[31]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[32]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[33]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[34]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[35]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[36]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[37]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[38]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[39]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[3]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[40]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[41]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[4]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[5]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[6]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[7]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[8]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_in[9]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[0]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[10]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[11]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[12]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[13]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[14]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[15]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[16]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[17]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[18]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[19]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[1]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[20]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[21]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[22]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[23]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[24]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[25]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[26]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[2]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[3]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[4]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[5]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[6]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[7]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[8]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[9]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[0]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[10]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[11]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[12]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[13]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[14]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[15]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[16]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[17]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[18]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[19]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[1]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[20]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[21]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[22]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[23]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[24]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[25]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[26]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[27]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[28]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[29]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[2]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[30]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[31]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[32]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[33]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[34]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[35]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[36]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[37]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[38]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[39]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[3]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[40]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[41]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[4]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[5]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[6]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[7]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[8]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {buf_out[9]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[0]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[10]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[11]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[12]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[13]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[14]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[15]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[16]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[17]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[18]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[19]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[1]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[20]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[21]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[22]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[23]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[24]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[25]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[26]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[2]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[3]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[4]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[5]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[6]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[7]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[8]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[9]}] +############################################################################### +# Environment +############################################################################### +set_load -pin_load 0.0334 [get_ports {buf_out[41]}] +set_load -pin_load 0.0334 [get_ports {buf_out[40]}] +set_load -pin_load 0.0334 [get_ports {buf_out[39]}] +set_load -pin_load 0.0334 [get_ports {buf_out[38]}] +set_load -pin_load 0.0334 [get_ports {buf_out[37]}] +set_load -pin_load 0.0334 [get_ports {buf_out[36]}] +set_load -pin_load 0.0334 [get_ports {buf_out[35]}] +set_load -pin_load 0.0334 [get_ports {buf_out[34]}] +set_load -pin_load 0.0334 [get_ports {buf_out[33]}] +set_load -pin_load 0.0334 [get_ports {buf_out[32]}] +set_load -pin_load 0.0334 [get_ports {buf_out[31]}] +set_load -pin_load 0.0334 [get_ports {buf_out[30]}] +set_load -pin_load 0.0334 [get_ports {buf_out[29]}] +set_load -pin_load 0.0334 [get_ports {buf_out[28]}] +set_load -pin_load 0.0334 [get_ports {buf_out[27]}] +set_load -pin_load 0.0334 [get_ports {buf_out[26]}] +set_load -pin_load 0.0334 [get_ports {buf_out[25]}] +set_load -pin_load 0.0334 [get_ports {buf_out[24]}] +set_load -pin_load 0.0334 [get_ports {buf_out[23]}] +set_load -pin_load 0.0334 [get_ports {buf_out[22]}] +set_load -pin_load 0.0334 [get_ports {buf_out[21]}] +set_load -pin_load 0.0334 [get_ports {buf_out[20]}] +set_load -pin_load 0.0334 [get_ports {buf_out[19]}] +set_load -pin_load 0.0334 [get_ports {buf_out[18]}] +set_load -pin_load 0.0334 [get_ports {buf_out[17]}] +set_load -pin_load 0.0334 [get_ports {buf_out[16]}] +set_load -pin_load 0.0334 [get_ports {buf_out[15]}] +set_load -pin_load 0.0334 [get_ports {buf_out[14]}] +set_load -pin_load 0.0334 [get_ports {buf_out[13]}] +set_load -pin_load 0.0334 [get_ports {buf_out[12]}] +set_load -pin_load 0.0334 [get_ports {buf_out[11]}] +set_load -pin_load 0.0334 [get_ports {buf_out[10]}] +set_load -pin_load 0.0334 [get_ports {buf_out[9]}] +set_load -pin_load 0.0334 [get_ports {buf_out[8]}] +set_load -pin_load 0.0334 [get_ports {buf_out[7]}] +set_load -pin_load 0.0334 [get_ports {buf_out[6]}] +set_load -pin_load 0.0334 [get_ports {buf_out[5]}] +set_load -pin_load 0.0334 [get_ports {buf_out[4]}] +set_load -pin_load 0.0334 [get_ports {buf_out[3]}] +set_load -pin_load 0.0334 [get_ports {buf_out[2]}] +set_load -pin_load 0.0334 [get_ports {buf_out[1]}] +set_load -pin_load 0.0334 [get_ports {buf_out[0]}] +set_load -pin_load 0.0334 [get_ports {ch_out[26]}] +set_load -pin_load 0.0334 [get_ports {ch_out[25]}] +set_load -pin_load 0.0334 [get_ports {ch_out[24]}] +set_load -pin_load 0.0334 [get_ports {ch_out[23]}] +set_load -pin_load 0.0334 [get_ports {ch_out[22]}] +set_load -pin_load 0.0334 [get_ports {ch_out[21]}] +set_load -pin_load 0.0334 [get_ports {ch_out[20]}] +set_load -pin_load 0.0334 [get_ports {ch_out[19]}] +set_load -pin_load 0.0334 [get_ports {ch_out[18]}] +set_load -pin_load 0.0334 [get_ports {ch_out[17]}] +set_load -pin_load 0.0334 [get_ports {ch_out[16]}] +set_load -pin_load 0.0334 [get_ports {ch_out[15]}] +set_load -pin_load 0.0334 [get_ports {ch_out[14]}] +set_load -pin_load 0.0334 [get_ports {ch_out[13]}] +set_load -pin_load 0.0334 [get_ports {ch_out[12]}] +set_load -pin_load 0.0334 [get_ports {ch_out[11]}] +set_load -pin_load 0.0334 [get_ports {ch_out[10]}] +set_load -pin_load 0.0334 [get_ports {ch_out[9]}] +set_load -pin_load 0.0334 [get_ports {ch_out[8]}] +set_load -pin_load 0.0334 [get_ports {ch_out[7]}] +set_load -pin_load 0.0334 [get_ports {ch_out[6]}] +set_load -pin_load 0.0334 [get_ports {ch_out[5]}] +set_load -pin_load 0.0334 [get_ports {ch_out[4]}] +set_load -pin_load 0.0334 [get_ports {ch_out[3]}] +set_load -pin_load 0.0334 [get_ports {ch_out[2]}] +set_load -pin_load 0.0334 [get_ports {ch_out[1]}] +set_load -pin_load 0.0334 [get_ports {ch_out[0]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[41]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[40]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[39]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[38]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[37]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[36]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[35]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[34]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[33]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[32]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[31]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[30]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[29]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[28]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[27]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[26]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[25]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[24]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[23]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[22]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[21]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[20]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[19]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[18]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[17]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[16]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[15]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[14]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[13]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[12]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[11]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[10]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[9]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[8]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[7]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[6]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[5]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[4]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[3]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[2]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[1]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {buf_in[0]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[26]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[25]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[24]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[23]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[22]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[21]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[20]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[19]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[18]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[17]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[16]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[15]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[14]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[13]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[12]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[11]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[10]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[9]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[8]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[7]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[6]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[5]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[4]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[3]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[2]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[1]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[0]}] +set_timing_derate -early 0.9500 +set_timing_derate -late 1.0500 +############################################################################### +# Design Rules +############################################################################### +set_max_fanout 4.0000 [current_design]
diff --git a/sdc/bus_rep_south.sdc b/sdc/bus_rep_south.sdc new file mode 100644 index 0000000..79842c1 --- /dev/null +++ b/sdc/bus_rep_south.sdc
@@ -0,0 +1,1103 @@ +############################################################################### +# Created by write_sdc +# Sun Dec 25 16:44:53 2022 +############################################################################### +current_design bus_rep_south +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name __VIRTUAL_CLK__ -period 10.0000 +set_clock_uncertainty 0.2500 __VIRTUAL_CLK__ +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[0]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[100]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[101]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[102]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[103]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[104]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[105]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[106]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[107]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[108]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[109]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[10]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[110]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[111]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[112]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[113]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[114]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[115]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[116]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[117]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[118]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[119]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[11]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[120]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[121]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[122]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[123]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[124]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[125]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[126]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[127]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[128]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[129]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[12]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[130]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[131]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[132]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[133]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[134]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[135]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[136]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[137]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[138]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[139]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[13]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[140]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[141]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[142]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[143]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[144]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[145]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[146]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[147]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[148]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[149]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[14]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[150]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[151]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[152]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[153]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[154]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[155]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[156]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[157]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[158]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[159]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[15]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[160]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[161]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[162]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[163]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[164]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[165]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[166]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[167]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[168]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[169]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[16]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[170]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[171]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[172]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[173]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[174]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[175]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[176]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[177]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[178]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[179]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[17]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[180]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[181]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[182]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[183]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[184]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[185]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[186]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[187]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[188]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[189]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[18]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[190]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[191]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[192]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[193]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[194]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[195]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[196]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[197]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[198]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[199]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[19]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[1]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[200]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[201]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[202]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[203]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[204]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[205]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[206]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[207]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[208]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[209]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[20]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[210]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[211]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[212]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[213]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[214]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[215]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[216]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[217]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[218]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[219]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[21]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[220]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[221]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[222]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[223]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[224]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[225]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[226]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[227]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[228]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[229]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[22]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[230]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[231]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[232]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[233]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[234]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[235]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[236]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[237]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[238]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[239]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[23]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[240]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[241]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[242]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[243]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[244]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[245]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[246]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[247]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[248]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[249]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[24]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[250]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[251]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[252]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[253]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[254]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[255]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[256]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[257]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[258]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[259]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[25]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[260]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[261]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[262]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[263]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[264]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[265]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[266]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[267]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[268]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[269]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[26]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[270]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[27]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[28]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[29]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[2]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[30]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[31]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[32]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[33]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[34]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[35]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[36]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[37]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[38]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[39]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[3]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[40]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[41]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[42]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[43]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[44]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[45]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[46]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[47]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[48]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[49]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[4]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[50]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[51]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[52]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[53]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[54]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[55]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[56]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[57]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[58]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[59]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[5]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[60]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[61]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[62]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[63]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[64]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[65]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[66]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[67]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[68]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[69]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[6]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[70]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[71]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[72]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[73]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[74]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[75]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[76]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[77]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[78]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[79]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[7]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[80]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[81]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[82]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[83]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[84]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[85]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[86]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[87]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[88]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[89]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[8]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[90]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[91]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[92]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[93]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[94]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[95]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[96]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[97]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[98]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[99]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[9]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[0]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[100]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[101]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[102]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[103]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[104]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[105]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[106]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[107]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[108]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[109]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[10]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[110]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[111]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[112]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[113]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[114]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[115]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[116]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[117]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[118]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[119]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[11]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[120]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[121]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[122]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[123]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[124]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[125]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[126]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[127]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[128]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[129]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[12]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[130]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[131]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[132]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[133]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[134]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[135]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[136]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[137]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[138]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[139]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[13]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[140]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[141]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[142]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[143]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[144]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[145]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[146]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[147]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[148]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[149]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[14]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[150]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[151]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[152]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[153]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[154]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[155]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[156]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[157]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[158]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[159]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[15]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[160]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[161]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[162]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[163]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[164]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[165]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[166]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[167]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[168]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[169]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[16]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[170]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[171]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[172]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[173]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[174]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[175]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[176]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[177]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[178]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[179]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[17]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[180]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[181]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[182]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[183]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[184]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[185]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[186]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[187]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[188]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[189]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[18]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[190]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[191]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[192]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[193]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[194]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[195]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[196]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[197]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[198]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[199]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[19]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[1]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[200]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[201]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[202]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[203]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[204]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[205]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[206]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[207]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[208]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[209]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[20]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[210]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[211]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[212]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[213]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[214]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[215]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[216]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[217]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[218]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[219]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[21]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[220]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[221]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[222]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[223]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[224]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[225]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[226]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[227]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[228]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[229]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[22]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[230]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[231]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[232]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[233]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[234]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[235]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[236]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[237]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[238]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[239]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[23]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[240]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[241]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[242]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[243]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[244]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[245]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[246]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[247]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[248]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[249]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[24]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[250]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[251]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[252]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[253]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[254]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[255]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[256]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[257]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[258]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[259]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[25]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[260]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[261]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[262]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[263]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[264]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[265]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[266]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[267]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[268]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[269]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[26]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[270]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[27]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[28]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[29]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[2]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[30]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[31]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[32]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[33]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[34]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[35]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[36]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[37]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[38]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[39]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[3]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[40]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[41]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[42]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[43]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[44]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[45]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[46]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[47]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[48]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[49]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[4]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[50]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[51]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[52]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[53]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[54]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[55]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[56]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[57]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[58]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[59]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[5]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[60]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[61]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[62]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[63]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[64]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[65]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[66]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[67]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[68]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[69]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[6]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[70]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[71]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[72]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[73]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[74]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[75]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[76]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[77]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[78]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[79]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[7]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[80]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[81]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[82]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[83]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[84]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[85]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[86]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[87]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[88]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[89]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[8]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[90]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[91]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[92]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[93]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[94]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[95]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[96]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[97]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[98]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[99]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[9]}] +############################################################################### +# Environment +############################################################################### +set_load -pin_load 0.0334 [get_ports {ch_out[270]}] +set_load -pin_load 0.0334 [get_ports {ch_out[269]}] +set_load -pin_load 0.0334 [get_ports {ch_out[268]}] +set_load -pin_load 0.0334 [get_ports {ch_out[267]}] +set_load -pin_load 0.0334 [get_ports {ch_out[266]}] +set_load -pin_load 0.0334 [get_ports {ch_out[265]}] +set_load -pin_load 0.0334 [get_ports {ch_out[264]}] +set_load -pin_load 0.0334 [get_ports {ch_out[263]}] +set_load -pin_load 0.0334 [get_ports {ch_out[262]}] +set_load -pin_load 0.0334 [get_ports {ch_out[261]}] +set_load -pin_load 0.0334 [get_ports {ch_out[260]}] +set_load -pin_load 0.0334 [get_ports {ch_out[259]}] +set_load -pin_load 0.0334 [get_ports {ch_out[258]}] +set_load -pin_load 0.0334 [get_ports {ch_out[257]}] +set_load -pin_load 0.0334 [get_ports {ch_out[256]}] +set_load -pin_load 0.0334 [get_ports {ch_out[255]}] +set_load -pin_load 0.0334 [get_ports {ch_out[254]}] +set_load -pin_load 0.0334 [get_ports {ch_out[253]}] +set_load -pin_load 0.0334 [get_ports {ch_out[252]}] +set_load -pin_load 0.0334 [get_ports {ch_out[251]}] +set_load -pin_load 0.0334 [get_ports {ch_out[250]}] +set_load -pin_load 0.0334 [get_ports {ch_out[249]}] +set_load -pin_load 0.0334 [get_ports {ch_out[248]}] +set_load -pin_load 0.0334 [get_ports {ch_out[247]}] +set_load -pin_load 0.0334 [get_ports {ch_out[246]}] +set_load -pin_load 0.0334 [get_ports {ch_out[245]}] +set_load -pin_load 0.0334 [get_ports {ch_out[244]}] +set_load -pin_load 0.0334 [get_ports {ch_out[243]}] +set_load -pin_load 0.0334 [get_ports {ch_out[242]}] +set_load -pin_load 0.0334 [get_ports {ch_out[241]}] +set_load -pin_load 0.0334 [get_ports {ch_out[240]}] +set_load -pin_load 0.0334 [get_ports {ch_out[239]}] +set_load -pin_load 0.0334 [get_ports {ch_out[238]}] +set_load -pin_load 0.0334 [get_ports {ch_out[237]}] +set_load -pin_load 0.0334 [get_ports {ch_out[236]}] +set_load -pin_load 0.0334 [get_ports {ch_out[235]}] +set_load -pin_load 0.0334 [get_ports {ch_out[234]}] +set_load -pin_load 0.0334 [get_ports {ch_out[233]}] +set_load -pin_load 0.0334 [get_ports {ch_out[232]}] +set_load -pin_load 0.0334 [get_ports {ch_out[231]}] +set_load -pin_load 0.0334 [get_ports {ch_out[230]}] +set_load -pin_load 0.0334 [get_ports {ch_out[229]}] +set_load -pin_load 0.0334 [get_ports {ch_out[228]}] +set_load -pin_load 0.0334 [get_ports {ch_out[227]}] +set_load -pin_load 0.0334 [get_ports {ch_out[226]}] +set_load -pin_load 0.0334 [get_ports {ch_out[225]}] +set_load -pin_load 0.0334 [get_ports {ch_out[224]}] +set_load -pin_load 0.0334 [get_ports {ch_out[223]}] +set_load -pin_load 0.0334 [get_ports {ch_out[222]}] +set_load -pin_load 0.0334 [get_ports {ch_out[221]}] +set_load -pin_load 0.0334 [get_ports {ch_out[220]}] +set_load -pin_load 0.0334 [get_ports {ch_out[219]}] +set_load -pin_load 0.0334 [get_ports {ch_out[218]}] +set_load -pin_load 0.0334 [get_ports {ch_out[217]}] +set_load -pin_load 0.0334 [get_ports {ch_out[216]}] +set_load -pin_load 0.0334 [get_ports {ch_out[215]}] +set_load -pin_load 0.0334 [get_ports {ch_out[214]}] +set_load -pin_load 0.0334 [get_ports {ch_out[213]}] +set_load -pin_load 0.0334 [get_ports {ch_out[212]}] +set_load -pin_load 0.0334 [get_ports {ch_out[211]}] +set_load -pin_load 0.0334 [get_ports {ch_out[210]}] +set_load -pin_load 0.0334 [get_ports {ch_out[209]}] +set_load -pin_load 0.0334 [get_ports {ch_out[208]}] +set_load -pin_load 0.0334 [get_ports {ch_out[207]}] +set_load -pin_load 0.0334 [get_ports {ch_out[206]}] +set_load -pin_load 0.0334 [get_ports {ch_out[205]}] +set_load -pin_load 0.0334 [get_ports {ch_out[204]}] +set_load -pin_load 0.0334 [get_ports {ch_out[203]}] +set_load -pin_load 0.0334 [get_ports {ch_out[202]}] +set_load -pin_load 0.0334 [get_ports {ch_out[201]}] +set_load -pin_load 0.0334 [get_ports {ch_out[200]}] +set_load -pin_load 0.0334 [get_ports {ch_out[199]}] +set_load -pin_load 0.0334 [get_ports {ch_out[198]}] +set_load -pin_load 0.0334 [get_ports {ch_out[197]}] +set_load -pin_load 0.0334 [get_ports {ch_out[196]}] +set_load -pin_load 0.0334 [get_ports {ch_out[195]}] +set_load -pin_load 0.0334 [get_ports {ch_out[194]}] +set_load -pin_load 0.0334 [get_ports {ch_out[193]}] +set_load -pin_load 0.0334 [get_ports {ch_out[192]}] +set_load -pin_load 0.0334 [get_ports {ch_out[191]}] +set_load -pin_load 0.0334 [get_ports {ch_out[190]}] +set_load -pin_load 0.0334 [get_ports {ch_out[189]}] +set_load -pin_load 0.0334 [get_ports {ch_out[188]}] +set_load -pin_load 0.0334 [get_ports {ch_out[187]}] +set_load -pin_load 0.0334 [get_ports {ch_out[186]}] +set_load -pin_load 0.0334 [get_ports {ch_out[185]}] +set_load -pin_load 0.0334 [get_ports {ch_out[184]}] +set_load -pin_load 0.0334 [get_ports {ch_out[183]}] +set_load -pin_load 0.0334 [get_ports {ch_out[182]}] +set_load -pin_load 0.0334 [get_ports {ch_out[181]}] +set_load -pin_load 0.0334 [get_ports {ch_out[180]}] +set_load -pin_load 0.0334 [get_ports {ch_out[179]}] +set_load -pin_load 0.0334 [get_ports {ch_out[178]}] +set_load -pin_load 0.0334 [get_ports {ch_out[177]}] +set_load -pin_load 0.0334 [get_ports {ch_out[176]}] +set_load -pin_load 0.0334 [get_ports {ch_out[175]}] +set_load -pin_load 0.0334 [get_ports {ch_out[174]}] +set_load -pin_load 0.0334 [get_ports {ch_out[173]}] +set_load -pin_load 0.0334 [get_ports {ch_out[172]}] +set_load -pin_load 0.0334 [get_ports {ch_out[171]}] +set_load -pin_load 0.0334 [get_ports {ch_out[170]}] +set_load -pin_load 0.0334 [get_ports {ch_out[169]}] +set_load -pin_load 0.0334 [get_ports {ch_out[168]}] +set_load -pin_load 0.0334 [get_ports {ch_out[167]}] +set_load -pin_load 0.0334 [get_ports {ch_out[166]}] +set_load -pin_load 0.0334 [get_ports {ch_out[165]}] +set_load -pin_load 0.0334 [get_ports {ch_out[164]}] +set_load -pin_load 0.0334 [get_ports {ch_out[163]}] +set_load -pin_load 0.0334 [get_ports {ch_out[162]}] +set_load -pin_load 0.0334 [get_ports {ch_out[161]}] +set_load -pin_load 0.0334 [get_ports {ch_out[160]}] +set_load -pin_load 0.0334 [get_ports {ch_out[159]}] +set_load -pin_load 0.0334 [get_ports {ch_out[158]}] +set_load -pin_load 0.0334 [get_ports {ch_out[157]}] +set_load -pin_load 0.0334 [get_ports {ch_out[156]}] +set_load -pin_load 0.0334 [get_ports {ch_out[155]}] +set_load -pin_load 0.0334 [get_ports {ch_out[154]}] +set_load -pin_load 0.0334 [get_ports {ch_out[153]}] +set_load -pin_load 0.0334 [get_ports {ch_out[152]}] +set_load -pin_load 0.0334 [get_ports {ch_out[151]}] +set_load -pin_load 0.0334 [get_ports {ch_out[150]}] +set_load -pin_load 0.0334 [get_ports {ch_out[149]}] +set_load -pin_load 0.0334 [get_ports {ch_out[148]}] +set_load -pin_load 0.0334 [get_ports {ch_out[147]}] +set_load -pin_load 0.0334 [get_ports {ch_out[146]}] +set_load -pin_load 0.0334 [get_ports {ch_out[145]}] +set_load -pin_load 0.0334 [get_ports {ch_out[144]}] +set_load -pin_load 0.0334 [get_ports {ch_out[143]}] +set_load -pin_load 0.0334 [get_ports {ch_out[142]}] +set_load -pin_load 0.0334 [get_ports {ch_out[141]}] +set_load -pin_load 0.0334 [get_ports {ch_out[140]}] +set_load -pin_load 0.0334 [get_ports {ch_out[139]}] +set_load -pin_load 0.0334 [get_ports {ch_out[138]}] +set_load -pin_load 0.0334 [get_ports {ch_out[137]}] +set_load -pin_load 0.0334 [get_ports {ch_out[136]}] +set_load -pin_load 0.0334 [get_ports {ch_out[135]}] +set_load -pin_load 0.0334 [get_ports {ch_out[134]}] +set_load -pin_load 0.0334 [get_ports {ch_out[133]}] +set_load -pin_load 0.0334 [get_ports {ch_out[132]}] +set_load -pin_load 0.0334 [get_ports {ch_out[131]}] +set_load -pin_load 0.0334 [get_ports {ch_out[130]}] +set_load -pin_load 0.0334 [get_ports {ch_out[129]}] +set_load -pin_load 0.0334 [get_ports {ch_out[128]}] +set_load -pin_load 0.0334 [get_ports {ch_out[127]}] +set_load -pin_load 0.0334 [get_ports {ch_out[126]}] +set_load -pin_load 0.0334 [get_ports {ch_out[125]}] +set_load -pin_load 0.0334 [get_ports {ch_out[124]}] +set_load -pin_load 0.0334 [get_ports {ch_out[123]}] +set_load -pin_load 0.0334 [get_ports {ch_out[122]}] +set_load -pin_load 0.0334 [get_ports {ch_out[121]}] +set_load -pin_load 0.0334 [get_ports {ch_out[120]}] +set_load -pin_load 0.0334 [get_ports {ch_out[119]}] +set_load -pin_load 0.0334 [get_ports {ch_out[118]}] +set_load -pin_load 0.0334 [get_ports {ch_out[117]}] +set_load -pin_load 0.0334 [get_ports {ch_out[116]}] +set_load -pin_load 0.0334 [get_ports {ch_out[115]}] +set_load -pin_load 0.0334 [get_ports {ch_out[114]}] +set_load -pin_load 0.0334 [get_ports {ch_out[113]}] +set_load -pin_load 0.0334 [get_ports {ch_out[112]}] +set_load -pin_load 0.0334 [get_ports {ch_out[111]}] +set_load -pin_load 0.0334 [get_ports {ch_out[110]}] +set_load -pin_load 0.0334 [get_ports {ch_out[109]}] +set_load -pin_load 0.0334 [get_ports {ch_out[108]}] +set_load -pin_load 0.0334 [get_ports {ch_out[107]}] +set_load -pin_load 0.0334 [get_ports {ch_out[106]}] +set_load -pin_load 0.0334 [get_ports {ch_out[105]}] +set_load -pin_load 0.0334 [get_ports {ch_out[104]}] +set_load -pin_load 0.0334 [get_ports {ch_out[103]}] +set_load -pin_load 0.0334 [get_ports {ch_out[102]}] +set_load -pin_load 0.0334 [get_ports {ch_out[101]}] +set_load -pin_load 0.0334 [get_ports {ch_out[100]}] +set_load -pin_load 0.0334 [get_ports {ch_out[99]}] +set_load -pin_load 0.0334 [get_ports {ch_out[98]}] +set_load -pin_load 0.0334 [get_ports {ch_out[97]}] +set_load -pin_load 0.0334 [get_ports {ch_out[96]}] +set_load -pin_load 0.0334 [get_ports {ch_out[95]}] +set_load -pin_load 0.0334 [get_ports {ch_out[94]}] +set_load -pin_load 0.0334 [get_ports {ch_out[93]}] +set_load -pin_load 0.0334 [get_ports {ch_out[92]}] +set_load -pin_load 0.0334 [get_ports {ch_out[91]}] +set_load -pin_load 0.0334 [get_ports {ch_out[90]}] +set_load -pin_load 0.0334 [get_ports {ch_out[89]}] +set_load -pin_load 0.0334 [get_ports {ch_out[88]}] +set_load -pin_load 0.0334 [get_ports {ch_out[87]}] +set_load -pin_load 0.0334 [get_ports {ch_out[86]}] +set_load -pin_load 0.0334 [get_ports {ch_out[85]}] +set_load -pin_load 0.0334 [get_ports {ch_out[84]}] +set_load -pin_load 0.0334 [get_ports {ch_out[83]}] +set_load -pin_load 0.0334 [get_ports {ch_out[82]}] +set_load -pin_load 0.0334 [get_ports {ch_out[81]}] +set_load -pin_load 0.0334 [get_ports {ch_out[80]}] +set_load -pin_load 0.0334 [get_ports {ch_out[79]}] +set_load -pin_load 0.0334 [get_ports {ch_out[78]}] +set_load -pin_load 0.0334 [get_ports {ch_out[77]}] +set_load -pin_load 0.0334 [get_ports {ch_out[76]}] +set_load -pin_load 0.0334 [get_ports {ch_out[75]}] +set_load -pin_load 0.0334 [get_ports {ch_out[74]}] +set_load -pin_load 0.0334 [get_ports {ch_out[73]}] +set_load -pin_load 0.0334 [get_ports {ch_out[72]}] +set_load -pin_load 0.0334 [get_ports {ch_out[71]}] +set_load -pin_load 0.0334 [get_ports {ch_out[70]}] +set_load -pin_load 0.0334 [get_ports {ch_out[69]}] +set_load -pin_load 0.0334 [get_ports {ch_out[68]}] +set_load -pin_load 0.0334 [get_ports {ch_out[67]}] +set_load -pin_load 0.0334 [get_ports {ch_out[66]}] +set_load -pin_load 0.0334 [get_ports {ch_out[65]}] +set_load -pin_load 0.0334 [get_ports {ch_out[64]}] +set_load -pin_load 0.0334 [get_ports {ch_out[63]}] +set_load -pin_load 0.0334 [get_ports {ch_out[62]}] +set_load -pin_load 0.0334 [get_ports {ch_out[61]}] +set_load -pin_load 0.0334 [get_ports {ch_out[60]}] +set_load -pin_load 0.0334 [get_ports {ch_out[59]}] +set_load -pin_load 0.0334 [get_ports {ch_out[58]}] +set_load -pin_load 0.0334 [get_ports {ch_out[57]}] +set_load -pin_load 0.0334 [get_ports {ch_out[56]}] +set_load -pin_load 0.0334 [get_ports {ch_out[55]}] +set_load -pin_load 0.0334 [get_ports {ch_out[54]}] +set_load -pin_load 0.0334 [get_ports {ch_out[53]}] +set_load -pin_load 0.0334 [get_ports {ch_out[52]}] +set_load -pin_load 0.0334 [get_ports {ch_out[51]}] +set_load -pin_load 0.0334 [get_ports {ch_out[50]}] +set_load -pin_load 0.0334 [get_ports {ch_out[49]}] +set_load -pin_load 0.0334 [get_ports {ch_out[48]}] +set_load -pin_load 0.0334 [get_ports {ch_out[47]}] +set_load -pin_load 0.0334 [get_ports {ch_out[46]}] +set_load -pin_load 0.0334 [get_ports {ch_out[45]}] +set_load -pin_load 0.0334 [get_ports {ch_out[44]}] +set_load -pin_load 0.0334 [get_ports {ch_out[43]}] +set_load -pin_load 0.0334 [get_ports {ch_out[42]}] +set_load -pin_load 0.0334 [get_ports {ch_out[41]}] +set_load -pin_load 0.0334 [get_ports {ch_out[40]}] +set_load -pin_load 0.0334 [get_ports {ch_out[39]}] +set_load -pin_load 0.0334 [get_ports {ch_out[38]}] +set_load -pin_load 0.0334 [get_ports {ch_out[37]}] +set_load -pin_load 0.0334 [get_ports {ch_out[36]}] +set_load -pin_load 0.0334 [get_ports {ch_out[35]}] +set_load -pin_load 0.0334 [get_ports {ch_out[34]}] +set_load -pin_load 0.0334 [get_ports {ch_out[33]}] +set_load -pin_load 0.0334 [get_ports {ch_out[32]}] +set_load -pin_load 0.0334 [get_ports {ch_out[31]}] +set_load -pin_load 0.0334 [get_ports {ch_out[30]}] +set_load -pin_load 0.0334 [get_ports {ch_out[29]}] +set_load -pin_load 0.0334 [get_ports {ch_out[28]}] +set_load -pin_load 0.0334 [get_ports {ch_out[27]}] +set_load -pin_load 0.0334 [get_ports {ch_out[26]}] +set_load -pin_load 0.0334 [get_ports {ch_out[25]}] +set_load -pin_load 0.0334 [get_ports {ch_out[24]}] +set_load -pin_load 0.0334 [get_ports {ch_out[23]}] +set_load -pin_load 0.0334 [get_ports {ch_out[22]}] +set_load -pin_load 0.0334 [get_ports {ch_out[21]}] +set_load -pin_load 0.0334 [get_ports {ch_out[20]}] +set_load -pin_load 0.0334 [get_ports {ch_out[19]}] +set_load -pin_load 0.0334 [get_ports {ch_out[18]}] +set_load -pin_load 0.0334 [get_ports {ch_out[17]}] +set_load -pin_load 0.0334 [get_ports {ch_out[16]}] +set_load -pin_load 0.0334 [get_ports {ch_out[15]}] +set_load -pin_load 0.0334 [get_ports {ch_out[14]}] +set_load -pin_load 0.0334 [get_ports {ch_out[13]}] +set_load -pin_load 0.0334 [get_ports {ch_out[12]}] +set_load -pin_load 0.0334 [get_ports {ch_out[11]}] +set_load -pin_load 0.0334 [get_ports {ch_out[10]}] +set_load -pin_load 0.0334 [get_ports {ch_out[9]}] +set_load -pin_load 0.0334 [get_ports {ch_out[8]}] +set_load -pin_load 0.0334 [get_ports {ch_out[7]}] +set_load -pin_load 0.0334 [get_ports {ch_out[6]}] +set_load -pin_load 0.0334 [get_ports {ch_out[5]}] +set_load -pin_load 0.0334 [get_ports {ch_out[4]}] +set_load -pin_load 0.0334 [get_ports {ch_out[3]}] +set_load -pin_load 0.0334 [get_ports {ch_out[2]}] +set_load -pin_load 0.0334 [get_ports {ch_out[1]}] +set_load -pin_load 0.0334 [get_ports {ch_out[0]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[270]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[269]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[268]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[267]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[266]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[265]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[264]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[263]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[262]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[261]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[260]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[259]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[258]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[257]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[256]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[255]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[254]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[253]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[252]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[251]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[250]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[249]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[248]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[247]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[246]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[245]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[244]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[243]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[242]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[241]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[240]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[239]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[238]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[237]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[236]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[235]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[234]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[233]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[232]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[231]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[230]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[229]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[228]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[227]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[226]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[225]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[224]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[223]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[222]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[221]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[220]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[219]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[218]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[217]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[216]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[215]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[214]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[213]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[212]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[211]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[210]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[209]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[208]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[207]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[206]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[205]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[204]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[203]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[202]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[201]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[200]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[199]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[198]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[197]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[196]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[195]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[194]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[193]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[192]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[191]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[190]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[189]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[188]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[187]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[186]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[185]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[184]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[183]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[182]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[181]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[180]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[179]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[178]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[177]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[176]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[175]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[174]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[173]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[172]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[171]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[170]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[169]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[168]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[167]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[166]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[165]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[164]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[163]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[162]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[161]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[160]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[159]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[158]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[157]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[156]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[155]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[154]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[153]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[152]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[151]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[150]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[149]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[148]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[147]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[146]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[145]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[144]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[143]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[142]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[141]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[140]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[139]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[138]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[137]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[136]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[135]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[134]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[133]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[132]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[131]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[130]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[129]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[128]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[127]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[126]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[125]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[124]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[123]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[122]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[121]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[120]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[119]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[118]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[117]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[116]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[115]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[114]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[113]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[112]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[111]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[110]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[109]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[108]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[107]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[106]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[105]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[104]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[103]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[102]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[101]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[100]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[99]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[98]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[97]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[96]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[95]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[94]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[93]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[92]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[91]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[90]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[89]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[88]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[87]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[86]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[85]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[84]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[83]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[82]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[81]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[80]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[79]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[78]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[77]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[76]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[75]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[74]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[73]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[72]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[71]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[70]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[69]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[68]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[67]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[66]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[65]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[64]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[63]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[62]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[61]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[60]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[59]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[58]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[57]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[56]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[55]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[54]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[53]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[52]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[51]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[50]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[49]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[48]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[47]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[46]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[45]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[44]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[43]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[42]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[41]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[40]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[39]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[38]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[37]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[36]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[35]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[34]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[33]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[32]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[31]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[30]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[29]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[28]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[27]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[26]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[25]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[24]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[23]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[22]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[21]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[20]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[19]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[18]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[17]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[16]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[15]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[14]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[13]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[12]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[11]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[10]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[9]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[8]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[7]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[6]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[5]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[4]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[3]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[2]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[1]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[0]}] +set_timing_derate -early 0.9500 +set_timing_derate -late 1.0500 +############################################################################### +# Design Rules +############################################################################### +set_max_fanout 4.0000 [current_design]
diff --git a/sdc/bus_rep_west.sdc b/sdc/bus_rep_west.sdc new file mode 100644 index 0000000..5f5b444 --- /dev/null +++ b/sdc/bus_rep_west.sdc
@@ -0,0 +1,187 @@ +############################################################################### +# Created by write_sdc +# Sun Dec 25 16:47:30 2022 +############################################################################### +current_design bus_rep_west +############################################################################### +# Timing Constraints +############################################################################### +create_clock -name __VIRTUAL_CLK__ -period 10.0000 +set_clock_uncertainty 0.2500 __VIRTUAL_CLK__ +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[0]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[10]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[11]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[12]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[13]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[14]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[15]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[16]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[17]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[18]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[19]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[1]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[20]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[21]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[22]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[23]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[24]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[25]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[26]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[27]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[28]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[29]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[2]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[30]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[31]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[32]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[33]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[34]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[35]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[36]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[37]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[38]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[39]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[3]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[40]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[41]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[4]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[5]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[6]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[7]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[8]}] +set_input_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_in[9]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[0]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[10]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[11]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[12]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[13]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[14]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[15]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[16]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[17]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[18]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[19]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[1]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[20]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[21]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[22]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[23]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[24]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[25]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[26]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[27]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[28]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[29]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[2]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[30]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[31]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[32]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[33]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[34]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[35]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[36]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[37]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[38]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[39]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[3]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[40]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[41]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[4]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[5]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[6]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[7]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[8]}] +set_output_delay 2.0000 -clock [get_clocks {__VIRTUAL_CLK__}] -add_delay [get_ports {ch_out[9]}] +############################################################################### +# Environment +############################################################################### +set_load -pin_load 0.0334 [get_ports {ch_out[41]}] +set_load -pin_load 0.0334 [get_ports {ch_out[40]}] +set_load -pin_load 0.0334 [get_ports {ch_out[39]}] +set_load -pin_load 0.0334 [get_ports {ch_out[38]}] +set_load -pin_load 0.0334 [get_ports {ch_out[37]}] +set_load -pin_load 0.0334 [get_ports {ch_out[36]}] +set_load -pin_load 0.0334 [get_ports {ch_out[35]}] +set_load -pin_load 0.0334 [get_ports {ch_out[34]}] +set_load -pin_load 0.0334 [get_ports {ch_out[33]}] +set_load -pin_load 0.0334 [get_ports {ch_out[32]}] +set_load -pin_load 0.0334 [get_ports {ch_out[31]}] +set_load -pin_load 0.0334 [get_ports {ch_out[30]}] +set_load -pin_load 0.0334 [get_ports {ch_out[29]}] +set_load -pin_load 0.0334 [get_ports {ch_out[28]}] +set_load -pin_load 0.0334 [get_ports {ch_out[27]}] +set_load -pin_load 0.0334 [get_ports {ch_out[26]}] +set_load -pin_load 0.0334 [get_ports {ch_out[25]}] +set_load -pin_load 0.0334 [get_ports {ch_out[24]}] +set_load -pin_load 0.0334 [get_ports {ch_out[23]}] +set_load -pin_load 0.0334 [get_ports {ch_out[22]}] +set_load -pin_load 0.0334 [get_ports {ch_out[21]}] +set_load -pin_load 0.0334 [get_ports {ch_out[20]}] +set_load -pin_load 0.0334 [get_ports {ch_out[19]}] +set_load -pin_load 0.0334 [get_ports {ch_out[18]}] +set_load -pin_load 0.0334 [get_ports {ch_out[17]}] +set_load -pin_load 0.0334 [get_ports {ch_out[16]}] +set_load -pin_load 0.0334 [get_ports {ch_out[15]}] +set_load -pin_load 0.0334 [get_ports {ch_out[14]}] +set_load -pin_load 0.0334 [get_ports {ch_out[13]}] +set_load -pin_load 0.0334 [get_ports {ch_out[12]}] +set_load -pin_load 0.0334 [get_ports {ch_out[11]}] +set_load -pin_load 0.0334 [get_ports {ch_out[10]}] +set_load -pin_load 0.0334 [get_ports {ch_out[9]}] +set_load -pin_load 0.0334 [get_ports {ch_out[8]}] +set_load -pin_load 0.0334 [get_ports {ch_out[7]}] +set_load -pin_load 0.0334 [get_ports {ch_out[6]}] +set_load -pin_load 0.0334 [get_ports {ch_out[5]}] +set_load -pin_load 0.0334 [get_ports {ch_out[4]}] +set_load -pin_load 0.0334 [get_ports {ch_out[3]}] +set_load -pin_load 0.0334 [get_ports {ch_out[2]}] +set_load -pin_load 0.0334 [get_ports {ch_out[1]}] +set_load -pin_load 0.0334 [get_ports {ch_out[0]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[41]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[40]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[39]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[38]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[37]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[36]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[35]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[34]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[33]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[32]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[31]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[30]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[29]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[28]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[27]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[26]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[25]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[24]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[23]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[22]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[21]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[20]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[19]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[18]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[17]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[16]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[15]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[14]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[13]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[12]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[11]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[10]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[9]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[8]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[7]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[6]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[5]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[4]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[3]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[2]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[1]}] +set_driving_cell -lib_cell sky130_fd_sc_hd__inv_2 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {ch_in[0]}] +set_timing_derate -early 0.9500 +set_timing_derate -late 1.0500 +############################################################################### +# Design Rules +############################################################################### +set_max_fanout 4.0000 [current_design]
diff --git a/sdc/mac_wrapper.sdc b/sdc/mac_wrapper.sdc index 7e2a975..00de317 100644 --- a/sdc/mac_wrapper.sdc +++ b/sdc/mac_wrapper.sdc
@@ -1,6 +1,6 @@ ############################################################################### # Created by write_sdc -# Sat Dec 24 06:37:51 2022 +# Sun Dec 25 11:03:09 2022 ############################################################################### current_design mac_wrapper ############################################################################### @@ -39,29 +39,29 @@ set_input_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {mac_tx_qcnt_dec}] set_input_delay 1.0000 -clock [get_clocks {app_clk}] -min -add_delay [get_ports {mac_tx_qcnt_inc}] set_input_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {mac_tx_qcnt_inc}] -set_input_delay 1.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_in}] +set_input_delay -2.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_in}] set_input_delay 6.0000 -clock [get_clocks {mdio_clk}] -max -add_delay [get_ports {mdio_in}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_crs}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_crs}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_crs}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rx_dv}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rx_dv}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rx_dv}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rx_er}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rx_er}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rx_er}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[0]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[0]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[0]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[1]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[1]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[1]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[2]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[2]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[2]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[3]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[3]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[3]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[4]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[4]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[4]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[5]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[5]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[5]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[6]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[6]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[6]}] -set_input_delay 1.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[7]}] +set_input_delay -2.0000 -clock [get_clocks {phy_rx_clk}] -min -add_delay [get_ports {phy_rxd[7]}] set_input_delay 6.0000 -clock [get_clocks {phy_rx_clk}] -max -add_delay [get_ports {phy_rxd[7]}] set_input_delay 1.0000 -clock [get_clocks {app_clk}] -min -add_delay [get_ports {wbm_grx_ack_i}] set_input_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {wbm_grx_ack_i}] @@ -339,29 +339,29 @@ set_output_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {cfg_tx_qbase_addr[8]}] set_output_delay 1.0000 -clock [get_clocks {app_clk}] -min -add_delay [get_ports {cfg_tx_qbase_addr[9]}] set_output_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {cfg_tx_qbase_addr[9]}] -set_output_delay 1.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_out}] +set_output_delay -2.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_out}] set_output_delay 6.0000 -clock [get_clocks {mdio_clk}] -max -add_delay [get_ports {mdio_out}] -set_output_delay 1.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_out_en}] +set_output_delay -2.0000 -clock [get_clocks {mdio_clk}] -min -add_delay [get_ports {mdio_out_en}] set_output_delay 6.0000 -clock [get_clocks {mdio_clk}] -max -add_delay [get_ports {mdio_out_en}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_tx_en}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_tx_en}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_tx_en}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_tx_er}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_tx_er}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_tx_er}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[0]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[0]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[0]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[1]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[1]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[1]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[2]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[2]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[2]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[3]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[3]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[3]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[4]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[4]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[4]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[5]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[5]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[5]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[6]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[6]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[6]}] -set_output_delay 1.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[7]}] +set_output_delay -2.0000 -clock [get_clocks {phy_tx_clk}] -min -add_delay [get_ports {phy_txd[7]}] set_output_delay 6.0000 -clock [get_clocks {phy_tx_clk}] -max -add_delay [get_ports {phy_txd[7]}] set_output_delay 1.0000 -clock [get_clocks {app_clk}] -min -add_delay [get_ports {wbm_grx_adr_o[0]}] set_output_delay 6.0000 -clock [get_clocks {app_clk}] -max -add_delay [get_ports {wbm_grx_adr_o[0]}]
diff --git a/sdc/pinmux_top.sdc b/sdc/pinmux_top.sdc index a71aae1..496da89 100644 --- a/sdc/pinmux_top.sdc +++ b/sdc/pinmux_top.sdc
@@ -1,14 +1,20 @@ ############################################################################### # Created by write_sdc -# Sat Dec 24 13:52:02 2022 +# Sun Dec 25 14:12:46 2022 ############################################################################### current_design pinmux_top ############################################################################### # Timing Constraints ############################################################################### create_clock -name mclk -period 10.0000 [get_ports {mclk}] +set_clock_uncertainty 0.2500 mclk set_propagated_clock [get_clocks {mclk}] -set_clock_uncertainty -from [get_clocks {mclk}] -to [get_clocks {mclk}] 0.2500 +create_clock -name mdio_refclk -period 10.0000 [get_pins {u_clkgen.u_mdio_ref_mux.u_mux_l10/X}] +set_clock_uncertainty 0.2500 mdio_refclk +set_propagated_clock [get_clocks {mdio_refclk}] +set_clock_groups -name clock_group -logically_exclusive \ + -group [get_clocks {mclk}]\ + -group [get_clocks {mdio_refclk}] set_input_delay 2.0000 -clock [get_clocks {mclk}] -min -add_delay [get_ports {reg_addr[0]}] set_input_delay 6.0000 -clock [get_clocks {mclk}] -max -add_delay [get_ports {reg_addr[0]}] set_input_delay 2.0000 -clock [get_clocks {mclk}] -min -add_delay [get_ports {reg_addr[1]}] @@ -171,6 +177,9 @@ set_output_delay 6.0000 -clock [get_clocks {mclk}] -max -add_delay [get_ports {reg_rdata[9]}] set_max_delay\ -from [get_ports {wbd_clk_int}] 3.5000 +set_max_delay\ + -from [get_ports {wbd_clk_int}]\ + -to [get_ports {wbd_clk_skew}] 2.5000 ############################################################################### # Environment ############################################################################### @@ -424,6 +433,10 @@ set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {scan_si[2]}] set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {scan_si[1]}] set_driving_cell -lib_cell sky130_fd_sc_hd__inv_8 -pin {Y} -input_transition_rise 0.0000 -input_transition_fall 0.0000 [get_ports {scan_si[0]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[0]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[1]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[2]}] +set_case_analysis 0 [get_ports {cfg_cska_pinmux[3]}] set_case_analysis 0 [get_ports {scan_en}] set_case_analysis 0 [get_ports {scan_mode}] set_timing_derate -early 0.9500
diff --git a/sdc/user_project_wrapper.sdc b/sdc/user_project_wrapper.sdc index 4b9138a..7b98d7b 100644 --- a/sdc/user_project_wrapper.sdc +++ b/sdc/user_project_wrapper.sdc
@@ -1,6 +1,6 @@ ############################################################################### # Created by write_sdc -# Sun Dec 25 08:36:12 2022 +# Sat Dec 31 03:25:00 2022 ############################################################################### current_design user_project_wrapper ###############################################################################
diff --git a/verilog/gl/user_project_wrapper.v.gz b/verilog/gl/user_project_wrapper.v.gz index d689b20..4fcc9be 100644 --- a/verilog/gl/user_project_wrapper.v.gz +++ b/verilog/gl/user_project_wrapper.v.gz Binary files differ
diff --git a/verilog/includes/includes.rtl.caravel_user_project b/verilog/includes/includes.rtl.caravel_user_project index 71bfc49..a0d9543 100644 --- a/verilog/includes/includes.rtl.caravel_user_project +++ b/verilog/includes/includes.rtl.caravel_user_project
@@ -47,6 +47,7 @@ ## Pinmux reg $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pinmux_top.sv $(USER_PROJECT_VERILOG)/rtl/pinmux/src/pinmux.sv +$(USER_PROJECT_VERILOG)/rtl/pinmux/src/clkgen.sv $(USER_PROJECT_VERILOG)/rtl/glbl/src/glbl_cfg.sv ### GMAC Block @@ -94,4 +95,9 @@ $(USER_PROJECT_VERILOG)/rtl/lib/sync_wbb.sv $(USER_PROJECT_VERILOG)/rtl/lib/sync_fifo2.sv +$(USER_PROJECT_VERILOG)/rtl/bus_rep/bus_rep_south.sv +$(USER_PROJECT_VERILOG)/rtl/bus_rep/bus_rep_north.sv +$(USER_PROJECT_VERILOG)/rtl/bus_rep/bus_rep_east.sv +$(USER_PROJECT_VERILOG)/rtl/bus_rep/bus_rep_west.sv + $(USER_PROJECT_VERILOG)/rtl/user_project_wrapper.v
diff --git a/verilog/rtl/bus_rep/bus_rep_east.sv b/verilog/rtl/bus_rep/bus_rep_east.sv new file mode 100644 index 0000000..6e7626d --- /dev/null +++ b/verilog/rtl/bus_rep/bus_rep_east.sv
@@ -0,0 +1,52 @@ +////////////////////////////////////////////////////////////////////////////// +// SPDX-FileCopyrightText: 2021 , Dinesh Annayya +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org> +// +////////////////////////////////////////////////////////////////////// +// Bus Repater // +////////////////////////////////////////////////////////////////////// +module bus_rep_east #( + parameter BUS_REP_WD = 7 + ) ( +`ifdef USE_POWER_PINS + input logic vccd1, // User area 1 1.8V supply + input logic vssd1, // User area 1 digital ground +`endif + // Bus repeaters + input [BUS_REP_WD-1:0] ch_in, + output [BUS_REP_WD-1:0] ch_out + ); + +// channel repeater + +`ifndef SYNTHESIS + +assign ch_out = ch_in; + +`else + + genvar i; + generate + for (i = 0; i < BUS_REP_WD; i = i + 1) begin : u_rp + sky130_fd_sc_hd__clkbuf_4 u_buf ( .A(ch_in[i]), .X(ch_out[i])); + end + endgenerate + +`endif + + +endmodule +
diff --git a/verilog/rtl/bus_rep/bus_rep_north.sv b/verilog/rtl/bus_rep/bus_rep_north.sv new file mode 100644 index 0000000..cbc3f24 --- /dev/null +++ b/verilog/rtl/bus_rep/bus_rep_north.sv
@@ -0,0 +1,59 @@ +////////////////////////////////////////////////////////////////////////////// +// SPDX-FileCopyrightText: 2021 , Dinesh Annayya +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org> +// +////////////////////////////////////////////////////////////////////// +// Bus Repater // +////////////////////////////////////////////////////////////////////// +module bus_rep_north #( + parameter BUS_REP_WD = 7, + parameter BUS_BUF_WD = 42 + ) ( +`ifdef USE_POWER_PINS + input logic vccd1, // User area 1 1.8V supply + input logic vssd1, // User area 1 digital ground +`endif + // Bus repeaters + input [BUS_REP_WD-1:0] ch_in, + output [BUS_REP_WD-1:0] ch_out, + // Bus Buffering + input [BUS_BUF_WD-1:0] buf_in, + output [BUS_BUF_WD-1:0] buf_out + ); + +// channel repeater + +`ifndef SYNTHESIS + +assign ch_out = ch_in; +assign buf_out = buf_in; + +`else + + genvar i; + generate + for (i = 0; i < BUS_REP_WD; i = i + 1) begin : u_rp + sky130_fd_sc_hd__clkbuf_4 u_buf ( .A(ch_in[i]), .X(ch_out[i])); + end + endgenerate + +assign buf_out = buf_in; + +`endif + + +endmodule +
diff --git a/verilog/rtl/bus_rep/bus_rep_south.sv b/verilog/rtl/bus_rep/bus_rep_south.sv new file mode 100644 index 0000000..ea877be --- /dev/null +++ b/verilog/rtl/bus_rep/bus_rep_south.sv
@@ -0,0 +1,52 @@ +////////////////////////////////////////////////////////////////////////////// +// SPDX-FileCopyrightText: 2021 , Dinesh Annayya +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org> +// +////////////////////////////////////////////////////////////////////// +// Bus Repater // +////////////////////////////////////////////////////////////////////// +module bus_rep_south #( + parameter BUS_REP_WD = 7 + ) ( +`ifdef USE_POWER_PINS + input logic vccd1, // User area 1 1.8V supply + input logic vssd1, // User area 1 digital ground +`endif + // Bus repeaters + input [BUS_REP_WD-1:0] ch_in, + output [BUS_REP_WD-1:0] ch_out + ); + +// channel repeater + +`ifndef SYNTHESIS + +assign ch_out = ch_in; + +`else + + genvar i; + generate + for (i = 0; i < BUS_REP_WD; i = i + 1) begin : u_rp + sky130_fd_sc_hd__clkbuf_4 u_buf ( .A(ch_in[i]), .X(ch_out[i])); + end + endgenerate + +`endif + + +endmodule +
diff --git a/verilog/rtl/bus_rep/bus_rep_west.sv b/verilog/rtl/bus_rep/bus_rep_west.sv new file mode 100644 index 0000000..f02c930 --- /dev/null +++ b/verilog/rtl/bus_rep/bus_rep_west.sv
@@ -0,0 +1,52 @@ +////////////////////////////////////////////////////////////////////////////// +// SPDX-FileCopyrightText: 2021 , Dinesh Annayya +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileContributor: Created by Dinesh Annayya <dinesha@opencores.org> +// +////////////////////////////////////////////////////////////////////// +// Bus Repater // +////////////////////////////////////////////////////////////////////// +module bus_rep_west #( + parameter BUS_REP_WD = 7 + ) ( +`ifdef USE_POWER_PINS + input logic vccd1, // User area 1 1.8V supply + input logic vssd1, // User area 1 digital ground +`endif + // Bus repeaters + input [BUS_REP_WD-1:0] ch_in, + output [BUS_REP_WD-1:0] ch_out + ); + +// channel repeater + +`ifndef SYNTHESIS + +assign ch_out = ch_in; + +`else + + genvar i; + generate + for (i = 0; i < BUS_REP_WD; i = i + 1) begin : u_rp + sky130_fd_sc_hd__clkbuf_4 u_buf ( .A(ch_in[i]), .X(ch_out[i])); + end + endgenerate + +`endif + + +endmodule +
diff --git a/verilog/rtl/bus_repeater.sv b/verilog/rtl/bus_repeater.sv new file mode 100644 index 0000000..361b389 --- /dev/null +++ b/verilog/rtl/bus_repeater.sv
@@ -0,0 +1,995 @@ +/********************************************* + Bus Repeater SOUTH +**********************************************/ +wire wb_clk_i_rp; +wire wb_rst_i_rp ; +wire wbs_cyc_i_rp ; +wire wbs_stb_i_rp ; +wire wbs_we_i_rp ; +wire [3:0] wbs_sel_i_rp; +wire [31:0] wbs_adr_i_rp; +wire [31:0] wbs_dat_i_rp; + +wire wbs_ack_int_o ; +wire [31:0] wbs_dat_int_o; + +wire [35:0] la_data_in_rp; + +wire [270:0] ch_in_south = { + user_clock2, + la_data_out_int[127], + la_data_out_int[126], + la_data_out_int[125], + la_data_out_int[124], + la_data_out_int[123], + la_data_out_int[122], + la_data_out_int[121], + la_data_out_int[120], + la_data_out_int[119], + la_data_out_int[118], + la_data_out_int[117], + la_data_out_int[116], + la_data_out_int[115], + la_data_out_int[114], + la_data_out_int[113], + la_data_out_int[112], + la_data_out_int[111], + la_data_out_int[110], + la_data_out_int[109], + la_data_out_int[108], + la_data_out_int[107], + la_data_out_int[106], + la_data_out_int[105], + la_data_out_int[104], + la_data_out_int[103], + la_data_out_int[102], + la_data_out_int[101], + la_data_out_int[100], + la_data_out_int[99], + la_data_out_int[98], + la_data_out_int[97], + la_data_out_int[96], + la_data_out_int[95], + la_data_out_int[94], + la_data_out_int[93], + la_data_out_int[92], + la_data_out_int[91], + la_data_out_int[90], + la_data_out_int[89], + la_data_out_int[88], + la_data_out_int[87], + la_data_out_int[86], + la_data_out_int[85], + la_data_out_int[84], + la_data_out_int[83], + la_data_out_int[82], + la_data_out_int[81], + la_data_out_int[80], + la_data_out_int[79], + la_data_out_int[78], + la_data_out_int[77], + la_data_out_int[76], + la_data_out_int[75], + la_data_out_int[74], + la_data_out_int[73], + la_data_out_int[72], + la_data_out_int[71], + la_data_out_int[70], + la_data_out_int[69], + la_data_out_int[68], + la_data_out_int[67], + la_data_out_int[66], + la_data_out_int[65], + la_data_out_int[64], + la_data_out_int[63], + la_data_out_int[62], + la_data_out_int[61], + la_data_out_int[60], + la_data_out_int[59], + la_data_out_int[58], + la_data_out_int[57], + la_data_out_int[56], + la_data_out_int[55], + la_data_out_int[54], + la_data_out_int[53], + la_data_out_int[52], + la_data_out_int[51], + la_data_out_int[50], + la_data_out_int[49], + la_data_out_int[48], + la_data_out_int[47], + la_data_out_int[46], + la_data_out_int[45], + la_data_out_int[44], + la_data_out_int[43], + la_data_out_int[42], + la_data_out_int[41], + la_data_out_int[40], + la_data_out_int[39], + la_data_out_int[38], + la_data_out_int[37], + la_data_out_int[36], + la_data_out_int[35], + la_data_in[35], + la_data_out_int[34], + la_data_in[34], + la_data_out_int[33], + la_data_in[33], + la_data_out_int[32], + la_data_in[32], + la_data_out_int[31], + la_data_in[31], + la_data_out_int[30], + la_data_in[30], + la_data_out_int[29], + la_data_in[29], + la_data_out_int[28], + la_data_in[28], + la_data_out_int[27], + la_data_in[27], + la_data_out_int[26], + la_data_in[26], + la_data_out_int[25], + la_data_in[25], + la_data_out_int[24], + la_data_in[24], + la_data_out_int[23], + la_data_in[23], + la_data_out_int[22], + la_data_in[22], + la_data_out_int[21], + la_data_in[21], + la_data_out_int[20], + la_data_in[20], + la_data_out_int[19], + la_data_in[19], + la_data_out_int[18], + la_data_in[18], + la_data_out_int[17], + la_data_in[17], + la_data_out_int[16], + la_data_in[16], + la_data_out_int[15], + la_data_in[15], + la_data_out_int[14], + la_data_in[14], + la_data_out_int[13], + la_data_in[13], + la_data_out_int[12], + la_data_in[12], + la_data_out_int[11], + la_data_in[11], + la_data_out_int[10], + la_data_in[10], + la_data_out_int[9], + la_data_in[9], + la_data_out_int[8], + la_data_in[8], + la_data_out_int[7], + la_data_in[7], + la_data_out_int[6], + la_data_in[6], + la_data_out_int[5], + la_data_in[5], + la_data_out_int[4], + la_data_in[4], + la_data_out_int[3], + la_data_in[3], + la_data_out_int[2], + la_data_in[2], + la_data_out_int[1], + la_data_in[1], + la_data_out_int[0], + la_data_in[0], + + wbs_dat_int_o[31] , // 105 + wbs_dat_i[31] , + wbs_adr_i[31] , + wbs_dat_int_o[30] , + wbs_dat_i[30] , + wbs_adr_i[30] , + wbs_dat_int_o[29] , + wbs_dat_i[29] , + wbs_adr_i[29] , + wbs_dat_int_o[28] , + wbs_dat_i[28] , + wbs_adr_i[28] , + wbs_dat_int_o[27] , + wbs_dat_i[27] , + wbs_adr_i[27] , + wbs_dat_int_o[26] , + wbs_dat_i[26] , + wbs_adr_i[26] , + wbs_dat_int_o[25] , + wbs_dat_i[25] , + wbs_adr_i[25] , + wbs_dat_int_o[24] , + wbs_dat_i[24] , + wbs_adr_i[24] , + wbs_dat_int_o[23] , + wbs_dat_i[23] , + wbs_adr_i[23] , + wbs_dat_int_o[22] , + wbs_dat_i[22] , + wbs_adr_i[22] , + wbs_dat_int_o[21] , + wbs_dat_i[21] , + wbs_adr_i[21] , + wbs_dat_int_o[20] , + wbs_dat_i[20] , + wbs_adr_i[20] , + wbs_dat_int_o[19] , + wbs_dat_i[19] , + wbs_adr_i[19] , + wbs_dat_int_o[18] , + wbs_dat_i[18] , + wbs_adr_i[18] , + wbs_dat_int_o[17] , + wbs_dat_i[17] , + wbs_adr_i[17] , + wbs_dat_int_o[16] , + wbs_dat_i[16] , + wbs_adr_i[16] , + wbs_dat_int_o[15] , + wbs_dat_i[15] , + wbs_adr_i[15] , + wbs_dat_int_o[14] , + wbs_dat_i[14] , + wbs_adr_i[14] , + wbs_dat_int_o[13] , + wbs_dat_i[13] , + wbs_adr_i[13] , + wbs_dat_int_o[12] , + wbs_dat_i[12] , + wbs_adr_i[12] , + wbs_dat_int_o[11] , + wbs_dat_i[11] , + wbs_adr_i[11] , + wbs_dat_int_o[10] , + wbs_dat_i[10] , + wbs_adr_i[10] , + wbs_dat_int_o[9] , + wbs_dat_i[9] , + wbs_adr_i[9] , + wbs_dat_int_o[8] , // 36 + wbs_dat_i[8] , + wbs_adr_i[8] , + wbs_dat_int_o[7] , // 33 + wbs_dat_i[7] , + wbs_adr_i[7] , + wbs_dat_int_o[6] , // 30 + wbs_dat_i[6] , + wbs_adr_i[6] , + wbs_dat_int_o[5] , // 27 + wbs_dat_i[5] , + wbs_adr_i[5] , + wbs_dat_int_o[4] , // 24 + wbs_dat_i[4] , + wbs_adr_i[4] , + wbs_sel_i[3] , + wbs_dat_int_o[3] , // 20 + wbs_dat_i[3] , + wbs_adr_i[3] , + wbs_sel_i[2] , + wbs_dat_int_o[2] , // 16 + wbs_dat_i[2] , + wbs_adr_i[2] , + wbs_sel_i[1] , + wbs_dat_int_o[1] , // 12 + wbs_dat_i[1] , + wbs_adr_i[1] , + wbs_sel_i[0] , + wbs_dat_int_o[0] , // 8 + wbs_dat_i[0] , + wbs_adr_i[0] , + wbs_we_i , + wbs_stb_i , + wbs_cyc_i , + wbs_ack_int_o , + wb_rst_i , + wb_clk_i + }; +wire [270:0] ch_out_south ; +assign { + user_clock2_rp , + la_data_out[127], + la_data_out[126], + la_data_out[125], + la_data_out[124], + la_data_out[123], + la_data_out[122], + la_data_out[121], + la_data_out[120], + la_data_out[119], + la_data_out[118], + la_data_out[117], + la_data_out[116], + la_data_out[115], + la_data_out[114], + la_data_out[113], + la_data_out[112], + la_data_out[111], + la_data_out[110], + la_data_out[109], + la_data_out[108], + la_data_out[107], + la_data_out[106], + la_data_out[105], + la_data_out[104], + la_data_out[103], + la_data_out[102], + la_data_out[101], + la_data_out[100], + la_data_out[99], + la_data_out[98], + la_data_out[97], + la_data_out[96], + la_data_out[95], + la_data_out[94], + la_data_out[93], + la_data_out[92], + la_data_out[91], + la_data_out[90], + la_data_out[89], + la_data_out[88], + la_data_out[87], + la_data_out[86], + la_data_out[85], + la_data_out[84], + la_data_out[83], + la_data_out[82], + la_data_out[81], + la_data_out[80], + la_data_out[79], + la_data_out[78], + la_data_out[77], + la_data_out[76], + la_data_out[75], + la_data_out[74], + la_data_out[73], + la_data_out[72], + la_data_out[71], + la_data_out[70], + la_data_out[69], + la_data_out[68], + la_data_out[67], + la_data_out[66], + la_data_out[65], + la_data_out[64], + la_data_out[63], + la_data_out[62], + la_data_out[61], + la_data_out[60], + la_data_out[59], + la_data_out[58], + la_data_out[57], + la_data_out[56], + la_data_out[55], + la_data_out[54], + la_data_out[53], + la_data_out[52], + la_data_out[51], + la_data_out[50], + la_data_out[49], + la_data_out[48], + la_data_out[47], + la_data_out[46], + la_data_out[45], + la_data_out[44], + la_data_out[43], + la_data_out[42], + la_data_out[41], + la_data_out[40], + la_data_out[39], + la_data_out[38], + la_data_out[37], + la_data_out[36], + la_data_in_rp[35], + la_data_out[34], + la_data_in_rp[34], + la_data_out[33], + la_data_in_rp[33], + la_data_out[32], + la_data_in_rp[32], + la_data_out[31], + la_data_in_rp[31], + la_data_out[30], + la_data_in_rp[30], + la_data_out[29], + la_data_in_rp[29], + la_data_out[28], + la_data_in_rp[28], + la_data_out[27], + la_data_in_rp[27], + la_data_out[26], + la_data_in_rp[26], + la_data_out[25], + la_data_in_rp[25], + la_data_out[24], + la_data_in_rp[24], + la_data_out[23], + la_data_in_rp[23], + la_data_out[22], + la_data_in_rp[22], + la_data_out[21], + la_data_in_rp[21], + la_data_out[20], + la_data_in_rp[20], + la_data_out[19], + la_data_in_rp[19], + la_data_out[18], + la_data_in_rp[18], + la_data_out[17], + la_data_in_rp[17], + la_data_out[16], + la_data_in_rp[16], + la_data_out[15], + la_data_in_rp[15], + la_data_out[14], + la_data_in_rp[14], + la_data_out[13], + la_data_in_rp[13], + la_data_out[12], + la_data_in_rp[12], + la_data_out[11], + la_data_in_rp[11], + la_data_out[10], + la_data_in_rp[10], + la_data_out[9], + la_data_in_rp[9], + la_data_out[8], + la_data_in_rp[8], + la_data_out[7], + la_data_in_rp[7], + la_data_out[6], + la_data_in_rp[6], + la_data_out[5], + la_data_in_rp[5], + la_data_out[4], + la_data_in_rp[4], + la_data_out[3], + la_data_in_rp[3], + la_data_out[2], + la_data_in_rp[2], + la_data_out[1], + la_data_in_rp[1], + la_data_out[0], + la_data_in_rp[0], + + wbs_dat_o[31] , + wbs_dat_i_rp[31], + wbs_adr_i_rp[31], + wbs_dat_o[30] , + wbs_dat_i_rp[30], + wbs_adr_i_rp[30], + wbs_dat_o[29] , + wbs_dat_i_rp[29], + wbs_adr_i_rp[29], + wbs_dat_o[28] , + wbs_dat_i_rp[28], + wbs_adr_i_rp[28], + wbs_dat_o[27] , + wbs_dat_i_rp[27], + wbs_adr_i_rp[27], + wbs_dat_o[26] , + wbs_dat_i_rp[26], + wbs_adr_i_rp[26], + wbs_dat_o[25] , + wbs_dat_i_rp[25], + wbs_adr_i_rp[25], + wbs_dat_o[24] , + wbs_dat_i_rp[24], + wbs_adr_i_rp[24], + wbs_dat_o[23] , + wbs_dat_i_rp[23], + wbs_adr_i_rp[23], + wbs_dat_o[22] , + wbs_dat_i_rp[22], + wbs_adr_i_rp[22], + wbs_dat_o[21] , + wbs_dat_i_rp[21], + wbs_adr_i_rp[21], + wbs_dat_o[20] , + wbs_dat_i_rp[20], + wbs_adr_i_rp[20], + wbs_dat_o[19] , + wbs_dat_i_rp[19], + wbs_adr_i_rp[19], + wbs_dat_o[18] , + wbs_dat_i_rp[18], + wbs_adr_i_rp[18], + wbs_dat_o[17] , + wbs_dat_i_rp[17], + wbs_adr_i_rp[17], + wbs_dat_o[16] , + wbs_dat_i_rp[16], + wbs_adr_i_rp[16], + wbs_dat_o[15] , + wbs_dat_i_rp[15], + wbs_adr_i_rp[15], + wbs_dat_o[14] , + wbs_dat_i_rp[14], + wbs_adr_i_rp[14], + wbs_dat_o[13] , + wbs_dat_i_rp[13], + wbs_adr_i_rp[13], + wbs_dat_o[12] , + wbs_dat_i_rp[12], + wbs_adr_i_rp[12], + wbs_dat_o[11] , + wbs_dat_i_rp[11], + wbs_adr_i_rp[11], + wbs_dat_o[10] , + wbs_dat_i_rp[10], + wbs_adr_i_rp[10], + wbs_dat_o[9] , + wbs_dat_i_rp[9], + wbs_adr_i_rp[9], + wbs_dat_o[8] , + wbs_dat_i_rp[8], + wbs_adr_i_rp[8], + wbs_dat_o[7] , + wbs_dat_i_rp[7], + wbs_adr_i_rp[7], + wbs_dat_o[6] , + wbs_dat_i_rp[6], + wbs_adr_i_rp[6], + wbs_dat_o[5] , + wbs_dat_i_rp[5], + wbs_adr_i_rp[5], + wbs_dat_o[4] , + wbs_dat_i_rp[4], + wbs_adr_i_rp[4], + + wbs_sel_i_rp[3] , + wbs_dat_o[3] , + wbs_dat_i_rp[3] , + wbs_adr_i_rp[3] , + wbs_sel_i_rp[2] , + wbs_dat_o[2] , + wbs_dat_i_rp[2] , + wbs_adr_i_rp[2] , + wbs_sel_i_rp[1] , + wbs_dat_o[1] , + wbs_dat_i_rp[1] , + wbs_adr_i_rp[1] , + wbs_sel_i_rp[0] , + wbs_dat_o[0] , + wbs_dat_i_rp[0] , + wbs_adr_i_rp[0] , + wbs_we_i_rp , + wbs_stb_i_rp , + wbs_cyc_i_rp , + wbs_ack_o , + wb_rst_i_rp , + wb_clk_i_rp + } = ch_out_south; + +bus_rep_south #( +`ifndef SYNTHESIS +.BUS_REP_WD(271) +`endif + ) u_rp_south( +`ifdef USE_POWER_PINS + .vccd1 (vccd1 ), + .vssd1 (vssd1 ), +`endif + .ch_in (ch_in_south), + .ch_out (ch_out_south) + ); + + +/********************************************* + Bus Repeater WEST +**********************************************/ + +wire [41:0] ch_in_west = { + io_oeb_rp1[37], + io_out_rp1[37], + io_in[37], + io_oeb_rp1[36], + io_out_rp1[36], + io_in[36], + io_oeb_rp1[35], + io_out_rp1[35], + io_in[35], + io_oeb_rp1[34], + io_out_rp1[34], + io_in[34], + io_oeb_rp1[33], + io_out_rp1[33], + io_in[33], + io_oeb_rp1[32], + io_out_rp1[32], + io_in[32], + io_oeb_rp1[31], + io_out_rp1[31], + io_in[31], + io_oeb_rp1[30], + io_out_rp1[30], + io_in[30], + io_oeb_rp1[29], + io_out_rp1[29], + io_in[29], + io_oeb_rp1[28], + io_out_rp1[28], + io_in[28], + io_oeb_rp1[27], + io_out_rp1[27], + io_in[27], + io_oeb_rp1[26], + io_out_rp1[26], + io_in[26], + io_oeb_rp1[25], + io_out_rp1[25], + io_in[25], + io_oeb_rp1[24], + io_out_rp1[24], + io_in[24] + }; + +wire [41:0] ch_out_west ; +assign { + io_oeb[37], + io_out[37], + io_in_rp1[37], + io_oeb[36], + io_out[36], + io_in_rp1[36], + io_oeb[35], + io_out[35], + io_in_rp1[35], + io_oeb[34], + io_out[34], + io_in_rp1[34], + io_oeb[33], + io_out[33], + io_in_rp1[33], + io_oeb[32], + io_out[32], + io_in_rp1[32], + io_oeb[31], + io_out[31], + io_in_rp1[31], + io_oeb[30], + io_out[30], + io_in_rp1[30], + io_oeb[29], + io_out[29], + io_in_rp1[29], + io_oeb[28], + io_out[28], + io_in_rp1[28], + io_oeb[27], + io_out[27], + io_in_rp1[27], + io_oeb[26], + io_out[26], + io_in_rp1[26], + io_oeb[25], + io_out[25], + io_in_rp1[25], + io_oeb[24], + io_out[24], + io_in_rp1[24] + + } = ch_out_west; + +bus_rep_west #( +`ifndef SYNTHESIS +.BUS_REP_WD(42) +`endif + ) u_rp_west( +`ifdef USE_POWER_PINS + .vccd1 (vccd1 ), + .vssd1 (vssd1 ), +`endif + .ch_in (ch_in_west), + .ch_out (ch_out_west) + ); + +/********************************************* + Bus Repeater NORTH +**********************************************/ + +wire [26:0] ch_in_north = { + io_in[15], + io_out_int[15], + io_oeb_int[15], + io_in[16], + io_out_int[16], + io_oeb_int[16], + io_in[17], + io_out_int[17], + io_oeb_int[17], + io_in[18], + io_out_int[18], + io_oeb_int[18], + io_in[19], + io_out_int[19], + io_oeb_int[19], + io_in[20], + io_out_int[20], + io_oeb_int[20], + io_in[21], + io_out_int[21], + io_oeb_int[21], + io_in[22], + io_out_int[22], + io_oeb_int[22], + io_in[23], + io_out_int[23], + io_oeb_int[23] + }; + + +wire [26:0] ch_out_north ; +assign { + io_in_rp1[15], + io_out[15], + io_oeb[15], + io_in_rp1[16], + io_out[16], + io_oeb[16], + io_in_rp1[17], + io_out[17], + io_oeb[17], + io_in_rp1[18], + io_out[18], + io_oeb[18], + io_in_rp1[19], + io_out[19], + io_oeb[19], + io_in_rp1[20], + io_out[20], + io_oeb[20], + io_in_rp1[21], + io_out[21], + io_oeb[21], + io_in_rp1[22], + io_out[22], + io_oeb[22], + io_in_rp1[23], + io_out[23], + io_oeb[23] + } = ch_out_north; + +//-------------------------------------------------------------------------------- +// As West boundary is far from Pinmux module, there is feed through created +// through the north repeater block +// Buffering from Pinmux to PAD , feed through Pinmux <=> north <=> west +//-------------------------------------------------------------------------------- + +wire [41:0] buf_in_north = { + io_oeb_int[37], + io_out_int[37], + io_in_rp1[37], + io_oeb_int[36], + io_out_int[36], + io_in_rp1[36], + io_oeb_int[35], + io_out_int[35], + io_in_rp1[35], + io_oeb_int[34], + io_out_int[34], + io_in_rp1[34], + io_oeb_int[33], + io_out_int[33], + io_in_rp1[33], + io_oeb_int[32], + io_out_int[32], + io_in_rp1[32], + io_oeb_int[31], + io_out_int[31], + io_in_rp1[31], + io_oeb_int[30], + io_out_int[30], + io_in_rp1[30], + io_oeb_int[29], + io_out_int[29], + io_in_rp1[29], + io_oeb_int[28], + io_out_int[28], + io_in_rp1[28], + io_oeb_int[27], + io_out_int[27], + io_in_rp1[27], + io_oeb_int[26], + io_out_int[26], + io_in_rp1[26], + io_oeb_int[25], + io_out_int[25], + io_in_rp1[25], + io_oeb_int[24], + io_out_int[24], + io_in_rp1[24] + }; + +wire [41:0] buf_out_north ; +assign { + io_oeb_rp1[37], + io_out_rp1[37], + io_in_rp2[37], + io_oeb_rp1[36], + io_out_rp1[36], + io_in_rp2[36], + io_oeb_rp1[35], + io_out_rp1[35], + io_in_rp2[35], + io_oeb_rp1[34], + io_out_rp1[34], + io_in_rp2[34], + io_oeb_rp1[33], + io_out_rp1[33], + io_in_rp2[33], + io_oeb_rp1[32], + io_out_rp1[32], + io_in_rp2[32], + io_oeb_rp1[31], + io_out_rp1[31], + io_in_rp2[31], + io_oeb_rp1[30], + io_out_rp1[30], + io_in_rp2[30], + io_oeb_rp1[29], + io_out_rp1[29], + io_in_rp2[29], + io_oeb_rp1[28], + io_out_rp1[28], + io_in_rp2[28], + io_oeb_rp1[27], + io_out_rp1[27], + io_in_rp2[27], + io_oeb_rp1[26], + io_out_rp1[26], + io_in_rp2[26], + io_oeb_rp1[25], + io_out_rp1[25], + io_in_rp2[25], + io_oeb_rp1[24], + io_out_rp1[24], + io_in_rp2[24] + + } = buf_out_north; + +bus_rep_north #( +`ifndef SYNTHESIS +.BUS_REP_WD(27), +.BUS_BUF_WD(42) +`endif + ) u_rp_north( +`ifdef USE_POWER_PINS + .vccd1 (vccd1 ), + .vssd1 (vssd1 ), +`endif + .ch_in (ch_in_north), + .ch_out (ch_out_north), + .buf_in (buf_in_north), + .buf_out (buf_out_north) + ); + +/********************************************* + Bus Repeater EAST +**********************************************/ + +wire [44:0] ch_in_east = { + io_in[0], + io_out_int[0], + io_oeb_int[0], + io_in[1], + io_out_int[1], + io_oeb_int[1], + io_in[2], + io_out_int[2], + io_oeb_int[2], + io_in[3], + io_out_int[3], + io_oeb_int[3], + io_in[4], + io_out_int[4], + io_oeb_int[4], + io_in[5], + io_out_int[5], + io_oeb_int[5], + io_in[6], + io_out_int[6], + io_oeb_int[6], + io_in[7], + io_out_int[7], + io_oeb_int[7], + io_in[8], + io_out_int[8], + io_oeb_int[8], + io_in[9], + io_out_int[9], + io_oeb_int[9], + io_in[10], + io_out_int[10], + io_oeb_int[10], + io_in[11], + io_out_int[11], + io_oeb_int[11], + io_in[12], + io_out_int[12], + io_oeb_int[12], + io_in[13], + io_out_int[13], + io_oeb_int[13], + io_in[14], + io_out_int[14], + io_oeb_int[14] + }; + + +wire [44:0] ch_out_east ; +assign { + io_in_rp1[0], + io_out[0], + io_oeb[0], + io_in_rp1[1], + io_out[1], + io_oeb[1], + io_in_rp1[2], + io_out[2], + io_oeb[2], + io_in_rp1[3], + io_out[3], + io_oeb[3], + io_in_rp1[4], + io_out[4], + io_oeb[4], + io_in_rp1[5], + io_out[5], + io_oeb[5], + io_in_rp1[6], + io_out[6], + io_oeb[6], + io_in_rp1[7], + io_out[7], + io_oeb[7], + io_in_rp1[8], + io_out[8], + io_oeb[8], + io_in_rp1[9], + io_out[9], + io_oeb[9], + io_in_rp1[10], + io_out[10], + io_oeb[10], + io_in_rp1[11], + io_out[11], + io_oeb[11], + io_in_rp1[12], + io_out[12], + io_oeb[12], + io_in_rp1[13], + io_out[13], + io_oeb[13], + io_in_rp1[14], + io_out[14], + io_oeb[14] + } = ch_out_east; + +bus_rep_east #( +`ifndef SYNTHESIS +.BUS_REP_WD(45) +`endif + ) u_rp_east( +`ifdef USE_POWER_PINS + .vccd1 (vccd1 ), + .vssd1 (vssd1 ), +`endif + .ch_in (ch_in_east), + .ch_out (ch_out_east) + ); + +//--------------------------------------------------------- +// No Repeated added for these ports yet +//--------------------------------------------------------- +//assign io_oeb[14:0] = io_oeb_int[14:0]; +//assign io_out[14:0] = io_out_int[14:0]; +assign io_in_rp[37:0] = {io_in_rp2[37:24],io_in_rp1[23:0]}; + +//assign io_oeb[37:24] = io_oeb_int[37:24]; +//assign io_out[37:24] = io_out_int[37:24]; +//assign io_in_rp1[37:24] = io_in[37:24];
diff --git a/verilog/rtl/glbl/src/glbl_cfg.sv b/verilog/rtl/glbl/src/glbl_cfg.sv index 6772da9..ebc3d50 100644 --- a/verilog/rtl/glbl/src/glbl_cfg.sv +++ b/verilog/rtl/glbl/src/glbl_cfg.sv
@@ -83,7 +83,9 @@ // Outputs output logic [31:0] reg_rdata, - output logic reg_ack + output logic reg_ack, + + output logic [31:0] cfg_mac_clk_ctrl ); @@ -104,6 +106,7 @@ logic [31:0] reg_0; // Software_Reg 0 logic [31:0] reg_1; // Software Reg 1 +logic [31:0] reg_8; // Software Reg 1 logic [31:0] reg_9; // Software_Reg 9 logic [31:0] reg_10; // Software Reg 10 logic [31:0] reg_11; // Software Reg 11 @@ -169,6 +172,7 @@ case (sw_addr [3:0]) 4'b0000 : reg_out [31:0] = reg_0; 4'b0001 : reg_out [31:0] = reg_1; + 4'b1000 : reg_out [31:0] = reg_8; // Software Reg1 4'b1001 : reg_out [31:0] = reg_9; // Software Reg1 4'b1010 : reg_out [31:0] = reg_10; // Software Reg2 4'b1011 : reg_out [31:0] = reg_11; // Software Reg3 @@ -273,6 +277,23 @@ ); +//--------------------------------------------- +// Reg-8: Mac clock control +//--------------------------------------------- +gen_32b_reg #(32'h0) u_reg_8 ( + //List of Inputs + .reset_n (reset_n ), + .clk (mclk ), + .cs (sw_wr_en_8 ), + .we (wr_be ), + .data_in (sw_reg_wdata ), + + //List of Outs + .data_out (reg_8 ) + ); + +assign cfg_mac_clk_ctrl = reg_8; + //----------------------------------------- // Software Reg-1 : ASCI Representation of LBST = 32'h4C66_8354 // ---------------------------------------- @@ -291,7 +312,7 @@ //----------------------------------------- // Software Reg-2, Release date: <DAY><MONTH><YEAR> // ---------------------------------------- -gen_32b_reg #(32'h1603_2022) u_reg_101 ( +gen_32b_reg #(32'h1603_2022) u_reg_10 ( //List of Inputs .reset_n (reset_n ), .clk (mclk ),
diff --git a/verilog/rtl/lib/ctech_cells.sv b/verilog/rtl/lib/ctech_cells.sv index a9c6693..2178cc9 100644 --- a/verilog/rtl/lib/ctech_cells.sv +++ b/verilog/rtl/lib/ctech_cells.sv
@@ -71,6 +71,28 @@ endmodule +module ctech_mux4x1 ( + input logic A00, + input logic A01, + input logic A10, + input logic A11, + input logic [1:0] S , + output logic X); + +`ifndef SYNTHESIS +assign X = (S == 2'b00) ? A00 : + (S == 2'b01) ? A01 : + (S == 2'b10) ? A10 : + (S == 2'b11) ? A11 : 'h0; +`else + logic X0,X1; + sky130_fd_sc_hd__mux2_4 u_mux_l00 (.A0 (A00), .A1 (A01), .S (S[0]), .X (X0)); + sky130_fd_sc_hd__mux2_4 u_mux_l01 (.A0 (A10), .A1 (A11), .S (S[0]), .X (X1)); + sky130_fd_sc_hd__mux2_4 u_mux_l10 (.A0 (X0), .A1 (X1), .S (S[1]), .X (X)); +`endif + +endmodule + module ctech_buf ( input logic A, output logic X);
diff --git a/verilog/rtl/pinmux/src/clkgen.sv b/verilog/rtl/pinmux/src/clkgen.sv new file mode 100644 index 0000000..d71d7b9 --- /dev/null +++ b/verilog/rtl/pinmux/src/clkgen.sv
@@ -0,0 +1,105 @@ +////////////////////////////////////////////////////////////////////////////// +// SPDX-FileCopyrightText: 2021 , Dinesh Annayya +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileContributor: Created by Dinesh Annayya <dinesh.annayya@gmail.com> +// +////////////////////////////////////////////////////////////////////// +/// +// Clock Generation Block +// +////////////////////////////////////////////////////////////////////// + +module clkgen ( + + // Global Reset/clok + input logic reset_n, + input logic mclk, + + // Clock from Pad + input logic pad_mac_tx_clk, + input logic pad_mac_rx_clk, + + // Configuration + input logic [1:0] cfg_mac_tx_clk_sel, + input logic [1:0] cfg_mac_rx_clk_sel, + input logic [1:0] cfg_mac_mdio_refclk_sel, + input logic [7:0] cfg_mdio_clk_div_ratio, + + output logic mac_rx_clk, + output logic mac_tx_clk, + output logic mdio_clk + + ); + + + + +//------------------------------------------------ +// GMAC Clock Generation +// ---------------------------------------------- + +// wire mac_rx_clk_int = (cfg_mac_rx_clk_sel == 2'b00) ? pad_mac_rx_clk : +// (cfg_mac_rx_clk_sel == 2'b01) ? pad_mac_tx_clk : mclk; + +ctech_mux4x1 u_mac_rxclk_mux (.A00(pad_mac_rx_clk), + .A01(pad_mac_tx_clk), + .A10(mclk), + .A11(mclk), + .S(cfg_mac_rx_clk_sel), + .X (mac_rx_clk) + ); + + + +//wire mac_tx_clk = (cfg_mac_tx_clk_sel == 2'b00) ? pad_mac_tx_clk : +// (cfg_mac_tx_clk_sel == 2'b01) ? pad_mac_rx_clk : mclk; + +ctech_mux4x1 u_mac_txclk_mux (.A00(pad_mac_tx_clk), + .A01(pad_mac_rx_clk), + .A10(mclk), + .A11(mclk), + .S(cfg_mac_tx_clk_sel), + .X (mac_tx_clk) + ); + +//----------------------------------- +// MDIO Clock Generation +//----------------------------------- + +wire mdio_clk_int,mdio_ref_clk; +//wire mdio_ref_clk = (cfg_mac_tx_clk_sel == 2'b00) ? pad_mac_tx_clk : +// (cfg_mac_tx_clk_sel == 2'b01) ? pad_mac_rx_clk : mclk; +// +ctech_mux4x1 u_mdio_ref_mux (.A00(pad_mac_tx_clk), + .A01(pad_mac_rx_clk), + .A10(mclk), + .A11(mclk), + .S(cfg_mac_mdio_refclk_sel), + .X (mdio_ref_clk) + ); + +ctech_clk_buf u_mdio_clkbuf (.A (mdio_clk_int), . X(mdio_clk)); +clk_ctl #(.WD(7)) U_CLK_MDIO ( + // Outputs + .clk_o (mdio_clk_int ), + // Inputs + .mclk (mdio_ref_clk ), + .reset_n (reset_n ), + .clk_div_ratio (cfg_mdio_clk_div_ratio ) + ); + +endmodule + +
diff --git a/verilog/rtl/pinmux/src/pinmux.sv b/verilog/rtl/pinmux/src/pinmux.sv index 3b3bf3d..3fa9b14 100644 --- a/verilog/rtl/pinmux/src/pinmux.sv +++ b/verilog/rtl/pinmux/src/pinmux.sv
@@ -21,7 +21,7 @@ //----------------------------------------------------------------------- // MDIO Signal //----------------------------------------------------------------------- - output logic mdio_clk , + input logic mdio_clk , output logic mdio_in , input logic mdio_out_en , input logic mdio_out , @@ -102,7 +102,7 @@ mac_rxd[3]= io_in[19]; // digital_io[20] - MAC-MDIC - mdio_clk = io_in[20]; + //mdio_clk = io_in[20]; // digital_io[21] - MAC-MDID mdio_in = io_in[21]; @@ -137,6 +137,9 @@ io_out[11] = mac_txd[3]; + // digital_io[20] - MAC-MDIC + io_out[20] = mdio_clk; + // digital_io[21] - MAC-MDID io_out[21] = mdio_out;
diff --git a/verilog/rtl/pinmux/src/pinmux_top.sv b/verilog/rtl/pinmux/src/pinmux_top.sv index 5670ba4..8835ac6 100644 --- a/verilog/rtl/pinmux/src/pinmux_top.sv +++ b/verilog/rtl/pinmux/src/pinmux_top.sv
@@ -82,6 +82,14 @@ ); +logic [1:0] cfg_mac_tx_clk_sel; +logic [1:0] cfg_mac_rx_clk_sel; +logic [1:0] cfg_mac_mdio_refclk_sel; +logic [7:0] cfg_mdio_clk_div_ratio; +logic pad_mac_tx_clk; +logic pad_mac_rx_clk; +logic [31:0] cfg_mac_clk_ctrl; + //----------------------------------------------------------------------- // Main code starts here //----------------------------------------------------------------------- @@ -127,30 +135,61 @@ // Outputs .reg_rdata (reg_rdata ), - .reg_ack (reg_ack ) + .reg_ack (reg_ack ), + .cfg_mac_clk_ctrl (cfg_mac_clk_ctrl ) ); +assign cfg_mac_tx_clk_sel = cfg_mac_clk_ctrl[1:0]; +assign cfg_mac_rx_clk_sel = cfg_mac_clk_ctrl[3:2]; +assign cfg_mac_mdio_refclk_sel = cfg_mac_clk_ctrl[5:4]; +assign cfg_mdio_clk_div_ratio = cfg_mac_clk_ctrl[15:8]; + + +clkgen u_clkgen ( + + // Global Reset/clok + .reset_n (reset_n ), + .mclk (mclk ), + + // Clock from Pad + .pad_mac_tx_clk (pad_mac_tx_clk ), + .pad_mac_rx_clk (pad_mac_rx_clk ), + + // Configuration + .cfg_mac_tx_clk_sel (cfg_mac_tx_clk_sel ), + .cfg_mac_rx_clk_sel (cfg_mac_rx_clk_sel ), + .cfg_mac_mdio_refclk_sel (cfg_mac_mdio_refclk_sel ), + .cfg_mdio_clk_div_ratio (cfg_mdio_clk_div_ratio ), + + .mac_rx_clk (mac_rx_clk ), + .mac_tx_clk (mac_tx_clk ), + .mdio_clk (mdio_clk ) + + ); + + + pinmux u_pinmux( //----------------------------------------------------------------------- // MAC-Tx Signal //----------------------------------------------------------------------- - .mac_tx_clk (mac_tx_clk ), - .mac_tx_en (mac_tx_en ), - .mac_tx_er (mac_tx_er ), - .mac_txd (mac_txd ), + .mac_tx_clk (pad_mac_tx_clk ), + .mac_tx_en (mac_tx_en ), + .mac_tx_er (mac_tx_er ), + .mac_txd (mac_txd ), //----------------------------------------------------------------------- // MAC-Rx Signal //----------------------------------------------------------------------- - .mac_rx_clk (mac_rx_clk ), - .mac_rx_er (mac_rx_er ), - .mac_rx_dv (mac_rx_dv ), - .mac_rxd (mac_rxd ), - .mac_crs (mac_crs ), + .mac_rx_clk (pad_mac_rx_clk ), + .mac_rx_er (mac_rx_er ), + .mac_rx_dv (mac_rx_dv ), + .mac_rxd (mac_rxd ), + .mac_crs (mac_crs ), //-----------------------------------------------------------------------
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v index bdf64e7..e0b7809 100644 --- a/verilog/rtl/user_project_wrapper.v +++ b/verilog/rtl/user_project_wrapper.v
@@ -385,6 +385,26 @@ wire cfg_mem_lphase = cfg_clk_ctrl1[31]; // SRAM data lanuch phase selection +//---------------------------------------------------------- +// Bus Repeater Initiatiation +//---------------------------------------------------------- +wire [37:0] io_in_rp ; +wire [37:0] io_in_rp1 ; +wire [37:0] io_in_rp2 ; +wire [37:0] io_out_int ; +wire [37:0] io_oeb_int ; +wire [37:0] io_out_rp1 ; +wire [37:0] io_oeb_rp1 ; +wire user_clock2_rp ; +wire [127:0] la_data_out_int ; + +`include "bus_repeater.sv" + +/*********************************************** + Wishbone HOST +*************************************************/ + + wb_host #( `ifndef SYNTHESIS @@ -401,62 +421,62 @@ .user_irq (user_irq ), // Master Port - .wbm_rst_i (wb_rst_i ), - .wbm_clk_i (wb_clk_i ), - .wbm_cyc_i (wbs_cyc_i ), - .wbm_stb_i (wbs_stb_i ), - .wbm_adr_i (wbs_adr_i ), - .wbm_we_i (wbs_we_i ), - .wbm_dat_i (wbs_dat_i ), - .wbm_sel_i (wbs_sel_i ), - .wbm_dat_o (wbs_dat_o ), - .wbm_ack_o (wbs_ack_o ), - .wbm_err_o ( ), + .wbm_rst_i (wb_rst_i_rp ), + .wbm_clk_i (wb_clk_i_rp ), + .wbm_cyc_i (wbs_cyc_i_rp ), + .wbm_stb_i (wbs_stb_i_rp ), + .wbm_adr_i (wbs_adr_i_rp ), + .wbm_we_i (wbs_we_i_rp ), + .wbm_dat_i (wbs_dat_i_rp ), + .wbm_sel_i (wbs_sel_i_rp ), + .wbm_dat_o (wbs_dat_int_o ), + .wbm_ack_o (wbs_ack_int_o ), + .wbm_err_o ( ), // Clock Skeq Adjust - .wbd_clk_int (wbd_clk_int ), - .wbd_clk_wh (wbd_clk_wh ), - .cfg_cska_wh (cfg_cska_wh ), + .wbd_clk_int (wbd_clk_int ), + .wbd_clk_wh (wbd_clk_wh ), + .cfg_cska_wh (cfg_cska_wh ), // Clock Skeq Adjust - .lbist_clk_int (lbist_clk ), - .lbist_clk_out (lbist_clk ), - .cfg_cska_lbist (cfg_cska_lbist ), + .lbist_clk_int (lbist_clk ), + .lbist_clk_out (lbist_clk ), + .cfg_cska_lbist (cfg_cska_lbist ), // Slave Port - .wbs_clk_out (wbd_clk_int ), - .wbs_clk_i (wbd_clk_wh ), - .wbs_cyc_o (wbd_int_cyc_i ), - .wbs_stb_o (wbd_int_stb_i ), - .wbs_adr_o (wbd_int_adr_i ), - .wbs_we_o (wbd_int_we_i ), - .wbs_dat_o (wbd_int_dat_i ), - .wbs_sel_o (wbd_int_sel_i ), - .wbs_dat_i (wbd_int_dat_o ), - .wbs_ack_i (wbd_int_ack_o ), - .wbs_err_i (wbd_int_err_o ), + .wbs_clk_out (wbd_clk_int ), + .wbs_clk_i (wbd_clk_wh ), + .wbs_cyc_o (wbd_int_cyc_i ), + .wbs_stb_o (wbd_int_stb_i ), + .wbs_adr_o (wbd_int_adr_i ), + .wbs_we_o (wbd_int_we_i ), + .wbs_dat_o (wbd_int_dat_i ), + .wbs_sel_o (wbd_int_sel_i ), + .wbs_dat_i (wbd_int_dat_o ), + .wbs_ack_i (wbd_int_ack_o ), + .wbs_err_i (wbd_int_err_o ), - .cfg_clk_ctrl1 (cfg_clk_ctrl1 ), - .cfg_clk_ctrl2 (cfg_clk_ctrl2 ), + .cfg_clk_ctrl1 (cfg_clk_ctrl1 ), + .cfg_clk_ctrl2 (cfg_clk_ctrl2 ), - .mac_rst_n (mac_rst_n ), - .bist_rst_n (bist_rst_n ), - .wbd_int_rst_n (wbd_int_rst_n ), + .mac_rst_n (mac_rst_n ), + .bist_rst_n (bist_rst_n ), + .wbd_int_rst_n (wbd_int_rst_n ), - .la_data_in (la_data_in[35:0] ), - .la_data_out (la_data_out ), + .la_data_in (la_data_in_rp[35:0] ), + .la_data_out (la_data_out_int ), - .uartm_rxd (uartm_rxd ), - .uartm_txd (uartm_txd ), + .uartm_rxd (uartm_rxd ), + .uartm_txd (uartm_txd ), // Scan Control Signal - .scan_clk (scan_clk ), - .scan_rst_n (scan_rst_n ), - .scan_mode (scan_mode ), - .scan_en (scan_en ), - .scan_in (scan_in ), - .scan_out (scan_so_mac ) + .scan_clk (scan_clk ), + .scan_rst_n (scan_rst_n ), + .scan_mode (scan_mode ), + .scan_en (scan_en ), + .scan_in (scan_in ), + .scan_out (scan_so_mac ) ); @@ -662,9 +682,9 @@ //------------------------------------- // Caravel IO I/F //------------------------------------- - .io_in (io_in ), - .io_out (io_out ), - .io_oeb (io_oeb ) + .io_in (io_in_rp ), + .io_out (io_out_int ), + .io_oeb (io_oeb_int ) );