目录
一、实验目的
(1)学习 Quartus Prime 、Platform Designer、Nios II SBT 的基本操作;
(2)初步了解 SOPC 的开发流程,基本掌握 Nios II 软核的定制方法;
(3)掌握 Nios II 软件的开发流程,软件的基本调式方法。
二、实验原理
控制 LED 灯闪烁的用户程序代码很小,可将其固化在片内 ROM 来执行。变量、堆栈等空间使用片内 RAM,不使用任何片外存储器。其它逻辑与 Nios II 系统一样可存在于 FPGA中。Nios II 系统可与其它片内逻辑相互作用,取决于整个系统的需要。
三、实验步骤
(一) 硬件部分设计
1).创建项目
2).进行Qsys系统设计
1.点击 Tools 下拉菜单下的 Platform Designer 工具
2.保存命名为kernel
3.双击clk_0,对Clock进行时钟设置,设置为50M
4.添加Nios ll 32-bit CPU
在Nios Core栏中选择Nios II/f选项,其他保持默认选项,然后点击finish
右键选择重命名,重命名为cpu;
将cpu的clk和reste_n分别与系统时钟clk_0的clk和reste_n相连
5.添加itja uart接口
保持默认,点击finish
将jtag-uart_0重命名为jtag-uart;
进行clk、reset以及master-slave的连线;
6.添加片上存储器On-Chip Memory(RAM)核
在Size栏中的Total memory size中的窗口输入40960(即片上内存的大小为40KB),其余选项保持默认,点击finish;
重命名为onchip_ram;
进行时钟、数据端口、指令端口的连接;
7.添加PIO接口
Width为8bits,Direction选择output,其余选项保持默认,点击finish;
重命名为pio_led,并在export栏处双击,将输出口引出来,并命名为out_led;
进行时钟、数据端口、指令端口的连接;
8.添加片System ID Peripheral核
进行时钟、数据端口的连接;
3).完成Qsys设计的后续工作
1.基地址分配:点击system下的Assign Base Address
2.分配中断号:在IRQ标签栏下选择Avalon_itag_slave和IRQ的连接点就会jtag_uart核添加一个值为0的中断号;
3.双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception
Vector 为””onchip_ram.s1”,点击 Finish
4.点击Qsys主界面菜单栏中的system下的Create Global Reset Network
最终完成的连接图
5.生成 Qsys 系统:点选”Generation HDL”标签栏中 Generate 按钮生成 Qsys 系统
6.在原理图(BDF)文件中添加 PD 生成的系统符号
加入 Quartus II IP File 文件
点击 Assignments-Settings,添加 kernel.qip 文件
在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚
将管脚”inclk0”改名为 clock,管脚”reset_reset_n”改名为 reset_n,管脚 out_led_export[7..0]改为 out_led[7..0]。
编译工程
按照开发板提供的管脚名称分配引脚,如图所示,配置完成后再次编译工程
(二) 软件部分设计
1.启动Nios ll SBT
选择Tools-Nios II Software Build Tools for Eclipse,打开Nios II SBT for Eclipse
workplace选额当前目录
2.创建工程
在SOPC Information File name窗口中选择kernel.sopcinfo文件,CPU栏中选择cpu,在Project name输入hello,Project template选择Hello_World
系统会自动生成一个打印hello_world的软件工程,在hello_world.c中修改代码
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
int main()
{
int count=0;
alt_u8 led;
volatile int i;
while(1)
{
if (count==8)
{
count=0;
}else{
count++;
}
led=led_data[count];
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,led);
i=0;
while(i<500000)
i++;
}
return 0;
}
3.编译程序
右键项目名称,选择Build Project,
四、实验结果
1.配置FPGA
启动Nios II->Quartus Prime Programmer
2.运行程序
选择Run->Run Configurations
配置Run Configurations,转到Target Connection标签栏,点击右侧的Refresh Connection,将USB-Blaster加入
运行结果
五、总结
初步了解了 SOPC 的开发流程, Nios II 软件的开发流程,软件的基本调式方法。
参考
基于 NIOS-II 软核的流水灯_nios流水灯_https://blog.csdn.net/weixin_56102526/article/details/124038769