TraceMaker
C++ API of the engine
Loading...
Searching...
No Matches
routable.hpp File Reference

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.

Detailed Description

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.