# umn-eda/composer architecture

> Architecture diagram of the GitHub repository umn-eda/composer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/umn-eda/composer
- Repository: https://github.com/umn-eda/composer

## Overview

COmPOSER automates RF/mm-wave circuit design from specifications and a netlist through sizing, primitive selection or generation, placement, signal routing, power-grid routing, and final GDS assembly. The graph emphasizes the documented PDN-enabled flow and preserves the modular passive-optimization and legacy power-grid capabilities. The routing driver and router entry point are sampled; several other stages are represented from README descriptions, so their internal wiring is shown only where documented.

Main entry points: [`perform_routing_with_pdn.py`](https://github.com/umn-eda/composer/blob/main/perform_routing_with_pdn.py) (PDN routing flow), [`perform_initial_sizing.py`](https://github.com/umn-eda/composer/blob/main/perform_initial_sizing.py) (Initial sizing), [`parse_netlist.py`](https://github.com/umn-eda/composer/blob/main/parse_netlist.py) (Netlist parsing), [`perform_placement.py`](https://github.com/umn-eda/composer/blob/main/perform_placement.py) (Placement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_design["Circuit design"]
  node_initial_sizing["Initial sizing"]
  node_lna_sizer["LNA sizer"]
  node_pa_sizer["PA sizer"]
  node_netlist_map["Sized netlist mapping"]
  node_netlist_parse["Netlist parsing<br/>[parse_netlist.py]"]
end

subgraph group_primitives["Primitive design"]
  node_primitive_opt["Passive optimization"]
  node_primitive_gen["Primitive generation"]
end

subgraph group_physical["Physical implementation"]
  node_placement["Placement"]
  node_lef_inputs["Routing input conversion"]
  node_route_flow["PDN routing flow"]
  node_signal_router["Signal router<br/>[main.cpp]"]
  node_grid_gen["Power-grid generation"]
  node_pdn_router["PDN router"]
  node_legacy_grid["Legacy grid flow"]
  node_alt_grid["Alternate stripe grid"]
end

subgraph group_assembly["Layout assembly"]
  node_route_gds["Signal-route GDS<br/>[gen_rt_hier_gds.py]"]
  node_final_gds["Final GDS assembly<br/>[gen_pdn_rt_gds.py]"]
end

node_designer(("Designer"))
node_spec_netlist["Targets + netlist"]

node_designer -->|"provides targets"| node_spec_netlist
node_spec_netlist -->|"sizes design"| node_initial_sizing
node_initial_sizing -->|"runs LNA sizing"| node_lna_sizer
node_initial_sizing -->|"runs PA sizing"| node_pa_sizer
node_initial_sizing -->|"maps sizing results"| node_netlist_map
node_netlist_map -->|"supplies sized netlist"| node_netlist_parse
node_netlist_parse -.->|"selects passive geometry"| node_primitive_opt
node_netlist_parse -->|"generates layouts"| node_primitive_gen
node_netlist_parse -->|"supplies design JSON"| node_placement
node_primitive_opt -.->|"provides geometry"| node_primitive_gen
node_primitive_gen -->|"provides primitives"| node_placement
node_placement -->|"provides primitive GDS"| node_lef_inputs
node_placement -->|"provides placement"| node_route_flow
node_lef_inputs -->|"provides primitive LEF"| node_route_flow
node_route_flow -->|"dispatches signal routing"| node_signal_router
node_route_flow -->|"dispatches GDS assembly"| node_route_gds
node_route_flow -->|"dispatches grid generation"| node_grid_gen
node_route_flow -->|"dispatches PDN routing"| node_pdn_router
node_route_flow -->|"dispatches final assembly"| node_final_gds
node_route_flow -.->|"uses legacy path"| node_legacy_grid
node_route_flow -.->|"supports alternate grid"| node_alt_grid
node_signal_router -->|"writes route data"| node_route_gds
node_route_gds -->|"supplies routed GDS"| node_grid_gen
node_grid_gen -->|"supplies grid inputs"| node_pdn_router
node_pdn_router -->|"writes PDN routes"| node_final_gds

click node_initial_sizing "https://github.com/umn-eda/composer/blob/main/perform_initial_sizing.py"
click node_lna_sizer "https://github.com/umn-eda/composer/blob/main/lna_stage_1_sizer.py"
click node_pa_sizer "https://github.com/umn-eda/composer/blob/main/pa_stage_1_sizer.py"
click node_netlist_map "https://github.com/umn-eda/composer/blob/main/map_initial_size_to_netlist.py"
click node_netlist_parse "https://github.com/umn-eda/composer/blob/main/parse_netlist.py"
click node_primitive_opt "https://github.com/umn-eda/composer/tree/main/PRIMITIVE_OPTIMIZERS"
click node_primitive_gen "https://github.com/umn-eda/composer/tree/main/PRIMITIVE_GENERATORS"
click node_placement "https://github.com/umn-eda/composer/blob/main/perform_placement.py"
click node_lef_inputs "https://github.com/umn-eda/composer/blob/main/generate_routing_inputs.py"
click node_route_flow "https://github.com/umn-eda/composer/blob/main/perform_routing_with_pdn.py"
click node_signal_router "https://github.com/umn-eda/composer/blob/main/ROUTER/hanan_router/src/main.cpp"
click node_route_gds "https://github.com/umn-eda/composer/blob/main/utils/gen_rt_hier_gds.py"
click node_grid_gen "https://github.com/umn-eda/composer/blob/main/perform_power_grid_with_pdn_routing.py"
click node_pdn_router "https://github.com/umn-eda/composer/tree/main/ROUTER/pdn_router"
click node_final_gds "https://github.com/umn-eda/composer/blob/main/utils/gen_pdn_rt_gds.py"
click node_legacy_grid "https://github.com/umn-eda/composer/blob/main/perform_power_grid_multi_level.py"
click node_alt_grid "https://github.com/umn-eda/composer/blob/main/perform_power_grid_alternate_stripes.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_initial_sizing,node_lna_sizer,node_pa_sizer,node_netlist_map,node_netlist_parse toneBlue
class node_primitive_opt,node_primitive_gen toneAmber
class node_placement,node_lef_inputs,node_route_flow,node_signal_router,node_grid_gen,node_pdn_router,node_legacy_grid,node_alt_grid toneMint
class node_route_gds,node_final_gds toneRose
class node_designer,node_spec_netlist toneIndigo
```

## Components

### Circuit design

- [Initial sizing](https://github.com/umn-eda/composer/blob/main/perform_initial_sizing.py): `perform_initial_sizing.py`
- [LNA sizer](https://github.com/umn-eda/composer/blob/main/lna_stage_1_sizer.py): `lna_stage_1_sizer.py`
- [PA sizer](https://github.com/umn-eda/composer/blob/main/pa_stage_1_sizer.py): `pa_stage_1_sizer.py`
- [Sized netlist mapping](https://github.com/umn-eda/composer/blob/main/map_initial_size_to_netlist.py): `map_initial_size_to_netlist.py`
- [Netlist parsing](https://github.com/umn-eda/composer/blob/main/parse_netlist.py): `parse_netlist.py`

### Primitive design

- [Passive optimization](https://github.com/umn-eda/composer/tree/main/PRIMITIVE_OPTIMIZERS): `PRIMITIVE_OPTIMIZERS`
- [Primitive generation](https://github.com/umn-eda/composer/tree/main/PRIMITIVE_GENERATORS): `PRIMITIVE_GENERATORS`

### Physical implementation

- [Placement](https://github.com/umn-eda/composer/blob/main/perform_placement.py): `perform_placement.py`
- [Routing input conversion](https://github.com/umn-eda/composer/blob/main/generate_routing_inputs.py): `generate_routing_inputs.py`
- [PDN routing flow](https://github.com/umn-eda/composer/blob/main/perform_routing_with_pdn.py): `perform_routing_with_pdn.py`
- [Signal router](https://github.com/umn-eda/composer/blob/main/ROUTER/hanan_router/src/main.cpp): `ROUTER/hanan_router/src/main.cpp`
- [Power-grid generation](https://github.com/umn-eda/composer/blob/main/perform_power_grid_with_pdn_routing.py): `perform_power_grid_with_pdn_routing.py`
- [PDN router](https://github.com/umn-eda/composer/tree/main/ROUTER/pdn_router): `ROUTER/pdn_router`
- [Legacy grid flow](https://github.com/umn-eda/composer/blob/main/perform_power_grid_multi_level.py): `perform_power_grid_multi_level.py`
- [Alternate stripe grid](https://github.com/umn-eda/composer/blob/main/perform_power_grid_alternate_stripes.py): `perform_power_grid_alternate_stripes.py`

### Layout assembly

- [Signal-route GDS](https://github.com/umn-eda/composer/blob/main/utils/gen_rt_hier_gds.py): `utils/gen_rt_hier_gds.py`
- [Final GDS assembly](https://github.com/umn-eda/composer/blob/main/utils/gen_pdn_rt_gds.py): `utils/gen_pdn_rt_gds.py`

### Other components

- **Designer**
- **Targets + netlist**

## Connections

- Designer → Targets + netlist: provides targets
- Targets + netlist → Initial sizing: sizes design
- Initial sizing → LNA sizer: runs LNA sizing
- Initial sizing → PA sizer: runs PA sizing
- Initial sizing → Sized netlist mapping: maps sizing results
- Sized netlist mapping → Netlist parsing: supplies sized netlist
- Netlist parsing → Passive optimization: selects passive geometry
- Netlist parsing → Primitive generation: generates layouts
- Netlist parsing → Placement: supplies design JSON
- Passive optimization → Primitive generation: provides geometry
- Primitive generation → Placement: provides primitives
- Placement → Routing input conversion: provides primitive GDS
- Placement → PDN routing flow: provides placement
- Routing input conversion → PDN routing flow: provides primitive LEF
- PDN routing flow → Signal router: dispatches signal routing
- PDN routing flow → Signal-route GDS: dispatches GDS assembly
- PDN routing flow → Power-grid generation: dispatches grid generation
- PDN routing flow → PDN router: dispatches PDN routing
- PDN routing flow → Final GDS assembly: dispatches final assembly
- PDN routing flow → Legacy grid flow: uses legacy path
- PDN routing flow → Alternate stripe grid: supports alternate grid
- Signal router → Signal-route GDS: writes route data
- Signal-route GDS → Power-grid generation: supplies routed GDS
- Power-grid generation → PDN router: supplies grid inputs
- PDN router → Final GDS assembly: writes PDN routes
