2003-04-12 21:19:03 +02:00
|
|
|
|
|
|
|
|
SWIFT MODEL SUPPORT FOR Icarus Verilog (PRELIMINARY)
|
|
|
|
|
|
|
|
|
|
Copyright 2003 Stephen Williams
|
|
|
|
|
|
|
|
|
|
NOTE: SWIFT support does not work yet, these are provisional
|
|
|
|
|
instructions, intended to show what's supposed to happen when I get
|
|
|
|
|
it working.
|
|
|
|
|
|
|
|
|
|
Icarus Verilog support for SWIFT models is based on the LMTV interface
|
|
|
|
|
module from Synopsys. This module is normally distributed along with
|
|
|
|
|
the SWIFT models proper. This module can be linked with Icarus Verilog
|
|
|
|
|
via the cadpli compatibility object. (See cadpli.txt.)
|
|
|
|
|
|
|
|
|
|
* Preliminaries
|
|
|
|
|
|
|
|
|
|
First, you need the LMC_HOME environment variable set to point to the
|
|
|
|
|
installed directory for your SWIFT software. This setup is documented
|
|
|
|
|
in your SWIFT model documentation.
|
|
|
|
|
|
|
|
|
|
* Compilation
|
|
|
|
|
|
2003-07-15 05:49:22 +02:00
|
|
|
When compiling your Verilog design to include a SWIFT model, you need
|
2003-04-12 21:19:03 +02:00
|
|
|
to include wrappers for the model you intend to use. You may choose to
|
|
|
|
|
use ncverilog or verilogxl compatible wrappers, they work the
|
|
|
|
|
same. Locate your smartmodel directory, and include it in your command
|
|
|
|
|
file like so:
|
|
|
|
|
|
|
|
|
|
+libdir+.../smartmodel/sol/wrappers/verilogxl
|
|
|
|
|
|
|
|
|
|
The wrappers directory includes Verilog modules that wrap your SWIFT
|
|
|
|
|
module, and with this +libdir+ statement in your command file, the
|
|
|
|
|
Icarus Verilog compiler will be able to locate these wrappers. The
|
|
|
|
|
wrappers in turn invoke the $lm_model system tasks that are the LMTV
|
|
|
|
|
support for your model.
|
|
|
|
|
|
|
|
|
|
NOTE: This example uses the solaris directory of VerilogXL support
|
|
|
|
|
files as a source of wrappers. The files of interest, however, are
|
|
|
|
|
written in Verilog and are identical for all supported platforms, so
|
|
|
|
|
long as you choose the verilogxl or ncverilog files.
|
|
|
|
|
|
|
|
|
|
* Execution
|
|
|
|
|
|
|
|
|
|
After your simulation is compiled, run the simulation with the vvp
|
|
|
|
|
command, like this:
|
|
|
|
|
|
|
|
|
|
% vvp -mcadpli a.out -cadpli=$LMC_HOME/lib/x86_linux.lib/swiftpli.so:swift_boot
|
|
|
|
|
|
|
|
|
|
What this command line means is:
|
|
|
|
|
|
|
|
|
|
-mcadpli
|
|
|
|
|
Include the cadpli compatibility module
|
|
|
|
|
|
|
|
|
|
a.out
|
|
|
|
|
This is your compiled vvp file
|
|
|
|
|
|
|
|
|
|
-cadpli=$LMC_HOME/lib/x86_linux.lib/swiftpli.so:swift_boot
|
|
|
|
|
This tells the cadpli module to load the swiftpli.so
|
|
|
|
|
shared object, and boot it. This is code that comes with
|
|
|
|
|
your SWIFT modules, and provides the generic SWIFT
|
|
|
|
|
capabilities (lm_* system tasks) needed by the module
|
|
|
|
|
itself.
|
|
|
|
|
|
|
|
|
|
Once you start the vvp command, the SWIFT infrastructure will be
|
|
|
|
|
initialized as part of the simulation setup, and all should work
|
|
|
|
|
normally from here.
|
|
|
|
|
|