RTL intent becomes timed structure
Synthesis is inference followed by legal, library-aware optimization.
Read the mapped structure as the tool’s interpretation of the RTL, not as an inevitable implementation.always_comb begin
next = hold;
for(int i = 0; i < 4; i++)
if(req[i] && !busy[i])
next = payload[i];
endThe loop is priority logic. The final assignment wins, so elaboration creates a serial select cone unless the intent or coding structure changes.
parameters + generatesResolve hierarchy, widths, constant conditions, and signedness.
flops · muxes · arithmeticRecognize state, enables, comparators, adders, and memories.
Boolean + sequentialPropagate constants, share or duplicate logic, and retime when legal.
library cellsChoose real arcs, drive strengths, Vt flavors, and legal macros.
Every register, latch, and memory must be intentional.
Review inferred clocks, enables, resets, RAM modes, latch reports, width truncation, signed operations, and combinational loops before timing optimization hides the original symptom.
Preserve observability only where the architecture needs it.
Hierarchy, dont-touch directives, test structures, and debug visibility can block duplication, retiming, and constant propagation. Each preservation constraint spends QoR.
Compare RTL intent, mapped topology, and equivalence.
Lint and elaboration explain the source. Synthesis reports explain the structure. Formal or logical equivalence proves that legal transformations preserve the defined behavior.
Completeness before optimization
A timing graph is only as trustworthy as its clocks and path intent.
Treat constraints as an executable interface specification with coverage, ownership, and review evidence.Selected constraint group: Clock roots. Does every sequential endpoint inherit the intended waveform?
Does every sequential endpoint inherit the intended waveform?
create_clockcreate_generated_clockset_clock_latencyset_clock_uncertainty- Evidence
- List all clocks, their sources, periods, waveforms, generated-clock masters, and propagated status.
- Failure if absent or broad
- A missing generated clock can time logic against the wrong edge or leave a domain unconstrained.
