Quick Links‎ > ‎


Icarus Verilog is designed to be extensible in a couple different dimensions. This leads to the possibilities of third-party extensions that I shall call ``plug-ins''.

Plug-ins may use the VPI interface to interface with the run-time simulation engine, or may be code generators that use the loadable target interface. The VPI interface to Icarus Verilog is a subset of the IEEE1364 PLI that is available with other Verilog compilers. Modules designed using PLI are useful for extending run-time behavior of the Verilog simulation. The loadable target interface is an Icarus Verilog API for writing code generators. Modules designed using this interface are useful for generating specific netlist formats, talking with different simulation engines, or other compile-time tasks.

The rest of this page contains links to various plug-ins that people have made available for Icarus Verilog. Some are actually stored on the Icarus FTP site, some are stored on the author's site. In either case, it is the author's task to maintain the particular package. If you don't yet know about Icarus Verilog, go <here>.


This package supports distributed simulation of bus-based systems. It includes built in support for PCI bus and other bus type models, and support for models in Verilog and C/C++. More information is available at <http://iverilog.wikia.com/wiki/SIMBUS>

Image VPI

This VPI module provides simplified image I/O for Verilog programs. The source is available for download at <ftp://icarus.com/pub/eda/verilog/plug-ins/image-vpi>.


This package supports the development of test benches for PCI devices under test. The package includes simple models for typical host devices that would share a PCI device with the device under test, including a generic host processor. The latter includes an interface to a C API that allows software engineers, the device driver writers, to prototype device drivers for the device under test, and use those drivers to test the device. (This allows the software driver writers to become involved in the test of the device being designed.)

The source and binaries for some platforms are available for download at <ftp://icarus.com/pub/eda/pcisim>.

NOTE: This project has been replaced by Simbus described above. You probably want that instead, although pcisim is still available for legacy designs.


InFormal connects Icarus Verilog to NuSMV for formal verification (aka. assertion based verification). The home page for Informal is <http://www.confluent.org/wiki/doku.php?id=informal:main>.

NOTE: Links to InFormal seem to be inoperative. I do not know if it has moved, or the project is dead. Contact me if the project is alive at a new home.


This used to be called "Icarus Verilog Interactive" but has grown beyond just Icarus Verilog. It is a graphical developer aid that supports a variety of simulators. It may require a few minor patches to Icarus Verilog to work, but the package includes those patches, so it seems complete on its own. The IVI home page is here: <http://ivi.sourceforge.net>.

There is a seperate project to maintain a MacOS X port of IVI, here: <http://ivionosx.sourceforge.net>.

Software Model Interface

The SMI is a PLI-based toolkit that uses VPI to implement a form of interprocess communication between Verilog programs and C++ programs. It is intended to be more convenient the the raw VPI, which can be quite a burden when non-trivial models are needed.

NOTE: Links to SMI seem to be dead, suggesting that it is no longer maintained. Let me know if that is incorrect.

Python/Perl Target Module

Icarus Verilog supports loading of target modules that take on the task of generating the desired output format. The Loadable Target API is a C API that allows programs to write these code generators. Pinhong Chen as written a loadable target module that offers Perl/Python support. So if you want to script your code generators, this module might help. <http://www-cad.eecs.berkeley.edu/~pinhong/scriptEDA/ >


VTracer is a Verilog Testbench developer aid. It contains a Verilog-Perl co-simulation environment (based on TCP sockets), parsers (structural Verilog, VCD/dump),  and more. It's home page is here:  <http://vtracer.SourceForge.net>.

EDIF Target Module

This project by Vladimir Dergachev is a loadable target module, and associated libraries, for the support of EDIF output from Icarus Verilog. This is intended for synthesis, and he claims to support at least Atmel AT40K chips. See his sourceforge development page here: <http://volodya-project.sourceforge.net/tgt-edif.php >.

Note that this module has not been updated in a while, and the FPGA target to Icarus Verilog does most of its job.

Extract Hierarchy

This is a perl script to extract hierarchy from a set of Verilog source files. It is not really a plug-in to Icarus Verilog but a general tool that the author decided to make available. The file contains it its comments a description of usage and limitations. Download it from here: <ftp://icarus.com/pub/eda/verilog/plug-ins/extract-hier/ >