Reading a driver's output resistance and rise time from an IBIS file

A datasheet's "output resistance about 10Ω" is a single typical value. An IBIS file carries V-I tables for all three typ/min/max corners, and just reading the slope near the origin gives a good first estimate of Ro and the damping resistor for each corner.

Last updated: 2026-10-09 IBISOutput resistanceRise timeDamping resistorTransmission line

What is in an IBIS file: Component, Pin, Model

IBIS (I/O Buffer Information Specification) is a standard that hands over a driver's output stage as text: V-I tables and rise-time tables instead of a SPICE model. A datasheet's "output resistance about 10Ω" or "rise time 1ns" is a single typical value, but an IBIS file almost always carries tables for all three typ/min/max corners, so you can follow the process spread to its ends.

The numbers here come from demo_cmos33.ibs, loaded with "Try the demo model" in the IBIS waveform simulator (a synthetic 3.3V CMOS model, not a real device).

Under [Component] are [Package] and [Pin]. [Package] holds the parasitics from board land to die in three typ/min/max sets; in demo_cmos33.ibs they are R_pkg = 0.060Ω, L_pkg = 2.50nH and C_pkg = 0.35pF (typ). [Pin] lists signal_name, model_name and R_pin/L_pin/C_pin for each pin, so it is the map from pins to [Model]s.

Inside [Model] are the V-I tables you want ([Pulldown]/[Pullup]/[GND_Clamp]/[POWER_Clamp]) and the rise-time data ([Ramp], or [Rising Waveform]/[Falling Waveform] in some models). An Input model has only Vinh/Vinl thresholds, while Output and I/O models carry the driver characteristics.

Skeleton of an IBIS fileUnder [Component] are [Package] and [Pin]; the [Model] each pin points to holds [Pulldown]/[Pullup]/[GND_Clamp]/[POWER_Clamp]/[Ramp]. Red boxes mark tables whose voltage axis is referenced to Vcc. Skeleton of an IBIS file One [Model] hangs off each physical pin [Component] DEMO_CMOS33 [Package] R_pkg / L_pkg / C_pkg (typ/min/max) [Pin] signal_name / model_name R_pin, L_pin, C_pin (per pin) [Model] DEMO_OUT_33 Model_type = Output [Pulldown] typ/min/max V = V(pin) [Pullup] typ/min/max V = Vcc−V(pin) [GND_Clamp] V = V(pin) [POWER_Clamp] V = Vcc−V(pin) [Ramp] dV/dt (20-80%) R_load=50Ω Only the red boxes ([Pullup]/[POWER_Clamp]) use a Vcc-referenced axis. Most misreadings happen here. typ/min/max mean the same strength and speed corner in all five tables.
Figure 1: the skeleton of an IBIS file. [Package] and [Pin] sit under [Component], and each pin's [Model] holds the V-I tables and timing data. Red boxes mark tables whose voltage axis is referenced to Vcc.

What typ/min/max mean, and the Pullup trap

typ/min/max are not resistor tolerances but three operating corners combining process, supply voltage and temperature. The min column is a weak, slow driver with less current and the max column a strong, fast driver with more current, and this pairing holds across [Pulldown], [Pullup], [Ramp] and [GND_Clamp] in the same file.

The voltage axis is easy to misread. [Pulldown] and [GND_Clamp] voltages are the pin voltage itself (GND-referenced), but [Pullup] and [POWER_Clamp] voltages are written as Vcc − V(pin). This format lets the same table shape serve different supply voltages, but reading "I = −62mA at V(pin) = 1.0V" literally gets both sign and value wrong. The simulator on this site also evaluates the Pullup current as I(Vcc − V(pin)).

In demo_cmos33.ibs, the [Pullup] of DEMO_OUT_33 has I(typ) = −61.96mA on the row with table voltage 1.0V. With Vcc = 3.3V, that means the pin sources 61.96mA at a pin voltage of 2.3V.

