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.
"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.
| Drive strength | Rout ≈ VOL ÷ IOL | Relation to a 50Ω trace |
|---|---|---|
| 4mA | About 100Ω | Badly mismatched. Large reflections |
| 8mA | About 50Ω | Nearly matched. Often needs no damping resistor |
| 12mA | About 33Ω | Low-impedance side. Assumes a damping resistor to match |
| 16mA | About 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".
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.
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.
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.
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
- Check the trace characteristic impedance Z0 from the stackup (45-55Ω is common for microstrip).
- 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.
- Find Rout, and decide whether a damping resistor is needed and its value from Rout + Rs ≈ Z0.
- Count the pins that switch simultaneously. If SSN is severe, lower the strength, use SLOW, add GND pins, or stagger the switching.
- 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?
Is it safe to set every pin weak?
How should I estimate with a vendor that provides no IBIS model?
I added a damping resistor but ringing remains. Why?
Besides adding GND pins, what reduces simultaneous switching?
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