3.5.7 · D1HDL & Digital Design Flow

Foundations — Synthesis to gate-level netlist

2,850 words13 min readBack to topic

This page assumes you know nothing about digital chips. We build every word, every letter, every subscript the parent flow uses, one brick at a time. When you finish, re-read the parent and nothing will be unexplained.


0. The very first picture: a signal, a wire, a clock

Before any symbol, look at what a chip actually is.

Figure — Synthesis to gate-level netlist

A wire carries one of two values: 0 (low voltage) or 1 (high voltage). That is everything electrical we care about here — no in-between, just two states. We call one such value a bit.

A logic gate is a tiny machine that reads bits on its input wires and produces a bit on its output wire. Look at the red output in the figure: it becomes 1 only when both inputs are 1. That is an AND gate.

A clock is a special wire that goes 0,1,0,1,... forever at a steady beat, like a metronome. The moment it jumps from 0 to 1 is the rising edge — the heartbeat of the chip. Everything in this topic is measured against that beat.

Why the topic needs these: the whole output of synthesis is gates wired together, and the whole goal is to beat the clock. You cannot read the parent without these three.


1. Combinational vs. sequential — logic with and without memory

Two kinds of circuit exist, and every symbol later depends on knowing which you're looking at.

Figure — Synthesis to gate-level netlist
  • Combinational logic (top, black): output depends only on the inputs right now. Give it the same inputs, you always get the same output, instantly (well — after a small delay we'll measure). No memory.
  • Sequential logic: it remembers. The memory element is the flip-flop (red box, bottom). A flip-flop copies its input to its output only on the clock's rising edge, then holds that value steady until the next edge.

Why the topic needs this: the entire setup-timing story is "data leaves FF1 on one tick, must reach FF2 before the next tick." No flip-flops, no timing.


2. RTL — describing behaviour, not gates

You don't draw millions of gates by hand. You describe behaviour in a Hardware Description Language (HDL) like Verilog. When you describe it at the level of "what value each register holds each clock cycle, and what logic sits between registers," that style is called RTLRegister-Transfer Level.

Example RTL line from the parent:

always @(*) y = sel ? a : b;

Two pieces of this line need unpacking for a newcomer:

So the line reads: "whenever a, b, or sel changes, set y to a if sel is 1, otherwise b." That is a want, not a gate. Turning wants into gates is exactly what synthesis does — see RTL Design and the Synthesizable Subset for which wants are legal.


3. The standard-cell library — the box of real bricks

Synthesis cannot invent gates; it picks from a fixed catalogue supplied by the chip factory. That catalogue is the standard-cell library, delivered as a .lib file.

Think of it as a LEGO box where every brick has a price tag (area), a weight (power), and a speed rating (timing). But that "speed rating" and "weight" are each richer than a single number — this is where beginners oversimplify. Full detail lives in Standard Cell Libraries and .lib Timing Models; here is the honest picture:

Why the topic needs it: only real cells have real timing, so the tool must choose cells before it can know whether the clock is beaten (parent Stage 3).


4. Delay — the tax time charges every gate

A gate is not instant. When its input changes, its output changes a tiny moment later. That moment is the gate's delay, measured in nanoseconds (ns) — billionths of a second. (As Section 3 warned, that delay is really a rise/fall, load- and slew-dependent lookup; we use one symbol per path for readability.)

Figure — Synthesis to gate-level netlist

The parent uses several named delays. Here is every one, as a picture on the timeline above:

Why "ns" and not seconds? Chips run at billions of ticks per second, so is a few ns; using seconds would be — the small unit keeps numbers readable.


5. Putting the delays in a line: the setup race (too slow?)

Now every symbol is defined, so we can read the parent's central inequality as a story, left to right along one clock period.

Figure — Synthesis to gate-level netlist

Follow the red data-arrow in the figure across ONE period :

  1. Tick. FF1's clock rises. The data isn't out yet — wait .
  2. Travel. The signal races through the gates: costs .
  3. Arrive early. It must be steady before the next tick — so the deadline is pulled earlier by .
  4. Safety. Reserve for clock jitter.

All four stacked together must fit inside the one period :

Why an inequality and not an equation? We don't need the data to arrive exactly at the deadline — arriving early is fine (that's positive slack). We only forbid arriving late. "Late is forbidden, early is fine" is precisely . The formal machinery that computes this over every path is Static Timing Analysis (STA).


