Modelsim的tcl命令

一. 前言

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

二. 命令总结

总结了一下tcl中常见命令(都加了注释),大家不要担心看不懂和不会用,我后面会讲解在Windows中怎么使用脚本(即五、bat文件)来进行编译Verilog代码,你不需要记住所有的命令,想用什么的时候直接来这里搜搜看就行。现在先大体浏览一下即可:

#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可以啦。

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

五. bat文件

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

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


这篇文章很久之前写的了,这里补充一下在做工程的时候,我经常用到的file.bat文件,以及为大家演示一下怎么操作。
首先是file.bat文件:

@echo off
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:: ModelSim compile and simulation
::
:: Build ModelSim workspace
echo Building ModelSim workspace...
vlib work
echo.

:: Add header
echo Adding header...
vlog +incdir+ common.vh
echo.

:: Compile all files in sv mode
echo Compiling...
vlog -sv -f vflist.f
echo.

:::: Simulation
::
echo Simulating...
:: IF testbench
vsim -c -novopt work.IF_tb -do "run -all"
echo.

echo All done!
echo.
pause

各命令都添加了注释,基本上在编译代码的时候上面的命令已经够用。其中vflist.f是你所有模块的文件名。echo命令用来打印信息,vlog中的-sv是编译sv文件,换成-v即编译Verilog文件。
演示如下:
请添加图片描述
注意:如果运行上述脚本提示找不到命令,是因为没有添加ModelSim环境变量。找到安装目录,如:E:\Program Files (x86)\modeltech64_10.5\win64添加到环境变量。

此外要注意在使用脚本时路径中不要含有中文。 否则可能出现load库错误。

六. 交互式命令

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

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文件的基础知识,希望对你有帮助~

  • 20
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ModelSim是一种流行的数字电路仿真工具,为了更方便地使用它,用户可以使用Tcl脚本编写自动化操作。对于ModelSim中的Tcl命令和函数的使用,ModelSim Tcl手册是一个非常重要的参考文档。 ModelSim Tcl手册详细介绍了Tcl脚本语言的基础知识和ModelSim特定的Tcl命令的使用方法。通过阅读手册,用户可以了解到Tcl的语法结构和基本的编程概念,例如变量、条件语句、循环等,这些是编写Tcl脚本的基础。 而且,手册还涵盖了ModelSimTcl命令的分类和功能。从仿真控制到设计调试,从波形分析到模块化测试,手册中提供了大量实用的Tcl命令的用法和示例。用户可以根据自己的需求,快速地找到合适的命令,提高工作效率。 另外,手册中还介绍了ModelSim特有的Tcl函数和过程,这些函数和过程可以帮助用户获取更多相关的信息,如波形值、层次结构和模块实例等。通过灵活运用这些函数和过程,用户可以实现更复杂的仿真和调试任务。 总之,ModelSim Tcl手册是ModelSim用户不可或缺的参考工具。它提供了丰富的Tcl命令和函数的使用方法,帮助用户编写自动化脚本,简化仿真流程,提高工作效率。通过深入了解手册,用户可以更好地掌握ModelSim的强大功能,并在日常工作中发挥更大的潜力。 ### 回答2: ModelSim是一款广泛应用于电子设计自动化领域的仿真工具,它为设计人员提供了快速、准确进行数字电路仿真的平台。而Tcl(Tool Command Language)则是一种脚本语言,可以在ModelSim环境中进行自动化脚本编程,从而更高效地完成仿真任务。 ModelSim TCL手册是为了帮助用户理解和熟练使用ModelSim中的Tcl编程而编写的指南。该手册详细介绍了ModelSim中可用的Tcl命令、语法和使用示例,帮助用户了解如何利用Tcl语言以及内置的Tcl扩展来进行仿真测试任务。 在ModelSim TCL手册中,用户可以学习到如何使用Tcl命令进行仿真仿真环境的配置、设计工程的创建与管理、仿真任务的设置与控制等。此外,手册还包含了用于生成仿真波形、输出仿真结果、调试代码和设计的Tcl工具和函数的说明,帮助用户更好地利用ModelSim工具进行电路设计和验证工作。 对于熟悉ModelSim且具备一定Tcl编程基础的用户来说,Tcl手册提供了一个重要的参考文档,使其能够在ModelSim仿真环境中更加灵活和高效地进行设计验证和调试。手册提供了丰富的Tcl命令和技巧,使用户能够快速了解和使用Tcl语言进行仿真任务,提高仿真工作的开发效率和质量。 总之,ModelSim TCL手册是一本帮助用户掌握ModelSimTcl编程技巧和应用的重要参考资料,通过学习该手册,用户可以更加熟练地应用Tcl语言,提高自己在数字电路仿真领域的工作效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值