【翻译】ModelSim指南 VI (ModelSim)(Verilog)(Digital Logic)

8

自动仿真

简介

前面的课程主要讲使用ModelSim的交互模式:通过图形界面或主窗口的命令行一条条的执行单一的命令。当需要完成重复的任务时,可用DO文件提高效率。

DO文件是一次执行多条命令的脚本。这个脚本可以像带有相关参数的一系列ModelSim命令一样简单,或者是带有变量,执行条件等等的Tcl程序。可在GUI里或系统命令提示符后执行Do文件。

注意:

本课假设你已经添加<install_dir>/modeltech/<platform>到你的环境变量的PATH。否则,要指定工具(如,vlib,vmap, vlog,vcom,和vsim)的绝对路径。

扩展阅读

用户手册:Tcl and Macros ( DO Files )。

Practical Programming in Tcl and Tk, Brent B. Welch, Copyright 1997

创建一个简单的DO文件

创建DO文件就像在文本文件里输入命令一样。或者,可保存主窗口的transcript作为一个DO 文件。本练习将用在主窗口transcript输入的命令来创建一个DO文件以添加信号到波形窗口,添加激励,然后仿真。

1. 加载test_counter设计单元。

a) 启动ModelSim。

b) 切换目录至在基本仿真那课创建的目录。

c) 输入vsim test_counter来加载设计单元。

2. 输入命令给波形窗口添加信号,激励信号,然后运行仿真。

选择File > New > Source > Do来创建一个新的DO文件。

在源码窗口输入以下命令:

add wave count

add wave clk

add wave reset

force –freeze clk 0 0, 1 {50 ns} –r 100

force reset 1

run 100

force reset 0

run 300

force reset 1

run 400

force reset 0

run 200

3. 保存文件。

a) 选择File > Save As。

b) 在File name栏输入sim.do并保存到当前目录。

4. 再次加载仿真并使用DO文件。

a) 在VSIM>后输入quit –sim。

b) 在ModelSim>后输入vsim test_counter。

c) 在VSIM>后输入do sim.do。

ModelSim执行保存的命令并在波形窗口生成波形。

5. 当完成本练习,选择File > Quit退出ModelSim。

在命令行模式运行

1. 创建一个新目录并拷贝文件。

开始本练习前,创建一个新目录,并拷贝以下文件:

l /<install_dir>/examples/tutorials/verilog/automation/counter.v

l /<install_dir>/examples/tutorials/verilog/automation/stim.do

2. 创建一个新的设计库并编译源文件。

在系统提示符后输入以下命令。

a) 输入vlib work。

b) 输入vlog counter.v。

3. 创建一个DO文件。

a) 打开文本编辑器。

b) 输入以下内容:

# list all signals in decimal format

add list –decimal *

# read in stimulus

do stim.do

# output results

write list counter.lst

#quit the simulation

quit –f

c) 把文件命名为sim.do,然后保存在当前文件夹。

4. 运行批处理仿真

a) 在提示符后输入以下命令:

vsim –c –do sim.do counter –wlf counter.wlf

这里-c表示不打开GUI。-wlf保存仿真结果为一个WLF文件。调试时可在GUI查看仿真结果。

5. 查看输出列表。

a) 打开counter.lst并查看仿真结果。类似下图:

clip_image002

6. 在GUI下查看结果。

如果在counter.wlf保存了仿真结果,就可在GUI下通过-view参数查看。

注意:

确定你的环境变量的PATH设置的路径为当前ModelSim的路径。

a) 在系统提示符后输入vsim –view counter.wlf。

打开GUI和一个名为“counter”资料组标签(图8-1)。

clip_image004

b) 右击counter实例并选择Add > To Wave > All items in region。

波形窗口显示波形。

7. 当查看完结果。选择File > Quit关闭ModelSim。

在仿真器里使用Tcl

前面的练习的DO文件只使用了ModelSim的命令。但是,DO文件实质上是Tcl脚本。可以包含很多Tcl结构,比如程序,条件运算符,数学和三角函数,正则表达式等等。

本练习创建一个Tcl脚本,用来识别信号的确定值,如果存在,在波形窗口放置标签。标签可将波形窗口的滑动和放大区域记录下来。

1. 创建脚本。

a) 在文本编辑器,新建一个文件并输入以下行:

proc add_wave_zoom {stim num} {

echo “Bookmaking wave $num”

bookmark add wave “bk$num” “[expr $stime – 50] [expr $stime +

100]” 0

}

这些命令的作用:

l 创建一个名为“add_wave_zoom”的程序,它有stime和num两个参数。

l 从当前仿真时间的前50个单位时间到后100个单位时间的范围创建一个书签。

b) 在脚本末添加以下行:

add wave –r /*

when {clk’event and clk=”1”}{

echo “Count is [xa count]”

if {[examine count]==”00100111”}{

add wave_zoom $now 1

} elseif {[examine count]==”01000111”}{

add_wave_zoom $now 2

}

}

这些命令的作用:

l 给波形窗口添加所有的信号。

l 使用when语句识别clk跳变为1的时刻。

l 在这些跳变检测count的值,如果它是某个确定值,添加一个书签。

c) 将这个脚本以”add_bkmrk.do”为名存到在基本仿真那课创建的目录里。

2. 加载test_counter设计单元。

a) 启动ModelSim。

b) 选择File > Change Directory 切换至上面第一步保存DO文件的目录。

c) 在QuestaSim>后输入vsim test_counter

3. 执行DO文件并运行设计。

a) 在VSIM>后输入do add_bkmrk.do。

b) 在VSIM>后输入run 1500 ns

仿真运行,DO文件创建两个书签。

c) 如果波形窗口停靠在主窗口,激活它,然后选择Wave > Bookmarks >bk1。如果那个窗口独立出来了,选择View > Bookmarks > bk1.

查看波形窗口,放大并滑到count是00100111的时刻。

同样试试bk2。

本课小结

本课到此结束。

1. 选择File > Quit关闭ModelSim.

原文地址:https://www.cnblogs.com/halflife/p/1978464.html