ModelSim的简要使用方法
在这一章里通过一些课程来简单介绍ModelSim的使用方法,更多的需要在实际应用中熟练和掌握。
第一课 Create a Project
第一次打开ModelSim会出现Welcome to ModelSim对话框,选取Create a
1. 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 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的特殊文件。
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. 选取工具条中的Load Design按钮开始仿真。
( PROMPT : vsim test_counter )
Load Design对话框允许你从指定的库中选取一个设计单元仿真。你也可以
为仿真选取Simulation Resolution限制,缺省的库是work,缺省的Simulation Resolution是1ns。
7. 选取test_counter,点击Load接受这些设置。
8. 通过在主窗口下的vsim提示符下敲入下述命令来调出Signals、List and Wave window: view signals list wave (MENU: View\
1. 为了列示顶级( top-level )信号,移动鼠标到Signals window,选取View\List\Signals in Region。
( Prompt : add list /test_counter/* )
2. 现在向Wave window添加信号。在Signals window选取Edit\Select All选择三个信号,拖动三个信号到Wave window的路径名或是数值窗格的任一个中。
HDL条目也能够从一个窗口拷贝到另一个窗口(或者是在Wave and List window内部),通过Edit \ Copy和Edit \ Paste菜单命令。也能删除选取的条目Edit \ Delete。
3. 下面打开Source window,选取View \ Source
( Prompt : view source )
4. 导入设计的时候会在工作去开出一个新的Sim Tab栏。这个Structure Pane展示了设计的层次结构。你可以点即“+”(expand)或“-”(contract)来观察。
5. 点击其中的Function increment可以注意到其他窗口是怎么适当的自动更新的。明确地说,Source window显示了你在Structure window所选的层次水平的Verilog代码.在这种方式下使用Structure Pane类似于解释性Verilog的范围命令。现在,点击Structure Pane的顶层线,确定test_counter模块显示在Source window。
1.Run运行100ns,缺省设置。
(PROMPT: run ) (MENU: Run\Run 100ns)
2. 设置Run Length为500ns,然后Run。
在仿真运行了600ns,在工作取底部状态栏可以看到这些信息。
3. 上个命令使仿真器前进了500ns,也可以设置仿真器推进的时间
run @ 3000
际仿真器向前推进了2400ns(3000-600)
4. 选取主窗口Run All。
(PROMPT: run -all ) (MENU: Run\Run -All)
5. 选取Break中断运行。
看Source window,察看中断执行的语句。
调试仿真
1. 在List window选取/test_counter/count。从List window菜单条中选取 Prop \ Signal Props。Modify Signal Properties (list) 对话框打开了。
为信号counter选取十进制(在Radix),相应的List window的输出也发生改变,成为十进制数,而不是缺省的二进制了。
2. 我们选取工作区Structure Pane中的dut:counter,然后在counter.v中的30行(这里包含一个到Verilog功能增量的调用)设置断点。
3. 选取Restart按钮,重载设计组件和重置仿真时间为零。
(PROMPT: restart ) (MENU: File\Restart)
确认Restart对话框中所有条目被选中,然后点击Restart。
例子中的Verilog代码中19行有一个stop语句,如果不Restart的话,将会停
在这一句上。
4. 选取Run -All(主窗口),恢复执行仿真。中断后看Source window。
(PROMPT: run -all ) (MENU: Run\Run -All)
5. 正常的,当中断到达后你对一个或多个信号的值感兴趣,你有几个选项可以检测这些值。你能看显示在Signals window中的值;可以在Source window中,在变量上点右键;或者使用examine命令。
命令的结果是,值会输出在主窗口。
6. 执行单步跳使命令Step,遍历Verilog源函数。
7. 结束仿真的命令为:quit -force。 |