文章目录

  • 一. 前言
  • 二. 命令总结
  • 三. 脚下留心:
    • 1.Enable optimization
    • 2.restart
    • 3.路径
      • 3.1绝对路径
      • 3.2相对路径
      • 3.3直接include
    • 4.↑的使用
  • 四. do文件
    • 1. file.do
    • 2. wave.do
  • 五. bat文件
  • 六. 交互式命令
    • 1.force-repeat指令
      • 1.1指令格式:
      • 1.2指令功能:
      • 1.3栗子:
    • 2.force指令
      • 2.1指令格式:
    • 3.run指令
      • 3.1指令格式:
      • 3.2指令功能:
    • 4.force-cancel指令
      • 4.1指令格式:
      • 4.2指令功能:执行period周期时间后取消force命令;
    • 5.view

一. 前言

最近学习了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/*’

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

Modelsim的tcl命令相关推荐

  1. vivado开发中的Tcl命令与脚本

    vivado开发中的Tcl命令与脚本 引言 使用XPM源语仿真时报错 bit及ltx文件从impl文件夹中拷贝至工程路径 ModelSim 保存仿真波形 引言 记录整理本人在vivado开发中,学习与 ...

  2. Vivado中用于时钟操作的几个Tcl命令

    前言 理论上,使用Tcl可以在Vivado上完成一切操作,但是没必要,因为命令太多,很难记忆,我们只需要知道几个常用的即可,方便我们使用Vivado. 对于时序约束,我们常用的tcl命令,最多的是时钟 ...

  3. 【 Vivado 】在工程模式下通过jou文件来学习 Tcl 命令

    Xilinx 的数据手册UG895提供了一些系统级设计的方法,写得很详细,详细到得不到重要的消息(我菜). Tcl命令在工程模式下以及非工程模式下有一些差异,具体什么差异,这里暂时不说,后面我想应该会 ...

  4. 初识Tcl(一):Tcl 命令

    目录 第一个TCL程序 注释 标识符 Tcl空格 Tcl命令 命令替换 变量替换 反斜杠替换 TCL 是相当简单易学,让我们开始创建第一个Tcl程序! 第一个TCL程序 让我们写一个简单的Tcl程序. ...

  5. 【 FPGA 】Vivado中常用的5个Tcl命令

    本博文内容是学习课程做的笔记,只记录了一些,由于没有基础,且讲的也不是太清楚,只吸收了一部分内容,记录下来备忘. 目录: Objects的基本概念? 首先讲解Vivado中objects的基本概念,然 ...

  6. (100)Vivado TCL命令概述

    (100)Vivado TCL命令概述 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado TCL命令概述 5)技术交流 6)参考资料 2 时序约束引言 1) ...

  7. (95)Vivado时序约束TCL命令-all

    (95)Vivado时序约束TCL命令-all 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado时序约束TCL命令-all 5)技术交流 6)参考资料 2 ...

  8. (94)Vivado时序约束TCL命令-get_nets

    (94)Vivado时序约束TCL命令-get_nets 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado时序约束TCL命令-get_nets 5)技术交流 ...

  9. c语言 tcl.exe 自动登录,Tcl命令操作实验-----(3)---字符串

    字符串操作: string option string1 string2 其中option可以是: compare 按字母顺序比较,小于则返回-1,等于返回0,大于返回1 match 判断是否匹配 f ...

最新文章

  1. VS2008中自定义C++工程模板与修改新建文件默认编码的办法
  2. python新手菜鸟之基础篇
  3. 前端学习(2307):react之props和state
  4. 从底层重学 Java 之两大浮点类型 GitChat链接
  5. python中那些鲜为人知的功能特性
  6. Ireport的安装及使用
  7. 以太坊是什么鬼?!媲美比特币的加密币大揭秘
  8. 域名扫描linux,ksubdomain 无状态域名爆破工具
  9. Spring与SpringBoot 学习笔记(1)
  10. 返回List的分页方法
  11. 如何使用Movavi Video Editor编辑婚礼影片?
  12. gulp教程之gulp-uglify(压缩javascript文件,减小文件大小)
  13. virtualbox vm 虚拟机 迁移
  14. 单应性变换 Homography Estimation
  15. Python 发出警报声音 简单播放声音 beep 在linux 上
  16. 缺陷管理工具--mantis使用过程
  17. 【5G NR】NG接口
  18. springmvc常用5种注解_5种常用补气中成药
  19. python编程做联机游戏大全单机_手把手教你将单机游戏改造成对战网游(附详细教程)...
  20. EasyRTC实现基于WebRTC技术实现的即时通信类应用

热门文章

  1. 【IntelliJ IDEA】idea多次重装打不开的解决办法
  2. DevpTips【powerpoint】发现打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿。
  3. 【间歇性努力,不是真正的努力】
  4. 推荐适合胖mm大码 连衣裙 显瘦女装穿搭
  5. 台式计算机的配置清单表格,电脑配置清单表格,为你分别介绍不同价位的三种配置清单...
  6. uniapp之小程序端生成分享海报(带自定义参数的二维码)
  7. bios找不到硬盘模式选项如何解决?
  8. T4M插件放入unity后怎么找不到_Unity动画系统详解4:如何用代码控制动画?
  9. 凭借近2亿的年销量,小米三年超越苹果的可能性有多大?
  10. python花猫_涨见识了,在终端执行 Python 代码的 6 种方式!