
Swift Model Support (Preliminary)
=================================

    Copyright 2003-2024 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

When compiling your Verilog design to include a SWIFT model, you need
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.

