Command
Line Verilog Simulation
1.
Summary
Instead of using Modelsim's
builtin GUI for compilation and simulation you can use a simulation
script called wsrun.pl to simulate your verilog design. This script
can be used only if your verification is done using a verilog test
bench.
Add
the following to your path variable:
/p/course/cs552-david/public/html/S10/handouts/bins
Identify
the verilog files that you want to test, lets call them foo0.v,
foo1.v, and foo2.v.
Call
your testbench foo_bench.v
Your
testbench must be written so that it will stop automatically after
running for some cycles by calling $finish
.
The
script will simulate your testbench and track the waveform output in
a file called dump.vcd and dump.wlf. The text output of your
testbench will be written to a file called transcript.
You
must instantiate the clkrst.v module in your design if you want to
use this script. If you are testing pure combinational logic, simply
instantiate the clkrst module in your testbench as a dummy module.
See
the dofile section for how to specify do files with this script.
If you use this script,
you can simply edit your verilog using your favorite editor, and
compile and simulate using the script, using Modelsim only as a
waveform viewer.
2.
Syntax for running the script.
At the unix prompt:
prompt% wsrun.pl <name of your testbench module> <testbench file name> <list of verilog files>
All the verilog files that your
design uses must be specified on the command line. For our example,
let's assume the module in the testbench is called foo_bench. Then
you should execute:
prompt% wsrun.pl foo_bench foo_bench.v foo0.v foo1.v foo2.v
Note: foo_bench is specified
once, and foo_bench.v is specified once. The first argument specifies
the module name, the second specifies the verilog filename.
If you used the rf_bench.v
from homework 3 as the testbench for example, you would issue the
command:
prompt% wsrun.pl rf_bench rf_bench.v clkrst.v dff.v rf.v rf_bench.v rf_hier.v
Convert the $stop to $finish in
the testbench to get this script to work with that testbench. You
will then see output that looks like the following:
Compiling the following files: clkrst.v dff.v rf.v rf_bench.v rf_hier.v
Top module: rf_bench
** Warning: (vlib-34) Library already exists at "__work".
Model Technology ModelSim SE vlog 5.8b Compiler 2004.01 Jan 26 2004
-- Compiling module clkrst
-- Compiling module dff
-- Compiling module rf
-- Compiling module rf_bench
-- Compiling module rf_hier
Top level modules:
dff
rf_bench
Reading /afs/cs.wisc.edu/s/mentor-2004/common/modeltech-5.8b/tcl/vsim/pref.tcl
# 5.8b
# vsim -lib __work -c rf_bench
# // ModelSim SE 5.8b Jan 01 2004 Linux 2.6.9-55.0.12.EL
# //
# // Copyright Model Technology, a Mentor Graphics Corporation company, 2004
# // All Rights Reserved.
# // UNPUBLISHED, LICENSED SOFTWARE.
# // CONFIDENTIAL AND PROPRIETARY INFORMATION WHICH IS THE
# // PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS.
# //
# Loading __work.rf_bench
# Loading __work.rf_hier
# Loading __work.clkrst
# Loading __work.rf
VSIM 1> run -all
*** Your testbench simulation starts here ****
# ** Note: $finish : rf_bench.v(100)
# Time: 100010 ns Iteration: 0 Instance: /rf_bench
Verilog simulation successful
Created a dump file dump.wlf. Open in vsim
You can now view a waveform of
the simulation by issuing the following on the command-line:
prompt% vsim -view dataset=dump.wlf
You can now view all waveforms
of all the signals in your design. The waveforms are saved to a file
called dump.vcd and dump.wlf. In Model-sim, you will see a tab
showing dataset. Click on the Edit menu and choose Wave. You can drag
and drop modules into the waveform window to look at different
signals as before.
If you make any changes to
any of the verilog files, simply reissue the wsrun.pl command again:
prompt% wsrun.pl foo_bench foo_bench.v foo0.v foo1.v foo2.v
And re-open vsim.
3.
Additional flags
3.1
-prog
wsrun.pl -prog <assembly
filename>
Assemble
the assembly file and run it on the processor.
3.2
-list
wsrun.pl -list <filename
with list of assembly files>
Example list file foo.list
which contains one assembly file on each line.
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/inst_tests/andn_0.asm
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/inst_tests/andn_1.asm
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/inst_tests/andn_2.asm
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/inst_tests/andn_3.asm
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/inst_tests/andn_4.asm
Run the programs one after
another on the processor. Results written to a file called
summary.log .
3.3
-addr
wsrun.pl -addr <address
trace filename> mem_system_perfbench *.v
This
option is similar to -prog. It is used to specify an address trace to
be used for HW5's mem_system_perfbench testbench. This option does
not make sense for any other testbench.
3.4
-brief
Show less output on screen,
record to wsrun.log
3.5
-wave
wsrun.pl -wave
Will
automatically start vsim with the waveform viewer after simulating
your design.
You can specify wildcards
like *.v
to compile all the .v files.
@@wsrun.pl module_name *.v
3.6 -args
This
specifies arguments to vsim. One useful form of this command is
“-args -novopt” which will turn off vsim's automatic
optimizer. You might consider trying this if you experience bizarre
errors, and are using vsim 6 or higher.
3.6
-do
4.
Specifying do files
Instead of a testbench if
you have a do file, say foo.do. Then use "-do" switch to
specify the do file. Instead of the module name of the bench, your
next argument must be the name of the top-most module. For example:
prompt% wsrun.pl -do foo.do top_most_module_name foo0.v foo1.v foo2.v
5.
Simulating full programs on your processor
The script has a -prog
switch using which you can specify a program to simulate on your
processor. The script will automatically assemble it, copy over the
loadfile
and compile and simulate your processor and run that program by
loading into memory.
For example:
prompt% wsrun.pl -prog
/u/k/a/karu/courses/cs552/spring2009/handouts/testprograms/public/easyTest.asm
proc_hier_bench *.v
The above command will run the
easyTest program in your processor.
6.
Testing different sub-units of your design
Use the script to simulate
and verify individual units rapidly, each with its own testbench as
you build up your processor. This script gets rid of the need to
create project files and using the GUI to compile and run the
simulation. The script takes care of everything and we use ModelSim
only as a waveform viewer for debugging.
You will find this script to
be useful as we transition to more complex designs.
|