Modelsim的tcl命令

一. 前言

最近学习了modelsim的tcl命令,可以直接在transcript窗口通过命令来执行操作,更重要的是通过.do文件可以不打开modelsim就生成一些波形文件(例如.vcd等),方便后续使用(debussy调试波形)。

二. 命令总结

总结了一下tcl中常见命令(都加了注释):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#Quit last sim
quit -sim

#Create the work library
vlib work

#vmap the work lib
vmap work work

#include the head files
vlog +incdir+ YOURPATH sfifo_def.v
#eg: vlog +incdir+ sfifo_def.v

# Compile the verilog files
vlog -work work sfifo.v
vlog -work work sfifo_tb.v

#Or you can merge them, but be sure to compile the called file first
vlog -work work sfifo.v sfifo_tb.v
#You can also ignore the ‘-work work’, such as vlog sfifo.v sfifo_tb.v

#Run simulation
vsim sfifo_tb
vsim -lib work sfifo_tb
vsim work. sfifo_tb

#Prohibit to optimize
vsim -novopt work.sfifo_tb
vsim -voptargs=+acc -novopt work.sfifo_tb
#Attention: If you don’t add ‘-novopt’ to disable optimization in your commands, there will be error when add wave to window: # (vish-4014) No objects found matching '/sfifo_tb/*'.  

#specified time pricision is 1ns
vsim -novopt work.sfifo_tb -t 1ns

#Set the window types
#Open the wave window
view wave

#Open the instance structure window
view structure

#Open the signals list window
view signals

#Open the source window
view source

#Open the list window
view list

#Open the variables window
view variables

#Open the dataflow window
view dataflow

#Add all signals to wave window
add wave -r /*  
#Attention: -r should be followed by a space

#Add the specific test signal to wave window, eg: add wave sim:/ sfifo_tb /clock
add wave sim:/ sfifo_tb /signal  
#Attention: ‘sim:’ can be ignored, which means ‘add wave / sfifo_tb /signal’ is also right

#Add the tb signals to wave window
add wave sim:/sfifo_tb /*
add wave /sfifo_tb /*
add wave *

#Display in hexadecimal or binary or decimal or unsigned or others
add wave -hex/-decimal/-unsigned/-binary *

#format: Logic/Literal/Event/analogautomatic/analogcustom
#add wave -noupdate -format Logic -radix decimal -color Red /sfifo_tb/sfifo1/clock
#add wave  -radix unsigned  -color pink -format analogautomatic sim: sfifo_tb/sfifo1/clock
add wave  -unsigned sim: sfifo_tb/sfifo1/clock
add wave -noupdate -color pink -format Analog-Step -height 74 -max 4094.9999999999995 -radix unsigned sfifo_tb/sfifo1/clock

#Delete signal
delete??wave??/test/i

#Restart simulation, then click OK or press ENTER
restart

#Run simulation
run 100 us
run -all

#quit -f/-force to quit Modelsim
#quit -sim to quit simulation
quit -f/-force/-sim

#Clear transcript window
.main clear

中文理解可以参考这几个网页:
modelsim之命令行仿真入门
modelsim中常用的tcl命令

三. 脚下留心:

Enable optimization

仿真的时候:vsim -novopt work.sfifo_tb,如果不加‘-novopt’或者没有勾选掉‘Enable optimization’,添加波形的时候会出现错误:# (vish-4014) No objects found matching ‘/sfifo_tb/*’
Enable optimization
ERROR:
ERROR

restart

如果想要重新仿真,可以直接输入restart,然后点击OK即可,或者点击界面工具栏,最后run -all。

界面工具栏
在这里插入图片描述
点击OK
在这里插入图片描述

路径

有时候需要添加一些宏定义文件,路径有两种方法:
绝对路径和相对路径。

绝对路径

就是平时经常用到的,比如:F:\ModelProject\04_tcl_practice就为绝对路径,但是这种路径有个坏处,就是换一台电脑基本就不适用了。

相对路径

相对路径中./表示当前文件夹,两个点…/表示上一级文件,所以用相对路径:./…/…/Wang_code/iVerilogLab/11_sfifo/sfifo.v
表示当前文件夹的上一级文件的上一级文件中的Wang_code中的iVerilogLab中的11_sfifo中的sfifo.v文件,当然,你可以直接把这个文件拷贝到当前目录下,这里只是举个栗子。

直接include

如果要添加宏定义文件的话,可以选中要添加的文件,右击,选择Properties,然后Include directory即可。可以看到其实和直接使用+incdir+命令效果是一样的。
在这里插入图片描述
在这里插入图片描述

四. do文件

ModelSim SE中可以执行一种批处理文件,就是.do文件,相当于DOS中的.bat文件。我们可以用批处理方式来使仿真简单化,具体做法为,将所要执行的命令编辑在一起,将上面的命令行加入到do文件中即可。

大体是这样一个步骤,具体内容请看上面的命令注释:
在这里插入图片描述
有了.do文件,以后就不用每次都点击那么多啦,直接在transcript中输入do file.do(file为你命名的名字)即可。

五. bat文件

.bat文件是DOS中的批处理文件,我们可以将刚才的file.do文件直接命名为file.bat,然后双击即可。

图中为优化后的代码
在这里插入图片描述
双击.bat后
在这里插入图片描述
可以看到,效果是一样的。
do文件具体可以参考:
moedlsim中do文件的写法技巧
Modelsim之TCL仿真
以上就是基本命令和do文件的基础知识,希望对你有帮助~