Xilinx no longer ships ModelSim with ISE but now ships its own HDL simulator that enables functional and timing simulations for VHDL, Verilog and mixed VHDL/Verilog designs: ISim.

I had some trouble setting up ISim from the command line on my Linux machine, so I documented how to use ISim here for future reference.

Install Xilinx ISE

First download and install the ISE software from the Xilinx Website. I installed Xilinx in /opt/Xilinx/11.1/.

The command line tool that accompanies ISim is called Fuse. Fuse is the HDL compiler, elaborator and linker used by ISim. You can find this executable in your Xilinx installation folder in the binaries dir (/opt/Xilinx/11.1/ISE/bin/lin in my case).

This tool needs a few parameters:

  • A (.prj) project file with all source files (-prj)
  • Top level
  • Executable name (-o)
  • Optional parameters

The project file is a file (ending with .prj) with an entry for each file, plus its library. For the Dirac OpenCores project that ships with Sigasi HDT, this is (Dirac.prj):

vhdl work src/testbench/DECODERTESTBENCH.VHD
vhdl work src/testbench/ArithmeticCoderTestbench.vhd
vhdl work src/encoder/FOLLOW_COUNTER.vhd
vhdl work src/encoder/OUTPUT_UNIT.vhd
vhdl work src/encoder/ARITHMETICCODER.vhd
vhdl work src/encoder/LIMIT_REGISTER.vhd
vhdl work src/decoder/ARITHMETICDECODER.vhd
vhdl work src/decoder/STORAGE_REGISTER.vhd
vhdl work src/decoder/SYMBOL_DETECTOR.vhd
vhdl work src/expgolomb/EXP_GOLOMB_DECODER.vhd
vhdl work src/expgolomb/EXP_GOLOMB_COUNTER.vhd
vhdl work src/common/FIFO.vhd
vhdl work src/common/UPDATER.vhd
vhdl work src/common/D_TYPE.vhd
vhdl work src/common/COUNT_UNIT.vhd
vhdl work src/common/STORE_BLOCK.vhd
vhdl work src/common/INPUT_CONTROL.vhd
vhdl work src/common/CONVERGENCE_CHECK.vhd
vhdl work src/common/ARITHMETIC_UNIT.vhd
vhdl work src/common/ENABLEABLE_D_TYPE.vhd
vhdl work src/common/CONTEXT_MANAGER.vhd
vhdl work src/common/Divider.vhd
vhdl work src/common/HALVING_MANAGER.vhd

I choose Dirac as executable and the toplevel is DECODERTESTBENCH. I always add -intstyle ise -incremental as optional parameters. -intstyle ise makes sure Sigasi HDT can link error messages in the console view with the editor view. -incremental tells Fuse to only compile those files that have changed since the last compile; but I do not have the impression this really works.

My complete command is:

/opt/Xilinx/11.1/ISE/bin/lin/fuse -intstyle ise -incremental -o Dirac -prj Dirac.prj DECODERTESTBENCH

Run the simulation

Initially when I tried to run the generated executable (Dirac), I always got:

Segmentation fault

The solution was to set some environment variables:

export XILINX=/opt/Xilinx/11.1/ISE
export PLATFORM=lin
export PATH=$PATH:${XILINX}/bin/${PLATFORM}
export LD_LIBRARY_PATH=${XILINX}/lib/${PLATFORM}

Now you can run Dirac:

[heeckhau@elvis Dirac]$ ./Dirac
WARNING: A WEBPACK license was found.
WARNING: Please use Xilinx License Configuration Manager to check out a
full ISim license.
WARNING: ISim will run in Lite mode. Please refer to the ISim
documentation for more information on the differences between the Lite
and the Full version.
This is a Lite version of ISim.
Time resolution is 1 ps
ISim> run 10 ns
Simulator is doing circuit initialization process.
at 0 ps, Instance /decodertestbench/UUT/INBUFFER/STORAGE/ : Warning:
There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result
will be 'X'(es).
at 0 ps, Instance /decodertestbench/UUT/INBUFFER/STORAGE/ : Warning:
CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand,
and it has been converted to 0.
at 0 ps, Instance /decodertestbench/UUT/PROBABILITY/ : Warning:
CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand,
and it has been converted to 0.
at 0 ps, Instance /decodertestbench/UUT/PROBABILITY/ : Warning:
CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand,
and it has been converted to 0.
Finished circuit initialization process.
at 5 ns(1), Instance /decodertestbench/UUT/PROBABILITY/ : Warning:
CONV_INTEGER: There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand,
and it has been converted to 0.

You can also start the gui from the command line:

./Dirac -gui

This works on our Centos machines, but not on my Fedora release 10 work station. I did not find out why yet, but it is probably due to Xilinx using an older version of GLIBC.

You can also start ISim with a tcl-script, such as:

./Dirac -tclbatch isim.cmd

where iscim.cmd is for example:

wave add DECODERTESTBENCH
run 10 ns

This should save you some time.

Coming soon

In the upcoming version of Sigasi HDT, we will generate all these scripts for you. That way you can focus on the design, and let the tools take care of the dirty work.