首页 理论教育Modelsim 进阶使用指南

Modelsim 进阶使用指南

【摘要】:命令方式就是在Modelsim的操作中用命令来实现,输入命令的窗口就在Modelsim界面下方的“Transcript”窗口中,如图5.39所示。例5.11 退出仿真命令退出仿真命令执行后,可以通过“vsim”命令重新启动仿真。

1.命令方式

在Modelsim的操作中,大部分人习惯直接在图形界面上操作,其实,每个图形界面的操作后面都是被转换成一条条的指令,后台通过执行指令来实现该操作。命令方式就是在Modelsim的操作中用命令来实现,输入命令的窗口就在Modelsim界面下方的“Transcript”窗口中,如图5.39所示。

978-7-111-55094-5-Chapter05-56.jpg

图5.39 Transcript窗口

在图5.39中,“VSIM4>”后面跟着光标,在光标处键入指令,回车执行指令。

下面就介绍几个常用命令。

(1)vlog命令

vlog命令用来编译.v文件,比如编译testbench.v,可以在“Transcript”窗口中输入命令如例5.7所示。

例5.7 vlog命令的使用

978-7-111-55094-5-Chapter05-57.jpg

例5.7中第一句表示编译testbench.v文件,并没有指明路径,第二句指明在work库中的testbench.v文件,其中“-work”是一种属性说明,表示将要指定某个库,其后紧跟的“work”是“-work”的具体说明,即“work”库,也可以是其他自己建立的库。这是一种TCL脚本语言,在数字电路设计中有广泛的应用,在第6章中会有相关介绍。为了查看vlog命令更加详细的应用说明,可以在系统“开始”菜单中单击“运行”,输入“cmd”,在出现的对话框中输入“vlog-help”命令,会得到关于vlog的命令格式和详细说明,如图5.40所示。

978-7-111-55094-5-Chapter05-58.jpg

图5.40 查询vlog命令

在图5.40状态下,回车后会将该命令的说明输出到当前屛,如果相关内容很多,当前屏无法完全承载,可以通过命令“vlog-help->vlog.log”命令将所有内容输出到一个“vlog.log”的文件中,再打开该文件查看,如图5.41所示。

图5.41中,倒数第二行在执行将vlog帮助中的内容输出到vlog.log文件中,执行完命令后可以到路径C:\Documents and Settings\Administrator中找到vlog.log文件,其中包含了所有vlog-help命令执行的结果。

(2)vsim命令

vsim命令是启动仿真的命令,在命令中需要指定仿真的top文件,即test-bench.v文件,其使用方法如例5.8所示:

例5.8 vsim命令的使用

978-7-111-55094-5-Chapter05-59.jpg

同样,用户可以通过(1)中vlog的查询方法查询vsim,在vsim命令中也有很多属性开关选项,用户根据自己的需求选择是否添加和说明。

(3)run命令

run命令用来执行仿真,其使用方法如例5.9所示。

例5.9 run命令的使用

978-7-111-55094-5-Chapter05-60.jpg

例5.9中,第一行表示run使用默认时间值,即图5.30中白色小框里设定的时间值,第二行表示执行10000ns,这个时间单位是在testbench.v中用户自己设定的,由时间精度决定,第三行是执行所有的,直到用命令将其停止,或者在test-bench.v中有“stop”“finish”等停止仿真的命令。当然,用户也可以通过(1)中的方法查询“run”命令的详细介绍。

(4)verror命令

verror命令用来查看错误的详细信息,通过(1)中的方法,用户可以看到其用法如图5.42所示。

978-7-111-55094-5-Chapter05-61.jpg

图5.41 输出到文件vlog.log

978-7-111-55094-5-Chapter05-62.jpg

图5.42 verror的说明

图5.42中列出了verror的用法说明,在仿真过程中出现的错误都可以通过verror进行详细查看,便于用户进行分析,修改语法错误,纠正对仿真工具的错误使用。

(5)添加波形命令

添加波形命令用于将需要查看的波形添加到波形界面中,其使用方法如例5.10所示。

例5.10 添加波形命令

978-7-111-55094-5-Chapter05-63.jpg

例5.10中第一行是将设计文件和测试文件中所有的信号都添加到波形界面中,第二行缩小范围,将测试文件traffic_lights_state_machine_tb中所有的信号添加到波形界面中,第三行进一步缩小范围,将测试文件traffic_lights_state_machine_tb中信号red_light添加到波形界面中,用户根据自己的需求进行选择使用哪种方式添加波形。

(6)退出仿真命令

退出仿真的命令是退出当前仿真,波形界面和前文提及的“Objects”界面会关闭,但Modelsim工具不会退出,其命令方式如例5.11所示。

