以前在使用ModelSim进行仿真的时候,一直是使用其GUI进行操作的,但是这样很繁琐也很费时。故希望学习其自动化仿真do文件,下面是学习的一些总结。

一、编写基本的do文件

下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。

1、quit -sim —- 退出原来的仿真工程;

2、cd —- 设置工作目录的路径,就是仿真工程路径;

3、vlib work —- 在工作目录下建立一个work目录,请注意不要用操作系统直接新建一个work的文件夹,因为用操作系统建立的work文件夹并没有modelsim SE自动生成的_info文件。还有个问题是,当你的软件工程里需要用到软核时,可能会需要一些库,但这些库ISE软件中是没有的,此时就需要我们自己新建库了,并映射到当前目录下。我们将自己新建的库一般放在work库前面建立;

4、vmap work /vmap work work —- 将新建的work库映射到当前工作目录下(当前目录就是第一步中的目录了),其他新建的库也要这样的方法映射。此处需要注意的事逻辑库名与物理库名最好保持一致,后面的work为物理的库目录,即上一步的目录;

5、vlog +acc –work work “file_path/*.v” —- 编译“file_path”目录下所有.v文件,并将其添加进工作库(work)中,包括IP生成的V文件也要编译的。编译时可以分开单独编译,但是一定要注意顺序,先编译被调用的文件。其中的“-work work”是将后面的源文件编译到哪个库中,如果是编译到默认的work库中,则也可以不写该参数。若只想编译其中某些文件,则可以直接写出这些文件的名字,比如下面两种写法等效:

vlog div.v div_tb.v 
vlog -work work div.v div_tb.v

若是要编译基本器件库,可参照下面的例子:

vlib verilog_libs/altera_ver 
vmap altera_ver ./verilog_libs/altera_ver 
vlog -vlog01compat -work altera_ver {d:/quartus9.0/quartus/eda/sim_lib/altera_primitives.v 
vlog后面的两个参数“-vlog01compat”、“-work”是固定的。其中“-work”是必须保留的,“-vlog01compat”则在源文件为verilog文件时可以保留,如果为VHDL文件则不能使用该参数。需要注意的一点是该工程目录下的“verilog_libs”库文件夹需要手动建立,否则运行会出现错误。 
需要编译的文件有两种:源代码文件、库文件。对于库文件的编译可以有两种处理方式: 
1、将这些库文件与源代码文件一起编译到work库中,这样比较方便省事; 
2、将库文件单独编译到一个库中,在运行的时候需要通过参数设置来将库选择上。由于第一种方式较为简单,后面将采用第二种方式。 
当某一路径会经常用到时,可以通过设置一个路径变量来存储该路径,示例如下: 
set LIBPATH c:/altera/11.0/quartus/eda/sim_lib/ 
vlib sim_lib 
vmap sim_lib sim_lib 
vlog -work sim_lib LIBPATH/alteramf.vvlog−worksimlibLIBPATH/alteramf.vvlog−worksimlibLIBPATH/altera_primitives.v 
vlog命令负责编译verilog文件,如果是VHDL文件,则需要将vlog命令换成vcom命令。 
在该命令中,如果想要include某个文件,则可以通过vlog的incdir选项来实现,比如: 
vlog +incdir+d:/work

6、vsim -novopt -quiet -c -L altera_ver -L E:/modeltech_6.6a/Xilinx_lib_edk/unimacro_ver -lib work div -t 1ns -do “run 2084655ns” —- 启动仿真命令,该命令可以有许多参数。

参数“-L altera_ver”是添加仿真库,该处是直接使用逻辑库名称,也可以像后面一样使用物理库的名称及路径;若是库与源文件一起编译到work库中的,则不需要该参数; 
参数“-t 1ns”表示仿真时间单位为1ns; 
参数“-novopt”禁止优化(no vopt),可能会因为vopt的缘故使得一些不重要signal被modelsim自动忽略,一般会保留该参数; 
参数“-do”表示运行时间,该参数一般不用,在后面再运行该命令; 
参数“-c”表示进入命令行模式,如果没有该参数,则表示进行GUI模式。 
默认工作库为work,因而下面几种写法等效: 
vsim div_tb 
vsim -lib work div_tb 
vsim work.div_tb 
sim -L D:/Modelsim/Installfiles/altera/altera_mf work.videoin_tb

7、view signals source wave —- 打开signal、source、wave窗口,也可以只打开wave窗口;

8、delete wave * —- 删除原来wave窗口中的波形;

9、add wave -binary clk rst —- 打添加要观察的波形信号,clk、rst为tb的顶层信号名,若要添加内部信号则要给出路径,-binary表示使用二进制显示;

添加一个模块的所有信号则可以用下面的方式: 
add wave -dec sim:/div_tb/* 
若只是要添加单个信号,则把“*”换成对应的信号即可,比如: 
add wave -unsigned sim:/div_tb/clk 
在wave窗口中,可以对波形进行相关配置,下面是常用的配置命令: 
WaveRestoreCursors {{Cursors 1} {200ns} 0} {{Cursors 2} {400ns} 0} 
configure wave -rowmargin 4 
configure wave -childrowmargin 2 
configure wave -namecolwidth 150 
configure wave -valuecolwidth 100 
configure wave -signalnamewidth 0 
configure wave -justifyvalue left 
configure wave -snapdistance 10 
configure wave -datasetprefix 0 
configure wave -gridoffset 0 
configure wave -gridperiod 1 
configure wave -griddelta 40 
configure wave -timeline 0 
update 
WaveRestoreZoom {0 ns} {1000 ns} 
如果所有信号均采用同一种方式显示,则可以用如下方式设置,就不必要在每次添加信号时设置显示参数: 
radix -hex

10、run 5000/run @5000 —- 开始运行仿真程序;

没有“@”则表示在当前时刻继续运行5000个单位时间; 
有“@”则表示运行到5000这个时刻,如果当前程序仿真已经运行到了5000以后的时刻,则该方法不会继续向后运行,而会弹出一个错误信息,提示当前仿真时刻已经超过了该数值。 
run -all则表示一直运行,直到手动停止。 
在5000后面也可以跟上一个单位,不跟单位时则以仿真的最小单位为基准。

11、quit -f/quit -sim —- 参数为“f”时则结束ModelSim,参数为“sim”时则结束该仿真进程。

下图是我写的一个do文件的截图,能够正确运行。 

这里只是编写了基本的do文件,需要在ModelSIm的Transcipts窗口输入相应的命令才可以执行。 
1、cd filepath —-进入do文件所在的目录; 
2、do filename.do —-执行do文件,开始仿真。

二、进行优化

还可以对上面的流程进行优化,真正达到自动仿真,使得仿真更有效率。 
1、批处理bat文件 —- 直接运行该文件即可启动仿真,而不需要首先进入ModelSim启动do文件;该方法还未实验成功。 
2、单独的文件存储文件路径 —-当有多个不同的文件路径时,为使do文件更加简洁,可以将所有路径存储在一个文件中。该方法也未实验成功。 
我是按照Modelsim中常用的Tcl命令中的方法实验的,以后有时间再来看看怎么弄这个。 
三、交互式命令 
通过在主窗口的命令窗口输入命令来实现,具有更好的调试和交互功能,提供多种指令,既可以是单步指令,也可以构成批处理文件,用来控制编辑、编译和仿真流程。 
1、force-repeat 
指令格式:force 开始时间开始电平值,结束电平值忽略时间(即0电平保持时间) -repeat 周期 
force clk 0 0,1 30 -repeat 100 表示强制clk从0时间单元开始,起始电平为0,结束电平为1,0电平保持时间为30个默认时间单元,周期为100个默认时间单元,占空比为70%。 
指令功能:每隔一段的周期重复一定的force命令,用来产生时钟信号,也可用来产生周期的输入信号,如01010101,00110011等。 
2、force 
指令格式: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 
指令格式:run timestepstime_unit,timesteps时间步长,time_unit时间单元,可以是fs、ps、ns、us、ms、sec; 
指令功能:运行(仿真)并指定时间及单元; 
run 100,表示运行100个默认时间单元; 
run 2500ns,表示运行2500ns; 
run -all,表示运行全过程; 
run -continue,表示继续运行。 
4、force-cancel 
指令格式:force-cancel period 
指令功能:执行period周期时间后取消force命令; 
force clk 0 0,1 30 -repeat 60-cancel 1000,表示强制clk从0时刻开始,直到1000个时间单元结束。 
5、view 
指令格式:view 窗口名 
指令功能:打开Modelsim的窗口 
view souce,打开源代码窗口; 
view wave,打开波形窗口; 
view list,打开列表窗口; 
view varibles,打开变量窗口; 
view signals,打开信号窗口; 
view all,打开所有窗口。

do文件的编写(转)的更多相关文章

  1. 以libfuse为例介绍rpm打包工具rpmbuild的使用和SPEC文件的编写

    一.rpmbuild命令的安装 yum install rpm-build 二.用法 rpmbuild -bb XXXX.spec或者rpmbuild -ba XXX.tar.gz 三.目录概述 rp ...

  2. Struts2的输入校验(1)——校验规则文件的编写

    Struts2的输入校验(1) --校验规则文件的编写 Struts2提供了基于验证框架的输入校验,所有的输入校验只要编写配置文件,Struts2的验证框架将会负责进行服务器校验和客户端校验. 注: ...

  3. php中数据库服务器连接类库文件的编写

    <!--数据库服务器连接类库文件的编写--> <?php class mysql{ //连接服务器.数据库以及执行Sql语句的类库 public $database; public ...

  4. python入门(5)使用文件编辑器编写代码并保存执行

    python入门(5)使用文件编辑器编写代码并保存执行 两款文本编辑器: 一个是Sublime Text,免费使用,但是不付费会弹出提示框: 一个是Notepad++,免费使用,有中文界面: 请注意, ...

  5. [转帖]helm模板文件chart编写语法详解

    helm模板文件chart编写语法详解 https://blog.51cto.com/qujunorz/2421328 需要学习一下. charts编写介绍 开始 快速创建一个chart模板,helm ...

  6. Linux的desktop文件正常编写赋权,仍无法打开解决办法

    Linux的desktop文件正常编写赋权,仍无法打开解决办法 如果你像我一样遇到了这个问题, 明明都没有问题, desktop文件不显示图标, 双击打开是文本编辑器, 同时也有执行权限 打开却是这样 ...

  7. modelsim脚本文件的编写

    第一章 ModelSim介 绍 本指南是为 ModelSim5.5f版本编写的,该版本运行于UNIX和Microsoft Windows 95/98/Me/NT/2000的操作系统环境中.本指南覆盖了 ...

  8. Linux平台Makefile文件的编写基础篇(转)

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

  9. 单目录下多文件 makefile编写

    makefile很久就接触过了,但是一直没怎么深入的去学习和总结:在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有:知识在于沉淀,这句说的非常好,所以现在把自己理解的东 ...

  10. 多目录下多文件 makefile编写

    前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写: 在做项目时,一般文件都会分几个目录来存放:基本的是  include/  bin/ src/ ...

随机推荐

  1. Http Requests for PHP

    一.Requests for PHP 官网:http://requests.ryanmccue.info官方介绍:Requests is a humble HTTP request library. ...

  2. 20170814xlVBA限定日期按客户分类汇总

    原始数据表: 汇总格式: Sub subtotalDic() Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim mYe ...

  3. Spring Batch 体系结构

    Spring Batch 设计的时候充分考虑了可扩展性和各类终端用户. 下图显示了 Spring Batch 的架构层次示意图,这种架构层次为终端用户开发者提供了很好的扩展性与易用性. 上图显示的是 ...

  4. Django多表查询练习题

    #一 model表:from django.db import models # Create your models here. class Teacher(models.Model): tid=m ...

  5. linux bash基本特性

    一.bash 基础特性 (1)命令历史的功能 history: 环境变量 HISTSIZE:命令历史记录的条数 HISTFILE: ~/.bash_history 每个用户都有自己独立的命令历史文件 ...

  6. ml基本问题

    作者:NgShawn 链接:https://www.nowcoder.com/discuss/33737?type=2&order=3&pos=19&page=1 来源:牛客网 ...

  7. div成圆形分布

    1.  css3 ul{                 width: 200px;                 height: 200px;                 background ...

  8. 初次安装git配置用户名和邮箱

    初次安装git配置用户名和邮箱 初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git con ...

  9. 使用formData上传文件,ajax上传

    项目是vue项目,直接贴部分代码了: html: <input type="file" name="fileTable" @change="ch ...

  10. idea中查看java类继承图

    复习java io,看了书里的这张图,太模糊了,想弄个出来放大看,一开始试了idea发现只能看父类,后来折腾了一会试了其他工具才发现还是idea好用. :) 一.打开type hierachy 光标放 ...