An inverter outputs the logical complement of its input; a buffer outputs the same logic value, and in CMOS it is normally built as two inverters in series. For the same output drive, an inverter is smaller and faster because it has one stage instead of two, while a buffer keeps polarity, which makes it the easy drop-in choice for repeaters, fanout splitting and hold fixing. In timing closure both are used to repair long wires, high fanout and bad slew, and the choice between them comes down to polarity, delay, area and, on clock trees, duty-cycle behaviour.
This post explains the difference between the two cells, then how static timing analysis (STA) and physical design engineers use them to close setup, hold, slew and clock tree problems.
Key takeaways
- A CMOS inverter has two transistors (one PMOS, one NMOS). A standard-cell buffer is two inverters in series, so at least four transistors.
- Both cells drive full rail in both directions. Neither is limited to driving only a high or only a low.
- For the same drive strength, an inverter has less delay and less area; a buffer adds one stage of delay but keeps polarity.
- Repeaters (buffers or inverter pairs) on long wires reduce delay because unbuffered wire delay grows with the square of length.
- Hold violations are fixed by adding delay, usually with buffers or dedicated delay cells near the capture flop. Setup violations are fixed by removing delay: upsizing, restructuring and repeater insertion on long or heavily loaded nets.
- Clock trees are often built from inverters because alternating polarity cancels rise and fall mismatch and protects duty cycle.
What is an inverter?
An inverter is a logic gate whose output is the inverse of its input: input 1 gives output 0, and input 0 gives output 1. In CMOS it is the simplest gate, made from one PMOS transistor pulling the output up to VDD and one NMOS transistor pulling it down to ground. (The original version of this post said it could be built from a single transistor; a single-transistor inverter with a resistor load exists in older NMOS logic, but not in CMOS standard cells.)
Common uses of inverters:
- Logical negation or complementation.
- Building oscillators and clocks: an odd number of inverters in a loop forms a ring oscillator, and a flip-flop with its inverted output fed back to its input divides a clock by two with a 50% duty cycle.
- As the stages of clock trees and repeater chains, where its small size and low delay help.
- Restoring signal levels and edge rates after a weak or long net, as any active stage does.
What is a buffer?
A buffer is a logic gate whose output equals its input: input 1 gives output 1, and input 0 gives output 0. In a standard-cell library it is two inverters in series: a small first stage that presents a light load to the driving gate and a larger second stage that drives the output load. (The original post described two inverters "connected back to back"; back-to-back, or cross-coupled, inverters form a storage loop as in a latch or SRAM cell, so the correct description is two inverters in series.)
Common uses of buffers:
- Increasing drive so that one signal can reach many fanouts, often as a buffer tree.
- Restoring degraded edges (slew) on long or heavily loaded nets.
- Isolating a critical path from a large off-path load, so the critical gate sees a small input capacitance.
- Splitting long wires into segments (repeater insertion), which reduces overall delay.
- Adding delay deliberately to fix hold violations.
How are they different?
The main difference is logical: an inverter changes the logic level of the signal and a buffer preserves it. The other differences follow from the number of stages.
| Property | Inverter | Buffer |
|---|---|---|
| Logic function | Y = NOT A | Y = A |
| CMOS structure | 1 stage, 2 transistors (minimum) | 2 inverter stages in series, 4 transistors (minimum) |
| Delay at equal output drive | Lower | Higher, by roughly one small-inverter delay |
| Area at equal output drive | Smaller | Larger |
| Input capacitance at equal output drive | Higher (the big output stage is the input) | Lower (a small first stage is the input) |
| Output swing | Full rail, both directions | Full rail, both directions |
| Internal power per transition | Lower | Higher, because the internal node also switches |
| Polarity on insertion | Flips it, so inverters are added in pairs or the inversion is absorbed in logic | Unchanged, a simple drop-in |
The original post made two claims that need correcting. First, it said an inverter consumes more power because it switches more often. Both cells switch once for each input transition, so they switch equally often; the buffer usually burns slightly more internal power because its middle node also charges and discharges. Second, it said an inverter has more driving capacity because a buffer can only provide a high output voltage. That is not the case: a CMOS buffer drives both high and low through its output inverter, and drive strength is set by the size of the output stage, which libraries offer in many strengths (X1, X2, X4 and so on) for both cell types.
When to use them for timing closure
Timing closure is the process of making every path meet its timing constraints, mainly setup and hold, across all corners and modes, while also meeting design rules on maximum transition (slew), capacitance and fanout. Buffers and inverters are among the main tools, but adding a cell always adds its own delay, so they help setup only when they remove more delay than they add.
Setup violations: use them to fix wires, loads and slew
A setup violation means a path is too slow. Inserting a cell in series does not speed up a short, lightly loaded path; it slows it. Repeaters help setup in three situations:
- Long wires. The delay of an unbuffered distributed RC wire grows with the square of its length. Breaking it into segments makes the wire delay grow roughly linearly, at the cost of repeater delays.
- High fanout or a large off-path load. Moving non-critical loads behind a buffer lets the critical sink see a lighter net.
- Poor slew. A slow transition increases the delay of the next gate; restoring it can recover more time than the repeater costs.
Other setup fixes, often tried first, are upsizing the driver, swapping to lower threshold-voltage cells, restructuring logic and, in RTL, retiming or adding a pipeline stage.
Worked example: repeaters on a long wire (illustrative numbers)
Assume a long route whose unbuffered wire delay is 400 ps. Delay scales with length squared, so splitting the wire into four equal segments makes each segment 400 / 16 = 25 ps, or 100 ps of wire delay in total. Three repeaters are needed between the four segments. If each adds 25 ps, the path becomes 100 + 75 = 175 ps, saving 225 ps. With too many repeaters, their own delay starts to dominate, so there is an optimum count and spacing for each metal layer, which implementation tools calculate. Using inverters instead of buffers as repeaters gives lower delay per stage, provided an even number is used or the polarity is handled.
Hold violations: use them to add delay
A hold violation means data arrives too early at the capture flop. The fix is to add delay on the fast path without breaking setup on any other path through the same cells. Typical practice:
- Insert buffers or dedicated delay cells (often named DLY or DEL in libraries) that give a lot of delay for little area.
- Place them close to the capture flop's D pin, so the added delay affects only that endpoint and not other paths that share the launch side.
- Check setup on the same path at the slow corner before accepting the fix.
- Fix hold after clock tree synthesis, with real clock skew, not on ideal clocks.
The original post suggested inverters for hold fixing. A single inverter flips the logic, so in practice hold fixing uses buffers, delay cells or inverter pairs.
Worked example: a hold fix (illustrative numbers)
Hold slack = minimum data arrival time minus (capture clock arrival + hold time). Suppose the launch clock arrives at 100 ps, the minimum clock-to-Q is 40 ps and the minimum logic delay is 15 ps, so data arrives at 155 ps. The capture clock arrives at 150 ps and the hold time is 30 ps, so the requirement is 180 ps. Hold slack is 155 minus 180 = minus 25 ps. Adding a delay cell with a minimum delay of 35 ps moves arrival to 190 ps and slack to plus 10 ps. If the same path has, say, 120 ps of setup slack at the slow corner, and the cell adds 70 ps there, setup still passes with 50 ps to spare.
Clock trees: why inverters are popular
In a clock tree, every stage passes both rising and falling edges. If a cell's rise and fall delays differ slightly, a chain of buffers adds that difference in the same direction at each level, stretching or shrinking the clock high time. In a chain of inverters, rising and falling edges swap roles at each stage, so the mismatch largely cancels and the duty cycle is preserved. Inverters also give lower insertion delay and area per stage. For these reasons many clock tree synthesis flows prefer inverter-based trees, while buffers remain common for simple trees and for balancing.
Drawbacks of inserting buffers and inverters
- More power and area, and more leakage, for every cell added.
- New timing problems: a hold fix can create a setup problem, and a repeater can overload its own driver.
- Routing congestion and longer wires if placement is crowded.
- Larger designs to verify, with more cells to check for signoff on every corner.
Guidelines
Factors to weigh before inserting a cell are the type and size of the violation, the location and length of the path, the drive strength and fanout of existing gates, and the impact on power, area and routing. As a rule of thumb:
- For setup, first upsize, restructure or change threshold voltage; use repeaters for long wires, high fanout and bad slew.
- For hold, use buffers or delay cells near the capture flop, after clock tree synthesis.
- Use inverters where speed and size matter and polarity can be handled, such as repeater chains and clock trees.
- Space repeaters evenly along long wires, rather than bunching them at the source or destination.
- Pick drive strengths that suit the load, and avoid long chains of cells on one path.
Common mistakes
- Inserting a buffer on a short, lightly loaded path to "fix" setup, which only adds delay.
- Fixing hold before clock tree synthesis, then finding the fixes were in the wrong place or not needed.
- Adding one inverter and forgetting that the logic is now inverted.
- Ignoring the setup impact of hold buffers at the slow corner.
FAQ
Is a buffer just two inverters?
Logically, yes, and in most standard-cell libraries it is physically built that way, with the second stage sized larger to drive the load.
Which is faster, an inverter or a buffer?
For the same output drive, the inverter, because it has one stage instead of two.
Why not use inverters everywhere instead of buffers?
Because each inverter flips the logic. Tools can use inverter pairs or push the inversion into neighbouring logic, but buffers are simpler where polarity must be kept and are the usual choice for hold fixing.
Can a buffer fix a setup violation?
Only when it removes more delay than it adds: on long wires, high fanout nets, large off-path loads or poor slew. Otherwise it makes setup worse.
Conclusion
Inverters and buffers are the simplest cells in the library, yet they do a large share of the work in timing closure. Use inverters where speed, area and duty cycle matter and polarity can be managed, and buffers where the logic value must pass unchanged, for fanout, isolation and hold fixing. If you have questions or feedback, please leave them in the comments below.


Your comments will be moderated before it appears here.