Hanan Router
COmPOSER uses the router in ROUTER/hanan_router, a rectilinear detail router based on a modified A* search over a Hanan grid.
Compiler
The router requires C++14. Use GCC 7 or newer; GCC 4.8.5 reports unrecognized command line option -std=c++14.
g++ --versionBuild
make -C ROUTER/hanan_router clean
make -C ROUTER/hanan_router -j4Always rebuild locally. A copied binary can fail with GLIBCXX_3.4.21 not found when build-time and runtime libstdc++ versions differ. Load a newer GCC toolchain and rebuild after cleaning.
What It Supports
- Manhattan spacing between metal and via shapes
- layer-specific widths
- single-cut and multi-cut vias
- user non-default rules for blocks and nets
- routing-layer restrictions
- net-specific width and obstacle controls
How COmPOSER Uses It
perform_routing.py passes the PDK layer file, placement JSON, combined LEF, top-cell name, output directory, and routing constraint JSON to the router binary.
Dedicated Power Router Build
make -C ROUTER/pdn_router clean
make -C ROUTER/pdn_router -j4Dedicated Power Router
ROUTER/pdn_router builds a separate pdn_router binary. Its Makefile reuses shared Hanan sources and headers but compiles the power-specific copied src/Net.cpp. The original router remains unchanged.
The specialization pairs physical power ports with nearest generated rail ports when counts match, keeping searches local instead of spanning a full-chip power-net bounding box.