Voltage axis of Pullup/POWER_Clamp tablesPullup/POWER_Clamp voltages are written as Vcc−V(pin), not pin voltage. A table V of 1.0V means a pin voltage of 2.3V when Vcc=3.3V. 1. Table voltage: measured from Vcc[Pullup]/[POWER_Clamp] V is Vcc − V(pin). A table V of 1.0V is the drop from Vcc 2. Converted to the real pin voltageV(pin) = Vcc − V(table) = 3.3 − 1.0 = 2.3V. Read the current sign this way too Vcc = 3.3V GND = 0V Pin voltage 2.3V Table V = 1.0V V(pin) = 2.3V [Pullup] row: V(table) = 1.0V I(typ) = −61.96mA Wrong if read as is: "−61.96mA at V(pin) = 1.0V" → wrong sign and voltage Correct conversion: V(pin) = Vcc − V(table) = 3.3 − 1.0 Sources 61.96mA at V(pin) = 2.3V (GND-referenced Pulldown/GND_Clamp use V(table) as V(pin)) The /ibis/ simulator also evaluates Pullup current as I(Vcc−V(pin)). One table shape serves any Vcc. Pulldown/GND_Clamp are GND-referenced, so they need no conversion.
Figure 2: the [Pullup]/[POWER_Clamp] voltage axis is referenced to Vcc (V = Vcc − V(pin)). A table V of 1.0V means a pin voltage of 2.3V when Vcc = 3.3V.

Reading Ro from the V-I tables

Read Ro from the slope of the tangent near the origin of the V-I table. Do not pick one point and compute V ÷ I: [Pulldown] is a nonlinear curve, with the FET in its linear region acting like a resistor at low voltage and saturating, so current grows more slowly, as voltage rises.

Check it on the DEMO_OUT_33 [Pulldown] typ column. At V = 0.1V, I = 9.09mA, so Ro ≈ 0.1V ÷ 9.09mA ≈ 11.0Ω, the small-signal Ro. At V = 3.3V in the same table, I = 123.1mA and V ÷ I is 26.8Ω. The same table shows Ro 2.4x apart depending on where you read it because of the nonlinearity, and only the slope near the origin deserves the name Ro. To estimate the voltage drop at large swing, interpolate the table itself.

Taking the slope near the origin in the min and max columns gives Ro_min (weak, slow corner) ≈ 13.7Ω and Ro_max (strong, fast corner) ≈ 9.0Ω. The same pin changes Ro by 1.5x across corners.

The [Pullup] side works the same way: draw the tangent near Vcc (table voltage near 0V). In the DEMO_OUT_33 [Pullup] typ column, table V = 0.1V (pin voltage 3.2V) gives I = −7.15mA, so Ro_typ ≈ 14.0Ω. That is larger than the Pulldown 11.0Ω, so this driver is asymmetric, with a different Ro for H and L. That is why the best damping resistor can differ between H and L outputs. For a strict design, calculate Rs from each side's Ro and match the side where the harm is greater (usually the faster edge).

Pulldown / Pullup V-I curvesV-I curves for Pulldown typ/min/max and Pullup typ. The tangent slope near the origin is Ro. The slope flattens at large swing (nonlinear). Pulldown / Pullup V-I curves and Ro Tangent slope near the origin = Ro, not V÷I at one point 0V 0.5V 1V 1.5V 2V 2.5V 3V 3.3V 0mA 20mA 40mA 60mA 80mA 100mA 120mA 140mA 160mA Pin voltage V(pin) Ro_typ ≈ 11.0Ω Ro_typ ≈ 14.0Ω Pulldown typ min (weak, slow) max (strong, fast) Pullup typ Pulldown: 9.09mA at 0.1V (typ) gives Ro ≈ 11.0Ω. V÷I at 3.3V looks like 26.8Ω, but that is only nonlinearity. Pullup: table voltage is Vcc−V(pin). 7.15mA at 0.1V (pin 3.2V, typ) gives Ro ≈ 14.0Ω.
Figure 3: V-I curves for Pulldown (typ/min/max) and Pullup (typ). The tangent slope near the origin is Ro. The curve flattening at large swing is the nonlinearity.

Reading rise time from [Ramp]

[Ramp] holds dV/dt_r (rising) and dV/dt_f (falling) as "voltage change / time" for each of typ/min/max. The interval is defined as 20% to 80% of the swing, so dt can be used directly as the 20-80% rise time tr (the 0-100% full-swing time is roughly tr ÷ 0.6). The R_load in the test conditions (often 50Ω) is a reference load for measurement, not your trace impedance.

