https://v.youku.com/v_show/id_XNTkyNzMxNjEzMg==.html?scene=long&playMode=pugv&sharekey=1dacbf865999035c035cdac1715635142
一、建立ModelSim工程\n1、打开ModelSim软件\n打开ModelSim软件,如下图所示:\n\n\n\n2、建立工程\n在modelsim中建立project,选择File->New->Project,如下图所示:\n\n\n弹出如下界面:\n\n\n在“ Project Name”栏中填写工程名,这里的命名方式,我们建议大家最好根据仿真的文件来进行命名,时间久了,当我们记不得这个仿真工程是用来仿真什么的时候,我们看到这个工程名,就能够知道它是用来做什么的了。这里我们把工程命名为“ runled_tb”,也就是在流水灯模块名“ runled”后面添加“ _tb”。“ Project Location”是工程路径,可以根据需要把工程保存到不同的位置。因为前一步骤更改目录的时候已经做了选择,所以这里保持默认即可。
下面这两部分是用来设置仿真库名称和路径的,这里我们使用默认即可。设置好工程名、工程位置,我们点击【 OK】按钮,弹出如下图所示界面:\n\n\n我们可以从该图的选择窗口中看出,它共有四种操作: Create New File(创建新文件)、Add Existing File(添加已有文件)、 Create Simulation(创建仿真)和 Create New Folder(创建新文件夹)。这里我们先选择“ Add Existing File”(添加已有文件),如下图所示:\n\n此时可以看到,两个文件“ flow_led.v”和“ flow_led_tb.v” 添加至我们的ModelSim仿真工程中,如下图所示。\n\n\n二、编译仿真文件\n编译的方式有两种: Compile Selected(编译所选)和Compile All(编译全部)。编译所选功能需要先选中一个或几个文件,执行该命令可以完成对选中文件的编译;编译全部功能不需要选中文件,该命令是按编译顺序对工程中的所有文件进行编译。我们可以在菜单栏【 Compile】中找到这两个命令,也可以在快捷工具栏或者在工作区中的右键弹出的菜单中找到这两个命令。下面我们单击Compile All(编译全部),如下图所示。\n\n\n编译完成后,结果如下图所示:\n\n\n文件编译后“ Status”列可能会有三个不同状态。除了上图的用“√”表示的通过状态外,还有两个在设计中不希望出现的状态:编译错误(显示红色的“×”)和包含警告的编译通过(对号的后面会出现一个黄色的三角符号)。编译错误即Modelsim无法完成文件的编译工作。通常这种情况是因为被编译文件中包含明显的语法错误, Modelsim会识别出这些语法错误并提示使用者,使用者可根据Modelsim的提示信息进行修改。编译结果中包含警告信息是一种比较特殊的状态,表示被编译的文件没有明显的语法错误,但是可能包含一些影响最终输出结果的因素。这种状态在实际使用中较少出现,这类信息一般在功能仿真的时候不会带来明显的影响,不过可能会在后续的综合和时序仿真中造成无法估计的错误,所以出现这种状态时推荐读者也要根据警告信息修改代码,确保后续使用的安全性。\n\n三、配置仿真环境\n编译完成后,接下来我们就开始配置仿真环境,我们在ModelSim菜单栏中找到【 Simulate】\n→【 Start Simulation…】菜单并点击,弹出如下右图所示页面。\n\n\n从配置仿真功能页面中我们可以看出,该页面中包含6个标签,分别是: Design、 VHDL、Verilog、 Libraries、 SDF和Others。对于这6个标签,我们用的最多的是Design、 Libraries和SDF这三个标签了,下面我们就来简单的介绍一下这3个标签,其余的标签我们一般用不到,这里我们就不再进行介绍了。\n\n首先看一下Design标签,该标签内居中的部分是Modelsim中当前包含的全部库,可展开看到库中包含的设计单元,这些库和单元是为仿真服务的,使用者可以选择需要进行仿真的设计单元开始仿真, 此时被选中的仿真单元的名字就会出现在下方的Design Unit( s)位置。Modelsim支持同时对多个文件进行仿真,可以使用Ctrl和Shift键来选择多个文件,被选中的全部文件名都会出现在Design Unit( s)区域。在Design Unit( s)区域的右侧Resolution选项,这里可以选择仿真的时间精度。在Modelsim进行仿真的时候,有一个最小的时间单位,这个单位是使用者可以指定的,如最小单位是1ns,仿真器在工作的时候按1ns为单位进行仿真,对小于1ns发生的信号变化不予考虑或不予显示。因而这个最小时间单位也就是仿真的时间精度。这个选项一般都是设置在默认状态,这时Modelsim依照仿真设计文件中指定的最小时间刻度来进行仿真,如果设计文件中没有指定,则按1ns来进行仿真。最下方的区域是Optimization区域,可以在仿真开始的时候使能优化。接下来我们来看一下Libraries标签,如下图所示。\n\n\n\n在该标签中,我们可以设置搜索库。 Search Libraries和Search Libraries First的功能基本一致,唯一不同的是Search Libraries First中指定的库会在指定的用户库之前被搜索。现在我们来看一下SDF标签,如下图所示。\n\nSDF是Standard Delay Format(标准延迟格式)的缩写,内部包含了各种延迟信息,也是用于时序仿真的重要文件。 SDF Files区域用来添加SDF文件,可以选择Add按钮进行加,选择Modify按钮进行修改,选择Delete按钮删除添加的文件。\n\n\nSDF Options区域设置SDF文件的warning和error信息。第一个“ Disable SDF warning”是禁用SDF警告,第二个“ Reduce SDF errors to warnings”是把所有的SDF错误信息变成警告信息。区域Multi-Source delay中可以控制多个目标对同一端口的驱动,如果有多个控制信号同时控制同一个端口或互连,且每个信号的延迟值不同,可以使用此选项统一延迟。下拉列表中可供选择的有三个选项: latest、 min和max。 latest选项选择最后的延迟作为统一值, max选项选择所有信号中延迟最大的值作为统一值, min选项选择所有信号中延迟最小的值作为统一值。\n\n至此,这三个标签我们就介绍完了,接下来我们在Design标签页面中选择work库中的flow_led_tb模块,在Optimization一栏中取消勾选(注意一定要取消优化的勾选,否则无法观察信号波形),然后点击【 OK】就可以开始进行功能仿真了,其余标签页面中的配置我们使用默认就可以了,如下图所示。\n\n\n点击【 OK】后弹出下图所示界面\n\n\n鼠标右键单击“u0_flow_led” ,选择“Add Wave” 选项,如下图所示:\n\n\n弹出下图所示界面,可以看到信号已经添加到窗口中。\n\n\n\n运行后的结果如下图所示: