Modelsim Tutorial
Modelsim Tutorial
SE
Tutorial
Version 5.6d
Published: 6/Aug/02
ModelSim /VHDL, ModelSim /VLOG, ModelSim /LNL, and ModelSim /PLUS are
produced by Model Technology™ Incorporated. Unauthorized copying,
duplication, or other reproduction is prohibited without the written consent of Model
Technology.
The information in this manual is subject to change without notice and does not
represent a commitment on the part of Model Technology. The program described
in this manual is furnished under a license agreement and may not be used or
copied except in accordance with the terms of the agreement. The online
documentation provided with this product may be printed by the end-user. The
number of copies that may be printed is limited to the number of licenses
purchased.
phone: 503-641-1340
fax: 503-526-5410
e-mail: [email protected], [email protected]
home page: http://www.model.com
support page: http://www.model.com/support
ModelSim SE Tutorial
T-3
Table of Contents
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-5
Lesson 1 - Creating a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-11
Lesson 2 - Basic VHDL simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-17
Lesson 3 - Basic Verilog simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-25
Lesson 4 - Mixed VHDL/Verilog simulation . . . . . . . . . . . . . . . . . . . . . . T-37
Lesson 5 - Debugging a VHDL design . . . . . . . . . . . . . . . . . . . . . . . . . . T-45
Lesson 6 - Finding names and values . . . . . . . . . . . . . . . . . . . . . . . . . . T-53
Lesson 7 - Using the Wave window . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-57
Lesson 8 - Simulating with the Performance Analyzer . . . . . . . . . . . . . T-65
Lesson 9 - Simulating with Code Coverage . . . . . . . . . . . . . . . . . . . . . . T-75
Lesson 10 - Comparing waveforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-83
Lesson 11 - Debugging with the Dataflow window . . . . . . . . . . . . . . . . T-95
Lesson 12 - Running a batch-mode simulation . . . . . . . . . . . . . . . . . . T-111
Lesson 13 - Executing commands at load time . . . . . . . . . . . . . . . . . . T-115
Lesson 14 - Tcl/Tk and ModelSim . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-117
License Agreement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-131
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . T-137
ModelSim SE Tutorial
T-4
ModelSim SE Tutorial
T-5
Introduction
Chapter contents
Software versions . . . . . . . . . . . . . . . . T-6
Assumptions . . . . . . . . . . . . . . . . . T-7
ModelSim SE Tutorial
T-6 Introduction
Software versions
This documentation was written to support ModelSim SE 5.6d for UNIX and Microsoft
Windows 98/Me/NT/2000/XP. If the ModelSim software you are using is a later release,
check the README file that accompanied the software. Any supplemental information
will be there.
Although this document covers both VHDL and Verilog simulation, you will find it a
useful reference even if your design work is limited to a single HDL.
Standards supported
ModelSim VHDL supports both the IEEE 1076-1987 and 1076-1993 VHDL, the
1164-1993 Standard Multivalue Logic System for VHDL Interoperability, and the
1076.2-1996 Standard VHDL Mathematical Packages standards. Any design developed
with ModelSim will be compatible with any other VHDL system that is compliant with
either IEEE Standard 1076-1987 or 1076-1993.
ModelSim Verilog is based on IEEE Std 1364-1995 and a partial implementation of
1364-2001 (see /<install_dir>/modeltech/docs/technotes/vlog_2000.note for
implementation details) Standard Hardware Description Language. The Open Verilog
International Verilog LRM version 2.0 is also applicable to a large extent. Both PLI
(Programming Language Interface) and VCD (Value Change Dump) are supported for
ModelSim PE and SE users.
In addition, all products support SDF 1.0 through 3.0, VITAL 2.2b, VITAL’95 – IEEE
1076.4-1995, and VITAL 2000 – IEEE 1076.4-2000.
ModelSim SE Tutorial
Assumptions T-7
Assumptions
We assume that you are familiar with the use of your operating system. You should be
familiar with the window management functions of your graphic interface: either
OpenWindows, OSF/Motif, CDE, KDE, GNOME, or Microsoft Windows 98/Me/NT/
2000/XP.
We also assume that you have a working knowledge of VHDL and Verilog. Although
ModelSim is an excellent tool to use while learning HDL concepts and practices, this
document is not written to support that goal.
ModelSim SE Tutorial PDF, HTML select Main window > Help > SE Documentation; also available
from the Support page of our web site: www.model.com
ModelSim SE User’s PDF, HTML select Main window > Help > SE Documentation
Manual
ModelSim SE Command PDF, HTML select Main window > Help > SE Documentation
Reference
ModelSim Foreign PDF, HTML select Main window > Help > SE Documentation
Language Interface
Reference
ModelSim Command Help ASCII type help [command name] at the prompt in the Main window
Error message help ASCII type verror <msgNum> at the prompt in the Main window or at a
shell prompt
Tcl Man Pages (Tcl HTML select Main window > Help > Tcl Man Pages, or find
manual) contents.htm in \modeltech\docs\tcl_help_html
ModelSim SE Tutorial
T-8
tech notes ASCII select Main window > Help > Technotes, or located in the
\modeltech\docs\technotes directory
Support
www.model.com/support/default.asp
Customers in Europe should contact their distributor for support. See
www.model.com/contact_us.asp for distributor contact information.
Updates
www.model.com/products/release.asp
ModelSim SE Tutorial
Before you begin T-9
(PROMPT: run -all) (MENU: Simulate > Run > Run -All)
Command history
As you work on the lessons, keep an eye on the Main transcript window. The commands
invoked by buttons and menu selections are echoed there. You can scroll through the
command history with the up and down arrow keys, or the command history may be
reviewed with several shortcuts at the ModelSim/VSIM prompt.
Shortcut Description
ModelSim SE Tutorial
T-10 Introduction
For example, if you saved a series of compiler commands as mycompile.do (the .do
extension is optional), you could recompile with one command:
do mycompile.do
Note: Neither the prompt nor the Return that ends a command line are shown in the
examples.
ModelSim SE Tutorial
T-11
ModelSim SE Tutorial
T-12 Lesson 1 - Creating a Project
Creating a project
1 Start ModelSim with one of the following:
for UNIX at the shell prompt:
vsim
for Windows - your option - from a Windows shortcut icon, from the Start menu, or
from a DOS prompt:
modelsim.exe
Note: if you didn’t add ModelSim to your search path during installation, you will have
to include the full path when you type this command at a DOS prompt.
Upon opening ModelSim for the first time, you will see the Welcome to ModelSim
dialog. (If this screen is not available, you can display it by selecting Help > Welcome
Menu from the Main window.)
2 Select Create a Project from the Welcome dialog, or File > New > Project (Main
window). In the Create Project dialog box, enter "test" as the Project Name and select
ModelSim SE Tutorial
Creating a project T-13
a directory where the project file will be stored. Leave the Default Library Name set to
"work."
Upon selecting OK, you will see a blank Project tab in the workspace area of the Main
window and the Add Items to the Project dialog.
workspace
ModelSim SE Tutorial
T-14 Lesson 1 - Creating a Project
3 The next step is to add the files that contain your design units. Click Add Existing File
in the Add Items to Project dialog. For this exercise, we’ll add two Verilog files.
Click the Browse button in the Add file to Project dialog box and open the examples
directory in your ModelSim installation. Select tcounter.v and counter.v. Select
Reference from current location and then click OK.
4 Click your right mouse button (2nd button in Windows; 3rd button in UNIX) in the
Project page and select Compile > Compile All.
ModelSim SE Tutorial
Creating a project T-15
5 The two files are compiled. Click on the Library tab and expand the work library by
clicking the "+" icon. You’ll see the compiled design units listed.
6 The last step in this exercise is to load one of the design units. Double-click counter on
the Library page. You’ll see a new page appear in the Workspace that displays the
structure of the counter design unit.
At this point, you would generally run the simulation and analyze or debug your design.
We’ll do just that in the upcoming lessons. For now, let’s wrap up by ending the simulation
and closing the project. Select Simulate > End Simulation and confirm that you want to
ModelSim SE Tutorial
T-16 Lesson 1 - Creating a Project
quit simulating. Next, select File > Close > Project, confirm that you want to close the
project, and select Yes to update your project file with the changes you made during this
session.
Note that a test.mpf file has been created in your working directory. This file contains
information about the project test that you just created. ModelSim will open this project
automatically the next time you invoke the tool.
ModelSim SE Tutorial
T-17
ModelSim SE Tutorial
T-18 Lesson 2 - Basic VHDL simulation
for Windows - your option - from a Windows shortcut icon, from the Start menu, or
from a DOS prompt:
modelsim.exe
Note: If you didn’t add ModelSim to your search path during installation, you will have
to include the full path when you type this command at a DOS prompt.
3 Before you compile any HDL code, you’ll need a design library to hold the
compilation results. To create a new design library, make this menu selection in the
Main window: File > New > Library.
Make sure Create: a new
library and a logical
mapping to it is selected.
Type "work" in the
Library Name field and
then select OK.
This creates a
subdirectory named work
- your design library -
within the current
directory. ModelSim
saves a special file named
_info in the subdirectory.
(PROMPT: vlib work
vmap work work)
Note: Do not create a Library directory using UNIX or Windows commands, because
the _info file will not be created. Always use the File menu or the vlib command from
either the ModelSim or UNIX/DOS prompt.)
ModelSim SE Tutorial
Compiling the design T-19
4 Compile the file counter.vhd into the new library by selecting Compile > Compile.
This opens the Compile HDL Source Files dialog box. (You won’t see this dialog box
if you invoke vcom from the command line.)
Complete the compilation by selecting counter.vhd from the file list and clicking
Compile. Select Done when you are finished.
You can compile multiple files in one session from the file list. Individually select and
compile the files in the order required by your design.
Note that you can have ModelSim determine the compile order. See "Auto-generating
compile order" in the Project chapter of the ModelSim User’s Manual for details.
ModelSim SE Tutorial
T-20 Lesson 2 - Basic VHDL simulation
The Simulate dialog box appears. Click the "+" sign next to ’work’ to see the counter
design unit. (You won’t see this dialog box if you invoke vsim with counter from the
command line.)
If the Design Unit is an entity (like counter in this design), you can expand it to view
any associated architectures.
2 Next, select View > All Windows from the Main window menu to open all ModelSim
windows.
(PROMPT: view *)
ModelSim SE Tutorial
Loading the design T-21
3 Next let’s add top-level signals to the Wave window by selecting Add > Wave >
Signals in Region from the Signals window menu.
(PROMPT: add wave /counter/*)
ModelSim SE Tutorial
T-22 Lesson 2 - Basic VHDL simulation
1 Click in the Main window and enter the following command at the VSIM prompt:
force clk 1 50, 0 100 -repeat 100
2 Now you will exercise two different Run functions from the toolbar buttons on either
the Main or Wave window. (The Run functions are identical in the Main and Wave
windows.) Select the Run button first. When the run is complete, select Run -All.
Run. This causes the simulation to run and then stop after 100 ns.
(PROMPT: run 100) (Main MENU: Simulate > Run > Run 100ns)
Run -All. This causes the simulator to run forever. To stop the run, go on to the next
step.
(PROMPT: run -all) (Main MENU: Simulate > Run > Run -All)
3 Select the Break button on either the Main or Wave toolbar to interrupt the run. The
simulator will stop running as soon as it gets to an acceptable stopping point.
The arrow in the Source window points to the next HDL statement to be executed. (If
the simulator is not evaluating a process at the time the Break occurs, no arrow will be
displayed in the Source window.)
ModelSim SE Tutorial
Running the simulation T-23
4 Next, you will set a breakpoint in the function on line 18. Scroll the Source window
until line 18 is visible. Click on or near line number 18 to set the breakpoint.
You should see a red dot next to the line number where the breakpoint is set. The
breakpoint can be toggled between enabled and disabled by clicking it. When a
breakpoint is disabled, the dot appears open. To delete the breakpoint, click the line
number with your right mouse button and select Remove Breakpoint 18.
(PROMPT: bp counter.vhd 18)
Note: Breakpoints can be set only on executable lines, denoted by blue line numbers.
5 Select the Continue Run button to resume the run that you interrupted. ModelSim will
hit the breakpoint, as shown by an arrow in the Source window and by a Break message
in the Main window.
ModelSim SE Tutorial
T-24 Lesson 2 - Basic VHDL simulation
6 Click the Step button in the Main or Source window several times to single-step
through the simulation. Notice that the values change in the Variables window (you
may need to expand the Variables window).
7 This concludes the basic VHDL simulation tutorial. When you’re done, quit the
simulator by entering the command:
quit -force
ModelSim SE Tutorial
T-25
The project feature covered in Lesson 1 executes several actions automatically such as
creating and mapping work libraries. In this lesson we will go through the entire process so
you get a feel for how ModelSim really works.
ModelSim SE Tutorial
T-26 Lesson 3 - Basic Verilog simulation
2 Copy the Verilog files (files with ".v" extension) from the
\<install_dir>\modeltech\examples directory into the current directory.
Before you can compile a Verilog design, you need to create a design library in the new
directory. If you are familiar only with interpreted Verilog simulators such as Cadence
Verilog-XL, this will be a new idea for you. Since ModelSim is a compiled Verilog
simulator, it requires a target design library for the compilation. ModelSim can
compile both VHDL and Verilog code into the same library if desired.
3 Invoke ModelSim:
for UNIX at the shell prompt:
vsim
for Windows - your option - from a Windows shortcut icon, from the Start menu, or
from a DOS prompt:
modelsim.exe
Note: If you didn’t add ModelSim to your search path during installation, you will have
to include the full path when you type this command at a DOS prompt.
ModelSim SE Tutorial
Compiling the design T-27
4 Before you compile any HDL code, you’ll need a design library to hold the
compilation results. To create a new design library, make this menu selection in the
Main window: File > New > Library.
Make sure Create: a new
library and a logical
mapping to it is selected.
Type "work" in the
Library Name field and
then select OK.
This creates a
subdirectory named work
- your design library -
within the current
directory. ModelSim
saves a special file named
_info in the subdirectory.
(PROMPT: vlib work
vmap work work)
Note: Do not create a Library directory using UNIX or Windows commands, because
the _info file will not be created. Always use the File menu or the vlib command from
either the ModelSim or UNIX/DOS prompt.)
In the next step you’ll compile the Verilog design. The example design consists of two
Verilog source files, each containing a unique module. The file counter.v contains a
module called counter, which implements a simple 8-bit binary up-counter. The other
file, tcounter.v, is a testbench module (test_counter) used to verify counter.
Under simulation you will see that these two files are configured hierarchically with a
single instance (instance name dut) of module counter instantiated by the testbench.
You'll get a chance to look at the structure of this code later. For now, you need to
compile both files into the work design library.
ModelSim SE Tutorial
T-28 Lesson 3 - Basic Verilog simulation
5 Compile the counter.v, and tcounter.v files into the work library by selecting Compile
> Compile from the menu.
Select counter.v and tcounter.v (use Ctrl + click) and then choose Compile and then
Done.
Note: The order in which you compile the two Verilog modules is not important (other
than the source-code dependencies created by compiler directives). This may again seem
strange to Verilog-XL users who understand the possible problems of interface checking
between design units, or compiler directive inheritance. ModelSim defers such checks
until the design is loaded. So it doesn’t matter here if you choose to compile counter.v
before or after tcounter.v.
ModelSim SE Tutorial
Loading the design T-29
The Simulate dialog appears. Click the "+" sign next to ’work’ to see the counter and
test_counter design units. (You won’t see this dialog box if you invoke vsim with
test_counter from the command line.)
The Simulate dialog allows you to select a design unit to load from the specified
library. You can also select the resolution limit for the simulation. The default
resolution is 1 ns.
Select test_counter and click Load to accept these settings.
2 Bring up the Signals, Source, and Wave windows by entering the following command
at the VSIM prompt within the Main window:
view signals source wave
ModelSim SE Tutorial
T-30 Lesson 3 - Basic Verilog simulation
3 Now let’s add signals to the Wave window with ModelSim’s drag and drop feature.
In the Signals window, select Edit > Select All to select the three signals. Drag the
signals to either the pathname or the values pane of the Wave window.
HDL items can also be copied from one window to another (or within the Wave and
List windows) with the Edit > Copy and Edit > Paste menu selections.
ModelSim SE Tutorial
Loading the design T-31
4 You may have noticed when you loaded the design in Step 1 that a new tab appeared
in the workspace area of the Main window.
Structure pane
The Structure tab shows the hierarchical structure of the design. By default, only the
top level of the hierarchy is expanded. You can navigate within the hierarchy by
clicking on any line with a "+" (expand) or "-" (contract) symbol. The same navigation
technique works anywhere you find these symbols within ModelSim.
By clicking the "+" next to dut: counter you can see all three hierarchical levels:
test_counter, counter and a function called increment. (If test_counter is not
displayed you simulated counter instead of test_counter.)
5 Click on Function increment and notice how other ModelSim windows are
automatically updated as appropriate. Specifically, the Source window displays the
Verilog code at the hierarchical level you selected in the Structure window, and the
Signals window displays the appropriate signals. Using the Structure tab in this way is
analogous to scoping commands in interpreted Verilogs.
For now, make sure the test_counter module is showing in the Source window by
clicking on the top line in the Structure pane.
ModelSim SE Tutorial
T-32 Lesson 3 - Basic Verilog simulation
1 Select the Run button on the Main window toolbar. This causes the simulation to run
and then stop after 100 ns (the default simulation length).
(PROMPT: run) (MENU: Simulate > Run > Run 100 ns)
2 Next change the run length to 500 on the Run Length selector and select the Run
button again.
Now the simulation has run for a total of 600ns (the default 100ns plus the 500 you just
asked for). The status bar at the bottom of the Main window displays this information.
3 The last command you executed (run 500) caused the simulation to advance for 500ns.
You can also advance simulation to a specific time. Type:
run @ 3000
This advances the simulation to time 3000ns. Note that the simulation actually ran for
an additional 2400ns (3000 - 600).
ModelSim SE Tutorial
Running the simulation T-33
4 Now select the Run -All button from the Main window toolbar. This causes the
simulator to run until the stop statement in tcounter.v.
(PROMPT: run -all) (MENU: Simulate > Run > Run -All)
ModelSim SE Tutorial
T-34 Lesson 3 - Basic Verilog simulation
Debugging
Next we’ll take a brief look at an interactive debugging feature of the ModelSim
environment.
1 Let’s set a breakpoint at line 30 in the counter.v file (which contains a call to the
Verilog function increment). To do this, select dut: counter in the Structure pane of
the Workspace. Move the cursor to the Source window and scroll the window to
display line 30. Click on or near line number 30 to set a breakpoint. You should see a
red dot next to the line number where the breakpoint is set.
The breakpoint can be toggled between enabled and disabled by clicking it. When a
breakpoint is disabled, the dot appears open. To delete the breakpoint, click the line
number with your right mouse button and select Remove Breakpoint.
Note: Breakpoints can be set only on executable lines, denoted by blue line numbers.
2 Select the Restart button to reload the design elements and reset the simulation time
to zero.
ModelSim SE Tutorial
Debugging T-35
Make sure all items in the Restart dialog box are selected, then click Restart.
(PROMPT: run -all) (Main MENU: Simulate > Run > Run -All)
When the simulation hits the breakpoint, it stops running, highlights the line with an
arrow in the Source window, and issues a Break message in the Main window.
4 When a breakpoint is reached, typically you will want to know one or more signal
values. You have several options for checking values:
• look at the values shown in the Signals window
• hover your mouse pointer over the count variable in the Source window and a
"balloon" will pop up with the value
• select the count variable in the Source window, right-click it, and select Examine
from the context menu;
• use the examine command to output the value to the Main window transcript:
examine count
ModelSim SE Tutorial
T-36 Lesson 3 - Basic Verilog simulation
5 Let’s move through the Verilog source functions with ModelSim’s Step command.
Click Step on the toolbar.
6 Experiment by yourself for awhile. Set and clear breakpoints and use the Step and Step
Over commands until you feel comfortable with their operation. When you’re done,
quit the simulator by entering the command:
quit -force
ModelSim SE Tutorial
T-37
ModelSim SE Tutorial
T-38 Lesson 4 - Mixed VHDL/Verilog simulation
Make sure the new directory is the current directory. Do this by invoking ModelSim
from the new directory or by using the File > Change Directory command from the
ModelSim Main window.
for Windows - your option - from a Windows shortcut icon, from the Start menu, or
from a DOS prompt:
modelsim.exe
Note: If you didn’t add ModelSim to your search path during installation, you will have
to include the full path when you type this command at a DOS prompt.
3 Before you compile any HDL code, you’ll need a design library to hold the
compilation results. To create a new design library, make this menu selection in the
Main window: File > New > Library.
Make sure Create: a new
library and a logical
mapping to it is selected.
Type "work" in the
Library Name field and
then select OK.
This creates a
subdirectory named work
- your design library -
within the current
directory. ModelSim
saves a special file named
_info in the subdirectory.
(PROMPT: vlib work
vmap work work)
Note: Do not create a Library directory using UNIX or Windows commands, because
the _info file will not be created. Always use the File menu or the vlib command from
either the ModelSim or UNIX/DOS prompt.)
ModelSim SE Tutorial
Compile the design T-39
4 Compile the HDL files by selecting Compile > Compile from the menu:
(PROMPT: vlog cache.v memory.v proc.v)
ModelSim SE Tutorial
T-40 Lesson 4 - Mixed VHDL/Verilog simulation
5 Depending on the design, the compile order of VHDL files can be very specific. In the
case of this lesson, the file top.vhd must be compiled last.
Stay in the Compile HDL Source Files dialog box and compile the VHDL files in this
order (this invokes the VHDL compiler, vcom):
• util.vhd
• set.vhd
• top.vhd
ModelSim SE Tutorial
Loading the design T-41
The Simulate dialog appears. Click the "+" sign next to ’work’ to see the design units.
(You won’t see this dialog box if you invoke vsim with top from the command line.)
Select top and then click Load.
2 From the Main menu select View > All Windows to open all ModelSim windows.
(PROMPT: view *)
ModelSim SE Tutorial
T-42 Lesson 4 - Mixed VHDL/Verilog simulation
Notice the hierarchical mixture of VHDL and Verilog in the design. VHDL levels are
indicated by a square “prefix”, while Verilog levels are indicated by a circle “prefix.”
Try expanding (+) and contracting (-) the structure layers. You’ll find Verilog modules
that have been instantiated by VHDL architectures, and similar instantiations of
VHDL items by Verilog.
4 In the Structure pane, click on the Verilog module c: cache. The source code for the
Verilog module is now shown in the Source window.
ModelSim SE Tutorial
Loading the design T-43
5 We’ll use ModelSim’s Find function to locate the declaration of cache_set within
cache.v.
In the Find: field, type cache_set and click Find Next. The cache_set instantiations
are now displayed in the Source window. (Click Close to dismiss the Find in: dialog
box.)
Note that cache_set is a VHDL entity instantiated within the Verilog file cache.v.
ModelSim SE Tutorial
T-44 Lesson 4 - Mixed VHDL/Verilog simulation
6 Go back to the Main window, expand the c:cache entry by clicking the "+" sign, and
scroll down and click on the line "s0: cache_set(only)". The Source window shows
the VHDL code for the cache_set entity.
Before you quit, try experimenting with some of the commands you’ve learned from
previous lessons – add signals to the Wave window, run the simulation, etc. Note that
in this design, “clk” is already driven, so you won’t need to use the force command.
ModelSim SE Tutorial
T-45
ModelSim SE Tutorial
T-46 Lesson 5 - Debugging a VHDL design
2 Make sure the new directory is the current directory. Do this by invoking ModelSim
from the new directory or by using the File > Change Directory command from the
ModelSim Main window.
for Windows - your option - from a Windows shortcut icon, from the Start menu, or
from a DOS prompt:
modelsim.exe
Note: If you didn’t add ModelSim to your search path during installation, you will have
to include the full path when you type this command at a DOS prompt.
4 Enter the following command at the ModelSim prompt in the Main window to create
a new library:
vlib library_2
5 Map the new library to the work library using the vmap command:
vmap work library_2
6 Compile the source files into the new library by entering this command at the
ModelSim prompt:
vcom -work library_2 gates.vhd adder.vhd testadder.vhd
ModelSim SE Tutorial
Compiling and loading the design T-47
7 Open the Simulate dialog by selecting Simulate > Simulate. Expand the work library
and increase the width of the name column by clicking and dragging on the border
between the Name and Type columns.
ModelSim SE Tutorial
T-48 Lesson 5 - Debugging a VHDL design
A message in the Main window will notify you that there was an assertion error.
ModelSim SE Tutorial
Debugging the simulation T-49
1 First, change the simulation assertion options. Select Simulate > Simulation Options
from the Main window menu.
2 Select the Assertions tab. Change the selection for Break on Assertion to Error and
click OK. This will cause the simulator to stop at the HDL assertion statement.
The -f option causes ModelSim to restart without popping up the confirmation dialog.
ModelSim SE Tutorial
T-50 Lesson 5 - Debugging a VHDL design
Notice that the arrow in the Source window is pointing to the assertion statement.
5 If you look at the Variables window now, you can see that i = 6. This indicates that the
simulation stopped in the sixth iteration of the test pattern’s loop.
6 Expand the variable named test_patterns by clicking the [+]. (You may need to resize
the window for a better view.)
7 Also expand the sixth record in the array test_patterns(6), by clicking the [+]. The
Variables window should be similar to the one below.
ModelSim SE Tutorial
Debugging the simulation T-51
The assertion shows that the Signal sum does not equal the sum field in the Variables
window. Note that the sum of the inputs a, b, and cin should be equal to the output
sum. But there is an error in the test vectors. To correct this error, you need to restart
the simulation and modify the initial value of the test vectors.
9 Update the Variables window by selecting the test process in the Process window.
ModelSim SE Tutorial
T-52 Lesson 5 - Debugging a VHDL design
11 Change the value to 00000111 and then click Change. (Note that this is a temporary
edit, you must use your text editor to permanently change the source code.)
This brings you to the end of this lesson, but feel free to explore the system further. When
you are ready to end the simulation session, quit ModelSim by entering the following
command at the VSIM prompt:
quit -f
ModelSim SE Tutorial
T-53
ModelSim SE Tutorial
T-54 Lesson 6 - Finding names and values
Enter an item label and Find it by searching Right or Left through the window display.
ModelSim SE Tutorial
Searching for item values in the List and Wave windows T-55
You can locate values for the Signal Name(s) shown at the top of the dialog box. The
search is based on these options:
• Search Type: Any Transition
Searches for any transition in the selected signal(s).
• Search Type: Rising Edge
Searches for rising edges in the selected signal(s).
• Search Type: Falling Edge
Searches for falling edges in the selected signal(s).
• Search Type: Search for Signal Value
Searches for the value specified in the Value field; the value should be formatted using
VHDL or Verilog numbering conventions.
ModelSim SE Tutorial
T-56 Lesson 6 - Finding names and values
ModelSim SE Tutorial
T-57
ModelSim SE Tutorial
T-58 Lesson 7 - Using the Wave window
interval measurement
When the Wave window is first drawn, there is one cursor located at time zero. Clicking
anywhere in the waveform display brings that cursor to the mouse location. You can add
cursors to the waveform pane by selecting Insert > Cursor (or the Add Cursor button
shown below). The selected cursor is drawn as a bold solid line; all other cursors are drawn
with thin dashed lines. Remove cursors by selecting them and selecting Edit > Delete
Cursor (or the Delete Cursor button shown below).
ModelSim SE Tutorial
Using time cursors in the Wave window T-59
Finding a cursor
The cursor value corresponds to the simulation time of that cursor. Choose a specific cursor
view by selecting View > Cursors (Wave window). You can also select and scroll to a
cursor by double-clicking its value in the cursor-value pane.
Alternatively, you can click a value with your second mouse button and type the value to
which you want to scroll.
ModelSim SE Tutorial
T-60 Lesson 7 - Using the Wave window
ModelSim SE Tutorial
Zooming - changing the waveform display range T-61
Key Action
i I or + zoom in
o O or - zoom out
f or F zoom full
l or L zoom last
r or R zoom range
<Control-f> (Windows) opens the find dialog box; searches within the specified
<Control-s> (UNIX) field in the pathname pane for text strings
ModelSim SE Tutorial
T-62 Lesson 7 - Using the Wave window
ModelSim SE Tutorial
Creating and viewing datasets T-63
1 Start by creating a new working directory, making it the current directory, and copying
the files from \modeltech\examples\datasets into it.
2 Use the vlib command to create a work library in the current directory.
vlib work
3 Use the vmap command to map the work library to a physical directory. A
modelsim.ini file will be written into the current directory.
vmap work work
5 Load the design and save the simulation to a WLF file named struct.wlf.
vsim -wlf struct.wlf work.cntr_struct
6 Now you will run a DO file that applies stimulus to the design, runs the simulation, and
adds waves to the Wave window. Feel free to open the DO file and look at its contents.
do stimulus.do
The waves that appear in the Wave window are saved automatically into the struct.wlf
file.
ModelSim SE Tutorial
T-64 Lesson 7 - Using the Wave window
Notice that a thick, white vertical bar at the left edge of the window indicates that the
new pane is active.
2 Open struct.wlf.
dataset open struct.wlf
Notice that the pathname prefix for the signals you just added is the dataset name
"struct". The pathname prefix for the active simulation is "sim".
The results for each simulation should be the same. You can continue experimenting
with the two simulations or quit the simulation.
quit -sim
ModelSim SE Tutorial
T-65
ModelSim SE Tutorial
T-66 Lesson 8 - Simulating with the Performance Analyzer
1 Start by creating a new working directory, making it the current directory, and copying
the files from \modeltech\examples\profiler into it.
2 Use the vlib command to create a work library in the current directory.
vlib work (MENU: File > New > Library)
3 Use the vmap command to map the work library to a physical directory. A
modelsim.ini file will be written into the current directory.
vmap work work
ModelSim SE Tutorial
Running the simulation T-67
2 We’re going to run the simulation using a DO file that reports how long the simulation
takes to run. Take a look at the commands in the timerun.do file. The seconds Tcl
command is used to time the simulation.
do timerun.do
Notice as the simulation runs that the status bar shows how many profile samples are
being taken.
Make a note of the run time reported in the Transcript window. We’ll use it later to
compare how much we’ve increased simulation speed. (Your times may differ from
those shown here due to differing system configurations.)
ModelSim SE Tutorial
T-68 Lesson 8 - Simulating with the Performance Analyzer
Note that two lines – retrieve.vhd:35 and store.vhd:43 – are taking the majority of the
simulation time.
You can use the $PrefProfile(hierCutoff) Tcl control variable to filter out everything
below a certain percentage. hierCutoff is the minimum percent usage that will be
listed in the Hierarchical Profile display. The default value is 1%. Any usage less than
1% will not be displayed.
You can also filter the display with the Under % filter in the Hierarchical Profile
window.
ModelSim SE Tutorial
Running the simulation T-69
Double-clicking on any line in the Hierarchical Profile window will open the Source
window and allow you to view the relevant source code for that line. The selected line
will be highlighted in the Source window as shown below. (Here, we’ve double-
clicked retrive.vhd:35.)
ModelSim SE Tutorial
T-70 Lesson 8 - Simulating with the Performance Analyzer
1 Modify the loops to include exits inside the IF statements, or compile the following
files included for that purpose – store_exit.vhd and retrieve_exit.vhd.
vcom retrieve_exit.vhd store_exit.vhd
2 Compile the top level blocks and configuration files again to account for the lower
level changes.
vcom ringrtl.vhd testring.vhd config_rtl.vhd
3 Reset the simulation to time zero and restart with the modified files.
restart -f
ModelSim SE Tutorial
Speeding up the simulation T-71
Run time has been cut almost in half by inserting exits in the loops.
A lot of time is still being spent in the loops. To further reduce simulation time, these
loops can be replaced by indexing an array.
ModelSim SE Tutorial
T-72 Lesson 8 - Simulating with the Performance Analyzer
6 Remove the loops and add an array, or compile the following files which already
contain the modifications.
vcom retrieve_array.vhd store_array.vhd
9 Run timerun.do again and note the difference in simulation run time. Your time may
differ from that shown here, but the new run should be very fast – roughly ten times
faster than the original simulation time.
do timerun.do
ModelSim SE Tutorial
Speeding up the simulation T-73
10 Look again at the Hierarchical Profile and you will see more lines showing.
view_profile
Update icon
%Under filter
Note: You results may look slightly different as a result of the computer you’re using
and different system calls that occur during the simulation.
ModelSim SE Tutorial
T-74 Lesson 8 - Simulating with the Performance Analyzer
11 Set the Under% filter to "2" and click the Update icon. This will filter out all usage
values below 2%.
12 Use the report command to output a file with the profile data.
profile report -hierarchical -file hier.rpt -cutoff 4
This command outputs a hierarchical profile of performance data with the file name
hier.rpt.
ModelSim SE Tutorial
T-75
ModelSim SE Tutorial
T-76 Lesson 9 - Simulating with Code Coverage
1 Prior to running the simulation, we need to check the which_test.txt file that was copied
from the modeltech\examples\profiler directory to ensure it reads
"false = data_switch_test". You can edit the file with notepad within ModelSim.
This switch configures the test bench – the testring.vhd file. We’ll change it later in the
lesson when we merge the coverage results of two simulations.
4 Use the vsim -coverage command to load the design configuration with Code
Coverage.
vsim -coverage work.test_bench_rtl
ModelSim SE Tutorial
Running a simulation with Code Coverage T-77
The top half of the window shows summary information on a per-file basis. If you
select a file in the list, the bottom part of the window gives details about the lines in
the file that have zero coverage.
Note that both testring.vhd and control.vhd are below 90% and, therefore, shown in red
in the Coverage bar graph. 90% is the default coverage threshold, and all coverage
values below 90% will be shown red. The default coverage threshold can be changed
with the Tcl control variable $PrefCoverage(cutoff).
ModelSim SE Tutorial
T-78 Lesson 9 - Simulating with Code Coverage
7 Click on the control.vhd pathname to display the source code for control.vhd in the
Source window. With Code Coverage enabled, the Source window is displayed with
an extra column that details the number of times each line has been executed. The
green "Xs" in the graphic below denote lines that have been excluded. We’ll discuss
that later in the lesson.
Scroll the Source window to view the executable lines. As you can see some lines have
red zeros next to them. This indicates a line that was not executed.
Open the file cover.dat to see how the data is stored. Notepad works well to check text
files such as this.
notepad cover.dat
ModelSim SE Tutorial
Excluding lines and files T-79
1 Scroll to one of the executable lines in the Source window (noted with a blue line
number).
2 With your mouse pointer over the column that shows coverage results (the left-most
column), click your right-mouse button and select Exclude Coverage Line #.
3 The line will now be marked with a green "X" and the coverage statistics will be
updated to exclude that line.
4 View the coverage_summary window and click the Excluded tab. This tab shows all
the lines and files that are currently being excluded.
ModelSim SE Tutorial
T-80 Lesson 9 - Simulating with Code Coverage
5 Select the line in the Excluded tab, click your right mouse button, and select Include
Entire Selected Files. This removes the exclusion filter on any lines from the selected
file.
You can continue experimenting with the various exclusion commands at this point if
you want. However, before continuing with the tutorial, select Coverage > Clear Out
Current Filter to ensure all lines and files are included for the next exercise.
ModelSim SE Tutorial
Merging coverage results from two simulations T-81
1 Note how many times the clocked processes have been executed.
2 Next we’ll edit the which_test.txt file. Changing this text file causes a different test to
be run from the same testbench.
Using ModelSim Notepad, edit the file so it reads "true = data_switch_test." Make sure
the Edit > read_only switch is not on.
notepad which_test.txt
restart -f
4 Restore the coverage data from the last simulation run so that its data can be appended
to the current simulation.
coverage reload cover.dat
(coverage_summary MENU: File > Open > Coverage > Merge Coverage)
Note that now both testring.vhd and control.vhd are above 90% and therefore shown
in green.
ModelSim SE Tutorial
T-82 Lesson 9 - Simulating with Code Coverage
6 Click on the control.vhd pathname to bring up the Source window. You can see from
the values in the first column that the line hits from this run have been added to the
ones from the last run. The number of times the clocked processes have been run has
doubled.
ModelSim SE Tutorial
T-83
ModelSim SE Tutorial
T-84 Lesson 10 - Comparing waveforms
1 Start by creating a new directory for this exercise. Create the directory and copy all of
the files from \<install_dir>\modeltech\examples\mixedHDL to the new directory.
Make sure the new directory is the current directory. Do this by invoking ModelSim
from the new directory or by selecting the File > Change Directory command from
the ModelSim Main window.
2 At the ModelSim prompt in the Transcript pane, run the compare.do DO file.
do compare.do
ModelSim SE Tutorial
Editing a source file and re-running the simulation T-85
1 Edit the proc.v file by opening it in the Source window. Make sure the Edit > read
only flag isn’t selected.
2 Scroll down and un-comment the read cycle on line 78. Your source file should look
like the following:
ModelSim SE Tutorial
T-86 Lesson 10 - Comparing waveforms
6 Add the waves to the Wave window and run the simulation.
add wave *
run -all
ModelSim SE Tutorial
Comparing the simulation runs T-87
1 Select Tools > Waveform Compare > Comparison Wizard from the Wave or Main
window.
2 Click the browse button and select gold.wlf as the Reference Dataset. Recall that this
dataset is from the first simulation run prior to adding the 10 time unit delay.
Leave the Test Dataset set to Use Current Simulation, and then click Next.
ModelSim SE Tutorial
T-88 Lesson 10 - Comparing waveforms
3 Select Compare All Signals in the second dialog, and then click Next.
4 In the next three dialogs, click Next, Compute Differences Now, and Finish,
respectively.
ModelSim SE Tutorial
Viewing and saving the comparison data T-89
ModelSim SE Tutorial
T-90 Lesson 10 - Comparing waveforms
The Compare tab in the Main window shows the region that was compared, and the
transcript area shows the number of differences found between the timing of the Reference
and Test datasets.
In the Wave window, a signal that contains timing differences between the two simulations
is denoted by a red X over its yellow triangle. Red difference markers in the waveform
display area show the location of the timing differences on the waveforms, as do the red
lines in the horizontal scrollbar at the bottom of the window.
difference markers
compare data
Hover your mouse pointer over a difference marker to display a popup containing data
about that timing difference. Also note that when you place a waveform cursor over a
difference, the values column displays the text "diff."
ModelSim SE Tutorial
Viewing and saving the comparison data T-91
Compare icons
The Wave window includes six waveform
comparison icons that let you quickly jump between
differences. From left to right, the icons do the
following: find first difference, find previous
annotated difference, find previous difference, find
next difference, find next annotated difference, find
last difference. Use these icons to move the selected
cursor.
The next and previous buttons cycle through differences on all signals. To view differences
for just the selected signal, use <tab> and <shift> - <tab>.
ModelSim SE Tutorial
T-92 Lesson 10 - Comparing waveforms
2 Drag the region from the Compare tab in the Main window to the List window. This
will load the compared signals into the List window. Scroll down the window, and
you’ll see differences shown in yellow.
difference markers
ModelSim SE Tutorial
Specifying tolerances T-93
Specifying tolerances
There may be times you want to allow for leading or trailing tolerances in the test dataset
signals. You can do this easily by modifying the signal properties of a comparison object
in the Wave window.
1 Click the Find Next Difference icon until you can see the differences at 2025 ns.
(KEYBOARD: Tab)
2 Select "compare:/top/\prw<>prw\" in the signals list and then right-click to open the
Signal Properties dialog. Select the Compare tab.
(MENU: View > Signal Properties)
Recall that we delayed the read cycle in proc.v by 10 time units. Therefore, if we
specify a trailing tolerance of 10 ns, the differences on the comparison object should
disappear.
ModelSim SE Tutorial
T-94 Lesson 10 - Comparing waveforms
5 Notice that the difference markers have disappeared for the /top/prw comparison
object.
ModelSim SE Tutorial
T-95
ModelSim SE Tutorial
T-96 Lesson 11 - Debugging with the Dataflow window
1 Create a new working directory, make it the current directory, and then copy the files
from \modeltech\examples\mixedHDL into it.
2 Use the vlib command to create a work library in the current directory.
vlib work
(MENU: File > New > Library)
3 Use the vmap command to map the work library to a physical directory. A
modelsim.ini file will be written into the work directory.
vmap work work
7 Log all signals in the design so we have all information for debugging.
log -r /*
ModelSim SE Tutorial
Exploring connectivity T-97
Exploring connectivity
A primary use of the Dataflow window is exploring the "physical" connectivity of your
design. You do this by expanding the view from process to process. This allows you to see
the drivers/receivers of a particular signal, net, or register.
3 Drag signal strb from the Signals window to the Dataflow window.
ModelSim SE Tutorial
T-98 Lesson 11 - Debugging with the Dataflow window
4 Double click the net that is highlighted in red. The view expands to display the
processes that are connected to strb.
5 Select signal test on process #AND#24 and expand the view to show its drivers.
Notice that after the display expands, the signal line for strb is highlighted in green.
This highlighting lets you know the path you have traversed in the design.
6 Select signal oen on process #ALWAYS#144, and expand the view to show its readers.
7 Continue exploring if you wish. When you are done, clear the Dataflow window before
moving on to the next exercise.
ModelSim SE Tutorial
Tracing events T-99
Tracing events
Another useful debugging feature is tracing events that contribute to an unexpected output
value. Using the Dataflow window’s embedded wave viewer, you can trace backward from
a transition to see what process or signal is causing the unexpected output.
2 Select p: proc in the sim tab of the Main window, and then drag signal t_out from the
Signals window into the Dataflow window.
3 Open the embedded wave viewer and increase the size of the window.
ModelSim SE Tutorial
T-100 Lesson 11 - Debugging with the Dataflow window
4 Select process #NAND#24 in the dataflow pane. Notice that all input and output signals
of the process are displayed automatically in the wave viewer.
5 Set a time cursor in the wave viewer at the last transition of signal t_out (465 ns). See
"Making cursor measurements" (T-59) for more information on setting cursors.
ModelSim SE Tutorial
Tracing events T-101
6 To trace to the first contributing event, select Trace > Trace next event.
A new cursor is added to the wave viewer marking the last event, the transition of the
strobe to 0, which caused the output of 0 on t_out.
7 Trace the next event two more times and then select Trace > Trace event set.
ModelSim SE Tutorial
T-102 Lesson 11 - Debugging with the Dataflow window
The dataflow pane sprouts to the preceding process and shows the input driver of
signal strb. Notice too that the wave viewer now shows the input and output signals of
the newly selected process.
You can continue tracing events through the design in this manner: select Trace next
event until you get to a transition of interest in the wave viewer, and then select Trace
event set to update the dataflow pane.
8 Clear the Dataflow window before moving on to the next exercise. Also, close the
wave viewer pane.
ModelSim SE Tutorial
Tracing an ’X’ (unknown) T-103
Note that t_out goes to an unknown state (StX) at time 0 and continues transitioning to
StX throughout the run. The red color of the waveform indicates an unknown value.
ModelSim SE Tutorial
T-104
You must click somewhere in the Dataflow window to get the yellow signal values to
appear.
As previously mentioned the Wave and Dataflow windows are designed to work
together. Try moving the cursor in the Wave window (see "Making cursor
measurements" (T-59) for details), and you’ll see that the value of t_out changes in the
Dataflow window. We’ll look at other links between the windows as we work through
the tutorial.
3 Move the Wave window cursor back to a time when t_out is unknown. Then, with
t_out selected in the Dataflow window, trace the unknown.
ModelSim SE Tutorial
Tracing an ’X’ (unknown) T-105
The input signal test is selected in the Dataflow window, and it is also added
automatically to the Wave window.
4 Continue tracing back to the source of the unknown. Select Trace > TraceX again.
This time signal test2 is highlighted in the Dataflow window, and it is also added to the
Wave window.
ModelSim SE Tutorial
T-106 Lesson 11 - Debugging with the Dataflow window
5 Select Trace > TraceX once more, and you’ll discover the source of the unknown. In
this case there is a HiZ on input signal test_in and a 1 on input signal _rw, so output
signal test2 resolves to an ’X’.
ModelSim SE Tutorial
Jumping to the source of an X T-107
1 Drag t_out from the Wave window to the Dataflow window as you did in the last
exercise.
ModelSim SE Tutorial
T-108 Lesson 11 - Debugging with the Dataflow window
1 Select Tools > Options from the Dataflow window menu bar.
ModelSim SE Tutorial
Displaying hierarchy in the Dataflow window T-109
ModelSim SE Tutorial
T-110 Lesson 11 - Debugging with the Dataflow window
Zoom Full
zoom out to view
the entire
schematic
Now click and drag with the left mouse button to pan the design.
ModelSim SE Tutorial
T-111
Important: Batch-mode simulations must be run from a DOS or UNIX prompt. Unless
directed otherwise, enter all commands in this lesson at a DOS or UNIX prompt.
Additionally, this lesson assumes you have added ModelSim to your PATH. If you did
not, you’ll need to specify full paths to the tools (i.e., vlib, vmap, vcom, and vsim) that
are used in the lesson.
ModelSim SE Tutorial
T-112 Lesson 12 - Running a batch-mode simulation
1 To set up for this lesson, create a new directory and copy this file into it:
\<install_dir>\modeltech\examples\counter.vhd
2 Create a new design library (again, enter these commands at a DOS or UNIX prompt
in the new directory you created in step 1.):
vlib work
5 You will use a macro file that provides stimulus for the counter. For your convenience,
a macro file has been provided with ModelSim. You need to copy this macro file from
the installation directory to the current directory:
<install_dir>\modeltech\examples\stim.do
6 Create a batch file using an editor; name it yourfile. With the editor, put the following
on separate lines in the file:
add list -decimal *
do stim.do
write list counter.lst
quit -f
7 To run the batch-mode simulation, enter the following at the command prompt:
vsim -do yourfile -wlf saved.wlf counter -c
8 Since you saved the simulation results in saved.wlf, you can view the simulation results
by starting up VSIM with its -view switch:
vsim -view saved.wlf
ModelSim SE Tutorial
T-113
9 Open these windows with the View menu in the Main window, or the equivalent
command at the ModelSim prompt:
view signals list wave
Note: If you open the Process or Variables windows they will be empty. You are looking
at a saved simulation, not examining one interactively; the logfile saved in saved.wlf was
used to reconstruct the current windows.
10 Now that you have the windows open, put the signals in them:
add wave *
add list *
11 Use the available windows to experiment with the saved simulation results and quit
when you are ready:
quit -f
For additional information on the batch and command line modes, please refer to the
ModelSim User’s Manual.
ModelSim SE Tutorial
T-114
ModelSim SE Tutorial
T-115
ModelSim SE Tutorial
T-116 Lesson 13 - Executing commands at load time
Important: Start this lesson from either the UNIX or DOS prompt in the same directory
in which you completed Chapter Lesson 12 - Running a batch-mode simulation.
1 For this lesson, you will use a macro (DO) file that executes whenever you load a
design. For convenience, a startup file has been provided with the ModelSim program.
You need to copy this DO file from the installation directory to your current directory:
\<install_dir>\modeltech\examples\startup.do
2 Next, you will edit the modelsim.ini file in the \modeltech directory (or the
modelsim.ini file in your current directory if one exists) to point at this file. To do this,
open <install_dir>\modeltech\modelsim.ini using a text editor and uncomment the
following line (by deleting the leading ;) in the [vsim] section of the file:
Startup = do startup.do
Note: The modelsim.ini file must be write-enabled for this change to take place. Using
MS Explorer, right-click on \<install_dir>\modeltech\modelsim.ini, then click
Properties. In the dialog box, uncheck the Read-only box and click OK. (You can also
copy the file to your current directory.)
3 Take a look at the DO file. It uses the predefined variable $entity to do different things
when loading different designs.
4 Start the simulator and specify the top-level design unit to be simulated by entering the
following command at the UNIX/DOS prompt:
vsim counter
Notice that the simulator loads the design unit without displaying the Load Design
dialog box. This is handy if you are simulating the same design unit over and over.
Also notice that all the windows are open. This is because the view * command is
included in the startup macro.
5 If you plan to continue with the following practice sessions, keep ModelSim running.
If you would like to quit the simulator, enter the following command at the VSIM
prompt:
quit -f
6 You won’t need the startup.do file for any other examples, so use your text editor to
comment out the "Startup" line in modelsim.ini.
ModelSim SE Tutorial
T-117
ModelSim SE Tutorial
T-118 Lesson 14 - Tcl/Tk and ModelSim
ModelSim SE Tutorial
The custom traffic-light interface T-119
Overview
The table below summarizes the source files, procedures, and commands used to simulate
the traffic-light controller.
VHDL source files Tcl procedures create and ModelSim commands are run via
describe the system connect the interface, plus the the new interface using the Tcl
source files, to ModelSim procedures
draw_intersection
draw_queues
ModelSim SE Tutorial
T-120 Lesson 14 - Tcl/Tk and ModelSim
wm widget
Calls to the
operating
system window
manager to
create the
"traffic"
window.
frame and
scale widget
A scale widget
within a frame
widget creates
an analog entry
device for a
minimum to a
maximum value
and invokes the
force command
ModelSim SE Tutorial
The custom traffic-light interface T-121
Tk widgets
The intersection illustration points out several Tcl/Tk "widgets." A widget is simply a user
interface element, like a menu or scrolled list. Tk widgets are referenced within Tcl
procedures to create graphic interface objects. The Tk tool box comes with several widgets,
additional widgets can be created using these as a base.
light timing control invokes the force command with the arguments for the
indicated signal and time
arrival time control invokes the force command with the arguments for the
indicated direction and time
waiting queue any time you change a control the examine command is
invoked to display the value of the waiting queue
Saving time
Since several intersection controls invoke a command and arguments with a single action
(such as the movement of a slider), this custom interface saves time compared to invoking
the commands from the command line or ModelSim menus.
ModelSim SE Tutorial
T-122 Lesson 14 - Tcl/Tk and ModelSim
Viewing files
If you would like to view the source for any of the Tcl files in our examples, use the
notepad command at either the ModelSim or VSIM prompt.
notepad <filename>
Most files are opened in read-only mode by default; you can edit the file by deselecting
read only from the notepad Edit menu.
Syntax
source <tcl filename>
<tcl procedure name>
Arguments
<tcl filename>
The Tcl file read into the ModelSim Tcl interpreter with the source command.
<tcl procedure name>
The Tcl procedure defined within <tcl filename>, called from the ModelSim prompt,
and executed by ModelSim.
The traffic.do file is a good example of the source command syntax (the file is a macro
that runs the traffic light simulation). View it with Notepad:
notepad traffic.do
Shortcuts
To save some typing, copy the commands from the PDF version of these instructions and
paste them at the ModelSim prompt. Paste with the right (2 button mouse), or middle (3
button mouse). You can also select a ModelSim or VSIM prompt from the Main transcript
to paste a previous command to the current command line.
ModelSim SE Tutorial
Initial setup T-123
Initial setup
Important: These steps must be completed before running the Tcl examples.
1 Create, and change to a new working directory for the Tcl/Tk exercises. Copy the
lesson files in the following directory (include all subdirectories and files) to your new
directory:
<install_dir>\modeltech\examples\tcl_tutorial
2 Make the new directory the current directory, then invoke ModelSim:
for UNIX
vsim
5 Compile the VHDL example files with these commands (or the Compile dialog box):
vcom vhdl/traffic.vhd
vcom vhdl/queue.vhd
vcom vhdl/tb_traffic.vhd
ModelSim SE Tutorial
T-124 Lesson 14 - Tcl/Tk and ModelSim
The file hello.tcl was read into the ModelSim Tcl interpreter. The instructions in the
hello_example procedure were then executed by ModelSim, and "Hello World" was
printed to the Main transcript (or invoking shell on UNIX). Selecting the button will
print the message again.
You’ve just created your first top-level widget!
2 Invoke the hello_example procedure again and notice how the new button replaces the
original button. The procedure destroyed the first button and created the new one. Get
a closer look at the source Tcl file with the notepad:
notepad hello.tcl
ModelSim SE Tutorial
Example 2 - Execute a procedure using a push button T-125
1 Build an image viewer by invoking this command, and calling this procedure:
source images.tcl
image_example
2 Drag the mouse across the buttons and notice what happens in the Main transcript (or
invoking shell on UNIX).
Push one of the buttons; you will see an error dialog box. You can solve this problem
by modifying the images.tcl file.
3 To view the source file press the See Source Code button at the bottom of the image
display or invoke notepad at the ModelSim prompt:
notepad images.tcl
You’ll find that the pushme procedure is missing; it’s commented out in images.tcl.
4 Search for "proc push" using the Edit > Find menu selection in the notepad.
Remove the comments (the "#" symbols) to return the function to your source, use File
> Save to save the changes, then close the image window with the Destroy button.
5 Once the pushme procedure is in place it will print its one parameter, the object name,
to the transcript.
After you have added the pushme procedure to your source, you need to resource and
rerun the Tcl procedure with these commands (use the up arrow to scroll through the
commands or do !source):
source images.tcl
image_example
Press all the buttons and notice the object names in the Main transcript. Close the
image example window when you’re done.
ModelSim SE Tutorial
T-126 Lesson 14 - Tcl/Tk and ModelSim
1 Draw the intersection by invoking this command and procedure at the ModelSim
prompt:
source intersection.tcl
draw_intersection
2 From the ModelSim prompt, use the procedure set_light_state to change the color of
the lights:
set_light_state green .traffic.i.ns_light
You can use the Copy and Paste buttons on the Main toolbar to help build instructions
from previous commands.
3 View the source code with this command at the ModelSim prompt:
notepad intersection.tcl
You can locate the set_light_state procedure with Edit > Find from the Notepad menu
(the procedure is located toward the middle of the file).
4 Load the VHDL libraries you compiled in preparation for these examples using this
command at the ModelSim prompt:
vsim tb_traffic
Be sure you invoke this command before the start of the connect_lights procedure, if
you don't load the libraries, you won't have a design to simulate.
ModelSim SE Tutorial
Example 3 - Simulate an intersection with traffic lights T-127
5 Connect the lights to the simulation with this command and procedure:
source lights.tcl
connect_lights
Try running the simulation now; select either run button on the intersection. Select
Break if you used the Run Forever button. Notice how the Source window opens and
indicates the next line to be executed. (If the simulator is not evaluating an executable
process when the break occurs, the Source window will not open.) Only the East/West
lights are working. You can make both lights work by editing the lights.tcl file.
6 Edit lights.tcl with the notepad to add a when statement for the North/South light.
notepad lights.tcl
You need to add this because the current statement is for the East/West light only.
You’ll find the solution commented. (Remember to change the read-only status of the
file so you can edit it.)
You’ll find the code commented-out toward the end of the file (use Edit >Find and
look for light_ns).
7 After you have made the changes, reload and run the simulation again.
source lights.tcl
connect_lights
Note: Remember, if you need to return to the original Tcl files (maybe you’ve edited the
file and it doesn’t work right) you’ll find the files in the tcl_tutorial\originals directory.
8 The East/West widget for displaying the total East/West queue length is already
provided. Let's edit the source to add a display for the North/South direction. Use the
notepad:
notepad queues.tcl
ModelSim SE Tutorial
T-128 Lesson 14 - Tcl/Tk and ModelSim
9 After you have added your North/South widget, run your program by invoking this
command:
source queues.tcl
draw_queues
According to the traffic indicators, the cars are leaving the intersection at the same rate.
That seems fair, but if you are designing an intersection that responds to the traffic flow
into the intersection you might want to change the light cycles. Perhaps one of the
directions has more incoming traffic than the other.
Adding controls, in the form of scale widgets, allows you to quickly change the
assumptions about traffic flow into the intersection.
10 The East/West widget for controlling the East/West queue inter-arrival time is
provided. You’ll edit the source code to add controls for the North/South direction. Use
this command:
notepad controls.tcl
You can remove the comments in the code to make this change.
Similarly, add the North/South widget for controlling the length of the lights. The East/
West widget for light control is provided. (You can remove the comments in the code
to make this change as well.)
These control widgets are implemented using the Tk "scale" widgets, enclosed in a
frame.
When the value of the scale widget changes, it calls the command specified with the
-command option on each scale.
11 After you have added your North/South widgets, run your program with this
command:
source controls.tcl
draw_controls
Now you have a complete intersection interface. Try the run buttons and the slider
scales.
You can view the simulation with ModelSim’s GUI. Check the Source window to view
the VHDL files, and add signals to a Wave window (add wave *).
You can also change the run length in the Main window. Try using the Run buttons in
the Main window and the intersection window.
Keep the intersection simulation running to complete the next example. If you want to
recreate the final intersection environment quickly, invoke these commands from the
ModelSim prompt (after "Initial setup" (T-123)):
cd solutions
vmap work work
do traffic.do
ModelSim SE Tutorial
Example 4 - Draw a state machine that represents the simulation T-129
2 Now we’ll make some changes to the light colors and transition arrows. Open the
source file with this command:
notepad state-machine.tcl
Note the "ModelSim EXAMPLE part 1" comments in the file. You can change
"both_red" state coordinates from x = 125 and y = 50 to any coordinates. (You may
need to uncheck the read only selection in the Edit menu before making changes.)
3 Note the "ModelSim EXAMPLE part 2" comments in the file. You can change the
transition arrow coordinates to correspond with the new "both_red" state coordinates.
4 Note the "ModelSim EXAMPLE part 3" comments in the file. Change the active color
from "black" to "purple".
5 Reuse the original commands when you're ready to run the state machine (remember,
to copy a previous command to the current command line, select the previous
ModelSim prompt):
source state-machine.tcl
draw_state_machine
ModelSim SE Tutorial
T-130
ModelSim SE Tutorial
T-131
License Agreement
IMPORTANT – USE OF THIS SOFTWARE IS SUBJECT TO LICENSE
RESTRICTIONS
CAREFULLY READ THIS LICENSE AGREEMENT BEFORE USING THE
SOFTWARE
This license is a legal “Agreement” concerning the use of Software between you,
the end user, either individually or as an authorized representative of the company
purchasing the license, and Mentor Graphics Corporation, Mentor Graphics
(Ireland) Limited, Mentor Graphics (Singapore) Private Limited, and their majority-
owned subsidiaries (“Mentor Graphics”). USE OF SOFTWARE INDICATES YOUR
COMPLETE AND UNCONDITIONAL ACCEPTANCE OF THE TERMS AND
CONDITIONS SET FORTH IN THIS AGREEMENT. If you do not agree to these
terms and conditions, promptly return or, if received electronically, certify
destruction of Software and all accompanying items within 10 days after receipt of
Software and receive a full refund of any license fee paid.
END USER LICENSE AGREEMENT
1. GRANT OF LICENSE. The software programs you are installing, downloading,
or have acquired with this Agreement, including any updates, modifications,
revisions, copies, and documentation (“Software”) are copyrighted, trade secret
and confidential information of Mentor Graphics or its licensors who maintain
exclusive title to all Software and retain all rights not expressly granted by this
Agreement. Mentor Graphics or its authorized distributor grants to you, subject to
payment of appropriate license fees, a nontransferable, nonexclusive license to
use Software solely: (a) in machine-readable, object-code form; (b) for your
internal business purposes; and (c) on the computer hardware or at the site for
which an applicable license fee is paid, or as authorized by Mentor Graphics. A site
is restricted to a one-half mile (800 meter) radius. Mentor Graphics’ then-current
standard policies, which vary depending on Software, license fees paid or service
plan purchased, apply to the following and are subject to change: (a) relocation of
Software; (b) use of Software, which may be limited, for example, to execution of
a single session by a single user on the authorized hardware or for a restricted
period of time (such limitations may be communicated and technically
implemented through the use of authorization codes or similar devices);
(c) eligibility to receive updates, modifications, and revisions; and (d) support
services provided. Current standard policies are available upon request.
ModelSim SE Tutorial
T-132 License Agreement
3. BETA CODE.
3.1 Portions or all of certain Software may contain code for experimental testing
and evaluation (“Beta Code”), which may not be used without Mentor Graphics’
explicit authorization. Upon Mentor Graphics’ authorization, Mentor Graphics
grants to you a temporary, nontransferable, nonexclusive license for experimental
use to test and evaluate the Beta Code without charge for a limited period of time
specified by Mentor Graphics. This grant and your use of the Beta Code shall not
be construed as marketing or offering to sell a license to the Beta Code, which
Mentor Graphics may choose not to release commercially in any form.
3.2 If Mentor Graphics authorizes you to use the Beta Code, you agree to evaluate
and test the Beta Code under normal conditions as directed by Mentor Graphics.
You will contact Mentor Graphics periodically during your use of the Beta Code to
discuss any malfunctions or suggested improvements. Upon completion of your
evaluation and testing, you will send to Mentor Graphics a written evaluation of the
Beta Code, including its strengths, weaknesses and recommended improvements.
3.3 You agree that any written evaluations and all inventions, product
improvements, modifications or developments that Mentor Graphics conceives or
makes during or subsequent to this Agreement, including those based partly or
wholly on your feedback, will be the exclusive property of Mentor Graphics. Mentor
Graphics will have exclusive rights, title and interest in all such property. The
provisions of this subsection shall survive termination or expiration of this
Agreement.
5. LIMITED WARRANTY.
5.1 Mentor Graphics warrants that during the warranty period Software, when
properly installed, will substantially conform to the functional specifications set forth
in the applicable user manual. Mentor Graphics does not warrant that Software will
ModelSim SE Tutorial
T-133
8. INFRINGEMENT.
8.1 Mentor Graphics will defend or settle, at its option and expense, any action
brought against you alleging that Software infringes a patent or copyright in the
United States, Canada, Japan, Switzerland, Norway, Israel, Egypt, or the
ModelSim SE Tutorial
T-134 License Agreement
European Union. Mentor Graphics will pay any costs and damages finally awarded
against you that are attributable to the claim, provided that you: (a) notify Mentor
Graphics promptly in writing of the action; (b) provide Mentor Graphics all
reasonable information and assistance to settle or defend the claim; and (c) grant
Mentor Graphics sole authority and control of the defense or settlement of the
claim.
8.2 If an infringement claim is made, Mentor Graphics may, at its option and
expense, either (a) replace or modify Software so that it becomes noninfringing, or
(b) procure for you the right to continue using Software. If Mentor Graphics
determines that neither of those alternatives is financially practical or otherwise
reasonably available, Mentor Graphics may require the return of Software and
refund to you any license fee paid, less a reasonable allowance for use.
8.3 Mentor Graphics has no liability to you if the alleged infringement is based
upon: (a) the combination of Software with any product not furnished by Mentor
Graphics; (b) the modification of Software other than by Mentor Graphics; (c) the
use of other than a current unaltered release of Software; (d) the use of Software
as part of an infringing process; (e) a product that you design or market; (f) any
Beta Code contained in Software; or (g) any Software provided by Mentor
Graphics’ licensors which do not provide such indemnification to Mentor Graphics’
customers.
10. EXPORT. Software is subject to regulation by local laws and United States
government agencies, which prohibit export or diversion of certain products,
information about the products, and direct products of the products to certain
countries and certain persons. You agree that you will not export in any manner
any Software or direct product of Software, without first obtaining all necessary
approval from appropriate local and United States government agencies.
ModelSim SE Tutorial
T-135
12. THIRD PARTY BENEFICIARY. For any Software under this Agreement
licensed by Mentor Graphics from Microsoft or other licensors, Microsoft or the
applicable licensor is a third party beneficiary of this Agreement with the right to
enforce the obligations set forth in this Agreement.
Rev. 03/00
ModelSim SE Tutorial
T-136
ModelSim SE Tutorial
T-137
Index
ModelSim SE Tutorial
T-138 Index
LSF Simulation
app note on using with ModelSim T-8 batch-mode T-111
executing commands at startup T-115
mixed VHDL/Verilog T-37
M saving results in log file T-112
Simulate dialog box T-29, T-41
Macros T-10 single-stepping T-24
Verilog T-25
O -view switch T-112
-wlf switch T-112
Operating systems supported T-6 Software updates T-8
solutions to the examples T-121
Standard Developer’s Kit User Manual T-7
P standards supported T-6
Support T-8
Pan System initialization file T-116
Dataflow window T-110
Performance Analyzer T-65
hierarchical profile T-68 T
report command T-74
Tcl/Tk
how it works with ModelSim T-118
Q Tcl source command T-122
Tk widgets T-121
quit VSIM command T-24, T-36 Tech notes T-8
Technical support T-8
R test signals T-83
Transcript
reference signals T-83 save T-10
report command T-74 transcript DO file T-122
restart T-35
Reusing commands T-10 U
run VSIM command T-22
Updates T-8
S
V
Searching
for values and finding names in windows T-53 Vera, see Vera documentation
in tree windows T-54 Verilog
Shortcuts compile T-26
command history T-9 interface checking between design units T-28
Wave window T-61 standards T-6
Signal transitions viewing design in Structure and Source windows
searching for T-60 T-42
Signals Verilog 2001, current implementation T-6
applying stimulus to T-22 Verilog simulation T-25
display values with examine command T-35 VHDL
Simulating standards T-6
code coverage T-75 view_profile command T-68
with Performance Analyzer T-65 vsim -coverage command T-76
ModelSim SE Tutorial
T-139
W
Waveform Comparison
icons T-91
reference signals T-83
test signals T-83
Windows
finding HDL item names T-53
searching for HDL item values T-53
Dataflow window
zooming T-110
List window
locating time markers T-53
opening T-48
Wave window
changing display range (zoom) T-60
cursor measurements T-59
locating time cursors T-53
using time cursors T-58
zoom options T-60
zooming T-60
Work library mapping T-46
Z
Zoom
Dataflow window T-110
from Wave toolbar buttons T-60
from Zoom menu T-60
options T-60
with the mouse T-61
ModelSim SE Tutorial
T-140
ModelSim SE Tutorial