The DEMO_OUT_33 [Ramp] is dV/dt_r = 0.980/1.05E-9 (typ), 0.720/1.85E-9 (min), 1.180/0.72E-9 (max). Reading dt gives 1.05ns for typ, 1.85ns for the weak, slow corner (min column) and 0.72ns for the strong, fast corner (max column). The strong corner with small Ro in Pulldown also has the fast edge in Ramp, so the corner pairing is consistent across tables.

Ro, rise time and critical trace length by corner for DEMO_OUT_33 (1/6 rule, FR-4 microstrip tpd = 6.5ps/mm)
CornerRo (tangent at origin)t_r (20-80%, [Ramp] dt)Critical length
Weak, slow (min column)13.7Ω1.85ns47mm
typ11.0Ω1.05ns27mm
Strong, fast (max column)9.0Ω0.72ns18mm

From rise time to critical trace length

Whether a trace behaves as a transmission line follows the critical length ℓ = tr ÷ (6 × tpd) from How long a trace must be to become a transmission line. Substituting tr from [Ramp] gives the critical length specific to that IBIS model.

As the table shows, the critical length of the same pin moves 2.6x with the corner, from 18mm to 47mm. Size the trace to the fastest corner's 18mm, not typ's 27mm. A trace that cannot stay within 18mm needs reflection control (termination or a damping resistor).

[Ramp] dV/dt and rise timeThe [Ramp] dV/dt_r is the 20-80% rise time. t_r changes with the corner, and so does the critical trace length. 1. Weak, slow corner (min column)dV/dt_r = 0.720V/1.85ns → t_r(20-80%) = 1.85ns 2. typ cornerdV/dt_r = 0.980V/1.05ns → t_r(20-80%) = 1.05ns 3. Strong, fast corner (max column)dV/dt_r = 1.180V/0.72ns → t_r(20-80%) = 0.72ns 0% 20% 80% 100% Time 1.85ns 1.05ns 0.72ns Critical length (1/6 rule) t_r = 1.85ns ℓ ≈ 47mm Weak, slow corner t_r = 1.05ns ℓ ≈ 27mm typ t_r = 0.72ns ℓ ≈ 18mm Strong, fast (strictest) ℓ = t_r ÷ (6×t_pd) t_pd = 6.5ps/mm (FR-4 microstrip) Size the trace to the strictest (fastest) corner. Do not rely on typ's 27mm.
Figure 4: the [Ramp] dV/dt is the 20-80% rise time. Across corners t_r runs from 0.72 to 1.85ns and the critical length from 18 to 47mm.

Choosing the damping resistor Rs = Z0 − Ro

If the trace exceeds the critical length, the simplest fix is series termination at the source (a damping resistor). Choose Rs = Z0 − Ro so that Rs plus Ro equals the characteristic impedance Z0. With Z0 = 50Ω and Ro_typ = 11.0Ω, Rs = 39.0Ω, and the E96 value 39.2Ω can be used as is.

The problem is that Ro ranges from 9.0 to 13.7Ω across corners while the mounted Rs is a fixed value. Choosing Rs = 39Ω on the typ basis gives Rs + Ro = 48.0Ω < Z0 at the strong, fast corner (Ro = 9.0Ω): the reflection at the receiver (a nearly open input) takes the voltage about 2% above the final value, and that reflection reflects again at the source and remains as small ringing. At the weak, slow corner (Ro = 13.7Ω), Rs + Ro = 52.7Ω > Z0, the first step reaches only about 97% of the final value, and the waveform is overdamped, converging on the second step.

If noise immunity comes first, choose Rs so that Rs + Ro ≥ Z0 even at the corner with the smallest Ro. Here Rs = Z0 − Ro_max = 50 − 9.0 = 41Ω, and no corner overshoots. The staircase (overdamping) at the weak, slow corner gets a little deeper, but it does less harm than ringing in most cases.

