QuartusII调用ModelsimSE进行功能仿真笔记中主要介绍基于工程流程的功能仿真流程示例1:简单的计数器设计并利用ModelsimSE仿真Step1新建一个工程1.在QuartusII菜单栏中通过File下拉菜单NewProjectWizard建立工程。a.第一页:Directory,Name,Top-LevelEntity[page1of5]主要完成以下功能:设置工程路径(Directory)、设置工程名称(NameofProject)、设置工程中顶层实体名称(NameofTop-LevelEntity)。b.第二页:AddFiles[page2of5]主要完成以下工能:向工程中添加已存在的设计文件。c.第三页:Family&DeviceSettings[page3of5]主要实现完成功能:选择自己所使用的FPGA芯片。d.第四页:EDAToolSettings[page4of5]主要完成功能:根据需要选择使用哪种EDA工具DesignEntry/Synthesis:设计输入/综合工具Simulation:仿真工具TimingAnalysis:时序分析工具FormatVerification:格式验证工具Board–Level:板级工具e.第五页:Summary[page5of5]主要完成功能:生成建立工程的总结报告,包含了前面设置的内容。根据报告查看新建工程是否与自己要建立的工程要求一致,如果不一致返回(Back)上一层或多层进行修改,直到满足要求为止。f.Finish:通过工程向导完成新建工程。2.向新建工程中添加设计文件。根据自己使用的HDL语言添加设计文件,Finish完成。本示例中设计文件代码如下所示:完成一个简单的计数器,使计数器计数满128后重新计数。modulecount_128(clk,rst_n,count);//工程模块及端口声明inputclk,rst_n;//输入信号:时钟信号和复位outputreg[7:0]count;//定义count位宽和数据类型always@(posedgeclkornegedgerst_n)if(!rst_n)count=8'd0;//复位置零elseif(count[7])//当count最高位为1,也就是计数到128时,count置0count=1'd0;else//否则继续计数count=count+1'd1;endmodule/*计数模块实现128计数,当coun计数满128重新计数*/3.将设计文件保存在工程目录下并对设计文件进行语法分析。至此,我们利用新建工程向导新建了一个工程并进行语法分析。Step2利用TestBanchTemplateWriter编写Testbanch1.在Processing下拉菜单中选择StartTestBanchTemplateWriter,将自动生成TestBanch模板。2.在QuartusII中打开TestBanch文件,生成的TestBanch文件自动保存在工程目录中的Simulation/Modelsim目录下,以.vt(Verilog语言编写的测试文件)或者.vht(VHDL语言编写的测试文件)格式存在。(在用QuartusII打开过程中很多人反映找不到.vt或者.vht文件,那是因为在文件类型中没有选择*.vt或者没有选择AllFiles导致的文件类型不匹配。)3.打开文件后,编写工程所需的TestBanch文件。删除不需要的代码,我们只需要根据需要在initial块和always块中插入代码,代码如下:`timescale1ns/1ps//时间单位和时间精度声明,时间单位为1ns,精度为1ps//默认时间单位为ps,根据需要改写modulecount_128_vlg_tst();//测试模块regclk;regrst_n;wire[7:0]count;count_128i1(.clk(clk),.count(count),.rst_n(rst_n));initial//初始化beginclk=0;//初始时钟为0rst_n=0;//初始复位信号为低电平#20rst_n=1;//20个时间单位后(20ns),复位信号为高电平#10000$stop;//10000个时间单位后暂停仿真endalways#2clk=~clk;//利用always块生成周期为2*2个单位的时钟信号endmoduleStep3EDATools中的仿真(simulation)设置1.Modelsim调用设置如果是第一次用QuartusII调用ModelsimSE软件进行仿真,则要菜单Tools的下拉菜单Options中进行调用设置。在Options中的EDAToolOptions中,Modelsim一栏中,添加其启动路径。添加确认后,再次调用时不用再进行设置。2.EDATools中的仿真(simulation)设置在菜单Assignments下拉菜单Settings中的EDATools进行仿真设置。EDATools中选择Simulation进行仿真设置,仿真工具会根据工程向导中自动设置为Modelsim不需要改变,在网表设置(EDANetlistWritersettings)中,输出网表格式和输出路径都按默认,不需要改动,但是要注意在时间单位设置中,需要保持和TestBanch代码中的时间单位一致。选中上图中Compiletestbanch并添加需要编译的(TestBanc…)TestBanch页面中点击New添加TestBanch。在NewTestBanchSettings中完成以下工作:填写TestBanch文件的名字(*.vt或者*.vht文件名)填写TestBanch文件中顶层模块名填写TestBanch文件中设计实例模块名浏览找到测试文件并添加(Add)添加完成后会看到你所添加的测试文件名、顶层模块名、实例名以及测试文件路径等信息添加完成确认,至此我们完成了EDATools中的仿真(simulation)设置。Step4EDASimulationTools仿真下面进行最简单的一步了,就是进行Modelsim仿真,点击菜单Tools下拉菜单中的RunEDASimulationTool,运行EDARTLSimulation。Modelsim仿真结果。至此完成了QuartusII调用ModelsimSE仿真软件进行仿真的全过程。示例2.分频器设计及仿真。本示例完成一个2^N的分频器设置,N可以根据需要自己调整。设计代码如下:modulediv(clk,rst_n,div_n);//模块声明及端口定义parameterN=2;//定义常量:计数器位宽inputclk,rst_n;//输入端口outputdiv_n;//输出端口:分频输出reg[N-1:0]count;//计数器always@(posedgeclkornegedgerst_n)if(!rst_n)//复位清零begincount=2'd0;//改变N的大小后,一定要保证赋值位宽一致endelse//循环计数count=count+1'd1;assigndiv_n=count[N-1];//把计数器最高位赋值给分频信号endmoduleTestBanch文件代码:`timescale1ns/1ps//定义时间单位和时间精度modulediv_vlg_tst();//测试模块regclk;regrst_n;wirediv_n;divi1(.clk(clk),.div_n(div_n),.rst_n(rst_n));//模块实例化initial//初始化beginclk=0;rst_n=0;#50rst_n=1;#10000$stop;endalways#10clk=~clk;//生成周期时钟信号endmodule仿真结果:N=1时2(2^1)分频仿真结果N=2时的4(2^2)分频仿真结果:总结:本文提供了一种QuartusII调用Modelsim进行功能仿真的方法,主要分以下几个步骤:Step1利用工程向导新建工程建议利用新建工程向导(NewprojectWizard)建立工程,在建立工程的过程中在EDATools中选择Modelsim作为仿真工具,对于零基础的初学者来说通过工程向导新建工程可以自己对建立工程流程有深入的理解,而且保证了建立的工程完整。Step2利用TestBanchTemplateWriter编写TestbanchQuartusII提供了快捷的Testbanch编写方法,即startTestBanchTemplateWriter,通过这种方法可以快捷的根据你的工程自动生成TestBanch模板,你只需要在模板中进行初始化和提供激励就可以方便快捷的完成TestBanch文件。Step3EDATools中的仿真(simulation)设置EDATools中的仿真(simulation)设置过程主要完成的仿真工具使用的设置,使仿真要求满足设计需要。Step4EDATools仿真完成以上三步过程就可以进行通过QuartusII调用Modelsim进行功能仿真。本文内容可能过于详细,但是本文是针对零基础的初学者,因为我也是零基础的初学者,所以我在学习过程中参考的很多资料不够细致,我相信和我一样的零基础的初学者很多,所以我花了一些时间做了这份资料提供给大家,我相信只要不断积累和总结,终有一天菜鸟也能扶摇直上九万里的!!!