modelsim的do文件
2015-10-30 17:44
267 查看
首先我们要对一个设计进行仿真呢,我们一般需要进行以下几个步骤:
①创建一个工程和工程库;
②加载设计文件(包括你编写好的testbench);
③编译源文件;
④运行仿真,并查看结果;
⑤最后进行工程调试。
而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。
下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。
PS: do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。
正确的是:
vlib work
#新建一个work库
错误的是:
vlib work #新建一个work库
编写名为counter.do的文件,其内容为下:
vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSim SE自动生成的_info文件。)
vmap work work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
vlog counter.v counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
vsim work.counter_tb -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
add wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。)
run 2000 (该命令的作用是运行2000个单位时间的仿真。也可以用run –all命令来一直仿真下去。)
这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view *命令显示。view *命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。
以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。
①创建一个工程和工程库;
②加载设计文件(包括你编写好的testbench);
③编译源文件;
④运行仿真,并查看结果;
⑤最后进行工程调试。
而do文件,就是把上述的步骤①---④用tcl脚本语言来编写出来,让Modelsim来运行该do文件宏命令,并自动执行仿真的步骤。这种好处也许在小设计中没怎么表现,但是如果在一个大的工程中,常常需要对一个设计单元进行反复的调试和仿真,但是仿真时的设置是不变的,这时如果使用了do文件,把仿真中使用到的命令都保存下来了,就可以节省大量的人力,提高了工作效率。
下面将对照一个简单的例子counter.do,讲一下我们常用的一些基本指令。
PS: do文件的注释是由#开始的,但不可以在代码行后面添加,只能另起一行。
正确的是:
vlib work
#新建一个work库
错误的是:
vlib work #新建一个work库
编写名为counter.do的文件,其内容为下:
vlib work (对应仿真步骤①:新建work库。该命令的作用是在当前目录下建立一个work目录,请注意不要直接在windows中新建一个work的文件夹,因为用操作系统建立的work文件夹并没有ModelSim SE自动生成的_info文件。)
vmap work work(对应仿真步骤①:该命令的作用是将目前的逻辑工作库work和实际工作库work映射对应。也可以直接用指令“vmap work”表示将work库映射到当前工作目录下。)
vlog counter.v counter_tb.v (对应仿真步骤②③:编译counter.v和counter_tb.v文件,默认编译到work库下。该命令的作用是编译这些文件,要注意的是文件可以单独分开编译,但是一定要先编译被调用的文件。假如是VHDL文件,只需要把指令vlog换成vcom即可。)
vsim work.counter_tb -t 1ns (对应仿真步骤④:仿真work库中名为counter_tb的模块,最小时间单位为1ns。)
add wave/counter_tb/ * (该命令的作用是将testbench文件camera_tb.v中模块camera_tb下所有的信号变量加到波形文件中去,注意在“*”前要加空格。这时候你也可以看到wave文件被打开。当然也可以单个信号的添加,例如添加时钟:add wave clk 等等。)
run 2000 (该命令的作用是运行2000个单位时间的仿真。也可以用run –all命令来一直仿真下去。)
这时候就可以在wave窗口文件中看到你的仿真结果。当然也可以观察其它窗口的结果,用view *命令显示。view *命令可以观察包括signals、wave、dataflow等窗口文件,也可以分别打开。例如用view signals来观察信号变量。
以上就是do文件的一些基本TCL脚本语言的使用,写得比较简单,但是其实复杂的也就是在添加信号线那里add wave 有比较多的参数设置而已,主要的指导仿真流程的指令还是这几条。
相关文章推荐
- 【NGUI】Unity实现英雄联盟选择皮肤效果
- Socket-TCP-2
- LDAP 中 CN, OU, DC 的含义
- Word详细教程三(几个快捷键的应用)
- BZOJ 4320 ShangHai2006 Homework 并查集
- iOS 【UIKit-UITableView】
- 大数据数据仓库-场景
- 表格(TableViewer类)
- 【reversing.kr】Replace逆向分析
- dao层extends BaseDaoJpa修改数据设为只读不做更新
- java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解
- Angular.js笔记
- 【Struts】strust.xml中<result type="">所有类型详解
- 利用SpannableString实现标签TAG效果(可加圆角)
- 【构】一种手游实用的PVP同步模型
- Qt中开机启动画面
- nc引用类注意问题
- github -- fork提交项目
- android代码混淆
- java文件上传下载