例5.11 退出仿真命令

978-7-111-55094-5-Chapter05-64.jpg

退出仿真命令执行后,可以通过“vsim”命令重新启动仿真。

命令方式仿真,可以让用户将需要的命令写成脚本文件.tcl,在“Transcript”窗口中执行.tcl文件就可以直接查看仿真的结果,不需要用户逐一再去单击,简单明了,可以说是一劳永逸的方式,是比较推荐的一种仿真方式。仿真命令还有很多,细心的人会发现,在我们单击图形界面中的标识时,在“Transcript”窗口中会弹出相应的命令,比如我们通过右键选中的信号添加波形时,在“Transcript”窗口中会弹出如图5.43所示内容,我们可以通过这样的方式去知道更多的命令,再通过“-help”去了解详细用法,举一反三,所谓授人以鱼不如授人以渔,大概就是这个意思吧。

图5.43中的内容就是在图形界面中单击图标时对应的命令方式,由第一行“add wave”可以看出,这是将信号添加到波形中查看,“add wave”后面的反斜杠“\”表示换行的意思。

2.do文件

do文件是装载各种命令的脚本文件,用“do”命令去执行do文件,如例5.12所示。

978-7-111-55094-5-Chapter05-65.jpg

图5.43 Transcript弹出内容

例5.12 do文件的使用

do traffic_lights_state_machine.do

编写do文件,就是把仿真过程按顺序用命令写在一个txt文件中,保存时将扩展名改成.do,从建库到加载波形、打印信息等,都通过命令写在do文件中,然后在“Transcript”窗口中执行例5.12中的命令。在一些情况下,也可以通过图形界面保存do文件,第一种情况,将鼠标选中“Transcript”窗口,选择File→Save Transcript As…,前面提到过,“Transcript”窗口会用命令记录图形界面操作的过程,通过“Save Transcript As…”将第一遍通过图形界面操作的步骤保存在.do文件中,不需要用户自己再编写,如图5.44所示。

图5.44中鼠标选中“Transcript”之后,“Transcript”框的条纹变蓝,再单击工具栏的“File”,在弹出的下拉列表中找到“Save Transcript As…”。

第二种情况,这个do文件与前面说到的do文件不同,将鼠标选中在波形界面“Wave”,选择File→Save Format…可以将“Wave”界面中的信号保存成.do文件,这样可以保存用户在“Wave”界面中对信号的排序、数据显示的进制(radix)、对信号修改的颜色等,在下次仿真添加波形时,可以直接选择File→Load→Macro File…,加载保存的波形do文件,调出波形信息,不需要用户再逐个修改,便于直接观测结果,如图5.45所示。

图5.45中鼠标先选中“Wave”框,相应框的条纹变蓝,再从工具栏中“File”找到“Save Format…”。

不管是操作命令do文件还是波形do文件,都是帮助用户更加快捷地进行仿真,在复杂的工程中,用户会体会到这种命令方式带来的极大优越感,可以说是碾压稍显繁琐的图形界面方式,只是万事开头难,图形界面方式容易上手,更容易被用户所接纳。

978-7-111-55094-5-Chapter05-66.jpg

图5.44 保存do文件

978-7-111-55094-5-Chapter05-67.jpg

图5.45 保存波形do文件

3.文件的写入和导出

在仿真的时候需要数据激励,这个激励有时候可以用always块自行产生,在有的情况下却不能满足用户的需求,比如做算法仿真需要将matlab中的数据导入到Modelsim中,作为数据源,matlab保存下来的数据一般是txt类型,所以需要将txt导入Modelsim,让module中的输入信号从这个matlab保存下来的txt读取数据,这是将文件写入Modelsim。在另一些情况下,需要将Modelsim的数据导出,保存为txt文件供其他软件使用,这是将文件导出Modelsim。文件写入可以使用978-7-111-55094-5-Chapter05-68.jpgread-memb、978-7-111-55094-5-Chapter05-69.jpgfscanf,导出可以使用978-7-111-55094-5-Chapter05-70.jpgfmonitor、978-7-111-55094-5-Chapter05-71.jpgfwrite等。如例5.13和例5.14所示。

例5.13 文件的写入

978-7-111-55094-5-Chapter05-72.jpg

例5.13中将data.txt的数据读入存储器memory中,在第一行定义了一个深度为10的memory,memory中每个数据位宽是6位,在initial模块中读入文件,data.txt放在工程目录下,仿真开始后,数据读入,可以从工具栏中View→Memory List中找到定义的memory,单击后可以查看memory中的值,与data.txt一致,如图5.46所示。

