ModelSim简明操作指南.docx
- 文档编号:30403958
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:16
- 大小:25.77KB
ModelSim简明操作指南.docx
《ModelSim简明操作指南.docx》由会员分享,可在线阅读,更多相关《ModelSim简明操作指南.docx(16页珍藏版)》请在冰豆网上搜索。
ModelSim简明操作指南
第一章介绍
本指南是为ModelSim5.5f版本编写的,该版本运行于UNIX和MicrosoftWindows95/98/Me/NT/2000的操作系统环境中。
本指南覆盖了VHDL和Verilog模拟仿真,但是你在学习过程中会发现对于单纯的HDL设计工作而言,它是一个很有用的参考。
ModelSim具备强大的模拟仿真功能,在设计、编译、仿真、测试、调试开发过程中,有一整套工具供你使用,而且操作起来极其灵活,可以通过菜单、快捷键和命令行的方式进行工作。
ModelSim的窗口管理界面让用户使用起来很方面,它能很好的与操作系统环境协调工作。
ModelSim的一个很显著的特点就是它具备命令行的操作方式,类似于一个shell有很多操作指令供你使用,给人的感觉就像是工作在Unix环境下,这种命令行操作方式是基于Tcl/Tk的,其功能相当强大,这需要在以后的实际应用中慢慢体会。
ModelSim的功能侧重于编译、仿真,不能指定编译的器件,不具有编程下载能力。
不象Synplify和MAX+PLUSII可以在编译前选择器件。
而且ModelSim在时序仿真时无法编辑输入波形,不象MAX+PLUSII可以自行设置输入波形,仿真后自动产生输出波形,而是需要在源文件中就确定输入,如编写测试台程序来完成初始化、模块输入的工作,或者通过外部宏文件提供激励。
这样才可以看到仿真模块的时序波形图。
另外对于Synplify来说,也只具有编译能力,但是比MAX+PLUSII可编译的verilog的内容要多,所以常常可以现在Synplify下编译,生成编译文件再送到MAX+PLUSII中使用。
ModelSim还具有分析代码的能力,可以看出不同的代码段消耗资源的情况,从而可以对代码进行改善,以提高其效率。
第二章ModelSim的主要结构
ModelSim的主窗口(Mainwindow)包括菜单栏、工具栏、工作区和命令行操作区。
在工作区可以显示ProjectTab、LibraryTab、SimTab(显示LoadDesign、HierarchicalStructure);在命令行操作区,可以用命令提示符的方式进行编译、仿真设计,同时打开其他窗口。
在菜单栏View下可以打开,sourcewindow、listwindow、wavewindow、structurewindow、signalwindow、dataflowwindow、processwindow、viarableswindow等窗口,用来测试仿真、调试仿真。
由此也可以看出该软件具有强大的仿真设计能力,它提供的工具很多。
在帮助菜单里有SE的帮助文件和Tcl的帮助文件,是学用ModelSim很好的帮手。
第三章ModelSim的简要使用方法
在这一章里通过一些课程来简单介绍ModelSim的使用方法,更多的需要在实际应用中熟练和掌握。
第一课CreateaProject
1.第一次打开ModelSim会出现WelcometoModelSim对话框,选取CreateaProject,或者选取File\New\Project,然后会打开CreateProject对话框。
2.在CreateProject对话框中,填写test作为ProjectName;选取路径ProjectLocation作为Project文件的存储目录;保留DefaultLibraryName设置为work。
3.选取OK,会看到工作区出现ProjectandLibraryTab。
4.下一步是添加包含设计单元的文件,在工作区的Projectpage中,点击鼠标右键,选取AddFiletoProject。
5.在这次练习中我们加两个文件,点击AddFiletoProject对话框中的Browse按钮,打开ModelSim安装路径中的example目录,选取counter.v和tcounter.v,再选取Referencefromcurrentlocation,然后点击OK。
6.在工作区的Projectpage中,单击右键,选取CompileAll。
7.两个文件编译了,鼠标点击LibraryTab栏,将会看到两个编译了的设计单元列了出来。
看不到就要把Library的工作域设为work。
8.最后一不是导入一个设计单元,双击LibraryTab中的counter,将会出现SimTab,其中显示了counter设计单元的结构。
也可以Design\Loaddesign来导入设计。
到这一步通常就开始运行仿真和分析,以及调试设计,不过这些工作在以后的课程中来完成。
结束仿真选取Design\EndSimulation,结束Project选取File\Close\Project。
第二课BasicVHDLSimulation
准备仿真
1.为这次练习新建一个目录,然后拷贝example目录中所有的vhd文件到该目录下。
设置该目录为当前工作目录,这一步通过从该目录调用ModelSim或是选取File\ChangeDirectory命令来完成。
2.在编译任何HDL代码前,要建立一个设计库来存放编译结果。
选取Design\CreateaNewLibrary生成一个新的设计库。
确定选取Create:
anewlibraryandalogicalmappingtoit,在LibraryName域中键入work,然后选取OK。
这就在当前目录中建立了一个子目录,即你的设计库。
ModelSim在这个目录中保存了名为_info的特殊文件。
(Prompt:
vlibwork
vmapworkwork)
3.选取工具栏里的Compile命令来编译counter.vhd文件到新库中。
这将打开CompileHDLSourceFiles对话框。
使用vcom命令是看不到的。
从列表中选取counter.vhd再点击Compile,完成后选取Done。
可以编译多个文件,按照设计的需要依次选取进行编译。
(Prompt:
vcomcounter.vhd)
4.选取工具栏里的Loaddesign按钮,导入设计单元。
Loaddesign对话框可以让你选择库和顶级(top-level)设计单元来仿真,你也可以为仿真选取SimulationResolution限制。
这次仿真运行,下述是缺省的显示:
•SimulatorResolution:
default(thedefaultis1ns)
•Library:
work
•DesignUnit:
counter
如果设计单元是一个实体,你可以点击前面的加号,来浏览其关联的结构。
(Prompt:
vsimcounter)
5.选取counter,然后选择Load接受设置。
6.下面,选取View\All打开所有的窗口,关于窗口的描述,参阅ModelSimUser’sManual。
(Prompt:
view*)
7.在Signalswindow选取View\List\SignalsinRegion,这个命令显示Listwindow中的顶级(top-level)信号。
(Prompt:
addlist/counter/*)
8.下步,通过从Signalswindow选取View\Wave\SignalsinRegion添加顶级(top-level)信号到Wavewindow。
(Prompt:
addwave/counter/*)
运行仿真
通过应用始终输入激励来开始仿真。
1.点击主窗口,在vsim提示符下敲如下面的命令:
(forceclk150,0100–repeat100)
(MENU:
Signals\Edit\Clock)
ModelSim解释force命令如下:
⏹forceclktothevalue1at50nsafterthecurrenttime
⏹thento0at100nsafterthecurrenttime
⏹repeatthiscycleevery100ns
2.现在你可以练习来自于主窗口或波形窗口工具条按钮的两个不同的Run功能。
(Run功能在主窗口和波形窗口中定义,即这两个窗口中有Run功能)。
首先选取Run按钮,运行完成之后选取RunAll。
Run.运行仿真,在100ns后停止。
(PROMPT:
run100)(MENU:
Run\Run100ns)
Run-All.一直运行仿真,直到选取Break。
(PROMPT:
run-all)(MENU:
Run\Run-All)
3.选取主窗口或波形窗口的Break按钮来中断仿真,一旦仿真到达一个可接受的停止点,它就停止运行。
在源文件窗口中的箭头指向下一条将被执行的语句。
(如果暂停发生时,仿真没在评测一个过程,则没有箭头显示在源文件窗口上)。
下面,你将在18行的函数内部设置一个断点。
4.移动鼠标到源文件窗口,在18行上点击设置断点,可以看到紧挨着行号有一个红点,可以用鼠标点击切换断点的使能与否,断点禁止后看到是一个小的红色的园环。
可以在断点上点击鼠标右键,选取RemoveBreakPoint18来取消断点。
(PROMPT:
bpcounter.vhd18)
5.选取ContinueRun按钮恢复中断了的运行,ModelSim会碰上断点,通过源文件中的一个箭头或是在主窗口中的一条中断信息来显示出来。
(PROMPT:
run-continue)(MENU:
Run\Continue)
6.点击Step按钮可以单步执行仿真,注意Variableswindow中值的变化。
如果你愿意可以持续点击Step。
(PROMPT:
run-step)(MENU:
Step)
7.当你完成了,敲入以下命令结束仿真。
quit-force
8.命令没有寻求确认就结束了ModelSim。
第三课BasicverilogSimulation
1.新建一个目录,并设置该目录为当前工作目录,通过从该目录调用ModelSim或是选取File\ChangeDirectory命令来完成。
2.拷贝example目录中verilog文件到当前目录下。
在你编译verilog文件前,你需要在新目录下生成一个设计库。
如果你仅仅熟悉解释性verilog仿真器,诸如CadenceVerilog-XL,那么对于你来说这是一个新的方法。
因为ModelSim是一个编译性Verilog仿真器,对于编译它需要一个目标设计库。
如果需要的话,ModelSim能够编译VHDL和Verilog代码到同一个库中。
3.在编译任何HDL代码前,要建立一个设计库来存放编译结果。
选取Design\CreateaNewLibrary生成一个新的设计库。
确定选取Create:
anewlibraryandalogicalmappingtoit,在LibraryName域中键入work,然后选取OK。
这就在当前目录中建立了一个子目录,即你的设计库。
ModelSim在这个目录中保存了名为_info的特殊文件。
(Prompt:
vlibwork
vmapworkwork)
4.下面你将编译Verilog设计。
这个设计例子由两个Verilog源文件组成,每一个都包含一个唯一的模块。
文件counter.v包含一个名为counter的模块,它执行一个简单的八位加法计数器。
另一个文件tcounter.v是一个测试台模块(test_counter),通常用来校验counter。
在仿真下,你可以看到这两个文件,通过一个被测试台例示了的模块counter的一个简单的实例(名为dut的实例),来层次化的设置了。
稍候你将有机会看一下这个代码的结构,现在,你需要编译两个文件到work设计库。
5.通过选取工具条中的Compile按钮来编译两个文件。
(PROMPT:
vlogcounter.vtcounter.v)
这就打开了CompileHDLSourceFiles对话框。
选取两个文件后,选择Compile,编译完成后选取Done。
6.选取工具条中的LoadDesign按钮开始仿真。
(PROMPT:
vsimtest_counter)
LoadDesign对话框允许你从指定的库中选取一个设计单元仿真。
你也可以
为仿真选取SimulationResolution限制,缺省的库是work,缺省的SimulationResolution是1ns。
7.选取test_counter,点击Load接受这些设置。
8.通过在主窗口下的vsim提示符下敲入下述命令来调出Signals、ListandWavewindow:
viewsignalslistwave
(MENU:
View\ 9.为了列示顶级(top-level)信号,移动鼠标到Signalswindow,选取View\List\SignalsinRegion。 (Prompt: addlist/test_counter/*) 10.现在向Wavewindow添加信号。 在Signalswindow选取Edit\SelectAll选择三个信号,拖动三个信号到Wavewindow的路径名或是数值窗格的任一个中。 HDL条目也能够从一个窗口拷贝到另一个窗口(或者是在WaveandListwindow内部),通过Edit\Copy和Edit\Paste菜单命令。 也能删除选取的条目Edit\Delete。 11.下面打开Sourcewindow,选取View\Source (Prompt: viewsource) 12.导入设计的时候会在工作去开出一个新的SimTab栏。 这个StructurePane展示了设计的层次结构。 你可以点即“+”(expand)或“-”(contract)来观察。 13.点击其中的Functionincrement可以注意到其他窗口是怎么适当的自动更新的。 明确地说,Sourcewindow显示了你在Structurewindow所选的层次水平的Verilog代码.在这种方式下使用StructurePane类似于解释性Verilog的范围命令。 现在,点击StructurePane的顶层线,确定test_counter模块显示在Sourcewindow。 运行仿真 1.Run运行100ns,缺省设置。 (PROMPT: run)(MENU: Run\Run100ns) 2.设置RunLength为500ns,然后Run。 现在仿真运行了600ns,在工作取底部状态栏可以看到这些信息。 3.上个命令使仿真器前进了500ns,也可以设置仿真器推进的时间 run@3000 实际仿真器向前推进了2400ns(3000-600) 4.选取主窗口RunAll。 (PROMPT: run-all)(MENU: Run\Run-All) 5.选取Break中断运行。 看Sourcewindow,察看中断执行的语句。 调试仿真 1.在Listwindow选取/test_counter/count。 从Listwindow菜单条中选取Prop\SignalProps。 ModifySignalProperties(list)对话框打开了。 为信号counter选取十进制(在Radix),相应的Listwindow的输出也发生改变,成为十进制数,而不是缺省的二进制了。 2.我们选取工作区StructurePane中的dut: counter,然后在counter.v中的30行(这里包含一个到Verilog功能增量的调用)设置断点。 3.选取Restart按钮,重载设计组件和重置仿真时间为零。 (PROMPT: restart)(MENU: File\Restart) 确认Restart对话框中所有条目被选中,然后点击Restart。 例子中的Verilog代码中19行有一个stop语句,如果不Restart的话,将会停 在这一句上。 4.选取Run–All(主窗口),恢复执行仿真。 中断后看Sourcewindow。 (PROMPT: run-all)(MENU: Run\Run-All) 5.正常的,当中断到达后你对一个或多个信号的值感兴趣,你有几个选项可以检测这些值。 你能看显示在Signalswindow中的值;可以在Sourcewindow中,在变量上点右键;或者使用examine命令。 examinecount 命令的结果是,值会输出在主窗口。 6.执行单步跳使命令Step,遍历Verilog源函数。 7.结束仿真的命令为: quit–force。 第四课MixedVHDL/verilogsimulation 准备仿真 1.生成一个新的工作目录,拷贝..\examples\mixedhdl\下的*.vhd和*.v文件到新目录中。 设置为为当前工作目录。 运行软件,如果Welcome对话框出现,选取ProceedtoModelSim。 2.SelectDesign\CreateaNewLibrary (PROMPT: vlibwork) TypeLibraryName: work SelectOK! 3.编译文件 (PROMPT: vlogcache.vmemory.vproc.v) (PROMPT: vcomutil.vhdset.vhdtop.vhd) 打开CompileHDLSourceFiles对话框。 逐个编译Verilog文件。 cache.vmemeory.vproc.v 4.依赖设计,VHDL的编译次序是特定的。 在这个例子中,top.vhd文件必须最后编译。 按照下面的顺序编译文件: util.vhdset.vhdtop.vhd 5.编译完成,点Done。 运行仿真 1.选取LoadDesign开始仿真。 LoadDesign对话框打开,选取top实体点击Load。 (PROMPT: vsimtop) 2.View\All,(PROMPT: view*) 3.addlist* addwave* (SignalsMENU: View\List\SignalsinRegion) (SignalsMENU: View\Wave\SignalsinRegion) 4.观察一下工作区的Structurepane。 注意设计中两者的层次混合,VHDL级的用一个方框前缀指示,Verilog级的用一个圆形前缀指示。 5.在Structurepane中点击模块c: cache,它的源代码出现在源文件窗口。 6.用查找功能定位cache.v文件中cache_set的声明。 Edit\Find。 找到了可以发现,cache_set是cache.v文件内例示了的VHDL实体。 7.在Structurewindow,点击行“s0: cache_set(only)”。 则Sourcewindow显示了cache_set实体的VHDL代码。 8.Quit-force 第五课DebuggingaVHDLsimulation 准备仿真 1.拷贝..\example\下的gates.vhd,adder.vhd,testadder.vhd文件到新建的工作目录,并定位为当前工作目录。 2.生成一个新库: vliblibrary_2。 3.在命令行的方式下敲入以下命令将源文件编译到新库中 vcom–worklibrary_2gates.vhdadder.vhdtestadder.vhd 4.下一步是映射新库到工作库,可以编辑modelsim.ini文件来生成映射,或者用vmap命令生成一个逻辑库名字来完成。 vmapworklibrary_2 ModelSim为你修改modelsim.ini文件。 5.选取Design\LoadDesign,打开LoadDesign对话框。 6.确认simulationresolution为缺省;在设计单元中选取名为test_adder_structural的配置;单击Load接受设置。 (PROMPT: vsim–tnswork.test_adder_structural) 7.打开所有的窗口。 (PROMPT: View*)(MENU: View\All) 8.在Signalswindow中选区所有信号Edit\SelectAll然后拖到Listwindow中。 (MENU: View\List\SignalsinRegion)(PROMPT: addlist*) 9.同样地,把信号加到Wavewindow中。 键入命令: addwave* (MENU: View\Wave\SignalsinRegion)(DRAG&DROP) 10.在主工具条上的运行时间选择器中,改变运行时间设置为1000ns。 (MENU: Option\Simulation\Defaults) 运行调试仿真 1.选取Run,运行仿真。 (PROMPT: run) 主窗口中的一条消息将通报你有一个判断错误。 执行下面步骤查找错误。 2.首先,改变仿真判断选项。 选取Option\Simulation。 3.选取Assertions页面。 改变选择为BreakonAssertiontoError并点击OK。 这将使仿真停在HDL判断语句上。 4.选取Restart。 (MENU: File\Restart)(PROMPT: restart) 确定Restart对话框中所有条目被选,然后点击Restart。 5.选取Run。 可以看到Sourcewindow中的箭头指向判断语句。 (MENU: Run\Run1000ns)(PROMPT: run) 6.在Variableswindow中,你可以看到i=6。 这表示仿真停留在测试模式环路的第六次重复中。 7.点击加号“+”展开名为test_patterns的变量。 8.也要展开排列test_patterns(6)的第六次纪录。 判断表明了Signalwindow中的sum不等于Variableswindow中的sum字段。 输入a,b和cin的和应该等于输出sum。 但是在测试向量内有一个错误。 为了改正这个错误,你需要重仿真且修改测试向量的初始值。 9.执行restart–f命令 参数-f使ModelSim不出现确认对话框就重新仿真。 10.在testProcesswindow中选取testbenchprocess更新Variableswindow。 11.再次展开Variableswindow中的test_patte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ModelSim 简明 操作 指南