What FPGA drive strength settings of 4mA, 8mA and 12mA actually change

"8mA drive strength" does not mean the pin can deliver only 8mA; it is the current guaranteed at the VOL/VOH test point. What it really sets is the number of parallel transistors in the output stage, that is, output resistance and slew rate, so stronger drive adds ringing and ground bounce and weaker drive slows charging of trace capacitance.

Last updated: 2026-10-09 FPGALVCMOSDrive strengthSSNGround bounce

"8mA" is a guaranteed current at a test point, not a limit

Choosing "8mA drive strength" is often misread as limiting the pin to 8mA. It is the opposite: it guarantees at least this much current at the VOL/VOH voltage test point. In JEDEC JESD8-B too, IOL is a condition for guaranteeing VOL, not a ceiling.

The output stage is push-pull MOSFETs (of different gate widths or counts) in parallel, and the strength setting switches how many are on at once. More devices lower the parallel resistance, so the larger the catalog "xx mA", the lower the output resistance.

The current that actually flows is only what the load demands, and strength changes output impedance and slew rate.

Output resistance by strength

Output resistance can be estimated by dividing VOL (or VDD − VOH) by the current IOL guaranteed at that strength: Rout ≈ VOL ÷ IOL. Here it is calculated for LVCMOS33 with a VOL spec of 0.4V.

Estimated output resistance for LVCMOS33 assuming VOL = 0.4V (varies by device and vendor, so treat it as a guide)
Drive strengthRout ≈ VOL ÷ IOLRelation to a 50Ω trace
4mAAbout 100ΩBadly mismatched. Large reflections
8mAAbout 50ΩNearly matched. Often needs no damping resistor
12mAAbout 33ΩLow-impedance side. Assumes a damping resistor to match
16mAAbout 25ΩLower still. A damping resistor is nearly essential

This is a back-calculation from the VOL test point, close to but not equal to the actual small-signal output resistance (the slope of the IBIS V-I curve). When you need accuracy, read the Pulldown/Pullup tables of the IBIS model directly, as described in "Reading a driver's output resistance and rise time from an IBIS file".

Drive strength and the output stageThe output stage is a set of parallel transistors, and the drive strength setting switches how many are on. 4mA setting1 in parallel → high R 8mA setting2 in parallel → medium R 12mA setting3 in parallel → low R VDD GND PAD 1 2 3 R_out ≈ 100Ω R_out ≈ 50Ω R_out ≈ 33Ω
Figure 1: the output stage is a set of parallel transistors, and strength switches how many are on.

Too strong: ringing and overshoot

If the output resistance is below the trace impedance Z0 (50Ω is common on boards) and the far end is open (a high-impedance input), the wave reflects again at the receiver and the voltage jumps.

The voltage right after the launch is Vlaunch = VDD × Z0 ÷ (Z0 + Rout), and the first peak at the open far end approaches twice that. For VDD = 3.3V and Z0 = 50Ω, 16mA (Rout ≈ 25Ω) reaches about 4.4V and 12mA (33Ω) reaches 3.98V, while 8mA (50Ω, nearly matched) stays at VDD, 3.3V.

The absolute maximum rating of a 3.3V IC is often 3.6V, and both 4.4V and 3.98V exceed it. Besides overshoot, there is long-term degradation from repeated current through the receiver's protection diodes, and double clocking or miscounts when the waveform crosses the threshold several times. The conditions under which a trace acts as a transmission line are covered in How long a trace must be to become a transmission line.

Receiver waveform by drive strengthHigher drive strength gives larger overshoot at the receiver. Voltage Time VDD 3.3V Abs max 3.6V Far end (open) 8mA (R_out≈50Ω) nearly matched 12mA (R_out≈33Ω) ≈3.98V 16mA (R_out≈25Ω) ≈4.4V
Figure 2: on the same trace and receiver, higher strength gives larger overshoot. 8mA (≈50Ω) is the cleanest and 16mA (≈25Ω) exceeds 4V.

