← Back to team overview

kicad-developers team mailing list archive

Re: IBIS / SPICE simulation



I don't know what the best strategy should be, should the parser be part of Kicad, or ngspice or a project of its own ? I'd like to implement it in Kicad as I am familiar with (parts of) the codebase, and  it will allow other IBIS actions than spice ( or just an ibis viewer, I actually use one on a regular basis ). But if there are better technical solutions ( and without problem for the kicad team ), we should go for it.

I realize I made a mistake, I meant voltage vs time tables and *current vs voltage* tables.

There are standard circuits, you can see a lot of circuits there: https://ibis.org/ver7.0/ver7_0.pdf

I would say :

 -Figure 12 for terminators  ( input only )

- Figure 13 for any kind of pin

- And here for an output pin circuit. https://www.eeweb.com/wp-content/uploads/articles-app-notes-files-ibis-model-basics-1299477107.pdf

The parameter extraction is indeed a difficult step ( well except for transmission lines, that should be easy with some assumptions ), but if we have something that can already simulate something with IBIS models would be a great step forward, even without extraction at first.

Currently, I am pushing my parser code here ( which is a non official kicad repo ):


I have no strong feeling about the licensing, but it really depends on where the parser code is ( in kicad / ngspice or other ).


Fabien Corona

On 01/09/2021 13:02, Holger Vogt wrote:
Hi Fabien,

If you are interested, we should move on with this projet.

I would care for the ngspice issues, you might care for the IBIS specs and the parser.

Are there 'standard' circuits for driver and receiver?
These should be defined as ngspice subcircuits with adequate parameters. The IBIS parser then should care for filling in the parameters (data for R, L, C etc and the driving conditions). The subcircuits would then be included into the ngspice netlist by several .include commands.

transient, ac and dc simulation are available in ngspice.

ngspice already has both: voltage vs time tables ( rising / falling waveform )  and current vs time tables, both reading their data from files. So in an intermediate stage the IBIS parser should write these files. In a final stage, when the parser  may be integrated into ngspice, these data could be handled as memory arrays, after a short re-write of these tables.

I see the parameter extraction from the PCB as the most critical (and diffucult) step. Even if there is some work going on, this finally has to be as simple as possible and reliable (for the user). Probably we will need another interested volunteer to work on this specifically for this IBIS/KiCad integration.

KiCad integration would be to define symbols for the drivers, receivers (and the PCB channel?), the subcircuits will be linked to these symbols, and then the simulation can be started from within KiCad.

I guess that this forum is not the adequate place to discuss all the tiny details for this project. So would you mind to set up a github or gitlab (or whatever) project for the IBIS parser? We then might use the issue tracker to move on with specification and discussion.

Concerning license, I would suggest to you to copyright the new code and then post it under a 3-clause BSD. GPL is not acceptable because it is incompatible with ngspice integration.



your  understanding is correct :)

Just some extra points :
-  Depending on the working frequency, and the type of signal, we'll need transient analysis or AC analysis. No special needs for DC ( for DC voltage drops, we'll simply use a resistor network I guess ) ( AC will be needed for power integrity, in such cases, we want to see the network impedance VS frequency, but I think that is not different from a standard spice AC analysis ) ( Regarding signal integrity, transient analysis is, I think, more important )

-  We'll usually have only one driver but we can have many receivers ( including some unintended ones, due to parasitic parameters ). - I don't know if there is such a thing as an "IBIS only" simulator, but I saw people converting IBIS model to SPICE. - The IBIS standard specifies where are the resistors, capacitors, voltage sources in a buffer, so the equivalent spice model should be "easy" to get. - in IBIS, parameters are mainly values ( R, L, C ),  voltage vs time tables ( rising / falling waveform )  or current vs time tables ( eg: clamp diodes ) - We can also have R L C matrices, for a single chip. For instance, the C matrix contains information about capacitive coupling between the pins of a single IC.

Parasitic extraction should be handled by Kicad ( where the board geometry is defined ) , some work is already ongoing for that. For now, an easy parameter to get will be the time delay, and using ( lossless ? ) transmission lines, we could already get a lot of info.


Fabien Corona

Mailing list: https://launchpad.net/~kicad-developers
Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp