Skip to main content

Module flow_config

Module flow_config 

Source
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§

ClosureSettings
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.
DesignProfile
What the compiler knows about a design that changes how it should be built.
VehicleMacro
A macro hardened to sit INSIDE a shuttle vehicle’s wrapper — the Caravel user macro.

Enums§

AntennaStrategy
How antenna violations are to be closed. These are NOT interchangeable, and choosing wrongly costs slew.
MacroGrid
How a vehicle user macro takes power from the wrapper around it, which decides how high it may route.
SynthStrategy
One of OpenLane’s SYNTH_STRATEGY scripts: AREA 0..=3 or DELAY 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_5 missed 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.json for a design on a process.
parse_wire_limit_um
A wire limit as the flow scripts spell it: a length in um, or openroad for 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.