Too strong: simultaneous switching noise (SSN)

The other effect appears when several outputs switch at the same time. Between the GND pin and the die GND there is parasitic inductance Lgnd from bond wires, package routing and BGA vias. When N outputs switch together their di/dt adds up, and the die-side GND reference jumps by V = Lgnd × (dItotal/dt). This is ground bounce, the main cause of SSN (simultaneous switching noise).

Drive 16 loads of 10pF high at once with a 1ns rise time. The charging current is I = C·V/t = 10pF × 3.3V ÷ 1ns ≈ 33mA per output, about 528mA for 16. With a BGA package GND inductance of 1nH, the bounce is V = 1nH × 528mA ÷ 1ns ≈ 0.53V. Through QFP bond wires (Lgnd ≈ 4nH), the same conditions give about 2.1V.

The die's internal GND itself rises, so other inputs that are still logic L appear to swing toward H relative to it, and a static signal on the same bank can be read wrongly.

Ground bounce from simultaneous switchingWhen 16 outputs switch together, a large di/dt flows through the GND inductance and lifts the die-side GND reference. 16 outputs all go H … Die-internal GND Static "L" neighbor pin Swings toward H: risk of misread Package GND inductance Board GND (0V reference) V = L·(ΔI_total/Δt) ΔI_total ≈ 528mA (16×33mA) BGA: L≈1nH≈0.53V QFP (bond wire): L≈4nH≈2.1V
Figure 3: when 16 outputs switch high together, a large di/dt through the GND inductance lifts the die-side GND.

Too strong: EMI and supply current

Faster edges widen the bandwidth. By the rule of thumb BW ≈ 0.35 ÷ tr, content extends to about 350MHz at tr = 1ns and about 700MHz at 0.5ns. This is the range that tends to cause trouble in radiated-EMI testing, and raising the strength pushes emission toward higher frequencies.

Average power (P = C·V²·f) does not depend on strength, but the peak current grows as output resistance falls, which makes the decoupling ESR and mounting inductance requirements harder. The effect of via inductance is in Via inductance blunts decoupling.

Too weak: delayed rise into a capacitive load

With high output resistance, the time constant τ = Rout × C for charging trace and input capacitance (a few pF to tens of pF together) grows. With 4mA (Rout ≈ 100Ω) into 20pF, τ = 2ns and the 10-90% rise time is about 2.2 times that, around 4.4ns. At 12mA (33Ω), τ is about 0.66ns and the rise shrinks to just under 1.5ns.

This delay goes straight into the setup/hold calculation. A bus where only one pin has a different strength setting can lose margin on that pin, which happens often. Rise-time calculations for each load capacitance are in Trace capacitance and whether the driver can drive it.

The trap of combining with a damping resistor: overdamping

The standard way to match a trace is a series (damping) resistor of 22Ω or 33Ω at the source so that Rout + Rs ≈ Z0. But Rout changes with drive strength.

8mA (Rout ≈ 50Ω) is already nearly matched to a 50Ω trace. Adding 33Ω makes the total 83Ω, and the launch voltage is only VDD × 50 ÷ (50 + 83) ≈ 1.24V; the waveform is overdamped, rising in steps toward VDD after another round trip of reflection. You raise the strength to go faster, and adding the damping resistor by habit makes it slower.

Adding 33Ω to 16mA (Rout ≈ 25Ω) gives 58Ω, close to Z0 = 50Ω, which is how a damping resistor is meant to be used. Choose its value after fixing the strength, by looking up the Rout estimate, rather than using 22Ω or 33Ω as a fixed value.

