44 lines
1.7 KiB
Plaintext
44 lines
1.7 KiB
Plaintext
|
|
HOW IT WORKS
|
|
|
|
The VPI interface for Icarus Verilog works by creating from a
|
|
collection of PLI applications a single vpi module. The vpi module
|
|
includes compiled code for the applications linked together (with any
|
|
other libraries that the applications need) into a module with a
|
|
single exported symbol, the vlog_startup_routines array.
|
|
|
|
The product that wishes to invoke the module (normally at run time)
|
|
loads the module, locates the vlog_startup_routines table, and calls
|
|
all the startup routines contained in that table. It is possible for a
|
|
product to link with many modules. In that case, all the modules are
|
|
linked in and startup routines are called in order.
|
|
|
|
The product that uses vpi modules uses the environment variable
|
|
VPI_MODULE_PATH as a ':' separated list of directories. This is the
|
|
module search path. When a module is specified by name (using whatever
|
|
means the product supports) the module search path is scanned until
|
|
the module is located.
|
|
|
|
The special module name "system.vpi" is part of the core Icarus
|
|
Verilog distribution and includes implementations of the standard
|
|
system tasks/functions.
|
|
|
|
COMPILING A VPI MODULE
|
|
|
|
See the iverilog-vpi documentation.
|
|
|
|
TRACING VPI USE
|
|
|
|
The vvp command includes the ability to trace VPI calls. This is
|
|
useful if you are trying to debug a problem with your code. To
|
|
activate tracing simply set the VPI_TRACE environment variable, with
|
|
the path to a file where trace text gets written. For example:
|
|
|
|
setenv VPI_TRACE /tmp/foo.txt
|
|
|
|
This tracing is pretty verbose, so you don't want to run like this
|
|
normally. Also, the format of the tracing messages will change
|
|
according to my needs (and whim) so don't expect to be able to parse
|
|
it in software.
|
|
|