I read a lot about IBIS. "What I understood is that they basically model the input and output voltage and current data based on actual performance instead of describing them through equations like in SPICE. Please correct me if I am wrong.

I cannot for the life of me understand where they are used.

It is said to be supported by 'virtually any simulation software', but LTspice and TINA don't support it. Then I come across posts like these which say it does not work like a SPICE model.

What exactly do they do? Can I connect, say, resistors around an IBIS model of an op-amp in non-inverting configuration and expect to see an amplification? Do I need to convert it to SPICE? I am very confused.

  • 1
    \$\begingroup\$ See this. \$\endgroup\$ Commented Jul 2, 2021 at 15:11
  • 2
    \$\begingroup\$ IBIS models are more usually used for the IO behaviour of digital parts. \$\endgroup\$ Commented Jul 2, 2021 at 15:12
  • \$\begingroup\$ @aconcernedcitizen The link is broken. Could you please relink? \$\endgroup\$
    – pfabri
    Commented Jan 11, 2022 at 10:06
  • \$\begingroup\$ @pfabri Unfortunately I'm not the one maintaining the link, bu tit was a document about how to use IBIS. The selected answer below does a better job. \$\endgroup\$ Commented Jan 11, 2022 at 20:41
  • \$\begingroup\$ @aconcernedcitizen Thank you. It’s good to know that the answer below is more useful. In this case the link is probably irrelevant. \$\endgroup\$
    – pfabri
    Commented Jan 11, 2022 at 22:07

5 Answers 5


The main point of IBIS is to see how your digital ICs interface with analog circuitry external to those chips. Physical properties such as drive strength, pin leakage, and package parasitics can be vital in certain designs. IBIS is frequently used with PCB layout packages to validate signal integrity against the specifics of your copper traces, pours, substrates, etc. The main thing to understand about IBIS is its simplified input and output structures (see Analog Devices AN-715 AppNote), which are duplicated below (first image modified to fix position of package parameters): enter image description here

enter image description here

One of the most useful applications of IBIS (in my opinion) is to use the V/T data of GPOs to calculate a Thevenin equivalent source resistance for the driver pin. Then you can easily plug a voltage source and resistor to interface with your remaining analog circuity in SPICE, or simply use that resistance value for hand calculations. There are tools/software e.g. SPISim_IBIS which can directly convert the IBIS I/V or V/T curves to behavioral SPICE curves, but it's slower and not as straightforward if you want to work out some things by hand. There's also a difference between ramp data and waveform data, and some free tools only let you use one of them.

I give an example below, so you can see for yourself. Something like this can be useful when interfacing digital outputs with gain circuits (think op amp or resistive DAC). You don't want to get burned by assuming an output pin's resistance is equivalent to 0Ω or something else. I prefer doing this calculation using my own lab measurements, but if I don't have hardware available (or I'm too lazy) I'll do it using the IBIS data.

STM32 microcontrollers seem to be popular lately from what I hear, so I'll use the stm32g030_031_041_so8n.ibs file found on ST's website. This is the file for the SO8N package version of the STM32G030. I'm going to work with the following model found in the file, which includes a description of the specific configuration for this type of I/O pin:

io6_ft_3v3_mediumspeed  "GPIO-3.3V range - medium speed"

If you scroll or search for this model in the text, you will eventually see where it starts which looks like this:

|                    Model io6_ft_3v3_mediumspeed
[Model]  io6_ft_3v3_mediumspeed
Model_type I/O
Polarity       Non-Inverting
Enable        Active-Low
Vinl =   0.990000V
Vinh =   2.310000V
Vmeas =  1.650000V
Cref =   30.000000pF
Rref =   100.000000M
Vref =   0.0V
C_comp    1.290400pF        1.272500pF          1.305600pF

Scroll down a little further to where it says this:

[Rising Waveform] 
R_fixture= 50.000000
V_fixture= 0.0
V_fixture_min= 0.0
V_fixture_max= 0.0

which means that this is Rising Waveform data when the output pin is connected to 0V via a 50Ω load. The idea is to analyze the ON state of the PMOS (top) transistor of the output structure.

If we scroll to the end of the time series data for that section we see something like this:

|time             V(typ)            V(min)              V(max)
29.949950nS       1.783884V         1.600996V           1.892836V
31.471471nS       1.788090V         1.602697V           1.901179V
31.631632nS       1.788290V         1.602898V           1.901984V
33.793794nS       1.791394V         1.605099V           1.910528V
34.914915nS       1.793096V         1.605499V           1.913845V
36.276276nS       1.794097V         1.605999V           1.917766V
39.879880nS       1.796100V         1.607300V           1.924400V

The last row is where they determined the output settled after fully switching from low to high. Another way to look at this is: when the pin is set high and you connect it to a 50Ω load to ground, there will be 1.796V (typically) at the pin. We can use the following formula to calculate the Thevenin equivalent resistance of the output pin:

