Skip to content

Verilog · Chapter 17.3 · Delay Modeling

Min:Typ:Max & Rise/Fall/Turn-off Delays in Verilog — Corners & Transition Delay

A single delay number is a convenient fiction that hides two truths about real silicon. First, a cell's delay is not one value. It spans a range across manufacturing corners, voltage, and temperature, so Verilog lets a delay carry three values, written min then typ then max, for fast, typical, and slow, and the simulator runs at one chosen corner. Second, a gate rarely switches at the same speed in both directions, because the pull-up and pull-down networks differ, so Verilog lets a delay give separate rise, fall, and turn-off values. Turn-off covers transitions to high impedance on tri-state outputs. These ideas combine, since each rise, fall, and turn-off value can itself be a triplet. This page shows both forms, how a corner is chosen at run time, and the trap of passing at typical and failing at slow.

Intermediate13 min readVerilogDelay ModelingMin Typ MaxProcess CornersRise Fall Delay

Chapter 17 · Section 17.3 · Delay Modeling

1. The Engineering Problem

A team models a path with a single delay, runs gate-level simulation, and it passes. The same path, on slow silicon a few weeks later, fails — a flop captures late data and the design malfunctions. Nothing in the model changed. So how did one delay number pass in simulation and fail in the lab?

one-number-is-a-lie.v
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
   // The path was modelled with ONE delay:
   and #2 g (data_q, sel, data);   // "2 ns" — but 2 ns at WHICH corner?
 
   // Real silicon delay is NOT a single number. The same cell is:
   //   ~1 ns on FAST silicon (high voltage, low temperature)
   //   ~2 ns at the TYPICAL corner
   //   ~5 ns on SLOW silicon (low voltage, high temperature)
   //
   // The model captured only "typical". The slow corner — where the
   // setup path actually fails — was never in the model, so it was never
   // simulated.

A single delay is a fiction in two ways at once: it pretends a cell has one delay (it has a range across corners), and it pretends a gate switches at the same speed rising and falling (it usually does not). Verilog gives you both axes.

min:typ:max carries three corner values for one delay, and the simulator runs at one chosen corner; rise:fall:turn-off lets a gate switch at different speeds in each direction. A design that passes at the typical corner can still fail at the slow corner — which is exactly why the three values exist.

2. Mental Model — Three Corners, and Three Directions

3. The Hardware View

The two axes correspond to two physical realities.

Visual A — min:typ:max: one delay, three corners

Min:Typ:Max — three corners of one delay; the simulator picks one

data flow
Min:Typ:Max — three corners of one delay; the simulator picks onemin — fastsiliconhigh V, low T — shortest delaytyp — nominalthe default cornermax — slowsiliconlow V, high T — longest delayone corner perrunchosen by +mindelays / +typdelays / +maxdelays
A min:typ:max delay carries three corner values. The simulator applies ONE of them to the entire run — fast (min), typical (typ, the default), or slow (max) — selected by a command-line plusarg. To trust a design you must run more than the default corner.

Visual B — rise/fall/turn-off: direction-dependent delay

Rise / Fall / Turn-off — delay depends on the transition direction

data flow
Rise / Fall / Turn-off — delay depends on the transition directionrisetransition to 1falltransition to 0turn-offtransition to z (tri-state only)
A gate can switch at different speeds in each direction: the rise delay applies to transitions to 1, the fall delay to transitions to 0, and the turn-off delay to transitions to high-impedance z (only meaningful for tri-state outputs). A transition to x uses the smallest applicable delay.

4. Min:Typ:Max Delays

A delay value can be written as three colon-separated numbers — min:typ:max:

minmaxtyp.v
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
   and #(1:2:5) g (out, a, b);     // min=1, typ=2, max=5  (one transition delay)
   assign #(2:3:4) y = a & b;      // works on continuous assigns too
  • min — the delay on the fastest corner (fast process, high voltage, low temperature).
  • typ — the typical/nominal delay.
  • max — the delay on the slowest corner (slow process, low voltage, high temperature).

The simulator selects one corner for the entire run, via a command-line option:

corner selection (simulator command line)
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
   +mindelays     →  use the min value of every triplet      (fast corner)
   +typdelays     →  use the typ value  (this is the DEFAULT) (nominal)
   +maxdelays     →  use the max value of every triplet       (slow corner)

If you pass none, every triplet collapses to its typ value. This is the quiet trap: run the simulation with no corner flag, and you have only ever tested the typical corner — not the slow corner where setup paths are tightest, nor the fast corner where hold paths are tightest.

5. Rise/Fall/Turn-off Delays

A delay can also specify different values for different transition directions. There are three forms, by count:

rise-fall-turnoff.v
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
   and    #5        g1 (o, a, b);       // one value: ALL transitions = 5
   and    #(2, 3)   g2 (o, a, b);       // two values: rise=2, fall=3
   bufif1 #(2, 3, 4) g3 (o, a, en);     // three values: rise=2, fall=3, turnoff=4

Which delay applies to which transition:

