GLS · Chapter 6 · X-Propagation
Controlling X-Propagation (Xprop Modes)
If RTL optimism hides bugs that the netlist exposes, you can make RTL more honest without waiting for full gate-level simulation. X-propagation modes tell the simulator to force unknowns through conditionals in RTL, so an if, case, or ternary with an unknown select yields an unknown instead of quietly picking a branch, just like a netlist mux would. This shifts the catch left, surfacing uninitialized-control and reset bugs earlier and more cheaply than in GLS. Common flavours are a pessimistic ternary mode and a less pessimistic merge mode that keeps a value only when both branches agree. This lesson explains the modes and their trade-offs, and makes clear that xprop is a modelling aid that complements gate-level simulation rather than replacing it, and that neither is literal silicon truth.
Foundation11 min readGLSXpropX-PropagationRTLShift-Left
Chapter 6 · Section 6.5 · X-Propagation
Project thread — the FSM's power-up X (5.5) is the kind of bug xprop catches in RTL. This lesson is the shift-left tool; 6.6 root-causes the FSM X end to end.
1. Why Should I Learn This?
Catching an X-hidden bug in RTL is far cheaper than in GLS or silicon — and xprop makes RTL catch it.
- xprop forces
Xthrough RTL conditionals, defeating RTL optimism (6.4). - It shifts left — uninitialized-control bugs appear in RTL sim.
- It is a complement to GLS, not a replacement — and a modelling aid, not silicon truth.
This is the practical response to 6.4, and it primes the FSM root-cause in 6.6.
2. Real Silicon Story — the bug caught a month earlier
A team repeatedly found uninitialized-control Xs late, in GLS, near tape-out — each one an expensive scramble.
They enabled xprop in their RTL regressions. The same class of bug — unknown selects, missing resets — now produced X in RTL simulation, weeks earlier, where fixes were cheap. GLS still ran (for real cell/timing X sources xprop can't model), but far fewer surprises reached it.
Lesson: xprop reproduces netlist-like X-pessimism in RTL, shifting the catch of X-optimism bugs left — cheaper and earlier — while GLS remains for what xprop cannot cover.
3. Concept — what xprop does, its modes, and its limits
What xprop does:
- Overrides RTL's X-optimistic conditional semantics.
- An
if/case/?:with an unknown control yieldsX(instead of picking a branch). - Reproduces the netlist mux behaviour (6.3) in RTL.
Common modes:
- Ternary / pessimistic: any unknown control →
X. Maximum honesty, moreX. - Merge: if both branches would produce the same value, keep it; else
X. Less pessimistic (closer to the mux equal-data case, 6.3).
What it catches (shift-left):
- Uninitialized selects/controls, missing resets — the
X-optimism bugs of 6.4, in RTL.
Limits (important):
- Not a GLS replacement. xprop models conditional
X-pessimism, not real cell UDPX, timing-checkX, or contention — GLS still needed for those. - Trade-offs: adds controlled pessimism (some false
Xto triage, 6.2) and simulation cost. - Not silicon truth — a modelling aid for uncertainty (as is GLS).
4. Mental Model — a strictness dial on RTL's handling of unknowns
xprop is a strictness dial for how RTL treats unknowns.
- Off (default): lenient — RTL guesses a branch on an unknown control (optimistic, hides bugs).
- Merge: moderate — RTL keeps a value only if both branches agree; otherwise admits
X. - Ternary: strict — any unknown control is admitted as
X.
Turning the dial up makes RTL behave more like the honest netlist mux, catching bugs earlier — at the cost of more X to triage. GLS is a different instrument for X sources the dial can't reach (cells, timing, contention).
5. Working Example — the same conditional, xprop off vs on
The conditional and how xprop changes its result:
// Same RTL conditional — result depends on xprop mode
assign y = sel ? a : b;
// xprop OFF (default): sel = X -> picks a branch -> DEFINITE (hides bug, 6.4)
// xprop TERNARY: sel = X -> y = X (honest; matches netlist mux)
// xprop MERGE: sel = X, a==b -> y = a==b (definite); a!=b -> y = XPractical context (representative, tool-neutral):
# Using xprop as a shift-left step (tool-neutral):
# 1) enable xprop (merge or ternary) in RTL regressions
# 2) triage the new X's: real uninitialized control (fix) vs added pessimism (6.2)
# 3) still run GLS -> catches cell/timing/contention X that xprop does NOT model
# xprop and GLS are COMPLEMENTARY; neither is silicon truth.RTL default vs RTL+xprop (matching the netlist), as a real waveform:
Unknown select: RTL default (definite, hides bug) vs RTL+xprop (X, matches netlist)
8 cycles6. Debugging Session — reproduce a GLS-only X in RTL with xprop
A GLS-only X keeps surfacing late; enabling xprop in RTL reproduces it earlier by forcing X through conditionals, shifting the catch left — but GLS is still required for cell/timing/contention X that xprop does not model
XPROP SHIFTS THE CATCH LEFT; GLS STILL NEEDEDAn uninitialized-control X is found only in GLS, late in the cycle. The team wants to catch this class earlier, in RTL regressions.
The bug is an X-optimism case (6.4): RTL's default conditional semantics resolve the unknown control to a branch, so RTL sim hides it and only the netlist mux (in GLS) exposes it. This isn't a limitation of the design checks — it is RTL's default X-optimistic modelling. Without xprop, RTL simply cannot show this X, so the catch lands late in GLS.
Enable xprop (merge or ternary) in the RTL regressions so unknown controls yield X in RTL — reproducing the netlist behaviour and shifting the catch left. Then triage the new Xs (real uninitialized control to fix, vs added pessimism to manage, 6.2). Keep running GLS: xprop models only conditional X-pessimism, not real cell UDP X, timing-check X, or contention — GLS remains necessary for those. The lesson: xprop makes RTL honest about unknowns (forcing X through conditionals), shifting the catch of X-optimism bugs left — a modelling aid that complements, not replaces, GLS; neither is silicon truth. (GLS stays dynamic — STA signs off timing, 0.3.)
7. Common Mistakes
- Treating xprop as a GLS replacement. It models conditional
Xonly — not cell/timing/contentionX. - Leaving xprop off and finding
X-optimism bugs late. - Not triaging xprop
Xs. Some are added pessimism (6.2) to manage. - Confusing merge and ternary. Merge keeps agreeing branches; ternary forces
Xon any unknown control. - Calling xprop (or GLS) silicon truth. Both are modelling aids for uncertainty.
8. Industry Best Practices
- Enable xprop in RTL regressions to shift
X-optimism catching left. - Choose the mode deliberately (merge for less noise, ternary for max honesty).
- Triage xprop
Xs (real vs pessimism, 6.2). - Still run GLS — for cell/timing/contention
Xxprop can't model. - Set expectations: xprop and GLS are complementary modelling aids, not silicon.
Senior Engineer Thinking
- Beginner: "We found the
Xin GLS — that's the only place to catch it." - Senior: "That's an
X-optimism bug — I can reproduce it in RTL with xprop and catch the whole class weeks earlier. GLS still runs for cell/timing/contentionXxprop can't model."
The senior uses xprop to shift-left X-optimism bugs while keeping GLS for what xprop cannot cover.
Silicon Impact
xprop is a cost-and-schedule multiplier for X quality. The uninitialized-control/reset bugs that RTL optimism hides (6.4) are expensive when caught late (GLS near tape-out) and catastrophic when missed (silicon power-up failures, 0.3). Enabling xprop moves that catch left into RTL, where fixes are cheap and fast — dramatically reducing late-stage X surprises. It does not eliminate GLS: real cell UDP X, timing-check X, and contention live only at the gate level. Used together — xprop to shift-left, GLS to cover the rest — they form a layered X defence that keeps uninitialized-state bugs off the tape-out.
Engineering Checklist
- Enabled xprop (merge/ternary) in RTL regressions.
- Triaged xprop
Xs (real uninitialized control vs pessimism, 6.2). - Kept running GLS for cell/timing/contention
X. - Chose the xprop mode deliberately (noise vs honesty).
- Communicated xprop/GLS as complementary modelling aids (not silicon truth).
Try Yourself
- Simulate
sel ? a : bin RTL default withseluninitialized — output is definite (bug hidden). - Observe: RTL optimism at work.
- Change: enable xprop (ternary) and re-run the RTL.
- Expect: the output is now
X— the bug reproduced in RTL, earlier than GLS. Then try merge mode witha == band see the definite value return (less pessimism).
Many free/OSS simulators offer an xprop-style mode; the concept is universal even where the option name differs. No paid tool required.
Interview Perspective
- Weak: "You can only catch
X-optimism bugs in GLS." - Good: "xprop forces
Xthrough RTL conditionals so unknown controls yieldX, catching them in RTL." - Senior: "xprop reproduces netlist
X-pessimism in RTL (ternary or merge), shifting the catch of uninitialized-control bugs left. It's a modelling aid with trade-offs — added pessimism to triage — and it complements GLS, which still covers cell/timing/contentionX. Neither is silicon truth; together they're a layeredXdefence."
9. Interview / Review Questions
10. Key Takeaways
- X-propagation (xprop) modes make RTL force
Xthrough conditionals, so an unknown control yieldsX(like a netlist mux, 6.3) instead of RTL's default branch-pick — defeating the X-optimism of 6.4. - Common modes: ternary (any unknown control →
X, max honesty) and merge (branches agree → keep value, elseX, less pessimistic). - It shifts the catch left — uninitialized-control/reset bugs surface in RTL simulation, earlier and cheaper than GLS.
- xprop is a modelling aid with trade-offs (added, controlled pessimism to triage, 6.2; simulation cost) and complements — does not replace — GLS (which models cell/timing/contention
Xxprop cannot). - Neither xprop nor GLS is silicon truth — both are honest models of uncertainty; GLS stays dynamic (STA signs off, 0.3). Next: 6.6 — root-causing an X in the FSM.
Quick Revision
xprop = make RTL honest about unknowns: force
Xthroughif/case/?:on an unknown control (ternary = alwaysX; merge = agree→value, elseX). Shifts the catch ofX-optimism bugs LEFT into RTL (cheaper than GLS). A modelling aid with trade-offs (pessimism to triage); complements, not replaces, GLS (cell/timing/contentionX). Neither is silicon truth. Next: 6.6 — root-causing an X in the FSM.