12#include <nlohmann/json_fwd.hpp>
43 std::function<void(
const std::string& stage,
const Placement& pl,
double t)>
trace;
(E) Detailed placement by simulated annealing (design doc 04 §3 E; Kirkpatrick, Gelatt,...
Placement legality (design doc 04 §3 D/E): exact integer tests of courtyards, through-hole obstacles,...
std::optional< Placement > repaired(const Problem &p, const Placement &pl, int *moved=nullptr)
Minimal repair: re-place only conflicting movable parts at the nearest legal spot (refine's legaliser...
PlaceReport place(const Problem &p, Placement &pl, const PlaceOptions &o)
nlohmann::json report_json(const Problem &p, const PlaceReport &r)
Metrics measure(const Problem &p, const Placement &pl, const Placement *reference=nullptr)
std::int64_t crossings
MST airwire crossings between different signal nets.
int flipped
parts on the other side than in the input
std::int64_t whpwl
Σ weight·HPWL (signal nets weight 10, power nets 1), nm.
std::int64_t hpwl
Σ HPWL over all nets, nm.
std::vector< std::string > conflicts
"A/B" pairs and "A/outline" (movable-involved)
int outside
violations involving movable parts
std::int64_t side_vias
via estimate of the side assignment (unweighted side_vias)
int new_overlaps
Relative to a reference (the input) placement: violations where at least one involved movable part wa...
double beta_congestion
routability weight (0 = off)
int threads
0 = min(hardware, 16)
double time_limit_s
wall-time stop for the annealer (0 = none)
bool flip
Side assignment (doc 04 §3 C/E, D48): see AnnealOptions.
std::string mode
full | refine
const CongestionMap * congestion
double effort
annealing moves per run = effort × 4000 × movable parts
bool tempering
M8 (doc 04 §3 E, G): see AnnealOptions.
int lns_polish
LNS windows run on the annealing result (deterministic polish; 0 = none).
std::function< void(const std::string &stage, const Placement &pl, double t)> trace
Recording (video): receives intermediate placements with a stage name.
double lns_rate
share of annealing steps that are LNS windows
int runs
annealing runs (0 = threads)
std::vector< int > focus
LNS seed parts.
double legalise_max_disp_mm
std::array< double, 2 > utilisation
movable demand / free area per side
std::vector< std::string > notes
std::vector< std::pair< std::string, double > > stage_seconds
double overflow_quadratic
std::int64_t lb_any_rot
L4 bound valid for any rotations (bounds the final placement).
std::vector< std::string > log
std::int64_t legal_start_whpwl
weighted HPWL entering the annealer
std::vector< std::string > legalise_failures
references of the parts that found no position
std::int64_t lb_fixed_rot
L4 bound with the input's rotations.
std::uint64_t lns_improved
polish stage
double legalise_mean_disp_mm
std::int64_t quadratic_whpwl
weighted HPWL of the B2B quadratic optimum (A), full mode
bool legal
no new violation (relative to the input) in the result