|
TraceMaker
C++ API of the engine
|
Router-in-the-loop placement (design doc 04 §3 G) and ECO placement (doc 04 §4). More...
#include <array>#include <functional>#include <string>#include <vector>#include "place/congestion.hpp"#include "place/placer.hpp"Go to the source code of this file.
Classes | |
| struct | tmk::place::RouteEval |
| What the router reports for one placement. More... | |
| struct | tmk::place::RouteEval::Failure |
| struct | tmk::place::Candidate |
| struct | tmk::place::EcoMemory |
| Failure memory (doc 04 §4 step 4): moves already routed without improvement, by part, target and rotation. More... | |
| struct | tmk::place::EcoOptions |
| struct | tmk::place::EcoResult |
| struct | tmk::place::LoopOptions |
| struct | tmk::place::LoopResult |
Namespaces | |
| namespace | tmk |
| namespace | tmk::place |
Typedefs | |
| using | tmk::place::RouteFn = std::function<RouteEval(const Placement&)> |
Functions | |
| bool | tmk::place::better (const Candidate &a, const Candidate &b) |
| Better routed result: fewer unrouted connections, then shorter wirelength. | |
| EcoResult | tmk::place::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 identical part), ranked by a geometric estimate (annealing cost with boosted failed nets, penalised congestion bins and a displacement charge), the top ones routed; the best strictly improving move is committed per round. | |
| LoopResult | tmk::place::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 around the failed connections (refine annealing with β·RUDY over a capacity map shrunk where the router failed, boosted weights for the failed nets, LNS windows centred on their parts) and tries ECO moves; a candidate replaces the incumbent only if it leaves fewer connections unrouted. | |
Router-in-the-loop placement (design doc 04 §3 G) and ECO placement (doc 04 §4).
Both take the router as a callback (RouteFn), so this library does not depend on tm::route and the logic can be tested with a synthetic router. The caller routes with a deterministic work budget, so every decision here is reproducible. A placement is only ever accepted when it routes more connections than the incumbent (transactions, CLAUDE.md rule 4); locked and otherwise fixed parts never move (rule 6).
Definition in file routable.hpp.