📄 modelsim se操作指南.txt
字号:
(PROMPT : vlog cache.v memory.v proc.v)
(PROMPT : vcom util.vhd set.vhd top.vhd)
打开Compile HDL Source Files对话框。 逐个编译Verilog文件。
cache.v memeory.v proc.v
4. 依赖设计,VHDL的编译次序是特定的。在这个例子中,top.vhd文件必须最后编译。按照下面的顺序编译文件:
util.vhd set.vhd top.vhd
5. 编译完成,点Done。
运行仿真
1. 选取Load Design开始仿真。Load Design对话框打开,选取top实体点击Load。
(PROMPT : vsim top)
2. View\All,(PROMPT : view *)
3. add list *
add wave *
(Signals MENU: View\List\Signals in Region)
(Signals MENU: View\Wave\Signals in Region)
4. 观察一下工作区的Structure pane。注意设计中两者的层次混合,VHDL级的用一个方框前缀指示,Verilog级的用一个圆形前缀指示。
5. 在Structure pane中点击模块c:cache,它的源代码出现在源文件窗口。
6. 用查找功能定位cache.v文件中cache_set的声明。
Edit\Find。
找到了可以发现,cache_set是cache.v文件内例示了的VHDL实体。
7. 在Structure window,点击行“s0:cache_set(only)”。则Source window显示了cache_set实体的VHDL代码。
8. Quit -force
第五课 Debugging a VHDL simulation
准备仿真
1. 拷贝..\example\下的gates.vhd,adder.vhd,testadder.vhd文件到新建的工作目录,并定位为当前工作目录。
2. 生成一个新库:vlib library_2。
3. 在命令行的方式下敲入以下命令将源文件编译到新库中
vcom –work library_2 gates.vhd adder.vhd testadder.vhd
4. 下一步是映射新库到工作库,可以编辑modelsim.ini文件来生成映射,或者用vmap命令生成一个逻辑库名字来完成。
vmap work library_2
ModelSim为你修改modelsim.ini文件。
5. 选取Design\Load Design,打开Load Design对话框。
6. 确认simulation resolution为缺省;在设计单元中选取名为test_adder_structural的配置;单击Load接受设置。
(PROMPT : vsim –t ns work.test_adder_structural)
7. 打开所有的窗口。(PROMPT:View *)(MENU:View\All)
8. 在Signals window中选区所有信号Edit\Select All然后拖到List window中。
(MENU:View\List\Signals in Region) (PROMPT:add list *)
9. 同样地,把信号加到Wave window中。键入命令:add wave *
(MENU:View\Wave\Signals in Region)(DRAG&Drop)
10. 在主工具条上的运行时间选择器中,改变运行时间设置为1000ns。
(MENU:Option\Simulation\Defaults)
运行调试仿真
1. 选取Run,运行仿真。(PROMPT:run)
主窗口中的一条消息将通报你有一个判断错误。执行下面步骤查找错误。
2. 首先,改变仿真判断选项。选取Option\Simulation。
3. 选取Assertions页面。改变选择为Break on Assertion to Error并点击OK。这将使仿真停在HDL判断语句上。
4. 选取Restart。(MENU:File\Restart) (PROMPT:restart)
确定Restart对话框中所有条目被选,然后点击Restart。
5. 选取Run。可以看到Source window中的箭头指向判断语句。
(MENU:Run\Run 1000 ns) (PROMPT:run)
6. 在Variables window中,你可以看到i=6。这表示仿真停留在测试模式环路的第六次重复中。
7. 点击加号“+”展开名为test_patterns的变量。
8. 也要展开排列test_patterns(6)的第六次纪录。
判断表明了Signal window中的 sum不等于Variables window中的sum字段。输入a,b和cin的和应该等于输出sum。但是在测试向量内有一个错误。为了改正这个错误,你需要重仿真且修改测试向量的初始值。
9. 执行restart –f命令
参数-f使ModelSim不出现确认对话框就重新仿真。
10. 在test Process window中选取 testbench process更新 Variables window。
11. 再次展开Variables window中的test_patterns和test_patterns(6)。点击变量名字,高亮显示.sum纪录,然后选取Edit\Change。
12. 把value中数值的最后四位(1000),替换为0111,并点击Change。(这只是暂时编辑,你必须用文本编辑器永久地改变源代码。)
13. 选取Run。
(MENU:Run\Run 1 us) (PROMPT:run)
这样,仿真运行时就不会报错了。
改变new-line触发
缺省的,对于列出信号的每一次变化一条新线显示在List window中。下面的步骤将改变触发因而每100ns就列出这些值。
1. 在List window中,选取Prop\Display Props。
2. 在Triggers页面完成这些步骤。
•取消选取Trigger On:Signals以禁止在信号上触发
•选取Trigger On:Strobe以开启strobe
•在Strobe Period域键入100
•在First Strobe at域键入70
•单击OK接受设置
3. 最后一步将把信号a,b和sum改为十进制。选取Prop\Signal Props,打开Modify Signal Properties(list)对话框。
4. 选取信号,改变其属性。然后结束ModelSim,quit –force。
第六课 Running a batch-mode simulation
批处理模式仿真必须运行在DOS或UNIX提示符下。
1. 生成一个新目录,设置成当前工作目录。拷贝..\examples\counter.vhd到该目录下。
2. 生成一个新的设计库:vlib work
3. 映射库:vmap work work
4. 编译源文件:vcom counter.vhd
5. 使用宏文件为计数器提供激励。拷贝..\example\stim.do文件到当前工作目录中。
6. 生成批处理文件,内容为:
add list –decimal *
do stim.do
write list counter.lst
7. 执行下面的命令,运行批处理模式仿真:
vsim –do yourfile –wlf saved.wlf counter
•在名为“counter”的设计单元调用vsim仿真器
•通过-wlf这个可选项通知仿真器在名为saved.wlf的日志文件中保存仿真结果
•运行yourfile指定:值以十进制的方式列示出来;执行名为stim.do的激励;并将结果写到名为counter.lst的文件中。缺省的设计名为counter。
8. 浏览仿真结果 vsim –view saved.wlf
9. 打开一些窗口 view signals list wave
10. 在窗口中放置信号 add wave *
add list *
11. 运用Variables windows实验保存的仿真结果。完成了结束仿真:
quit –f
有关批处理和命令行模式更多的信息,请参阅ModelSim User’s Manual。
第七课 Executing Commands at startup
本课与第六课所介绍的工作于相同的目录,也是以命令行方式操作。
1. 这里将用到宏文件(DO)提供启动信息。拷贝..\examples\startup.do到当前工作目录。
2. 拷贝modeltech目录下的modelsim.ini文件到当前工作目录。然后编辑该文件,指定一个在设计导入之后被执行的命令。用notepad打开ini文件,取消下属语句的注释,它位于文件的[vsim]部分:(修改后保存)
Startup=do startup.do
3. 浏览这个DO文件,可以发现它用了一个预定义变量$entity来为不同的设计在启动时作不同的事情。
4. 键入以下指令指定将被仿真的顶级设计单元,开始仿真:vsim counter
注意到没有显示对话框仿真器就导入了设计单元。对于一再地仿真同一个设计单元,这样做是很便捷的。还可以注意到所有的窗口都打开了,这是因为命令view *包括在启动宏里面。
5. 结束ModelSim,执行quit –f命令。
6. 在其他例子中是不需要startup.do文件的,所以用文本编辑器注释掉modelsim.ini文件中的Startup这一行。
第八课 Finding names and values
Finding items by name in tree windows
你可以使用各个窗口(List,Process,Signal,Source,Structure,Variables,and Wave window)中的查找对话框找寻你需要的HDL条目。Edit\Find
Searching for item values in the List and Wave windows
你可以在List and Wave windows中搜寻HDL条目的值。Edit\Search
你能够为Signal Name(s)定位值,搜寻基于以下的选项:
Search Type:Any Transition搜寻选取信号的任何变化
Search Type:Rising Edge搜寻选取信号的上升沿
Search Type:Falling Edge搜寻选取信号的下降沿
Search Type:Search for Signal Value
搜寻Value域中指定的值(符合VHDL or Verilog的数值格式)
Search Type:Search for Expression
搜寻评测一个布尔真值的Expression域中的表达式
表达式可以调用一个以上的信号,但是限制在纪录于List windows上的信号。表达式可以包括常量、变量和Tcl宏。如果没有指定表达式,搜寻将返回一个错误。参阅ModelSim Command Reference以获取更多关于表达式语法的信息。
Search Options:Match Count
你能够搜寻关于值的第n个变化或者是第n个匹配。Match Count指示了搜寻到的变化或匹配的数量。
Search Options:Ignore Glitches
忽略VHDL信号和Verilog网表中的零宽度的脉冲干扰。
搜寻的结果显示在对话框的底部。
第四章 使用中的注意事项
1. 如果打开ModelSim,没有出现Welcom to ModelSim对话框,可以在主窗口点击Help \ Enable Welcome,则以后打开ModelSim就会出现该对话框。
2. 在工作区底部的状态栏里会显示一些有用的信息。
3. 操作哪个目录中的文件一定要定位到该目录,或者是设置为当前工作目录。
4. 不能用UNIX或window命令来生成work子目录,因为里面没有_info文件,只能用菜单或vlib命令。
5. 断点只能设置在可执行的行上,这些行以绿色行号指示
6. 在Basic Verilog Simulation一课里面,编译两个文件的次序是不重要的(不同于被编译器指示生成的源码的从属性)。Verilog -Xl的用户可能再次感到奇怪,他们了解设计单元之间的接口检测或是编译器指示的继承关系上可能存在的问题。ModelSim推迟了这样的检测,直到设计被导入。所以在这里,如果你选择在tcounter.v之前或之后编译counter.v不存在任何问题。
7. 一组Verilog文件可以以任意次序编译,但是在一个混合VHDL/Verilog设计中,Verilog文件必须在VHDL文件值前编译。
8. force命令可以驱动clk,相当于给仿真初始化。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -