一、实验要求:
设计一个计算机系统:CPU+on_chip_ram+JTAG UART+“hello_world_small”
二、实验内容:
1. 进入quartusII,定义一个新project;
2. 进入sopc builder,建一个新系统,如lx_c:
1)选择一个cpu。其reset vect和exception vect要配置sram后才能确定。
2)配置一个sram。其内容可以初始化或定制。
3)From the System menu, select Auto-Assign Base Addresses.
3. 返回Q2,设计顶层entity:
1)添加lx_c。添加I/O pins。
2)编译。
4. 进入Nios II IDE,定义一个新的c/c++ project。
1)选择“hello_world_small”,指定软件在Q2中刚刚设计的计算机系统上运行。
2)仿真调试:即可进行debug:ISS。
注意:
1. 仅仅设计供仿真调试的系统时,fpga器件可以为auto;无需加PLL(为了使时钟更加稳定);无需“分配管脚”FPGA PIN;无需program和build all!
2. Nios II IDE中应用程序project的System Library Properties的属性很关键,其中设置了应用程序放在哪儿,使用的库,仿真的输出等等。
3. on_chip_memory中有memory init选项,可以定义memory的初始内容。
4. 在软核中要建JTAG UART,如果没有JTAG UART,则仿真时控制台console中不会输出“hello world”。
三、实验步骤
实验环境是Windows8(32位)+Quartus ii 9.0+Nios ii 9.0
1、打开Quartus II软件,选择“File| New Preject Wizard”,新建工程“Hello_world”。点击
Next,选择工程的安装路径,输入工程名,如图所示:
点击Next,输入要添加到工程中的设计文件,默认不添加。如图所示:
最后点击Finish,完成新工程向导。
2、打开“Tools| SOPC Builder…”进入SOPC Builder。(注意:若没有打开工程,“Tools| SOPC Builder…”不可选。)在“Create New system”对话框中为这个Nios II最小系统命名为“nios_small”
(注意该名称不能与工程名重复),默认“Verilog”硬件描述语言,点击“OK”。如图:
1)点击“OK”,“Device Family”栏选择“CycloneII”,“clk”栏为“50”MHz。
2)添加片内RAM。双击左栏“Component Library”下的“Memories and Memory Controllers|
On-chip| On-Chip Memory(RAM or ROM)”。在“On-chip Memory”对话框中选择“RAM”,“Memory-4-Width”为32位,容量大小“Total Memory Size”为“16”Kbyte,CycloneII器件内部的存储器是有限的,因此不能选择太大。如图所示:
3)单击“Finish”完成,右击名称选择“Rename”,改名为“ram_0”。
4)添加NiosII CPU Core。双击左栏“Component Library”下的“Nios II Processor”,Nios II有三种标准:经济型、标准型、全功能型。我们选择经济型,复位向量Reset Vector Memory和异常向量Exception Vector Memory均选择ram_0,两者的偏移量不需要更改。如图所示:
然后默认单击“Next”,最后单击“Finish”完成。右击“cpu_0”可以更改名称,这里使用默认名称。
5 ) 添加串口UART 。双击左栏“Component Library” 下的“Interface Protocols| Serial|UART(RS-232 Serial Port)”,波特率为“115200”,无奇偶校验位,8位数据位,1位停止位。如图所示:
默认单击“Next”,最后单击“Finish”完成,添加到系统中。(注意:软件开发编程时要与这里模块组件名称一致。)最后添加组件完毕,如图所示
6)最小系统nios_small所需组件添加完毕,自动分配基地址和中断。分别点击菜单上的“System|Auto-Assign Base Adresses”和“System| Auto-Assign IRQs”。
7)单击“Next”。若要创建仿真工程文件,选择System Generation下的Simulation。本实验默认不选。单击Generate。(注意:完成后不要关闭SOPC Builder。)完成。
3 、在QuartusII 中, 点击“File” , 新建一个“Block Diagram/Schematic File” 顶层设计文件“hello_world.bdf”。如图所示:
双击空白处,显示Symbol对话框,点击“Project| nios_small”,然后点击“ok”,将SOPC Builder生成的最小系统nios_small添加到顶层设计文件中。如图所示:
4 、管脚分配。需要设置FPGA 没有用到的管脚的状态, 选择Assignments| Device , 弹出Settings-hello_world对话框,单击“Device&Pin Options”弹出该对话框,然后单击Unused Pins,选择“As inputs, tri-stated”,把不用的管脚置三态,否则,FPGA的功耗会比较大,芯片可能有些发烫。
如图所示:
单击Configuration,配置如图所示:
设置Dual-Purpose,如图所示:
点击“OK”,完成设置。
实验箱系统提供了一个完整的FPGA管脚分配文件.qsf。用记事本打开后,只需把该文件中的相应的管脚分配拷贝到hello_world.qsf文件中任意位置即可,勿忘保存文件。同时顶层设计文件中输入和输出管脚的名称也要和提供的.qsf文件中的名称一致,双击输入输出管脚可以更改名称.
分配完管脚后系统如图所示:
5、最后编译系统。点击菜单中图标,编译系统,编译完成后,不要关闭Quartus II。
6、回到“SOPC Builder”界面。单击系统生成界面上的“NiosII IDE”按钮运行NiosII IDE。
7、进入NiosII IDE界面,关闭Welcome。选择“File| Switch Workspce…”,更改工作区为hello_world存放的文件夹。如图所示:
新建工程, 选择“File| New| Project” , 在New Project 对话框中选择“Nios II C/C++Application”, 点击“Next”,左栏中选择“Hello World”模板,工程名默认为“hello_world_0”,
SOPC Builder System选择刚生成的最小系统文件“nios_smallNaNf”,cpu为已定制的“cpu_0”,如图所示:
单击“Next”,对话框中选择“Create a new system library named”,然后单击“Finish”,完成建立工程的过程。
8、系统设置。右击工程名“hello_world_0”,选择“System Libray Properties”,进入系统设置界面。选择“Small C library”,否则应用程序文件太大,“ram_0”空间不够。如图所示,点击“OK”。
9、修改代码,加入学号信息:
10、选择“Project| Build all”进行编译,输出结果:
11、实验结束
四、实验小结
本次实验通过使用 SOPC Builder 定制一个只含“cpu、on_chip_ram、uart”最小 NiosII 系统完成硬件开发。然后使用NiosII IDE 9.0编写应用程序,编译完成软件开发。
在实验中我学习了使用 SOPC Builder 定制最小 NiosII 系统的硬件开发过程,使用 NiosII IDE编写简单应用程序的软件开发过程和用 QuartusII、SOPC Builder、NiosII IDE 三种工具的配合使用的方法,加深了对 QuartusII、SOPC Builder、NiosII IDE 三种工具的了解。由于对环境的不熟悉,各个操作还处于探索阶段,按照要求一步一步做。在做的过程之中遇到很多问题,实验可能有很多不足之处,请大家指正和批评。