Router

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++ --version

Build

make -C ROUTER/hanan_router clean
make -C ROUTER/hanan_router -j4

Always 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 -j4

Dedicated 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.