diff --git a/src/drt/README.md b/src/drt/README.md index 0076aa21fa7..ce3a4a46bda 100644 --- a/src/drt/README.md +++ b/src/drt/README.md @@ -85,8 +85,8 @@ detailed_route | `-min_access_points` | Refer to pin access arguments [here](#pin-access-arguments). | | `-or_seed` | Refer to developer arguments [here](#developer-arguments). | | `-or_k` | Refer to developer arguments [here](#developer-arguments). | -| `-bottom_routing_layer` | Bottommost routing layer name. | -| `-top_routing_layer` | Topmost routing layer name. | +| `-bottom_routing_layer` | Deprecated. Use the `set_routing_layers` command instead. | +| `-top_routing_layer` | Deprecated. Use the `set_routing_layers` command instead. | | `-verbose` | Sets verbose mode if the value is greater than 1, else non-verbose mode (must be integer, or error will be triggered.) | | `-distributed` | Refer to distributed arguments [here](#distributed-arguments). | | `-remote_host` | Refer to distributed arguments [here](#distributed-arguments). | @@ -179,8 +179,8 @@ pin_access | Switch Name | Description | | ----- | ----- | | `-db_process_node` | Specify process node. | -| `-bottom_routing_layer` | Bottommost routing layer. | -| `-top_routing_layer` | Topmost routing layer name. | +| `-bottom_routing_layer` | Deprecated. Use the `set_routing_layers` command instead. | +| `-top_routing_layer` | Deprecated. Use the `set_routing_layers` command instead. | | `-via_access_layer` | Refer to pin access arguments [here](#pin-access-arguments). | | `-via_in_pin_bottom_layer` | Refer to pin access arguments [here](#pin-access-arguments). | | `-via_in_pin_top_layer` | Refer to pin access arguments [here](#pin-access-arguments). | diff --git a/src/drt/include/triton_route/TritonRoute.h b/src/drt/include/triton_route/TritonRoute.h index 6a4864b3816..c42b2553a43 100644 --- a/src/drt/include/triton_route/TritonRoute.h +++ b/src/drt/include/triton_route/TritonRoute.h @@ -67,8 +67,6 @@ struct ParamStruct std::string viaAccessLayer; int orSeed = 0; double orK = 0; - std::string bottomRoutingLayer; - std::string topRoutingLayer; int verbose = 1; bool cleanPatches = false; bool doPa = false; diff --git a/src/drt/src/TritonRoute.cpp b/src/drt/src/TritonRoute.cpp index 4e5e7570b9b..2bef5547f50 100644 --- a/src/drt/src/TritonRoute.cpp +++ b/src/drt/src/TritonRoute.cpp @@ -1275,12 +1275,6 @@ void TritonRoute::setParams(const ParamStruct& params) } router_cfg_->OR_SEED = params.orSeed; router_cfg_->OR_K = params.orK; - if (!params.bottomRoutingLayer.empty()) { - router_cfg_->BOTTOM_ROUTING_LAYER_NAME = params.bottomRoutingLayer; - } - if (!params.topRoutingLayer.empty()) { - router_cfg_->TOP_ROUTING_LAYER_NAME = params.topRoutingLayer; - } if (params.minAccessPoints > 0) { router_cfg_->MINNUMACCESSPOINT_STDCELLPIN = params.minAccessPoints; router_cfg_->MINNUMACCESSPOINT_MACROCELLPIN = params.minAccessPoints; diff --git a/src/drt/src/TritonRoute.i b/src/drt/src/TritonRoute.i index b4814b3eb4d..7a7a7eeeedf 100644 --- a/src/drt/src/TritonRoute.i +++ b/src/drt/src/TritonRoute.i @@ -60,8 +60,6 @@ void detailed_route_cmd(const char* outputMazeFile, const char* viaAccessLayer, int orSeed, double orK, - const char* bottomRoutingLayer, - const char* topRoutingLayer, int verbose, bool cleanPatches, bool noPa, @@ -90,8 +88,6 @@ void detailed_route_cmd(const char* outputMazeFile, viaAccessLayer, orSeed, orK, - bottomRoutingLayer, - topRoutingLayer, verbose, cleanPatches, !noPa, @@ -105,8 +101,6 @@ void detailed_route_cmd(const char* outputMazeFile, } void pin_access_cmd(const char* dbProcessNode, - const char* bottomRoutingLayer, - const char* topRoutingLayer, const char* viaAccessLayer, int verbose, int minAccessPoints, @@ -116,8 +110,6 @@ void pin_access_cmd(const char* dbProcessNode, auto* router = ord::OpenRoad::openRoad()->getTritonRoute(); drt::ParamStruct params; params.dbProcessNode = dbProcessNode; - params.bottomRoutingLayer = bottomRoutingLayer; - params.topRoutingLayer = topRoutingLayer; params.verbose = verbose; params.viaAccessLayer = viaAccessLayer; params.minAccessPoints = minAccessPoints; diff --git a/src/drt/src/TritonRoute.tcl b/src/drt/src/TritonRoute.tcl index 30b65ba78aa..107108565b0 100644 --- a/src/drt/src/TritonRoute.tcl +++ b/src/drt/src/TritonRoute.tcl @@ -122,14 +122,12 @@ proc detailed_route { args } { set or_k 0 } if { [info exists keys(-bottom_routing_layer)] } { - set bottom_routing_layer $keys(-bottom_routing_layer) - } else { - set bottom_routing_layer "" + utl::warn DRT 509 "-bottom_routing_layer is deprecated.\ + Use set_routing_layers command instead." } if { [info exists keys(-top_routing_layer)] } { - set top_routing_layer $keys(-top_routing_layer) - } else { - set top_routing_layer "" + utl::warn DRT 510 "-top_routing_layer is deprecated.\ + Use set_routing_layers command instead." } if { [info exists keys(-verbose)] } { sta::check_positive_integer "-verbose" $keys(-verbose) @@ -169,7 +167,7 @@ proc detailed_route { args } { drt::detailed_route_cmd $output_maze $output_drc $output_cmap \ $output_guide_coverage $db_process_node $enable_via_gen $droute_end_iter \ $via_in_pin_bottom_layer $via_in_pin_top_layer \ - $via_access_layer $or_seed $or_k $bottom_routing_layer $top_routing_layer $verbose \ + $via_access_layer $or_seed $or_k $verbose \ $clean_patches $no_pin_access $single_step_dr $min_access_points \ $save_guide_updates $repair_pdn_vias $drc_report_iter_step } @@ -296,14 +294,12 @@ proc pin_access { args } { set db_process_node "" } if { [info exists keys(-bottom_routing_layer)] } { - set bottom_routing_layer $keys(-bottom_routing_layer) - } else { - set bottom_routing_layer "" + utl::warn DRT 511 "-bottom_routing_layer is deprecated.\ + Use set_routing_layers command instead." } if { [info exists keys(-top_routing_layer)] } { - set top_routing_layer $keys(-top_routing_layer) - } else { - set top_routing_layer "" + utl::warn DRT 514 "-top_routing_layer is deprecated.\ + Use set_routing_layers command instead." } if { [info exists keys(-via_access_layer)] } { set via_access_layer $keys(-via_access_layer) @@ -355,8 +351,8 @@ proc pin_access { args } { } drt::detailed_route_distributed $rhost $rport $vol $cloudsz } - drt::pin_access_cmd $db_process_node $bottom_routing_layer \ - $top_routing_layer $via_access_layer $verbose $min_access_points \ + drt::pin_access_cmd $db_process_node \ + $via_access_layer $verbose $min_access_points \ $via_in_pin_bottom_layer $via_in_pin_top_layer } diff --git a/src/drt/src/global.h b/src/drt/src/global.h index b613c8f2903..0813bffebbe 100644 --- a/src/drt/src/global.h +++ b/src/drt/src/global.h @@ -39,8 +39,6 @@ struct RouterConfiguration int MTSAFEDIST = 2000; int DRCSAFEDIST = 500; int VERBOSE = 1; - std::string BOTTOM_ROUTING_LAYER_NAME; - std::string TOP_ROUTING_LAYER_NAME; int BOTTOM_ROUTING_LAYER = 2; int TOP_ROUTING_LAYER = std::numeric_limits::max(); bool ALLOW_PIN_AS_FEEDTHROUGH = true; diff --git a/src/drt/src/io/io.cpp b/src/drt/src/io/io.cpp index 84bbf802311..ff6b8aceede 100644 --- a/src/drt/src/io/io.cpp +++ b/src/drt/src/io/io.cpp @@ -3029,7 +3029,8 @@ void io::Parser::readTechAndLibs(odb::dbDatabase* db) } auto tech = db->getTech(); - if (tech == nullptr) { + auto block = db_->getChip()->getBlock(); + if (tech == nullptr || block == nullptr) { logger_->error(DRT, 136, "Load design first."); } getTech()->setDBUPerUU(tech->getDbUnitsPerMicron()); @@ -3039,27 +3040,32 @@ void io::Parser::readTechAndLibs(odb::dbDatabase* db) setLayers(tech); auto fr_tech = getTech(); - if (!router_cfg_->BOTTOM_ROUTING_LAYER_NAME.empty()) { - frLayer* layer = fr_tech->getLayer(router_cfg_->BOTTOM_ROUTING_LAYER_NAME); + + const int min_routing_layer = block->getMinRoutingLayer(); + if (min_routing_layer > 0) { + odb::dbTechLayer* tech_layer = tech->findRoutingLayer(min_routing_layer); + frLayer* layer = fr_tech->getLayer(tech_layer->getName()); if (layer) { router_cfg_->BOTTOM_ROUTING_LAYER = layer->getLayerNum(); } else { logger_->warn(utl::DRT, 272, "bottomRoutingLayer {} not found.", - router_cfg_->BOTTOM_ROUTING_LAYER_NAME); + tech_layer->getName()); } } - if (!router_cfg_->TOP_ROUTING_LAYER_NAME.empty()) { - frLayer* layer = fr_tech->getLayer(router_cfg_->TOP_ROUTING_LAYER_NAME); + const int max_routing_layer = block->getMaxRoutingLayer(); + if (max_routing_layer > 0) { + odb::dbTechLayer* tech_layer = tech->findRoutingLayer(max_routing_layer); + frLayer* layer = fr_tech->getLayer(tech_layer->getName()); if (layer) { router_cfg_->TOP_ROUTING_LAYER = layer->getLayerNum(); } else { logger_->warn(utl::DRT, 273, "topRoutingLayer {} not found.", - router_cfg_->TOP_ROUTING_LAYER_NAME); + tech_layer->getName()); } } else { for (frLayerNum layer_num = fr_tech->getTopLayerNum(); @@ -3929,8 +3935,9 @@ Point io::TopLayerBTermHandler::getBestViaPosition(Rect pin_rect) int io::TopLayerBTermHandler::countNetBTermsAboveMaxLayer(odb::dbNet* net) { odb::dbTech* tech = db_->getTech(); - odb::dbTechLayer* top_tech_layer - = tech->findLayer(router_cfg_->TOP_ROUTING_LAYER_NAME.c_str()); + odb::dbBlock* block = db_->getChip()->getBlock(); + const int max_routing_layer = block->getMaxRoutingLayer(); + odb::dbTechLayer* top_tech_layer = tech->findRoutingLayer(max_routing_layer); int bterm_count = 0; for (auto bterm : net->getBTerms()) { int bterm_bottom_layer_idx = std::numeric_limits::max(); @@ -4046,14 +4053,14 @@ void io::TopLayerBTermHandler::stackVias(odb::dbBTerm* bterm, void io::TopLayerBTermHandler::processBTermsAboveTopLayer(bool has_routing) { - if (router_cfg_->TOP_ROUTING_LAYER_NAME.empty()) { + odb::dbBlock* block = db_->getChip()->getBlock(); + const int max_routing_layer = block->getMaxRoutingLayer(); + if (max_routing_layer < 0) { return; } odb::dbTech* tech = db_->getTech(); - odb::dbBlock* block = db_->getChip()->getBlock(); - odb::dbTechLayer* top_tech_layer - = tech->findLayer(router_cfg_->TOP_ROUTING_LAYER_NAME.c_str()); + odb::dbTechLayer* top_tech_layer = tech->findRoutingLayer(max_routing_layer); if (top_tech_layer != nullptr) { int top_layer_idx = top_tech_layer->getRoutingLevel(); for (auto bterm : block->getBTerms()) { diff --git a/src/drt/src/serialization.h b/src/drt/src/serialization.h index 8fd5ba53f2a..e68d8a8ffa0 100644 --- a/src/drt/src/serialization.h +++ b/src/drt/src/serialization.h @@ -751,8 +751,6 @@ void serializeGlobals(Archive& ar, RouterConfiguration* router_cfg) (ar) & router_cfg->MTSAFEDIST; (ar) & router_cfg->DRCSAFEDIST; (ar) & router_cfg->VERBOSE; - (ar) & router_cfg->BOTTOM_ROUTING_LAYER_NAME; - (ar) & router_cfg->TOP_ROUTING_LAYER_NAME; (ar) & router_cfg->BOTTOM_ROUTING_LAYER; (ar) & router_cfg->TOP_ROUTING_LAYER; (ar) & router_cfg->ALLOW_PIN_AS_FEEDTHROUGH; diff --git a/src/drt/test/drt_aux.py b/src/drt/test/drt_aux.py index 5e383708673..076fd1b8749 100644 --- a/src/drt/test/drt_aux.py +++ b/src/drt/test/drt_aux.py @@ -47,8 +47,6 @@ def detailed_route( params.viaInPinTopLayer = via_in_pin_top_layer params.orSeed = or_seed params.orK = or_k - params.bottomRoutingLayer = bottom_routing_layer - params.topRoutingLayer = top_routing_layer params.verbose = verbose params.cleanPatches = clean_patches params.doPa = not no_pin_access diff --git a/src/drt/test/ndr_vias1.tcl b/src/drt/test/ndr_vias1.tcl index 8f6e55a6e8f..abec088e517 100644 --- a/src/drt/test/ndr_vias1.tcl +++ b/src/drt/test/ndr_vias1.tcl @@ -18,7 +18,8 @@ assign_ndr -ndr NDR_3W_3S -net clknet_2_1__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_2__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_3__leaf_clk -detailed_route -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +set_routing_layers -signal met1-met5 +detailed_route -verbose 0 write_def $def_file diff_files ndr_vias1.defok $def_file diff --git a/src/drt/test/ndr_vias2.tcl b/src/drt/test/ndr_vias2.tcl index 09c5a786b21..6a261a8fd61 100644 --- a/src/drt/test/ndr_vias2.tcl +++ b/src/drt/test/ndr_vias2.tcl @@ -18,7 +18,8 @@ assign_ndr -ndr NDR_3W_3S -net clknet_2_1__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_2__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_3__leaf_clk -detailed_route -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +set_routing_layers -signal met1-met5 +detailed_route -verbose 0 write_def $def_file diff_files ndr_vias2.defok $def_file diff --git a/src/drt/test/ndr_vias3.tcl b/src/drt/test/ndr_vias3.tcl index 04fd117e9b1..5301893837e 100644 --- a/src/drt/test/ndr_vias3.tcl +++ b/src/drt/test/ndr_vias3.tcl @@ -16,7 +16,8 @@ assign_ndr -ndr NDR_3W_3S -net clknet_2_1__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_2__leaf_clk assign_ndr -ndr NDR_3W_3S -net clknet_2_3__leaf_clk -detailed_route -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +set_routing_layers -signal met1-met5 +detailed_route -verbose 0 write_def $def_file diff_files ndr_vias3.defok $def_file diff --git a/src/drt/test/obstruction.tcl b/src/drt/test/obstruction.tcl index ae5a66303b6..4c70b29d6bc 100644 --- a/src/drt/test/obstruction.tcl +++ b/src/drt/test/obstruction.tcl @@ -7,7 +7,8 @@ read_guides "obstruction.guide" set def_file [make_result_file obstruction.def] -detailed_route -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +set_routing_layers -signal met1-met5 +detailed_route -verbose 0 write_def $def_file diff_files obstruction.defok $def_file diff --git a/src/drt/test/top_level_term.py b/src/drt/test/top_level_term.py index 4b474e00797..40c1347cbe3 100644 --- a/src/drt/test/top_level_term.py +++ b/src/drt/test/top_level_term.py @@ -11,9 +11,9 @@ gr = design.getGlobalRouter() gr.readGuides("top_level_term.guide") -drt_aux.detailed_route( - design, bottom_routing_layer="met1", top_routing_layer="met3", verbose=0 -) +design.evalTclString("set_routing_layers -signal met1-met3") + +drt_aux.detailed_route(design, verbose=0) def_file = helpers.make_result_file("top_level_term.def") design.writeDef(def_file) diff --git a/src/drt/test/top_level_term.tcl b/src/drt/test/top_level_term.tcl index 0fdfc88ce59..8c352186054 100644 --- a/src/drt/test/top_level_term.tcl +++ b/src/drt/test/top_level_term.tcl @@ -7,7 +7,8 @@ read_guides "top_level_term.guide" set def_file [make_result_file top_level_term.def] -detailed_route -bottom_routing_layer met1 -top_routing_layer met3 -verbose 0 +set_routing_layers -signal met1-met3 +detailed_route -verbose 0 write_def $def_file diff_files top_level_term.defok $def_file diff --git a/src/drt/test/top_level_term2.py b/src/drt/test/top_level_term2.py index ed1f65dbaeb..d71afb8abe6 100644 --- a/src/drt/test/top_level_term2.py +++ b/src/drt/test/top_level_term2.py @@ -11,9 +11,9 @@ gr = design.getGlobalRouter() gr.readGuides("top_level_term2.guide") -drt_aux.detailed_route( - design, bottom_routing_layer="met1", top_routing_layer="met3", verbose=0 -) +design.evalTclString("set_routing_layers -signal met1-met3") + +drt_aux.detailed_route(design, verbose=0) def_file = helpers.make_result_file("top_level_term2.def") design.writeDef(def_file) diff --git a/src/drt/test/top_level_term2.tcl b/src/drt/test/top_level_term2.tcl index 0da954aeced..535176d31cf 100644 --- a/src/drt/test/top_level_term2.tcl +++ b/src/drt/test/top_level_term2.tcl @@ -7,7 +7,8 @@ read_guides "top_level_term2.guide" set def_file [make_result_file top_level_term2.def] -detailed_route -bottom_routing_layer met1 -top_routing_layer met3 -verbose 0 +set_routing_layers -signal met1-met3 +detailed_route -verbose 0 write_def $def_file diff_files top_level_term2.defok $def_file diff --git a/src/drt/test/via_access_layer.tcl b/src/drt/test/via_access_layer.tcl index 485b7a5c8c6..14bd19771ac 100644 --- a/src/drt/test/via_access_layer.tcl +++ b/src/drt/test/via_access_layer.tcl @@ -6,10 +6,8 @@ read_lef "via_access_layer.lef" read_def "via_access_layer.def" read_guides "via_access_layer.guides" -detailed_route -bottom_routing_layer met3 \ - -top_routing_layer met5 \ - -via_access_layer met2 \ - -verbose 0 +set_routing_layers -signal met3-met5 +detailed_route -via_access_layer met2 -verbose 0 set def_file [make_result_file via_access_layer.def] diff --git a/src/grt/test/pin_access1.py b/src/grt/test/pin_access1.py index c31445b900e..4da5a69b6f2 100644 --- a/src/grt/test/pin_access1.py +++ b/src/grt/test/pin_access1.py @@ -25,9 +25,7 @@ grt_aux.set_routing_layers(design, signal="met1-met5", clock="met3-met5") -design.evalTclString( - "pin_access -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0" -) +design.evalTclString("pin_access -verbose 0") gr.setVerbose(True) gr.globalRoute(True) diff --git a/src/grt/test/pin_access1.tcl b/src/grt/test/pin_access1.tcl index 9bb3baa38bf..7c0bbd254e0 100644 --- a/src/grt/test/pin_access1.tcl +++ b/src/grt/test/pin_access1.tcl @@ -18,7 +18,7 @@ set_global_routing_layer_adjustment * 0.5 set_routing_layers -signal met1-met5 -clock met3-met5 -pin_access -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +pin_access -verbose 0 global_route -verbose diff --git a/src/grt/test/pin_access2.tcl b/src/grt/test/pin_access2.tcl index ff4b7d40c49..6b0ffe0c527 100644 --- a/src/grt/test/pin_access2.tcl +++ b/src/grt/test/pin_access2.tcl @@ -18,7 +18,7 @@ set_global_routing_layer_adjustment * 0.5 set_routing_layers -signal met1-met5 -clock met3-met5 -pin_access -bottom_routing_layer met1 -top_routing_layer met5 -verbose 0 +pin_access -verbose 0 global_route -verbose diff --git a/src/rcx/test/names.ok b/src/rcx/test/names.ok index ac3f1ce5056..ac1ccb16628 100644 --- a/src/rcx/test/names.ok +++ b/src/rcx/test/names.ok @@ -2,8 +2,6 @@ [INFO ODB-0227] LEF file: Nangate45/Nangate45_stdcell.lef, created 135 library cells [INFO IFP-0001] Added 2 rows of 17 site FreePDK45_38x28_10R_NP_162NW_34O. [INFO DRT-0167] List of default vias: - Layer via1 - default via: via1_7 Layer via2 default via: via2_5 Layer via3 @@ -72,6 +70,6 @@ [INFO RCX-0040] Final 1 rc segments [INFO RCX-0439] Coupling Cap extraction top ... [INFO RCX-0440] Coupling threshhold is 0.1000 fF, coupling capacitance less than 0.1000 fF will be grounded. -[INFO RCX-0442] 100% of 3 wires extracted +[INFO RCX-0442] 100% of 1 wires extracted [INFO RCX-0045] Extract -1 nets, 2 rsegs, 2 caps, 0 ccs [INFO RCX-0443] 1 nets finished diff --git a/test/flow.tcl b/test/flow.tcl index e7bb71e5bc5..cfac5af757e 100644 --- a/test/flow.tcl +++ b/test/flow.tcl @@ -198,8 +198,7 @@ write_verilog $verilog_file ################################################################ # Global routing -pin_access -bottom_routing_layer $min_routing_layer \ - -top_routing_layer $max_routing_layer +pin_access set route_guide [make_result_file ${design}_${platform}.route_guide] global_route -guide_file $route_guide \ @@ -222,14 +221,11 @@ utl::metric "GRT::ANT::errors" [ant::antenna_violation_count] # Detailed routing # Run pin access again after inserting diodes and moving cells -pin_access -bottom_routing_layer $min_routing_layer \ - -top_routing_layer $max_routing_layer +pin_access detailed_route -output_drc [make_result_file "${design}_${platform}_route_drc.rpt"] \ -output_maze [make_result_file "${design}_${platform}_maze.log"] \ -no_pin_access \ - -bottom_routing_layer $min_routing_layer \ - -top_routing_layer $max_routing_layer \ -verbose 0 write_guides [make_result_file "${design}_${platform}_output_guide.mod"] @@ -254,8 +250,6 @@ while { [check_antennas] && $repair_antennas_iters < 5 } { detailed_route -output_drc [make_result_file "${design}_${platform}_ant_fix_drc.rpt"] \ -output_maze [make_result_file "${design}_${platform}_ant_fix_maze.log"] \ - -bottom_routing_layer $min_routing_layer \ - -top_routing_layer $max_routing_layer \ -verbose 0 incr repair_antennas_iters