Expand description
flow_config — the compiler emits its own physical-design configuration.
WHY THIS EXISTS. Closing a block’s electrical gates was, until now, a person editing environment
variables in front of scripts/openlane-run.sh — a slew margin here, an antenna threshold
there, a density sweep — and the knowledge of WHICH values work lived in that person’s head and
in a scratch directory. Every new block re-learned it. The whole-program engine, which does not
exist as a hardened macro yet, would have re-learned it again.
The compiler already knows the design and (via super::pdk_target::PdkTarget) the process.
That is everything needed to choose the flow configuration, so it should choose it — and the
measured reason for each value should live next to the value, in code, where a test can read it.
EVERY NUMBER BELOW IS MEASURED, on this box, and the measurement is quoted at its field. Two of them are NEGATIVE results kept deliberately, because the expensive mistake is re-trying a lever that has already been shown not to work.
Structs§
- Closure
Settings - The electrical-closure settings, separated from the rest because they are the ones that were actually measured and the ones a future change is most likely to get wrong.
- Design
Profile - What the compiler knows about a design that changes how it should be built.
- Vehicle
Macro - A macro hardened to sit INSIDE a shuttle vehicle’s wrapper — the Caravel user macro.
Enums§
- Antenna
Strategy - How antenna violations are to be closed. These are NOT interchangeable, and choosing wrongly costs slew.
- Macro
Grid - How a vehicle user macro takes power from the wrapper around it, which decides how high it may route.
- Synth
Strategy - One of OpenLane’s
SYNTH_STRATEGYscripts:AREA 0..=3orDELAY 0..=4.
Constants§
- COMPARATIVE_
HOLD_ MARGIN_ NS - The hold repair’s margin for a comparative block (
ClosureSettings::comparative) whose caller gives none. The repair judges hold at the typical corner on estimated parasitics, and signoff checks every corner on extracted ones. MEASURED on the bench’s first fold-wrapped attempts:qorsyn_k1_bambu_pipe_c_a7p10_p32_5(RUN_2026.10.17_01.20.19) met hold by +0.09 ns at the typical corner after OpenLane’s 0.05 ns repair, and missed it by 0.04, 0.05 and 0.04 ns at the fastest corner on the min, max and nominal RC corners, a 0.14 ns gap;qorsyn_k1_bambu_fsm_c_a7p10_p20_5missed it by 0.03 ns the same way. One margin serves every candidate of a comparison, so it covers that gap with room: 0.19 ns would close it exactly. - COMPARATIVE_
SYNTH_ STRATEGY - The synthesis script of a comparative block (
ClosureSettings::comparative) whose caller names none. OpenLane hands abc the clock period as its target, and an area script recovers area down to it, so a run at a period longer than the design needs closes a netlist slower than the design: the period it closes at says more about the period it was given than about the design. A delay script maps every candidate for speed. MEASURED by the clock-push search over the signed blocks under DELAY 0 (logs/clock-push, 10-17): decision_hft_bist 15.0 -> 4.4 ns, dram_executor 10.5 -> 5.0, cgra_sumto 18 -> 6.4, rev_alu_core 14.5 -> 7.7.
Functions§
- openlane_
config - Emit the OpenLane
config.jsonfor a design on a process. - parse_
wire_ limit_ um - A wire limit as the flow scripts spell it: a length in um, or
openroadfor OpenROAD’s own limit, emitted as 0, which OpenLane reads as unset. A bare 0 is refused, so no typo drops a limit. - vehicle_
macro_ config - The config for a vehicle user macro, or a refusal when the process’s vehicle has not been read.
- vehicle_
macro_ sdc - The constraints a vehicle user macro is timed with: OpenLane’s own
base.sdc, then the vehicle’s timing as it characterizes it (HarnessTiming) — the clock model the chip is signed off with, and every synchronous harness input’s minimum delay.