978-7-111-55094-5-Chapter05-73.jpg

图5.46 txt文件导入

978-7-111-55094-5-Chapter05-74.jpgmonitor将信号导出到txt文件,如例5.14所示。

例5.14 txt文件导出

978-7-111-55094-5-Chapter05-75.jpg

例5.14中将信号“yellow-light”的值导出到“data_out-file.txt”文件中。运行仿真,会在工程路径的文件夹里生成“data_out_file.txt”文件,文件中写入的是信号“yellow_light”的值,如图5.47所示。

978-7-111-55094-5-Chapter05-76.jpg

图5.47 导出的文件

4.Wave查看技巧

Wave窗口中基本的波形查看在5.3.2节中已经介绍,但还有一些小技巧能够帮助用户更加方便快捷地查找波形,分析结果。

(1)波形查看快捷键

在工具栏中有专门的按钮用于放大和缩小波形,除了这些按钮,用户使用的键盘也可以做到。键盘上“+”能够实现以中轴线为中心放大波形,“-”能够实现以中轴线为中心缩小波形,“F”表示全屏显示波形,“C”表示以“Wave”界面中黄线即用户选定的标线为中心放大波形。

(2)设置断点

在Modelsim中设置断点有两种方式,一种跟C语言一样,对代码设置断点,让程序跑到断点处停止;另一种是对信号设置断点,当信号发生变化时停住。用户可以在“Objects”框中选中某个信号,右键单击,从弹出的对话框中选择“Insert Breakpoint”,通过这样的方式对选中的信号设断点,如图5.48所示。

设置完成之后,选择“Restart”重新开始仿真,单击“Run”按钮,“Wave”界面会停在该信号将要发生变化的最后一个时刻,再单击“Run”按钮一次,可以看到这个时刻的变化,同时“wave”界面停留在该信号将要发生变化的第二个时刻。除了对信号设置断点外,用户还可以通过工具栏中的手型按钮来配置断点方式,如图5.49所示。

978-7-111-55094-5-Chapter05-77.jpg

图5.48 设置断点

978-7-111-55094-5-Chapter05-78.jpg

图5.49 断点配置按钮

左键单击该按钮,弹出如图5.50所示的对话框。对话框中,白色框内显示当前的断点状态,可以看到前面通过“Insert Breakpoint”加入的信号断点“green_light”,下方有对“green-light”的相关说明。在上方的右侧还有几个按钮,可以增加“Add”新的断点,单击后会弹出图5.51所示的对话框,用户可以自行选择是对信号设置断点还是对代码设置断点;“Modify...”可以修改当前设置的断点的标签、状态等信息;“Disable”顾名思义,就是禁止该断点的使用,但并不删除;“Delete”就是删除该断点;“Load”可以加载一些脚本文件,脚本文件中有对断点的描述,可以通过“Save...”按钮来获取断点的脚本描述方式。配置完成后,单击“OK”按钮保存配置,再重新启动仿真,新一轮的仿真将按照该配置运行。

978-7-111-55094-5-Chapter05-79.jpg

图5.50 断点配置窗口

978-7-111-55094-5-Chapter05-80.jpg

图5.51 断点设置方式选择

(3)数据显示方式

“Wave”界面中的信号默认用二进制显示,用户可以根据需求选择其他显示方式。首先在“Wave”界面中选中某个信号,右键选择“Radix”选项,会在右侧弹出很多选择:无符号数、有符号数、十六进制、ASCII等,如图5.52所示。

978-7-111-55094-5-Chapter05-81.jpg

图5.52 数据进制选择

图5.52中将选中的信号设置为“Unsigned”模式,即无符号数。除了选择进制,还可以选择波形,即显示逻辑值还是模拟波形,前提是需要先将数据变成十进制数(无符号数或者有符号数),右键单击该信号,在弹出的选项中选择“For-mat”,在右侧会弹出新的选项列表,用户可以选择逻辑值、模拟波形等,如图5.53所示为选择波形模式。

978-7-111-55094-5-Chapter05-82.jpg

图5.53 选择波形模式

图5.53中将选中信号的“Format”设置为模拟,结果如图5.54所示。

978-7-111-55094-5-Chapter05-83.jpg

图5.54 显示模拟波形

从图5.54中可以看出,信号由图5.53中的数字变成了图5.54中的三角波,观察更直观清晰。在一些情况下,比如通信系统中,升采样和降采样的中间结果就需要与matlab中画出的曲线对比,此时模拟波形将派上用场。

(4)波形结果对比

Modelsim支持将上一次仿真的波形和当前仿真的波形做对比,单击File→Datasheet选项,弹出如图5.55所示的对话框。