Damping resistor and receiver waveformWith Rs fixed on the typ basis, the receiver waveform moves among overdamped (staircase), matched, and overshoot or ringing as Ro changes with the corner. 1. Weak, slow corner: overdamped (staircase)Ro=13.7Ω, Rs=39Ω → Rs+Ro=52.7Ω > Z0. First step ~97% of final, converges on step 2 2. typ corner: nearly matchedRo=11.0Ω, Rs=39Ω → Rs+Ro=50.0Ω ≈ Z0. Reaches the final value in one step 3. Strong, fast corner: overshoot and ringingRo=9.0Ω, Rs=39Ω → Rs+Ro=48.0Ω < Z0. About 2% over the final value, then settles Final value Time 0% 50% 100% Rs+Ro=52.7Ω > Z0=50Ω (overdamped) Rs+Ro=50.0Ω ≈ Z0=50Ω (matched) Rs+Ro=48.0Ω < Z0=50Ω (underterminated) To stay safe, choose Rs so that Rs+Ro ≥ Z0 even at the smallest-Ro corner (e.g. Rs=41Ω).
Figure 5: with Rs fixed, the receiver waveform moves among overdamped (staircase), matched and ringing as Ro changes with the corner.

What Ro and timing alone do not tell you

  • C_comp: the [Model] C_comp (typ 3.00pF for DEMO_OUT_33) is the die capacitance. Unless you add it to the trace and connector capacitance, the real edge is slower than the Ramp table says.
  • Package L_pkg: the [Package] L_pkg (typ 2.50nH) matters more the faster the current changes. Assuming the Pulldown current goes from 0 to 123mA in 1.05ns at the typ corner, V = L × dI/dt ≈ 2.5nH × (0.123A ÷ 1.05ns) ≈ 0.29V. That is about 9% of a 3.3V swing and one cause of overshoot and ringing that an Ro-only model cannot explain.
  • [Ramp] R_load: the Ramp dV/dt was measured into R_load (often 50Ω). If your trace Z0 differs a lot (25Ω or 100Ω, say), the rise time shifts somewhat from the table. A strict answer needs a transient analysis including the V-I tables, C_comp and the package RLC, which is what the simulator does.

Frequently asked questions

Is the IBIS Ro the same as the "output resistance" in the datasheet?
It is close, but not necessarily equal. A datasheet figure is often a typical value computed at one point (near VCC/2 or a specified current), and the conditions and corner may not be stated. Drawing the tangent near the origin on the IBIS Pulldown/Pullup tables gives an Ro with clear conditions, and the min/max values at the same time.
Which of min and max is harder on signal quality?
It depends on what you look at. For signal quality (reflection, overshoot, ringing), the strong, fast corner with small Ro and fast edges (usually the max column) is harder. For timing margins such as setup and hold, the weak, slow corner with slow edges (usually the min column) is harder.
How should I treat a model with [Rising Waveform]/[Falling Waveform] but no [Ramp]?
If waveform tables exist, reading the 20-80% time directly from them is enough. They carry more information than [Ramp] and can represent rises that are not a simple exponential. A model with neither has no rise time, so estimate it from a similar model or ask the manufacturer.
How far does the rise time shift if the trace Z0 differs a lot from the [Ramp] R_load (50Ω)?
The [Ramp] value is fine as a guide, but not exact. If the actual load impedance differs a lot from R_load (25Ω or 100Ω, say), the Ro voltage divider changes and so does the effective edge speed. For an accurate answer, run a transient analysis under the actual load using the V-I tables, C_comp and the package RLC.
How should I choose the damping resistor when Ro varies a lot between corners?
One fixed resistor cannot optimize every corner, so set priorities. If noise immunity comes first (not exceeding absolute maximum ratings through overshoot), choose Rs + Ro ≥ Z0 at the corner with the smallest Ro. If signal speed (delay, skew) comes first, use the typ basis. When the spread is especially large, make the footprint accept two or three resistor values so you can adjust later.

Standards and references

  • IBIS Open Forum, I/O Buffer Information Specification (IBIS) — Syntax of [Component]/[Model]/[Pulldown]/[Pullup]/[GND_Clamp]/[POWER_Clamp]/[Ramp], and the definition of the Pullup and POWER_Clamp voltage axis referenced to Vcc
  • IBIS Open Forum, The IBIS Cookbook — Practical guidance on reading Ro, the typ/min/max corners and using Ramp

← All columns