TransitionDelay used
to 1 (0→1, x→1, z→1)rise
to 0 (1→0, x→0, z→0)fall
to z (high-impedance)turn-offtri-state outputs only
to x (unknown)the smallest of the applicable delays (pessimistic)
  • Two-value form (rise, fall) is the common case for ordinary logic — pull-up and pull-down differ, but there is no high-impedance state.
  • Three-value form (rise, fall, turnoff) is only meaningful for gates that can drive z — the tri-state primitives (bufif0/bufif1/notif0/notif1) and nets. The turn-off delay is how long the output takes to release to high-impedance.
  • Transition to x takes the smallest applicable delay, so unknowns appear as early as possible — a deliberately pessimistic choice that makes x hazards easier to catch.

6. Combining Both Forms

The corner axis and the direction axis are orthogonal — each rise/fall/turn-off value can itself be a min:typ:max triplet:

combined.v — direction AND corner together
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
   // rise = 1:2:3, fall = 4:5:6, turnoff = 7:8:9
   bufif1 #(1:2:3, 4:5:6, 7:8:9) g (out, in, en);
 
   // rise = 2:3:4, fall = 5:6:7  (two-value, each a corner triplet)
   and #(2:3:4, 5:6:7) g2 (o, a, b);

Read it as a small table: the commas separate directions (rise, fall, turn-off); the colons within each group separate corners (min, typ, max). With +maxdelays, gate g above rises in 3, falls in 6, and turns off in 9; with the default (typ), it rises in 2, falls in 5, turns off in 8. This is exactly the shape that back-annotated cell timing (SDF) uses — per-direction, per-corner.

7. Why Corners Matter

In a real flow, min:typ:max is not a curiosity — it is the backbone of timing sign-off.

  • The slow (max) corner is where setup fails. When the clock period is fixed, the longest delays decide whether data arrives in time. Static timing analysis (STA) checks setup at the slow corner; gate-level simulation of the slow corner reproduces the same stress.
  • The fast (min) corner is where hold fails. The shortest delays decide whether data arrives too early and races through a flop. Hold is checked at the fast corner.
  • The typical corner proves neither. A green run at typ — the default — exercises the middle of the range and can completely miss both failure corners. "It passed in simulation" is meaningless unless you say which corner.
  • SDF back-annotation supplies the triplets. After layout, characterized min:typ:max delays per cell and per direction are back-annotated onto the netlist, and gate-level simulation is run at the corners that matter — not just the default.

The discipline: a single delay, or a single (typ) run, is never a sign-off. You exercise the corners deliberately.

8. Common Mistakes

  1. Running only the default (typ) corner and trusting it. The slow and fast corners — where setup and hold fail — were never simulated (§4, §7, DebugLab).
  2. Writing a single delay for a path that must meet timing. One number hides the corner range; the slow corner that fails is simply absent from the model (§1).
  3. Putting a turn-off value on a gate that cannot drive z. Turn-off is only meaningful for tri-state primitives/nets; on ordinary logic it is ignored (§5).
  4. Confusing the commas and colons. Commas separate directions (rise, fall, turn-off); colons separate corners (min:typ:max). #(1:2:3, 4:5:6) is rise-triplet, fall-triplet — not six independent numbers (§6).
  5. Expecting any of this to synthesise. All delay values are simulation-only; synthesis ignores them (Chapter 17 overview).

9. Debugging Lab

The design that passed at typ and failed at the slow corner

10. Interview Q&A

11. Exercises

Exercise 1 — Read the delay

For notif1 #(2:3:4, 5:6:7, 8:9:10) g (o, in, en);, state the rise, fall, and turn-off delays at each of the three corners.

Exercise 2 — Pick the corner

For each goal, name the corner (min/typ/max) and the plusarg: (a) stress the tightest setup paths; (b) stress the tightest hold paths; (c) a quick nominal sanity run.

Exercise 3 — Commas vs colons

Explain in one sentence the difference between #(1:2:3) and #(1, 2, 3).

Exercise 4 — Explain the trap

A teammate says "gate-level sim is green, we're good to tape out." Their run used no corner flag. Explain in two sentences why the green run is not sufficient.

12. Summary

A single delay number hides two truths; min:typ:max and rise/fall/turn-off restore them:

  • min:typ:max — three corner values (fast / typical / slow). The simulator runs the whole simulation at one corner, chosen by +mindelays / +typdelays / +maxdelays, defaulting to typ.
  • rise / fall / turn-off — direction-dependent delay: rise to 1, fall to 0, turn-off to z (tri-state only); a transition to x uses the smallest applicable delay.
  • They combine — each direction value can be a min:typ:max triplet; commas separate directions, colons separate corners.
  • The trap — setup fails at the slow (max) corner, hold at the fast (min) corner; a default (typ) run tests neither. Name the corner, or the result is meaningless.

All of this is simulation-only and mirrors the per-direction, per-corner shape of back-annotated SDF timing.

The final sub-topic of this chapter makes delay precise per input-to-output pin: Chapter 17.4 Module Path Delays & the specify Block — how real standard cells are timed, and the construct that will host Chapter 18's timing checks.