第一章 介 绍
本指南是为 ModelSim5.5f版本编写的,该版本运行于UNIX和Microsoft Windows 95/98/Me/NT/2000的操作系统环境中。本指南覆盖了VHDL和Verilog模拟仿真,但是你在学习过程中会发现对于单纯的HDL设计工作而言,它是一个很有用的参考。ModelSim具备强大的模拟仿真功能,在设计、编译、仿真、测试、调试开发过程中,有一整套工具供你使用,而且操作起来极其灵活,可以通过菜单、快捷键和命令行的方式进行工作。ModelSim的窗口管理界面让用户使用起来很方面,它能很好的与操作系统环境协调工作。ModelSim的一个很显著的特点就是它具备命令行的操作方式,类似于一个shell有很多操作指令供你使用,给人的感觉就像是工作在Unix环境下,这种命令行操作方式是基于Tcl/Tk的,其功能相当强大,这需要在以后的实际应用中慢慢体会。
ModelSim的功能侧重于编译、仿真,不能指定编译的器件,不具有编程下载能力。不象 Synplify和MAX+PLUS II可以在编译前选择器件。而且ModelSim在时序仿真时无法编辑输入波形,不象MAX+PLUS II可以自行设置输入波形,仿真后自动产生输出波形,而是需要在源文件中就确定输入,如编写测试台程序来完成初始化、模块输入的工作,或者通过外部宏文件提供激励。这样才可以看到仿真模块的时序波形图。另外对于Synplify来说,也只具有编译能力,但是比MAX+PLUS II可编译的verilog的内容要多,所以常常可以现在Synplify下编译,生成编译文件再送到MAX+PLUS II中使用。
ModelSim还具有分析代码的能力,可以看出不同的代码段消耗资源的情况,从而可以对代码进行改善,以提高其效率。
第二章 ModelSim的主要结构
ModelSim的主窗口(Main window)包括菜单栏、工具栏、工作区和命令行操作区。
在工作区可以显示Project Tab、Library Tab、Sim Tab(显示Load Design、Hierarchical Structure);在命令行操作区,可以用命令提示符的方式进行编译、仿真设计,同时打开其他窗口。
在菜单栏View下可以打开,source window、list window、wave window、structure window、 signal window、dataflow window、process window、viarables window等窗口,用来测试仿真、调试仿真。由此也可以看出该软件具有强大的仿真设计能力,它提供的工具很多。
在帮助菜单里有SE的帮助文件和Tcl的帮助文件,是学用ModelSim很好的帮手。
第三章 ModelSim的简要使用方法
在这一章里通过一些课程来简单介绍ModelSim的使用方法,更多的需要在实际应用中熟练和掌握。
第一课 Create a Project
1. 第一次打开ModelSim会出现Welcome to ModelSim对话框,选取Create a Project,或者选取File\New\Project,然后会打开Create Project对话框。
2. 在Create Project对话框中,填写test作为Project Name;选取路径Project Location作为Project文件的存储目录;保留Default Library Name设置为work。
3. 选取OK,会看到工作区出现Project and Library Tab。
4. 下一步是添加包含设计单元的文件,在工作区的Project page中,点击鼠标右键,选取Add File to Project。
5. 在这次练习中我们加两个文件,点击Add File to Project对话框中的Browse按钮,打开ModelSim安装路径中的 example目录,选取counter.v和tcounter.v,再选取Reference from current location,然后点击 OK。
6. 在工作区的Project page中,单击右键,选取Compile All。
7. 两个文件编译了,鼠标点击Library Tab栏,将会看到两个编译了的设计单元列了出来。看不到就要把Library的工作域设为work。
8. 最后一不是导入一个设计单元,双击Library Tab中的counter,将会出现Sim Tab,其中显示了counter设计单元的结构。也可以Design\Load design来导入设计。
到这一步通常就开始运行仿真和分析,以及调试设计,不过这些工作在以后的课程中来完成。结束仿真选取Design \ End Simulation,结束Project选取File \ Close \ Project。
第二课 Basic VHDL Simulation
准备仿真
1. 为这次练习新建一个目录,然后拷贝example目录中所有的vhd文件到该目录下。设置该目录为当前工作目录,这一步通过从该目录调用ModelSim或是选取File\Change Directory命令来完成。
2. 在编译任何HDL代码前,要建立一个设计库来存放编译结果。选取Design \ Create a New Library生成一个新的设计库。确定选取Create: a new library and a logical mapping to it,在Library Name域中键入work,然后选取OK。这就在当前目录中建立了一个子目录,即你的设计库。ModelSim在这个目录中保存了名为_info的特殊文件。
( Prompt : vlib work
vmap work work )
3. 选取工具栏里的Compile命令来编译counter.vhd文件到新库中。这将打开Compile HDL Source Files对话框。使用vcom命令是看不到的。从列表中选取counter.vhd再点击Compile,完成后选取Done。可以编译多个文件,按照设计的需要依次选取进行编译。
( Prompt : vcom counter.vhd )
4. 选取工具栏里的Load design按钮,导入设计单元。Load design对话框可以让你选择库和顶级( top-level )设计单元来仿真,你也可以为仿真选取Simulation Resolution限制。这次仿真运行,下述是缺省的显示:
• Simulator Resolution: default (the default is 1 ns)
• Library: work
• Design Unit: counter
如果设计单元是一个实体,你可以点击前面的加号,来浏览其关联的结构。
( Prompt : vsim counter )
5. 选取counter,然后选择Load接受设置。
6. 下面,选取View \ All打开所有的窗口,关于窗口的描述,参阅ModelSim User’s Manual。
( Prompt : view * )
7. 在Signals window选取View\List\Signals in Region,这个命令显示List window中的顶级( top-level )信号。
( Prompt : add list /counter/* )
8. 下步,通过从Signals window选取View\Wave\Signals in Region添加顶级( top-level )信号到Wave window。
( Prompt : add wave /counter/* )
运行仿真
通过应用始终输入激励来开始仿真。
1. 点击主窗口,在vsim提示符下敲如下面的命令:
( force clk 1 50 , 0 100 –repeat 100 )
( MENU : Signals\Edit\Clock )
ModelSim解释force命令如下:
 force clk to the value 1 at 50 ns after the current time
 then to 0 at 100 ns after the current time
 repeat this cycle every 100 ns
2. 现在你可以练习来自于主窗口或波形窗口工具条按钮的两个不同的Run功能。(Run功能在主窗口和波形窗口中定义,即这两个窗口中有Run功能)。首先选取Run按钮,运行完成之后选取Run All。
Run. 运行仿真,在100ns后停止。
(PROMPT: run 100) (MENU: Run \ Run 100ns)
Run-All. 一直运行仿真,直到选取Break。
(PROMPT: run -all) (MENU: Run \ Run -All)
3. 选取主窗口或波形窗口的Break按钮来中断仿真,一旦仿真到达一个可接受的停止点,它就停止运行。
在源文件窗口中的箭头指向下一条将被执行的语句。(如果暂停发生时,仿真没在评测一个过程,则没有箭头显示在源文件窗口上)。
下面,你将在18行的函数内部设置一个断点。
4. 移动鼠标到源文件窗口,在18行上点击设置断点,可以看到紧挨着行号有一个红点,可以用鼠标点击切换断点的使能与否,断点禁止后看到是一个小的红色的园环。可以在断点上点击鼠标右键,选取Remove BreakPoint 18来取消断点。
( PROMPT : bp counter.vhd 18 )
5. 选取Continue Run按钮恢复中断了的运行,ModelSim会碰上断点,通过源文件中的一个箭头或是在主窗口中的一条中断信息来显示出来。
(PROMPT: run -continue) (MENU: Run \ Continue)
6. 点击Step按钮可以单步执行仿真,注意Variables window中值的变化。如果你愿意可以持续点击Step。
(PROMPT: run -step) (MENU: Step)
7. 当你完成了,敲入以下命令结束仿真。
quit -force
8. 命令没有寻求确认就结束了ModelSim。
第三课 Basic verilog Simulation
1. 新建一个目录,并设置该目录为当前工作目录,通过从该目录调用ModelSim或是选取File\Change Directory命令来完成。
2. 拷贝example目录中verilog文件到当前目录下。在你编译verilog文件前,你需要在新目录下生成一个设计库。如果你仅仅熟悉解释性verilog仿真器,诸如Cadence Verilog-XL,那么对于你来说这是一个新的方法。因为ModelSim是一个编译性Verilog 仿真器,对于编译它需要一个目标设计库。如果需要的话,ModelSim能够编译VHDL和Verilog代码到同一个库中。
3. 在编译任何HDL代码前,要建立一个设计库来存放编译结果。选取Design \ Create a New Library生成一个新的设计库。确定选取 Create: a new library and a logical mapping to it,在Library Name域中键入work,然后选取OK。这就在当前目录中建立了一个子目录,即你的设计库。ModelSim在这个目录中保存了名为_info的特殊文件。
( Prompt : vlib work
vmap work work )
4. 下面你将编译Verilog设计。
这个设计例子由两个Verilog源文件组成,每一个都包含一个唯一的模块。文件counter.v包含一个名为counter的模块,它执行一个简单的八位加法计数器。另一个文件tcounter.v是一个测试台模块(test_counter),通常用来校验counter。在仿真下,你可以看到这两个文件,通过一个被测试台例示了的模块counter的一个简单的实例(名为dut的实例),来层次化的设置了。稍候你将有机会看一下这个代码的结构,现在,你需要编译两个文件到work设计库。
5. 通过选取工具条中的Compile按钮来编译两个文件。
( PROMPT : vlog counter.v tcounter.v )
这就打开了Compile HDL Source Files对话框。
选取两个文件后,选择Compile,编译完成后选取Done。
6.