$$ \begin{align*} R_{\text{th(high)}} &= R_{\text{load}} \cdot \Big( \frac{V_{DD}}{V_{\text{load}}}-1 \Big) \\~\\ R_{\text{th(high)}} &= 50 \cdot \Big( \frac{3.3}{1.796}-1 \Big) \\~\\ R_{\text{th(high)}} &\approx 41.871 \Omega \end{align*} $$

If your external circuitry is only sensitive to when the pin is being driven high, then you should be fine with the above value. If not, then we can't assume the two transistors are exactly symmetric so let's do the same for the...

[Falling Waveform] 
R_fixture= 50.000000
V_fixture= 3.300000
V_fixture_min= 3.000000
V_fixture_max= 3.600000

Notice how we're using the batch of values for when V_fixture is 3.3 V (there's another data set for 0 V, so be aware!). This means that the 50 Ω load is now connected to 3.3 V so we can analyze the ON state of the NMOS (bottom) transistor.

|time             V(typ)            V(min)              V(max)
29.789790nS       1.589774V         1.421969V           1.901713V
30.830831nS       1.586260V         1.418657V           1.898195V
31.551552nS       1.584452V         1.416348V           1.895882V
34.754755nS       1.577525V         1.409723V           1.887940V
35.075075nS       1.576922V         1.409121V           1.887438V
35.315315nS       1.576621V         1.408619V           1.886935V
39.879880nS       1.571300V         1.403500V           1.880300V

