48 std::vector<std::array<std::int64_t, 8>>
tried;
64 std::function<void(
const std::string&)>
log;
90 std::function<void(
const std::string&)>
log;
97 std::function<void(
const std::string& label)>
on_route;
Routability estimate for placement (design doc 04 §3 B R(x), E β·RUDY overflow, G).
LoopResult routability_loop(const Problem &p, std::vector< Candidate > seeds, const LoopOptions &o, const RouteFn &route)
Routes the seeds (those without a result), keeps the best, then for up to rounds rounds re-places aro...
bool better(const Candidate &a, const Candidate &b)
Better routed result: fewer unrouted connections, then shorter wirelength.
EcoResult eco_place(const Problem &p, const Placement &start, const RouteEval &start_eval, const EcoOptions &o, const RouteFn &route)
Small moves of movable parts near the failed connections of start (shift, rotate, swap with an identi...
std::function< RouteEval(const Placement &)> RouteFn
std::int64_t Coord
Engine coordinate: signed 64-bit nanometres.
The placement pipeline (design doc 04 §3): full runs A (quadratic B2B) → B (SimPL spreading) → C (rot...
bool legal
no overlap or outline violation involving a movable part, not just parts moved
std::int64_t hpwl
Σ HPWL (nm) on the loop's problem.
Failure memory (doc 04 §4 step 4): moves already routed without improvement, by part,...
std::vector< std::array< std::int64_t, 8 > > tried
double room_gain
ranking: one mm more room around a failed pad is worth this many mm of signal HPWL
Coord corridor
parts whose body is within this of a failed connection's box are candidates
std::function< void(const std::string &)> log
Coord room
ranking: clearance around a failed pad counts up to this distance
int max_steps
shifts of 1..max_steps pitches in each axis direction
double via_mm
ranking: side-assignment via estimate (only when flipping is on; D48)
double beta
routability weight in the ranking cost
double disp_cost
ranking: one mm of displacement costs this many mm of signal HPWL
EcoMemory * memory
shared across calls (e.g. the rounds of the routability loop); null = local
int candidates
moves routed per round (the best-ranked ones)
int weight_boost
failed nets weigh this many times more in the ranking cost
std::vector< std::string > moves
committed moves ("R3 shift +x 1.0 mm: 5 -> 3 unrouted")
std::function< void(const std::string &label)> on_route
recording: a check route of this candidate starts
bool absolute_seed_legality
–repair-input (D75): only seeds without any conflict can become the incumbent; the others are routed ...
double beta
routability weight (RUDY overflow) in the re-placement rounds
int eco_candidates
ECO moves routed per round (0 = no ECO step).
int rounds
penalty rounds after the seeds
PlaceOptions place
annealing options for the re-placement rounds (mode is forced to refine)
std::function< bool()> out_of_time
Job wall-time stop (CLAUDE.md rule 5): checked between routes; when it returns true the loop stops an...
int weight_boost
failed nets weigh this many times more in the re-placement rounds
std::function< void(const std::string &)> log
bool accept_first_seed_conflicts
With absolute_seed_legality: the first seed is the input whose minimal repair failed; it is compared ...
std::function< void(const std::string &label)> on_incumbent
Recording (video): called with a candidate's label whenever it becomes the incumbent.
double penalty
capacity factor applied per round to bins around failed connections
std::vector< Candidate > tried
every routed candidate (placements dropped), in order
int part_b
parts at both ends (-1: a zone or an unknown reference)
Point b
end points (pad positions; b = a for zone connections)
What the router reports for one placement.
std::vector< Failure > failed