ModelSim 使用【四】ModelSim手动仿真

余生长醉 提交于 2020-11-10 07:35:32
【注】本文为系列教程,使用同一个仿真代码,关注公众号“数字积木”,对话框回复“ modelsim_prj ”,即可获得。这是系列第四篇。
4.1 新建仿真工程
在开始动手仿真之前,首先,我们需要创建一个文件夹用来放置我们的 ModelSim 仿真工程文件,这里我们就在之前创建的 Quartus 工程目录下的 simulation 文件夹中创建一个manual_modelsim 文件夹。manual_modelsim 文件夹创建好以后,我们还需要将已经编写好的Verilog 仿真文件和 Testbench 仿真文件添加至我们的 manual_modelsim 文件夹中,这里我们就将自动仿真时用到的 Verilog_First.v 文件和 Verilog_First.vt 文件复制到 manual_modelsim文件夹。(Verilog_First.v 文件在我们的 Quartus II 工程目录下,Verilog_First.vt 文件在我们的Quartus II 工程目录下 simulation 文件夹下的 modelsim 文件夹中。)完成以上准备工作之后,我们就可以打开 ModelSim-Altera 10.1d (Quartus II 13.1)软件了,这里我们需要注意的是,我们打开的 ModelSim 软件版本是 ModelSim-Altera Starter Edition 免费版本,如图
打开软件之后,我们在 ModelSim 软件界面的菜单栏中找到【File】→【New】→【Project】菜单并点击打开,弹出的对话框如图
我们从对话框中可以看到,Project Name(工程名)就是用来设置我们的工程名,这里我们将它命名为 Verilog_First,这里的命名方式,我们建议大家最好根据我们仿真的文件来进行命名,时间久了,当我们记不得这个仿真工程是用来仿真什么的时候,我们看到这个工程名,就能够知道它是用来做什么的了。Project Location(工程路径),可以设置工程保存的文件夹,使用者可以根据需要把工程保存到不同的位置。这 里 我 们 将 路 径 设 置 在 了E:/A4_Plus_Verilog/Verilog_First/simulation/manual_modelsim 文件夹中。下面这两部分是用来设置仿真库名称和路径的,这里我们使用默认即可。设置好工程名、工程位置,我们点击【OK】按钮,弹出如图 
我们可以从该图中的选择窗口中看出,它共有四种操作:Create New File(创建新文件)、Add Existing File(添加已有文件)、Create Simulation(创建仿真)和 Create New Folder(创建新文件夹)。这里我们选择 Add Existing File(添加已有文件),如图
在 该 页 面 中 我 们 可 以 看 到 , 我 们 将 我 们 之 前 准 备 的 好 两 个 文 件 Verilog_First.v 和Verilog_First.vt 添加至我们的 ModelSim 仿真工程中。添加好以后,我们点击【OK】按钮,然后我们再关闭【Add items to the Project】对话框,如图
4.2 编译仿真文件
添加完文件以后,接下来我们就需要编译我们的仿真文件。编译的方有两种:Compile Selected(编译所选)和 Compile All(编译全部)。编译所选功能需要先选中一个或几个文件,执行该命令可以完成对选中文件的编译;编译全部功能不需要选中文件,该命令是按编译顺序对工程中的所有文件进行编译。我们可以在菜单栏【Compile】中找到这两个命令,也可以在快捷工具栏或者在工作区中的右键弹出的菜单中找到这两个命令。下面我们单击 Compile All(编译全部),将会出现如图
文件编译后 Status 列可能会有三个不同状态。除了上述的用“√”显示的通过状态,还有两个在设计中不希望出现的状态:编译错误和包含警告的编译通过。编译错误即 Modelsim 无法完成文件的编译工作。通常这种情况是因为被编译文件中包含明显的语法错误,这是 Modelsim会识别出这些语法错误并提示使用者,使用者可根据 Modelsim 的提示信息进行修改。编译错误时会在 Status 列中显示红色的“×”。包含警告的编译通过是一种比较特殊的状态,表示被编译的文件没有明显的语法错误,但是可能包含一些影响最终输出结果的因素。这种状态在实际使用中也较少会出现,该状态在 Status 栏中也会显示“√”,但是在对号的后面会出现一个黄色的三角符号,这类信息一般在功能仿真的时候不会带来明显的影响,不过可能会在后续的综合和时序仿真中造成无法估计的错误,所以出现这种状态时推荐读者也要根据警告信息修改代码,确保后续使用的安全性。
4.3 配置仿真环境
我们编译完成后,接下来我们就开始配置仿真环境,我们在 ModelSim 菜单栏中找到【Simulate】→【Start Simulation...】菜单并点击,弹出如图
从配置仿真功能页面中我们可以看出,该页面中含有 6 个标签,它们分别是:Design、VHDL、Verilog、Libraries、SDF 和 Others。对于这 6 个标签,我们用的最多的就属 Design、Libraries和 SDF,这三个标签了,下面我们就来简单的介绍一下这 3 个标签,其余的标签我们一般用不到,这里我们就不再进行介绍了。首先介绍 Design 标签,该标签内居中的部分是 Modelsim 中包含的全部库,可展开看到库中包含的设计单元,这些库和单元是为了仿真提供选择的,使用者可以选择需要进行仿真的设计单元开始仿真,被选中的仿真单元的名字就会出现在下方的 Design Unit(s)位置。Modelsim支持同时对多个文件进行仿真,可以利用 Ctrl 和 Shift 键来选择多个文件,被选中的全部文件名都会出现在 Design Unit(s)区域。在 Design Unit(s)区域的右侧是 Resolution 选项,这里可以选择仿真的时间刻度。时间刻度的概念类似于长度度量单位的米,在 Modelsim 进行仿真的时候,有一个最小的时间单位,这个单位是使用者可以指定的。如最小单位是 10ns,在仿真器工作的时候都是按 10ns 为单位进行仿真,对 10ns 单位一下发生的信号变化不予考虑或不予显示,当测试文档有类似于#1 a=1'b1;的句子时,Modelsim 就不会考虑句中延迟。这个选项一般都是设置在默认的状态,这时会根据仿真器中指定的最小时间刻度来进行仿真,如果设计文件中没有指定,则按 1ns 来进行仿真。最下方的区域是 Optimization 区域,可以再仿真开始的时候激活优化,由于我们是免费版本,很多功能都受限制,所以我们可以看到这里我们不能使用。第二个介绍的标签是 Libraries 标签,如图
在该页面中,我们可以设置搜索库,可以指定一个库来搜索实例化的 VHDL 设计单元。Search Libraries 和 Search Libraries First 的功能基本一致,唯一不同的是 Search Libraries First 中指定的库会被指定在用户库之前被搜索。第三个介绍的标签是 SDF,其内容如图
SDF 是 Standard Delay Format(标准延迟格式)的缩写,内部包含了各种延迟信息,也是用于时序仿真的重要文件。SDF Files 区域用来添加 SDF 文件,选择 Add 进行添加,选择 Modify进行修改,选择 Delete 删除添加的文件。SDF Options 设置 SDF 文件的 warning 和 error 信息。第一个 Disable SDF warning 是禁用 SDF 警告,第二个 Reduce SDF errors to warnings 是把所有的 SDF 错误信息编程警告信息。Multi-Source delay 可以控制多个目标对同一端口的驱动,如果有多个控制信号同时控制同一个端口或互连,且每个信号的延迟值不同,可以在此选项统一延迟。下拉菜单中可供选择的有三个选项:latest、min 和 max。max 即选择所有信号中延迟最大的值作为统一值,min 即选择所有信号中延迟最小的值作为统一值,latest 则是选择最后的延迟作为统一值。至此,这三个标签我们就介绍完了,接下来我们在 Design 标签页面中选择 work 库中的Verilog_First_vlg_tst 模块,然后点击【OK】就可以开始进行功能仿真了,其余标签页面中的配置我们使用默认就可以了。
4.4 开始功能仿真
在仿真前,Workspace 区域一般只有 Project 和 Library 两个标签。开始仿真后,在Workspace 区域一般会增加 sim 标签、Files 标签和 Memory List 标签。除了 Workspace 区域会增加标签,在 MDI 窗口也会新出现一个 Object 窗口等,在 Workspace 区域中的 sim 标签选中一个设计单元,在 Object 窗口就会出现该单元包含的输入/输出端口,如图
接下来我们在 Object 窗口中选中我们需要仿真的信号,然后点击右键,在弹出的菜单栏中找到【Add Wave】并单击,我们会发现,我们的信号添加到了 Wave 窗口中。这时,我们可以按快捷键 F9,也可以在 ModelSim 的菜单栏中找到【Run】按钮,点击运行就会出现我们想要的波形,这里我们需要注意的是,默认的运行时间一次运行的是 100ps,我们可以在菜单栏中进行修改,也可以直接在控制台中输入命令 run 100ns,直接运行 100ns,如图
到了这里,我们就完成了手动的功能仿真,后面的工作就是分析我们仿真出的波形,由于这部分内容和我们在自动仿真中所讲的内容完全是一样的,所以我们这里就不再进一步重复讲解了。
欢迎关注,更精彩的内容等着你!

本文分享自微信公众号 - 数字积木(ggreat-top)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!