同事写的 简介 Quartus编程软件11.0版本就不能在其内部进行仿真,需要调用仿真工具来完成此任务。本文采用的仿真工具是ModelSim 10.0c,下面将介绍两者联合仿真的基本方法。本人能力有限,只介绍了它们的基本功能,还有很多强大的功能有待日后摸索后再与大家分享,如果文档中有什么问题,请及时指正。 基本调用流程
在Quartus界面下:Assignment>Setting>EDA Tool Settings目录下Simulation>Tool name选择ModelSim。
在Quartus界面下:Processing>Start>Start Test Bench Template Writer 我们点击之后系统会自动在目录:当前工程>simulation>modelsim文件夹内生成一个测试激励文件xxx.vt(Verilog test bench)或者xxx.vht(VHDL test bench),文件名跟你工程中的Top module的名字一样,后缀为.vt或者.vht。
我们加入自己需要的激励以及初始化语句,这里我们还可以修改test bench的模块名字为XXX(名字根据自己的需求定,此处设定为detect_modul_t我们会看到这个名字和后面的设定有联系)。
点击New之后会产生一个New Test Bench Setting的对话框,在这里将Test Bench和你相应的test bench file进行绑定。 我们这里在Test bench name的对话框中输入一个名字'detect_module',我们将看到,在下面的Top level module in test bench对话框中也自动显示'detect_module',注意这个名字应该和你的test bench 中的module name一致,我们之前在第3步的时候将Test Bench的module name已经改成了'detect_module_t',所以我们这里应该把对话框中的名字改成'detect_module_t'。
此处我们小结一下,我们对比看New Test Bench Setting和detect_module.vt文件的内容,我们发现它们是一一对应的,如下图不同形状蓝色框图所示。
当这些设定都完成之后,选择菜单Tool>Run EDA Simulation tool>EDA RTL simulation就可以直接调用ModelSim进行仿真。 1、我们这样调用仿真,由于我们使用的是ModelSim SE版本,每次调用都需要重新编译库,非常不便,在此建议自己修改脚本文件,进行仿真。
在调试阶段,有很多底层信号都是想观测的,所以需要再手动修改一下命令,加入我们需要的底层信号。
调用ModelSim,注意红框内信号名称,我们发现调用的wave1那么对应的就是这两个波形,如果调用的wave2就是L2H_F1和L2H_F2。 同时从上图可以知,我们在保存wave1的时候没有删除除我们选中以外的其他信号,对比上面命令行的内容如下图所示,可以发现add wave *命令实际上就是添加模块本来就应该输出的信号波形(仿真模块的输入和输出信号),我们在注释掉add wave *命令以后执行do wave1.do命令,那么这个wave1.do文件就应该将这些波形也保存起来(实际操作中也可以不保存,因人而异),如果不保存,ModelSim就只会显示红框内我们刚才添加的信号H2L_F1和H2L_F2,大家实际操作一下就可以明白其中的意思。 2、我们可以发现在基本调用ModelSim中自动建立的激励文件只是针对顶层模块的,而我们在实际应用中,对除顶层模块以外的其他模块进行仿真也是有必要的,下面介绍对其他模块仿真的方法。
![]() 选择debounce_module,点击OK, 在Comple test bench选择debounce_module, 点击OK后,进行仿真即可。 3、我们实际添加底层信号的时候,会发现模块内的部分变量找不到,这是由于ModelSim在仿真的时候对模块进行了优化处理导致这些信号被屏蔽了,我们可以手动将这些信号添加出来。 在ModelSim内的Library界面>rtl work下,选择我们添加信号的模块,右键点击Simulation without Optimization,对比两图,有图中将模块内部所有信号都显示出来。 4、在对顶层模块进行仿真时,对其中底层模块代码进行修改,此时希望观察底层模块的仿真结果,可进行如下操作实现。 我们在修改好代码后,在ModelSim内的Library界面>rtl work下,选择我们需要仿真的模块,右键选择Simulation即可。 5、接下来怎样才能一次性的编译好库文件,让软件不再每次编译。
设定好相应的路径。 重新run仿真,就发现不会再编译我们的库文件了。 |
|