978-7-111-55094-5-Chapter05-84.jpg

图5.55 “Datasheet Browser”对话框

图5.55中,在对话框里默认会有当前仿真的波形文件vsim.wlf,单击下方的“Save As...”按钮,将这次的波形另存为“old-wave.wlf”文件。修改代码后,重新仿真,然后打开图5.56所示的对话框,单击下方“Open”按钮,将保存的“old-wave.wlf”打开,发现“Datasheet Browser”对话框中多了一个波形文件,如图5.56所示。

978-7-111-55094-5-Chapter05-85.jpg

图5.56 添加对比波形

图5.56中,单击下方“Done”按钮,回到“Wave”界面,发现Modelsim界面左侧“Project”窗口中多了一个“old_wave”的仿真窗口,如图5.57所示。

图5.57中,“sim”窗口是当前仿真窗口,列有当前的模块和信号,“old-wave”窗口是保存的上次仿真的信号,用5.3.2节中提到的方法将“old-wave”窗口中的信号添加到“wave”窗口中,就可以直观地对比波形。

978-7-111-55094-5-Chapter05-86.jpg

图5.57 “old-wave”仿真窗口

5.Tips

在Modelsim的使用过程中,会有一些小的技巧帮助我们快速有效地进行仿真,下面罗列主要的几点。

(1)利用Modelsim工具建立testbench.v

除了可以自己手写建立testbench.v之外,在Modelsim中有一个工具也可以帮助我们建立testbench.v模板。将鼠标选中.v文件编辑窗口,对应的工具栏中会出现“Source”选项,如图5.58所示。

978-7-111-55094-5-Chapter05-87.jpg

图5.58 “Source”选项

注意,如果鼠标选中左侧“Project”窗口,对应的工具栏如图5.59所示,所以鼠标放在不同的窗口,对应的工具栏选项是不同的。

978-7-111-55094-5-Chapter05-88.jpg

图5.59 “Project”对应的工具栏

选中“Source”之后,在下拉菜单中选择“Show Language Template”,会在下面的窗口中增加一个“Language Templates”的窗口,如图5.60所示。

选中“Create Testbench”,弹出如图5.61所示的对话框。

图5.61中,在“work”库下面会出现在工程中建立的所有.v文件,选择要仿真的模块,在这里只有一个模块“traffic_lights_state_machine”,单击“Next”按钮,出现图5.62所示的对话框。

图5.62中的对话框里可以选择testbench.v的文件名称,默认情况会直接用选中的模块名后面加“_tb”作为testbench.v文件名,用户也可以根据需求自行修改,“Options”选项中3个都需要勾选,完成后单击“Finish”按钮。完成后会根据待仿真.v文件的输入输出端口生成testbench.v,结果如图5.63所示。

978-7-111-55094-5-Chapter05-89.jpg

图5.60 Language Templates示图

978-7-111-55094-5-Chapter05-90.jpg

图5.61 Creat Testbench Wizard示图1

图5.63是用工具生成的testbench.v模板,只有基本的输入输出信号和仿真模块,用户需要在这个基础上对信号初始化(initial块)、添加激励信号等,进一步完善测试程序。

(2)恢复传统界面

一般来说,打开Modelsim工具后,各个窗口的位置如图5.22所示,如果在实验过程中用户打乱了窗口的位置,可以通过下面这个选项一键恢复图5.22的排列关系,单击工具栏中“Layout”一项,选中其中的“Simulate”即可一键恢复图5.22窗口模式,如图5.64所示。

图5.64中选择“Simulate”模式,Modelsim界面恢复默认的窗口排列。

978-7-111-55094-5-Chapter05-91.jpg

图5.62 Creat Testbench Wizard示图2

978-7-111-55094-5-Chapter05-92.jpg

图5.63 生成的testbench.v

978-7-111-55094-5-Chapter05-93.jpg

图5.64 恢复默认窗口模式

(3)调试中修改代码

当调试发现问题需要修改代码的时候,需要去代码编辑窗口重新输入,但此时可能出现无法输入的情况,光标放在代码行却无法修改,这个问题需要检查工具栏中“Source”选项下的“Read Only”是否被勾选,如果勾选,将其勾掉,再次进入代码编辑窗口修改代码即可。如图5.65所示。

978-7-111-55094-5-Chapter05-94.jpg

图5.65 修改代码

图5.65中,在“Source”下拉列表中左键单击“Read Only”,如图5.64中所圈选项,即可去掉前面的对勾,进入右边的编辑界面修改代码。修改完代码后,重新编译修改的代码,然后再重新启动仿真。