一、写在前面
Modesim/Questasim是Mentor公司用来仿真VHDL/Verilog/Systemverilog的EDA工具,因其可以运行在Windows系统下,同时与各类FPGA的开发平台有较好的适配,所以是很多数字IC或FPGA初学者第一次接触到的仿真工具,但是简体中文互联网上对Modesim/Questasim的使用技巧的归类与整理不够详细,也不够准确,因此创作本前缀为【Modesim/Questasim】的系列文章,对此工具的使用技巧进行整理与归纳总结。
当然modesim/Questasim更多的是提供给FPGA/数字IC领域初学者的仿真工具,对于IC设计来说,真正工作环境使用到的更多的是VCS,也希望有志于从事数字IC领域工作的人员尽早地将环境转移到linux下的VCS上去进行熟悉
二、Questasim User Manual章节
2.1 Chapter2讲解Fsm可视化窗口的参数和内容
2.2 Charpter21:讲解Fsm代码风格,覆盖率,多状态转换等内容
三、状态机生成步骤
3.1 找到Fsm List Windows
通常情况下,Fsm List WIndows并不是仿真默认开启的一个选项,因此我们需要手动将其打开
3.2 依次点击View——Fsm list,我们即可打开Fsm List Windows
3.3 默认状态下Fsm List Windows显示如下
此时因为我们没有打开状态机覆盖率收集的选项,因此设计文件的状态机并不可见
3.4 新建工程并添加相关文件
按照Modesim/Questasim的正常步骤进行工程的建立和文件的添加,得到如下所示的图像状态
案例源码和仿真文件来自作者的另一篇文章【数字IC手撕代码】Verilog自动售卖饮料机|题目|原理|设计|仿真,请读者自行下载
3.5 编译与仿真,查看Fsm状态机跳变
3.5.1 Transcirpt控制编译(推荐)
寻找到Transcript窗口
我们可以选择GUI可视化的方式来进行设置,但是这里作者还是推荐使用脚本的方式进行仿真
依次在命令行输入
vlog +cover=f drink_machine_tb.v drink_machine.v vsim -gui -vopt -coverage work.drink_machine_tb
vlog意为编译 +cover=f 意为打开状态机的覆盖率收集 drink_machine_tb.v drink_machine.v是需要仿真的testbench文件和设计文件
vsim意为仿真 -gui 意为可视化仿真(即可以跳出波形窗口的仿真), -coverage意为打开覆盖率收集功能 work.drink_machine_tb为目标仿真对象
3.5.2 Transcript扩展
有关更多Modesim/Questasim的简单仿真命令可参见do文件脚本控制仿真
3.5.3 GUI编译仿真(不推荐)
我们也可以采取GUI的形式来进行仿真,注意这设计文件和仿真文件都要进行设置
在Project窗口右键打开设置
在coverage窗口Enable Finite Statement Coverage
在Simultation窗口Enable optimization
点击Optimization Options并在Coverage窗口Enable Finite Statement Coverage
最后选择需要进行仿真的文件并进行仿真
3.6 查看Fsm list Windows
如果设置正确的话,Fsm List WIndows会出现状态机名称,右键添加即可查看状态机的样子,此外经过一段时间的仿真,我们还可以查看波形经过状态机的次数和经过跳转路径的次数,其他参数和相关内容也可以在Modesim/Questasim中进行设置
四、可识别状态机的代码规范
正常经过如上步骤的设置,我们就可以自动生成状态机的转换图片了,但假如你的设计文件还是没有正确的生成状态机,有可能是你的代码风格没有被Modesim/Questasim识别,这里作者贴上Questasim User Manual的代码风格要求,不做翻译,请读者自行查阅比对。
五、其他Modesim/Questasim使用技巧
如何在仿真窗口查看信号频率
如何设置“tab”键缩进数量
如何去除仿真时的信号前缀
如何设置一个清爽的仿真窗口
如何使用delta cycle来观察相同边沿的先后顺序
如何使用Modesim查看状态机状态跳转
如何用命令行的形式进行仿真及do脚本的使用