The formula is similar but slightly different (don't forget that exponent!):

$$ \begin{align*} R_{\text{th(low)}} &= R_{\text{load}} \cdot \Big( \frac{V_{DD}}{V_{\text{load}}}-1 \Big)^{-1} \\~\\ R_{\text{th(low)}} &= 50 \cdot \Big( \frac{3.3}{1.571}-1 \Big)^{-1} \\~\\ R_{\text{th(low)}} &\approx 45.431 \Omega \end{align*} $$

You can use each resistance to build an output model using two voltage controlled switches with those two ON resistances, but a simpler approach would be to average the two resistances into one and use the result along with a simple independent voltage source:

$$ \begin{align*} R_{\text{th(avg)}} &= \frac{R_{\text{th(high)}} + R_{\text{th(low)}}}{2} \\~\\ R_{\text{th(avg)}} &= \frac{41.871+45.431}{2} \\~\\ R_{\text{th(avg)}} &= 43.651 \Omega \end{align*} $$

One last caveat to point out is that usually the NMOS side has a lower resistance, and that didn't happen in this example. It could be because the time data ended without it fully settling to the final value...or it could be something else. This is one reason why I like doing my own measurements (calculations/formulas are the same), but hopefully this highlights a useful application of the IBIS model data.

The main downside to the above V/T curve method is that the R_fixture used for capturing the IBIS data might not even be close to what you are interfacing to the output pin. Furthermore, in the above example the 50Ω that was used puts the driving transistors in a region where their \$R_{DS(on)}\$ is quite non-linear. So using the 50Ω data in a situation where you're interfacing something closer to 470Ω will get you incorrect results. A way around this is to instead look at the I/V data for the approximate current you intend to drive using the device. Just like before, you can use this for only the PMOS using the [Pullup] data, only the NMOS using the [Pulldown] data, or averaging the results for both.

For this example (using the same IBIS model), let's aim for around 10mA and we'll look for "typical" values again. So we'll scroll to the [Pullup] data. IBIS convention is that positive currents flow into the component. Unless we're connecting our load to something higher than 3.3V we'll be sourcing current from the device and out of the pin. Therefore, we're looking for a negative current around 10mA.

|Voltage   I(typ)              I(min)              I(max)
  -0.30    11.466000mA       11.979999mA         10.497975mA
  -0.20    7.604799mA        7.956100mA          6.973075mA
  -0.10    3.786300mA        3.967000mA          3.464625mA
  0.00    0.230000pA        0.0A                0.643000nA
  0.10    -3.671800mA       -3.824800mA         -3.370709mA
  0.20    -7.144100mA       -7.386300mA         -6.596109mA
  0.30    -10.421000mA      -10.692000mA        -9.677909mA     <=====
  0.40    -13.506000mA      -13.751000mA        -12.618008mA
  0.50    -16.404000mA      -16.568000mA        -15.418008mA

Skimming the data, I chose the line of data with the arrow pointing to it, which seems to have a typical current closest to our goal. Using the magnitudes of the voltage and current here along with Ohm's law gets us:

$$ R_{\text{th(high)}} = \frac{0.3 \text{V}}{10.421 \text{mA}} \approx 28.788 \Omega $$

Doing the same for the Pulldown data, but looking for a positive current (sinking current; i.e. into the pin) gets us:

|Voltage   I(typ)              I(min)              I(max)
  -0.30    -10.656865mA      -11.865999mA        -8.724131mA
  -0.20    -7.110396mA       -7.918200mA         -5.825767mA
  -0.10    -3.558800mA       -3.963500mA         -2.915933mA
  0.00    20.000000fA       0.0A                0.0A
  0.10    3.478700mA        3.853300mA          2.862306mA
  0.20    6.788800mA        7.476800mA          5.610805mA
  0.30    9.930300mA        10.870000mA         8.245504mA     <=====
  0.40    12.903000mA       14.033000mA         10.766004mA
  0.50    15.707000mA       16.964000mA         13.173003mA

$$ R_{\text{th(low)}} = \frac{0.3 \text{V}}{9.9303 \text{mA}} \approx 30.211 \Omega $$

And finally, averaging the resistances of each transistor into a single value yields us:

$$ \begin{align*} R_{\text{th(avg)}} &= \frac{R_{\text{th(high)}} + R_{\text{th(low)}}}{2} \\~\\ R_{\text{th(avg)}} &= \frac{28.788+30.211}{2} \\~\\ R_{\text{th(avg)}} &\approx 29.500 \Omega \end{align*} $$


Free Software to Simulate IBIS Models

Micro-Cap 12 by Spectrum Software is now free and capable of doing IBIS simulations. It used to retail for $4500+ so it's definitely not one to discard on a whim. You can quickly read more about the software by going through this Commercial Circuit Simulator Goes Free Hackaday article.

The Winter 2008 Newsletter - Using the IBIS Components hosted on Spectrum's own site gives an introduction to IBIS modelling, but the screenshots are broken, sadly. Looking at the page through the WayBackMachine will load screenshots properly, though.

This IBIS Output Impedance Made Easy article shows a few screenshots from the software, but lacks practical details on how to use the software.

In-Depth PDF on the Topic

An entire PDF guide titled How to Use the IBIS Model under the file name (IBIS_HowToUse.pdf) is available. This was linked to by @aconcernedcitizen above, but that link is dead.


IBIS models are commonly used in SI (Signal Integrity) modeling tools, like Mentor Graphics Hyperlynx. Like Peter Smith said, they basically just model the input and output characteristics of a part. I have never come across an IBIS file that said anything about the internal workings of a part.

So no, you cannot connect resistors around a IBIS model of an opamp and expect any meaningful results.

  • \$\begingroup\$ But input and output characteristics will differ depending on connection right? Like, if I consider a non-inverting opamp for example, output will depend on gain. \$\endgroup\$ Commented Jul 2, 2021 at 17:40
  • 2
    \$\begingroup\$ @needbrainscratched No, he means that the IBIS of an opamp (hypothetical since I've never seen one) would only contain information about the pins interfacing to the outside world, and independently at that. The rest of the insides of the chip aren't modeled, and there is no notion of how the two inputs would even path their way to the output or to each other. Everything else inside the chip is blank. Because an opamp typically needs closed-loop feedback from output to inverting input, it cannot function because there are no diff-pairs or gain stages on the model's insides to complete the loop. \$\endgroup\$
    – Ste Kulov
    Commented Jul 3, 2021 at 3:37

IIRC, Ibis models are simpler than spice models because they do not show any internal details about the process technology or the inner workings of the the I/O. So IC companies like them because their proprietary info is not disclosed.


As explained above, IBIS models are only relevant for digital drivers and receiver pins. Ironically, most vendors start with a SPICE model of these drivers or receivers but translate to the IBIS model to protect their intellectual property. It is possible to perform IBIS simulations in PSpice but we need to convert the models back.

I recommend performing an IBIS simulation in PSpice in four steps:

Step 1. Review the IBIS models. Some models are well defined, others not so much. It's important to actually understand the limitations of the models before using them

Step 2. Convert IBIS models to PSpice. You will need an '.lib' and '.OLB' to perform the simulation. The commercial version of PSpice has a converter but its models can be confusing to use and it's not available on the free PSpice for TI. I recommend using my free IBIS to PSpice converter tool because the models are easier to use. Improvements include:

  • Driver models have a weak pull up resistor to the ENABLE pin so the I/O driver model is enabled by default (no external circuit required). This pin can be pulled low to force the output into a high impedance state.
  • ENABLE pins are always assumed to be active-high.
  • Input models give a probe point at the die (where we actually care) and not just the pin.

Step 3. Setup PSpice Project You need to link the library files to the simulation, and call out the models in the symbols. I recommend using relative 'INCLUDE' statements so you can zip the simulation and easily share the project with others. The built in library linker in PSpice almost always gives broken library links when you try to share.

Step 4. PSpice Schematic Creation and Simulation The first three steps need to be followed for both the driver and the receiver. After that point, add a transmission line and any matching impedances between the driver and receiver. A complete schematic and simulation example are shown below.

PSpice Schematic of SCK Channel with Matching

Simulated Output and Input Waveforms of SCK Channel with Matching

For an even more detailed description (8 pages!) of the steps outlines above check out my article How to Use IBIS Models in PSpice.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.