Updates

Updates

Release notes are listed newest first. Select an update to expand its implementation details, configuration changes, and validation results.

September 4, 2026 v0.3.0 Multiple Ground Nets and Full-Flow Validation Multiple common-ground nets and explicit decap return selection Validation guards for invalid or overlapping power-net configuration All seven LNA and PA flows completed with final hierarchical GDS
  • Added gnd_nets so multiple electrically common ground-net names can route to the shared GND mesh.
  • Added decap_gnd_net to select the generated decap return net explicitly.
  • Retained backward compatibility with the legacy scalar gnd_net.
  • Added validation for empty ground lists, invalid decap ground selections, missing configured placement nets, and nets listed as both VDD and GND.
  • Documented that isolated ground domains require separate meshes because a shared mesh would short them together.
  • Confirmed composer.sh selected perform_routing_with_pdn.py for every included example.
  • Executed the complete sizing, parsing, placement, routing-input, signal-routing, grid-generation, PDN-routing, and final-GDS flow for LNA_1, LNA_2, LNA_3, LNA_4, PA_1, PA_2, and PA_3.
  • Confirmed all seven non-empty hierarchical final GDS files and found no error, failed, or unrouted markers in the dedicated PDN router logs.
ExampleTotal runtimeFinal artifact
LNA_12:36lna_1/stage_3/pdn/lna_final.gds
LNA_22:26lna_2/stage_3/pdn/lna_final.gds
LNA_32:28lna_3/stage_3/pdn/lna_final.gds
LNA_43:07lna_4/stage_3/pdn/lna_final.gds
PA_11:46pa_1/stage_3/pdn/pa_final.gds
PA_22:43pa_2/stage_3/pdn/pa_final.gds
PA_38:19pa_3/stage_3/pdn/pa_final.gds
September 4, 2026 v0.2.0 Connected PDN Enabled for Every Example Automatic connected-PDN dispatch from composer.sh PDN settings consolidated into each existing config.json Multi-VDD support enabled across all seven examples
  • Moved connected-PDN settings into each example's existing config.json; the separate config_pdn.json file was removed.
  • Updated composer.sh to detect pdn_routing in the selected configuration and run the connected signal-and-power routing sequence automatically.
  • Enabled connected-PDN routing for LNA_1, LNA_2, LNA_3, LNA_4, PA_1, PA_2, and PA_3.
  • Added multi-supply support through vdd_nets while retaining backward compatibility with the legacy single vdd_net field.
  • Added decap_vdd_net so generated decap PLUS pins attach to one explicitly selected supply net.
  • LNA_1 through LNA_3 use VDD net net3.
  • LNA_4 uses VDD nets net3 and net33.
  • PA_1 uses VDD nets net29 and net12.
  • PA_2 and PA_3 use VDD nets net26, net12, net29, and net17.
  • Every example uses gnd_nets: ["gnd"] and a three-decap sanity configuration.
./composer.sh EXAMPLES/LNA_1/config.json

No separate PDN command or second configuration file is required.

September 3, 2026 v0.1.1 Portable Router Build Instructions Documented GCC 7+ and local builds for both routers Added fixes for C++14 and GLIBCXX runtime errors Clarified Python, PROJECT_HOME, and Gurobi license setup
  • Documented pip install -r requirements.txt.
  • Documented GCC 7+ for C++14 router builds.
  • Added the GCC 4.8.5 -std=c++14 error and fix.
  • Added the GLIBCXX_3.4.21 runtime mismatch and local-rebuild fix.
  • Changed both router builds to separate make clean and make.
  • Clarified PROJECT_HOME and GRB_LICENSE_FILE.
September 3, 2026 v0.1.0 Connected PDN Routing Introduced the isolated copied PDN router Connected pads, internal power pins, and generated decaps to nearby rails Added inspectable per-net hierarchy in the final GDS

Initial implementation commit: f3b3942. This release connects VDD/GND pads, internal-module power pins, and generated decaps to the power grid without changing the original signal-router implementation.

