ModelSim 的脚本仿真流程


引言

ModelSim是我们在设计验证数字电路HDL代码时的常用工具, 硕士生CQ 同学毕业参加工作后, 反馈了来自集成电路工业界人士的宝贵建议, 认为在实验技能培养流程中应当重视脚本化的仿真流程。 工程实验课作为联系工业界和教育界的桥梁, 需要关注和重视工业界的流行趋势和意见建议, 由此决定在实验课程中添加本篇实验内容。

特此感谢CQ同学和微电子所的各位同仁, 祝愿CQ同学在工作中持续进步,取得更大的成绩。

关于脚本化仿真

当我们学习FPGA开发流程时, 最先接触的仿真流程是使用电路编译工具自带的波形仿真器。 这种方法的好处是简单直观, 容易快速上手。 但是对于复杂的电路, 会有更多的仿真需求, 比如能够设定复杂时序格式的激励数据, 或者 需要能够进行数据的自动对比分析,以及把仿真结果数据导出到文件系统使用其他的工具分析。

对于上述的复杂情况, 需要使用专门的HDL仿真器,比如 Cadence 的 Verilog-XL, Synopsys 的 VCS,以及 Mentor 的 ModelSim。

以ModelSim为例, 该工具可以支持GUI图形界面的操作, 建立仿真工程, 运行仿真, 这对于 初学者上手使用非常有利。 但是当熟悉了GUI流程之后, 我们仍需要了解基于脚本的ModelSim仿真流程, 这是因为ModelSim工具的脚本化流程:

关于本参考设计

本文提供了一个简单电路的脚本仿真的参考设计。 用于示范如何使用ModelSim命令行的方式来进行仿真。

目录和代码文件

编译过程

切换目录



ModelSim切换目录

编译仿真文件



使用编译命令进行仿真编译

编译命令内容

下图示意了 在Library 面板中, 生成的仿真库,work



编译生成仿真库

执行仿真

接下来, 使用命令 "do sim_run.do" , 执行当前命令下的 “sim_run.do” 脚本 ,启动仿真 由于ModelSim命令行带有补全功能, ModelSim命令行会自动搜索把 “sim”开头的命令都列出来供用户选择, 注意使用补全功能, 不用敲完全部命令, 仅键入“do sim_r” 然后 按下 Tab键, 命令行会自动补全成为 "do sim_run.do", 补全功能在脚本较多时非常使用。 如下图所示:



仿真启动命令

另外, ModelSim 的命令行也支持一些常用的UNIX命令和快捷键,例如

查看 sim_run.do 的脚本内部, 其代码为

仿真启动后, 如下图所示, 出现sim instance面板,以及仿真模块的层次关系和模块的信号名称:



仿真启动界面

在 sim instance面板, 先选择要调试的模块, 在Object面板中,选择要观察的信号,使用右键添加到WAV窗口中。 如下图:



选择信号添加波形

使用命令, "run -all" 运行仿真, 注意,这需要testbench代码配合, 即testbench代码中要有 $stop 系统调用,否则仿真不会停止。 详情请参考附录代码。

仿真运行完成后可以通过波形窗口观察信号仿真的波形结果, 如下图所示:



在波形窗口观察仿真信号结果

迭代调试

获取参考代码

本文提供的参考代码存放于以下位置