Updates
Release notes are listed newest first. Select an update to expand its implementation details, configuration changes, and validation results.
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_netsso multiple electrically common ground-net names can route to the shared GND mesh. - Added
decap_gnd_netto 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.shselectedperform_routing_with_pdn.pyfor 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, orunroutedmarkers in the dedicated PDN router logs.
| Example | Total runtime | Final artifact |
|---|---|---|
| LNA_1 | 2:36 | lna_1/stage_3/pdn/lna_final.gds |
| LNA_2 | 2:26 | lna_2/stage_3/pdn/lna_final.gds |
| LNA_3 | 2:28 | lna_3/stage_3/pdn/lna_final.gds |
| LNA_4 | 3:07 | lna_4/stage_3/pdn/lna_final.gds |
| PA_1 | 1:46 | pa_1/stage_3/pdn/pa_final.gds |
| PA_2 | 2:43 | pa_2/stage_3/pdn/pa_final.gds |
| PA_3 | 8:19 | pa_3/stage_3/pdn/pa_final.gds |
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 separateconfig_pdn.jsonfile was removed. - Updated
composer.shto detectpdn_routingin 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_netswhile retaining backward compatibility with the legacy singlevdd_netfield. - Added
decap_vdd_netso 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
net3andnet33. - PA_1 uses VDD nets
net29andnet12. - PA_2 and PA_3 use VDD nets
net26,net12,net29, andnet17. - Every example uses
gnd_nets: ["gnd"]and a three-decap sanity configuration.
./composer.sh EXAMPLES/LNA_1/config.jsonNo separate PDN command or second configuration file is required.
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++14error and fix. - Added the
GLIBCXX_3.4.21runtime mismatch and local-rebuild fix. - Changed both router builds to separate
make cleanandmake. - Clarified
PROJECT_HOMEandGRB_LICENSE_FILE.
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.pyas the opt-in orchestration entry point. - Added
perform_power_grid_with_pdn_routing.pyas a copy-based PDN generator specialized for routing inputs. - Added
ROUTER/pdn_router, with its own Makefile, README, copied power-specificNet.cpp, andpdn_routerbinary. - 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
PLUStonet3; mappedMINUS,BULK1, andBULK2tognd. - Reduced the committed LNA_1 sanity configuration to three decaps for faster routing and inspection.
GDS outputs and hierarchy
- Added
--net_gds_dirtoutils/gen_rt_hier_gds.pyfor individual signal-net GDS export. - Added
utils/gen_pdn_rt_gds.pyto 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
DEVassumptions from primitive-optimizer project paths and aligned them withPROJECT_HOME=<checkout>. - Added the missing shared
rf_logger.pymodule used by netlist parsing. - Documented Python 3.10+ and the separate router builds.
- Replaced conflicting exact dependency pins with compatible bounded ranges.
- Expanded
.gitignorefor 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 checkreported no broken requirements. - Built both
ROUTER/hanan_routerandROUTER/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.