6. The OTHER race: the hold constraint (too fast?)

The setup check catches logic that is too slow. But there is a mirror-image danger: logic that is too fast. Both FF1 and FF2 are clocked by the same edge. When that edge arrives, FF1 launches new data. If that new data races through the logic and reaches FF2 before FF2 has finished capturing the OLD data, the old snapshot is corrupted.

Figure — Synthesis to gate-level netlist

So FF2's input must stay stable for after the edge. The earliest the new data can arrive is (FF1's fastest output) plus the shortest logic path . That earliest arrival must be no sooner than the hold window:


7. What "netlist" means, now that we have gates + wires

A gate-level netlist is just the answer synthesis writes down: a list of which library cells were chosen and exactly which wires connect them. It is a structural description — cells + connections — with no behaviour (if/+/always) left.

The netlist is logical (which cells, wired how), not physical (where they sit). Deciding physical position is a later step: Place and Route (Physical Design).


The prerequisite map

Bit 0 or 1 on a wire

Logic gate

Clock and rising edge

Combinational logic

Flip-flop memory

RTL description

Standard cell library lib

Delays tcq tlogic tsu thold

Clock period T

Setup constraint too slow

Hold constraint too fast

Synthesis to gate level netlist

Read top-down: bits and clocks are the atoms; they build gates and flip-flops; those build RTL and the cell library; delays plus the clock period build the setup and hold tests; all of it feeds synthesis.


Equipment checklist

Cover the right side and answer each. If any stumps you, re-read its section.

What is a bit, physically?
A single wire's value, 0 (low voltage) or 1 (high voltage) — nothing in between.
What does a flip-flop do at the clock's rising edge?
It samples (snapshots) its input and holds that value on its output until the next rising edge.
Combinational vs. sequential — one-word difference?
Memory: combinational has none (output = inputs now); sequential remembers via flip-flops.
What does RTL describe — gates or behaviour?
Behaviour ("what value each register holds each cycle"), not physical gates.
What does the sensitivity list @(*) mean?
Automatically re-run this block whenever any signal read inside it changes.
What is inside a standard-cell library and what three things describe each cell?
Real manufacturable gates; each has timing (arcs), area, and power.
Why is a cell's delay not a single number?
It has separate rise and fall arcs, and each is a table indexed by input slew and output load.
What two kinds of power does .lib report?
Dynamic (per switching event) and leakage/static (continuous, even when idle).
What does the subscript in stand for?
Clock-to-Q: delay from the clock edge until the flop's output Q shows the new value.
What is and is its deadline before or after the tick?
Setup time — data must be steady for before the tick.
What is and is its window before or after the tick?
Hold time — data must stay stable for after the tick.
Which path (longest/shortest) governs setup? Which governs hold?
Setup = longest path; hold = shortest path.
Can you fix a hold violation by slowing the clock?
No — isn't in the hold equation; you add delay (buffers) on the too-fast path.
What does measure?
The clock period: time between two consecutive rising edges.
Why is the setup constraint a and not ?
Arriving early (positive slack) is fine; only late is forbidden — so we bound from above.
Slack sign meaning?
Positive = timing met; negative = violation the tool must fix.
Is a netlist always Verilog?
No — it's a concept (cells + wiring); it can also be EDIF, BLIF, or referenced against a Liberty library.
Is a netlist physical placement or logical connection?
Logical — which cells and how wired; placement comes later in place-and-route.