Combining with a damping resistorAdding a damping resistor to an R_out that depends on drive strength can overdamp, depending on the combination. 8mA + 33Ω50ΩR_out33ΩR_s (damping)Z0 = 50ΩTotal 83ΩLaunch voltage≈1.24V (38%)Overdamped: slow staircase rise 16mA + 33Ω25ΩR_out33ΩR_s (damping)Z0 = 50ΩTotal 58ΩLaunch voltage≈1.53V (46%)Nearly matched: clean rise
Figure 4: adding 33Ω to 8mA (R_out ≈ 50Ω) gives 83Ω total and overdamps. With 16mA (≈25Ω) the 58Ω total approaches the matched point.

How this differs from the slew rate setting (SLOW/FAST)

FPGA I/O attributes also include a SLOW/FAST slew rate setting, separate from drive strength. Strength sets the output resistance (the static current drive), whereas slew rate changes only the rise time tr at the same output resistance, by current-limiting the output stage's drive to slow the gate charge.

Its effect on SSN is squared. Current I = C·V/tr and its rate of change dI/dt both fall as tr grows, so bounce voltage scales roughly as 1/tr2. For the 16-output, 10pF, Lgnd = 1nH case above, FAST (tr = 0.5ns) gives about 2.1V and SLOW (tr = 2ns) about 0.13V. When you want a little more speed without raising strength, moving the slew rate from SLOW to FAST can speed things up with less SSN impact than raising strength. Conversely, if SSN is the problem, suspect SLOW first.

Steps for choosing

  1. Check the trace characteristic impedance Z0 from the stackup (45-55Ω is common for microstrip).
  2. Find the load capacitance (trace plus receiver input) and the upper limit on rise time worked back from timing constraints, then pick the smallest strength that meets it.
  3. Find Rout, and decide whether a damping resistor is needed and its value from Rout + Rs ≈ Z0.
  4. Count the pins that switch simultaneously. If SSN is severe, lower the strength, use SLOW, add GND pins, or stagger the switching.
  5. Confirm on the bench with an oscilloscope, checking both overshoot at the receiver and false toggling on neighboring pins (SSN), before finalizing.

Frequently asked questions

Does raising the drive strength really increase power consumption?
Average power is set by P = C·V²·f and does not depend on strength. What increases is the peak charge and discharge current. Making it stronger than needed calls for extra parts (ferrite beads, stronger decoupling) against radiation and SSN.
Is it safe to set every pin weak?
It is on the safe side for SSN and ringing, but slower edges eat timing margin. On clocks and fast synchronous buses setup time may no longer be met, so start weakening with slow GPIOs and reset signals.
How should I estimate with a vendor that provides no IBIS model?
Estimating Rout ≈ VOL/IOL from the datasheet VOL and the IOL that guarantees it is the practical approach. It extrapolates from one DC point, so it can differ from the small-signal impedance by tens of percent. To match strictly, adjust the damping resistor while watching the real waveform.
I added a damping resistor but ringing remains. Why?
Common causes are changing the strength afterward (which changes Rout) without revisiting the damping resistor, and another load at the far end, such as parallel termination or a clamp diode. A branched trace with several receivers also disturbs the waveform. Look at both ends on the scope to see which match is broken.
Besides adding GND pins, what reduces simultaneous switching?
Staggering the output switching by hundreds of ps to a few ns (with the device's skew control, or per-bit drive delay) spreads the di/dt peak and lowers the ground bounce.

Standards and references

  • JEDEC JESD8-B, "Interface Standard for Nominal 3V/3.3V Supply Digital Integrated Circuits" — Definitions of LVCMOS VOL/VOH/IOL/IOH
  • FPGA vendors' I/O standard documents (DRIVE / SLEW attributes for LVCMOS) — Available drive strength and slew rate options, and combinations per IOSTANDARD
  • IBIS models (.ibs files) distributed by FPGA vendors — Primary source for reading actual output resistance from Pulldown/Pullup V-I tables
  • IBIS Open Forum, "I/O Buffer Information Specification (IBIS)" — IBIS model format and the definitions of V-I and V-T tables

← All columns