NIOSII的Modelsim仿真及硬件下板运行NIOSII的Modelsim仿真,网上给定的可参考而且能跑出结果的不多,大部分都是使用旧版本的QuartusII,这里使用QuartusII13.0版本中的Qsys软件及自带的Modelsim-Altera进行仿真,也通过了DE2(CycloneIIEP2C35F627C6)硬件验证。首先需要注意的4个问题:1、QuartusII版本13.0可以。最初在win64位系统安装的64位版本的QuartusII,在Qsys中添加Simulation后Generate报错,推测是没有32位的链接库。也纠结了很久,后面直接用32位系统,装32位的Quartus就没有了之前的错误。2、在Modelsim仿真中,仿真时间要足够长。最初为了节省时间,只是仿了几us,所有在输出IO口没有数据,以为有错。后面将仿真时间设置为800us,输出IO口成功显示了预期的结果。刚开始的时候就是下板子有实验现象,但是仿真就是不出来结果,后来修改了仿真时间就对了,其实这也是硬件程序运行和Modelsim仿真原理的问题。Modelsim仿真就是模仿硬件指令执行过程,逐步执行,感兴趣的可以看下其仿真原理。3、另外有个工程经验,就是Eclipse好像必须用管理员权限运行,后续设计才不会报错。而且用Eclipse报错,重新在里面新建工程,再次编译,可能错误就没了。4、目前Quartus13.0版本没有找到网上博客给出的,设置JTAG里面的仿真模型,所以“HelloWorld”没有打印出来。这些不影响自己设计的代码执行。网上还靠谱的资料,只是版本太低,有些参数设置就没有了,也不需要了。其中一个是网址:另外一个是黑金动力社区编写的“NIOSII那些事儿—Qsys版”,大家可以在EETOP论坛上下载。下面给出自己详细的设计流程。这里就是建立一个简单的NIOS系统,然后在里面跑一些C程序,并将结果输出到PIO口,用Modelsim对其进行仿真。1、QuartusII中工程创建这里基本参考了黑金里的设计步骤。只是他们做的是在硬件上运行了,这里我们是在Modelsim中仿真。Quartus中建立新的项目(参考黑基总结的过程)(没有添加图片说明的直接参考以上两个资源)设计顶层文件建立bdf顶层文件,后面直接将NIOS系统的组件添加到该顶层文件。进行Qsys系统设计首先,修改时钟名,并将时钟修改为100MHz。添加NiosII核保持默认设置,然后对NiosII核重命名,添加时钟连线。添加On-ChipMemory(RAM)核在“Totalmemorysize”中输入40960,其他保持默认设置;然后对其进行重命名,添加时钟、数据端口、指令端口连线。添加SystemIDPeripheral核保持默认设置,对其重命名,添加时钟、数据端口连接。添加JTAGUART核保持默认设置,对其重命名,添加时钟、数据端口的连接。添加PIO核BasicSettings中位宽选32(根据自己需求),Output,其他保持默认。对其重命名,添加时钟、数据端口链接。完成Qsys设计的后续工作。指定NiosII的服务和异常地址从“SystemContents”标签中双击建立好的NIOS2进入配置界面,配置ResetVectr和ExceptionVector为“onchip_ram.s1”,点击Finish。连接复位信号点击Qsys主界面菜单栏中“System”下的“CreateGlobalResetNetwork”。进行基址分配点击Qsys主界面菜单栏中“System”下的“AssignBaseAddress”。进行中断号的分配在“IRQ”标签下点选“Avalon_jtag_slave”和IRQ的连接点就会为“Jtag_uart”核添加一个值为0的中断信号。以上设置后的结果如下图所示:生成Qsys系统在“Generation”—》“Simulation”选择verilog模型,“Generation”—》“TestbenchSystem”中选择“Stand,BFMsforstandardQsysinterconnect”和verilog模型,“Synthesis”中选择verilog。然后点击Generate。如果报告中无错误就通过了这一步。添加Qsys组件到项目顶层文件回到Quartus顶层bdf文件,在空白处双击将生成的Qsys系统(kernel)加入顶层文件(top_level.bdf)中。然后添加PLL,输入时钟50MHz,输出时钟100MHz,然后生成bdf文件,并添加到顶层文件中。对这两个模块进行连线和输入输出端口命名。将Qsys系统kernel.qsys添加到工程中,如下图所示。设计中,个人将顶层bdf文件转换为了.v文件。在Modelsim仿真中,只是对kernel.qsys进行仿真,所以顶层文件格式应该没有影响。之后点击“StartCompilation”,成功编译即可。如果按照上面的步骤,一般是没错的。如果下板子的话,点击PinPlanner完成管教分配,然后重新编译。2、Eclipse中工程创建(参考黑金的总结)鼠标右键Eclipse,然后选择管理员权限运行。Workspace选择当前的项目目录,点击OK。建立新的软件应用。在“SOPCInformationFilename”窗口中选择kernel.sopcinfo文件,该文件是Qsys系统生成的。在“Projectname”输入“Hello_world”,在“Projecttemplate”中选择“Hello_world”。这里直接用“Hello_world”的工程,然后直接修改里面的代码。回到Eclipse主界面,完成代码添加。生成BSP右键try6_bsp[kernel],在NiosII中选择GenerateBSP。编译程序(Ctrl+B)编译成功,没有错误,如下图所示:3、Modelsim调用仿真配置运行参数“runconfigurations”并运行Modelsim配置界面如下图所示。双击“NiosIIModelsim”创建工程,输入“Name”,并在Project选择自己的工程。然后点击Run即可调出Modelsim。(“NiosIIModelsim”中包含了很多工程,是之前尝试建立的工程,没有删除。其实只是Modelsim运行时间太短,没结果,以为是错误的。)如果要下板子实测,配置好管脚后,点击“NiosIIHardware”创建工程,然后选择自己的工程,将程序下载即可。(网上的资料很多是下板子的,而且目前没连接板子,自己就进行操作了)成功调用Modelsim后的结果为:把需要观察到信号添加到wave中,然后修改仿真时间,运行即可。最后程序执行结果如下图所示。输入两个数16,207;然后分别计算两个数字的最小公倍数,最大公约数,第一个数的阶乘,第二个数反过来输出。根据方针结果,说明了设计的正确性。