UW-Madison
Computer Sciences Dept.

CS/ECE 552 Introduction to Computer Architecture


Spring 2012 Section 1
Instructor David A. Wood and T. A. Ramkumar Ravikumar
URL: http://www.cs.wisc.edu/~david/courses/cs552/S12/

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/S12/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 (NOTE: You should be using wsrun_mumble.pl to run simulations in MUMBLE lab):

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.

 
Computer Sciences | UW Home