Modelsim是一款优秀的FPGA仿真软件,这里记录一下Modelsim的基本使用。

  一、联合仿真

  联合仿真,即Quartus ii自己调用Modelsim,Modelsim自动出现仿真波形。

  1.Modelsim软件的路径设置,一次设置好,以后就不用重复设置了。打开Quartus ii,点击Tools --- Options --- EDA Tool Optinons,将modelsim的安装路径填写进去。我这用的是QuestaSim,和Modelsim是完全没有区别的。为了防止遗漏,我把下面三个位置都填上:

modesim如何调出控制台_右键

  2.Quartus ii关联Modelsim,一开始建立工程时就可以设置,如果忘记了或者设置错了也可以再次更改。点击Assignments --- Setings --- Eda Tool Setings,将仿真工具选择好即可。(我的是QuastaSim,就填的QuastaSim)

modesim如何调出控制台_回车键_02

  3.仿真的前提是你的模块文件和testbench文件都写好了,那么我们需要把模块文件和testbench相关联。点击Assignments --- Setings --- Eda Tool Setings下的simulation,将Tool name选择好,然后点击Compile testbench,之后点击Test Benches

modesim如何调出控制台_右键_03

  进去后,点击New,进入另一个小页面,然后点击 。。。选择要的testbench文件,再点击Add,并且记得在上面把该testbench名字写上,然后一路ok就行了。

modesim如何调出控制台_modesim如何调出控制台_04

  4.现在,各种设置都完成了,可以开始仿真了。这里记录一个小知识点:前仿真和后仿真。前仿真又称为功能仿真,即综合编译前理想状态下的仿真;后仿真又称为时序仿真,即综合编译后考虑恶劣情况下的仿真,会将一些线路延时等考虑进去,具体考虑了多少因素我还不是很懂,希望以后能学会。那么现在我们点击Quartus ii界面的Tools --- Run Simulation Tool,需要前仿真就点RTL Simulation,需要后仿真就点击Gate Level Simulation,仿真就自动出现了。当然Quartus ii界面也有这两项的小图标,点小图标是一样的。

  5.现在Modelsim已经打开了,并且呈现出了波形,注意一点的是只有鼠标靠近该信号线的边沿,标杆就会吸附在边沿上,对手抖的人很友好。这里对Modelsim的界面简单记录一下:

modesim如何调出控制台_回车键_05

  6.注意一点,如果对代码进行了修改,那么需要关闭Modelsim并且重新点击打开才行。

 

  二、独立仿真

  联合仿真虽然很方便,一点击就自动出波形,但是一共工程模块很多的话还是不太方便,那么就要学会直接使用Modelsim进行仿真。

  1.打开Modelsim,点击File --- New --- Project,出现以下界面,第一行是工程名称,第二行是工作路径,我们按需要填写以下就行。第三行第四行默认即可。完了点击OK

modesim如何调出控制台_路径名_06

  2.这里是添加文件,点击第一排第二个,Add Existing File,将模块文件和testbench都添加进来(可以跨文件夹一个个添加),如果使用了ip核,那么ip核和仿真库文件altera_mf.v也需要添加进去(该文件在Quartus ii安装路径下可找到)

modesim如何调出控制台_回车键_07

  3.添加好了后页面如下所示,文件出现了,但是有个问号,这说明我们需要编译一下,鼠标右键选择Compile All即可。我们发现很快就编译好了,问号变成了 √ 号。这比Quartus ii快多了,那么以后我们写代码需要检查语法错误时,其实可以用Modelsim来检查了,真方便。

modesim如何调出控制台_modesim如何调出控制台_08

  4.之后我们点击Library ---- work --- tb文件,右键选择Simulation without Optimization

modesim如何调出控制台_路径名_09

  5.接着出现以下界面,我们关注信号就行了。选择好要呈现波形的信号,鼠标右键点击Add wava。

modesim如何调出控制台_右键_10

  6.波形界面出现了,但是没有波形,我们手动点击顶上的按钮即可,上文已经介绍过了。

modesim如何调出控制台_modesim如何调出控制台_11

  7.注意,如果对代码进行了改动,那么需要进行重新编译,并且波形窗口重置一下再跑即可。此外,独立仿真适合于前仿真,需要后仿真的话得添加很多由Quartus ii产生的相关文件,很是麻烦。所以后仿真还是直接用联合仿真方式吧。

 

三、界面调整

1.隐藏信号名的路径,波形窗口中,信号名的默认显示方式是包含路径名的,点击该页面左下角的灰色原点即可隐藏路径名。但这样每次打开都得点,软件不会记忆住。可以点击Tools --- Window preference --- display signal path,数值改写成1,ok。这样每次加载信号时,信号名都不包含路径了。

2.更改界面颜色,点击Tools --- Edit preferences,这里可以修改你的界面颜色。如果想单独改变某个波形的颜色,可以直接选择该信号右键点最后一项,里面也有color的设置。

