How to run Xilinx ISim/Fuse from the command line on Linux
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/.
Run Fuse to compile, elaborate and link your project
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 nsThis 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.
Comments
This works on our Centos
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.
If somebody have figured out how to solve this GLIBC issue under different linux distribution, it would really nice to comment here or somewhere else.
Since OpenSuse version 11.2 fuse doesn't compile anymore on my system. On ubuntu everthing works fine till now. I have contacted the Xilinx support but they can't really help me. As far as I'm using a not supported OS they don't fell responsible for my problem...
Hi Fabian, Isim is working
Hi Fabian,
Isim is working flawlessly on my (freshly installed) Fedora release 13 (Goddard). I can't remember doing anything special, except for installing
libstdc++.i686for running isim in 32-bit mode.Hendrik
Hello Hendrik, Thanks for
Hello Hendrik,
Thanks for your comment. Unfortunately Fedora is no alternative for me. I'm stuck to OpenSuse at work. The 32-bit mode is no problem for me because I'm using a 32 bit OS. I really can't imagine why there is such a big difference between the distributions.
Can you add the Xilinx directory permanently to your PATH variable? If I do this, lots of my QT application won't run anymore because they load wrong libraries.
BTW, here are the error messages fuse creates on my OpenSuse 11.3 machine:
Kind regards
Fabian