Modelsim的tcl命令

一. 前言

最近学习了modelsim的tcl命令,可以直接在transcript窗口通过命令来执行操作,更重要的是通过.do文件可以不打开modelsim就生成一些波形文件(例如.vcd等),方便后续使用(debussy调试波形)。
注:
本文偏总结性,先去了解一下基础知识再来看效果更佳~ 文中也有几篇可以参考~

二. 命令总结

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

#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命令

三. 脚下留心:

1.Enable optimization

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

2.restart

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

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

3.路径

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

3.1绝对路径

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

3.2相对路径

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

3.3直接include

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

4.↑的使用

当我们使用tcl的时候,不必每次都输入指定do文件的命令,在脚本控制台直接按上键就会显示上一个执行过的命令。

四. do文件

1. file.do

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

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

2. wave.do

添加波形的时候,可以直接使用add wave命令来添加所需的波形,然后修改颜色等,也可以将它们直接写成一个wave.do文件,以便直接执行do wave.do就可以完成各种波形的编辑设置。在wave window使用ctrl + s 保存为wave.do文件,然后找到并打开,会看到以下内容:
在这里插入图片描述
修改你要显示的波形配置,以后直接do wave.do可以啦。

五. bat文件

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

图中为优化后的代码
在这里插入图片描述
vsim命令中的-c表示不打开GUI界面。
编译的时候使用的是vlog -f vflist.f命令,vflist.f是一个.f文件,里面包含了你要编译的文件(设计文件)名称。
在这里插入图片描述
双击.bat后
在这里插入图片描述
可以看到,效果是一样的。

do文件具体可以参考:
moedlsim中do文件的写法技巧
Modelsim之TCL仿真

六. 交互式命令

通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程。
常见交互式命令如下:

1.force-repeat指令

1.1指令格式:

force 开始电平值开始时间,结束电平值结束时间 -repeat 周期

force clk 0 0,1 30 -repeat 100 

解释:强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。

1.2指令功能:

每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。

1.3栗子:

force clk 0 10,1 20 -r 20 

解释:在第10ns时,clk = 0,在第20ns,clk=1,-r 20从第20个时间单位单位开始重复循环clk值的变化规律。

force rst_n 0 1,1 60

解释:在第1ns,rst_n = 0,在第60ns,rst_n = 1;

force en 0 1,1 101,0 121

解释: 在第1ns,en = 0,在第101ns,en = 1,在第121ns,en = 0;

2.force指令

2.1指令格式:

force item_name value time,value time;item_name为端口信号或内部信号,支持通配符号,但只能匹配一个;value不能默认,time,可选项,支持时间单元;

force din 16#40900000 

从当前时刻起给din赋值16进制40900000;

force bus 16#F @100ns 

在100ns时刻给bus赋值16进制F;

force clr 1 100 

经历100个默认时间单元延迟后为clr赋值1;

force clr 1,0 100 

表示clr赋值1后,经历100个默认时间单元延迟后为clr赋值为0;

3.run指令

3.1指令格式:

run timesteps time_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec;

3.2指令功能:

运行(仿真)并指定时间及单元;

run 100

表示运行100个默认时间单元;

run 2500ns

表示运行2500ns;

run -all

表示运行全过程;

run -continue

表示继续运行

4.force-cancel指令

4.1指令格式:

force-cancel period

4.2指令功能:执行period周期时间后取消force命令;

force clk 0 0,1 30 -repeat 60-cancel 1000

表示强制clk从0时间单元开始,直到1000个时间单元结束;

5.view

# 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

参考:
modelsim仿真中do文件的写法

以上就是基本命令和do文件的基础知识,希望对你有帮助~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章