Historical note: the initial opt-in config_pdn.json instructions below were superseded on September 4 by automatic composer.sh dispatch and PDN settings in each example's existing config.json.

New isolated flow

  • Added perform_routing_with_pdn.py as the opt-in orchestration entry point.
  • Added perform_power_grid_with_pdn_routing.py as a copy-based PDN generator specialized for routing inputs.
  • Added ROUTER/pdn_router, with its own Makefile, README, copied power-specific Net.cpp, and pdn_router binary.
  • The dedicated build reuses unchanged common Hanan-router sources so only power-net endpoint pairing differs.

Routing behavior

  • Added local virtual rail targets per physical power endpoint.
  • Added nearest-target pairing in the copied router when real and virtual port counts match.
  • Removed the need for full-chip endpoint-bounding-box searches for a power net.
  • Added existing signal DEF rectangles as obstacles for subsequent power routing.
  • Kept ordinary signal routing, PA flows, and the original Hanan router behavior unchanged.

Power pins and layers

  • Connected pad and internal-module VDD/GND pins to nearby rails.
  • Limited multilayer target expansion strictly to configured PDN rail layers.
  • Kept all ordinary module pins on their native layer geometry.
  • Used M8/M9 as the LNA_1 VDD grid range and M1/M2 as the GND grid range.
  • Avoided unnecessary via traversal caused by forcing native pin boxes to extreme layers.

Decaps

  • Moved decap placement ahead of power-grid routing.
  • Added generated decap instances to a PDN-specific copy of the placement JSON.
  • Added decap macro/pin data to a PDN-specific combined LEF.
  • Mapped PLUS to net3; mapped MINUS, BULK1, and BULK2 to gnd.
  • Reduced the committed LNA_1 sanity configuration to three decaps for faster routing and inspection.

GDS outputs and hierarchy

  • Added --net_gds_dir to utils/gen_rt_hier_gds.py for individual signal-net GDS export.
  • Added utils/gen_pdn_rt_gds.py to parse routed power DEF rectangles.
  • Added final hierarchy <top>_GRIDFILLED / PDN_ROUTES / PDN_NET_*.
  • Kept GND and VDD routing geometry in separate inspectable child cells.
  • Preserved hierarchy in the final GDS instead of flattening newly generated routes.

Configuration and integration

  • Added EXAMPLES/LNA_1/config_pdn.json.
  • Forwarded the selected config path through routing into PDN generation.
  • Added power-specific placement, LEF, router-constraint, routing-output, and final-GDS paths.
  • Kept augmentation artifacts separate from original placement and routing inputs.

Framework usability fixes

  • Removed duplicated DEV assumptions from primitive-optimizer project paths and aligned them with PROJECT_HOME=<checkout>.
  • Added the missing shared rf_logger.py module used by netlist parsing.
  • Documented Python 3.10+ and the separate router builds.
  • Replaced conflicting exact dependency pins with compatible bounded ranges.
  • Expanded .gitignore for logs, generated model files, router objects/dependency files, and the PDN binary.
  • Excluded real datasets, licenses, generated layouts, logs, and local experiments from the public commit.

Independent clean-clone validation

  • Cloned the pushed branch into a new temporary workspace.
  • Created a fresh Python 3.11 virtual environment.
  • Installed requirements.txt; pip check reported no broken requirements.
  • Built both ROUTER/hanan_router and ROUTER/pdn_router.
  • Ran the complete LNA_1 flow: sizing, parsing, placement, routing-input generation, and signal routing.
  • Ran the connected-PDN flow with three decaps.
  • All documented stages completed successfully and produced lna_1/stage_3/pdn/lna_final.gds.

Known non-blocking warnings

The shared Hanan router currently compiles with warnings that several placement dimensions and an R-tree comparison value may be used uninitialized. These warnings predate the isolated PDN change and did not prevent either router from building or either documented LNA_1 flow from completing. They should be addressed separately rather than mixed into the PDN-specific implementation.

For the operational reference, see Connected PDN Routing.