3.Modelsim上面很多快捷按钮供我们使用,但是它经常跑偏而且太杂了。鼠标停在按钮那,点鼠标右键,将Standard、Compile、Simulate、Zoom保留打钩,其他项都不打钩。这样快捷按钮栏就变得简洁了。留下的这四个快捷按钮基本够我们用了,以后还要用到哪个快捷按钮再鼠标右键打钩就行。

 

四、保存波形

  变好颜色,设置显示格式,定位时间点,终于看到想要的漂亮波形啦!这时按Crtl + S 保存当前状态为wave.do,路径为默认路径。关闭软件,走人!下次想再看到之前的费了半天调好的漂亮波形,只需要这样做:

1.在你刚刚那个工程的文件夹,出现一个vsim.wlf文件和刚刚保存的wave.do文件。我们双击vsim.wlf,Modelsim就打开了,并且定位到了之前的文件夹,也打开了sim区域,但是没有波形。

2.如果你在sim区域选中模块右键点击add wave,那么波形出现了,却不是你之前的那个漂亮波形,所以我不建议这么做。你应该在做完上面第1步后直接在Transcript输入:do wave.do,按Enter回车键。噔噔噔噔,原来的波形回来了!

 

五、脚本自动化仿真

  Modelsim是支持命令的,我们可以用 .do 文件将这些命令先写好然后在Modelsim上调用。因为我的编辑器不支持.do的语法,所以这里改用 .tcl文件,它和 .do 的使用是没有任何区别的。

1. 我习惯设置一个test文件夹,里面放着仿真文件 XX_tb.v,然后在这test文件夹里放一个sim文件夹,在此文件夹内新建一个sim.tcl文件,这样后面的工程和乱七八糟的文件都在内部的sim文件夹里。

2. 在sim .tcl文件里写好以下代码,这些代码建议保存或制作成代码片段,以后只需要稍微改一改就能用。



1 # ==========================================================================
 2 # ==   清空软件残留信息
 3 # ==========================================================================
 4 
 5 # 退出之前仿真
 6 quit -sim
 7 
 8 # 清空信息
 9 .main clear
10 
11 # ==========================================================================
12 # ==   建立工程并仿真
13 # ==========================================================================
14 
15 # 建立新的工程库
16 vlib work
17 
18 # 映射逻辑库到物理目录
19 vmap work work
20 
21 # 编译仿真文件
22 vlog ./../*.v
23 
24 # 编译设计文件
25 vlog ./../../rtl/*.v
26 
27 # 无优化simulation                                        *** 请修改文件名 ***
28 vsim -novopt work.fsm_tb
29 
30 # ==========================================================================
31 # ==   状态机名称查看器,如若不用请删除!!!
32 # ==========================================================================
33 
34 # 结构体设置
35 virtual type {
36     {4'b0001 S0}
37     {4'b0010 S1}
38     {4'b0100 S2}
39     {4'b1000 S3}
40 } fsm_type;
41 
42 # 结构体和信号名关联,命名为state_name
43 virtual function {(fsm_type)/fsm_tb/u_fsm/state} state_name
44 
45 # ==========================================================================
46 # ==   加载波形
47 # ==========================================================================
48 
49 # 添加波形,高度30,以unsigned格式显示                        *** 请修改路径名 ***
50 add wave -height 30 -radix unsigned /fsm_tb/u_fsm/*
51 
52 # 跑完
53 run -all



3.打开Modelsim,点击 Files --- Change Directory ,找到刚刚那个 tcl 文件所在的文件夹。

4.在Transcript窗口输入 do sim.tcl,敲击Enter回车键。现在Modelsim就会自动帮你工作啦!

 

ps: 

1.如果你的文件夹结构设置的和我一样,而且testbench文件命名为:XX_tb.v,里面例化的名称为 u_XX ,那么以后只需要将上述代码的 fsm 以"不匹配全词"方式替换成XX即可,当然手动修改也是很方便的,毕竟只要改2处地方即可。

2.这样操作在Project区域是空白的,那我们改了代码后怎么编译调试呢?在Library里找到模块用鼠标右键选择编译即可,和在Project里编译是一样的效果。然后在波形那restart一下重跑就行了。

 

六、用bat命令直接运行Modelsim

  如果你懒得连Modelsim都不想打开,那可以试试 .bat文件的操作。

1.在 sim.tcl文件边上新建一个txt文件,里面写好下面的的代码然后保存。注意第4行需要和你的 .tcl 文件名称保持一致。



::请按任意键继续...
pause

::打开Modelsim并执行do sim.tcl
vsim -do sim.tcl



2.将刚刚那个 .txt 文件重命名为 .bat 文件

3.打开这个bat文件,敲Enter回车键,OK,电脑自动打开Modelsim自动仿真出波形了!

 

Modelsim的记录就到这了,这个工具很强大,很多功能我还不懂,以后再添加吧。