4.2 KiB
4.2 KiB
Routing Search Specification
This document details the Hybrid State-Lattice A* implementation and the "PathFinder" (Negotiated Congestion) algorithm for multi-net routing.
1. Hybrid State-Lattice A* Search
The core router operates on states S = (x, y, \theta), where \theta \in \{0, 90, 180, 270\}.
1.1. State Representation & Snapping
To ensure search stability and hash-map performance:
- Intermediate Ports: Every state expanded by A* is snapped to a search grid.
- Search Grid: Default snap is 1000nm (1µm).
- Final Alignment: The "Snap-to-Target" logic bridges the gap from the coarse search grid to the final 1nm port coordinates.
- Max Design Size: Guidelines for memory/performance assume up to 20mm x 20mm routing area.
1.2. Move Expansion Logic
From state S_n, the following moves are evaluated:
- Tiered Straight Steps: Expand by a set of distances
L \in \{1\mu m, 5\mu m, 25\mu m\}. - Snap-to-Target: A "last-inch" look-ahead move. If the target
Tis within a Capture Radius (Default: 10µm) and a straight segment or single bend can reach it, a special move is generated to close the gap exactly at 1nm resolution. - 90° Bend: Try clockwise/counter-clockwise turns using fixed PDK cells.
- Small-Offset S-Bend:
- Only for
O < 2R: Parametric S-bend (two tangent arcs). O \ge 2R: Search naturally finds these by combining 90° bends and straight segments.
- Only for
1.3. Cost Function f(n) = g(n) + h(n)
The search uses a flexible, component-based cost model.
g(n)(Actual Cost):\sum \text{ComponentCost}_i + \text{ProximityCost} + \text{CongestionCost}- Straight Segment:
L \times C_{unit\_length}. - 90° Bend:
10 \times (\text{Manhattan distance between ports}). - S-Bend:
f(O, R). - Proximity Cost:
k/d^2penalty (strict checks use R-Tree). - Congestion Cost:
P \times (\text{Overlaps in Path R-Tree}).
- Straight Segment:
h(n)(Heuristic):- Manhattan distance
L_1to the target. - Orientation Penalty: High cost if the state's orientation doesn't match the target's entry orientation.
- Greedy Weighting: The A* search uses a weighted heuristic (e.g.,
1.1 \times h(n)) to prioritize search speed over strict path optimality. - Danger Map Heuristic: Fast lookups from the 1µm pre-computed proximity grid.
- Manhattan distance
2. Multi-Net "PathFinder" Strategy (Negotiated Congestion)
- Iteration: Identify "Congestion Areas" using Path R-Tree intersections.
- Inflation: Increase penalty multiplier
Pfor congested areas. - Repeat: Continue until no overlaps exist or the max iteration count is reached (Default: 20 iterations).
2.1. Convergence & Result Policy
- Least Bad Attempt: If no 100% collision-free solution is found, return the result with the lowest total cost (including overlaps).
- Explicit Reporting: Results MUST include a
RoutingResultobject containing:path_geometry: The actual polygon sequence.is_valid: Boolean (True only if no collisions).collisions: A count or list of detected overlap points/polygons.
- Visualization: Overlapping regions are highlighted (e.g., in red) in the heatmaps.
3. Search Limits & Scaling
- Node Limit: A* search is capped at 50,000 nodes per net per iteration.
- Dynamic Timeout: Session-level timeout based on problem size:
Timeout = max(2s, 0.05s * num_nets * num_iterations).- Example: A 100-net problem over 20 iterations times out at 100 seconds.
4. Determinism
All search and rip-up operations are strictly deterministic.
- Seed: A user-provided
seed(int) MUST be used to initialize any random number generators (e.g., if used for tie-breaking or initial net ordering). - Tie-Breaking: If two nodes have the same
f(n), a consistent tie-breaking rule (e.g., based on node insertion order or state hash) must be used.
5. Optimizations
- A Pruning:* Head toward the target and prune suboptimal orientations.
- Safety Zones: Ignore collisions within 2nm of start/end ports.
- Spatial Indexing: R-Tree queries are limited to the bounding box of the current move.