Nios-II编程入门
一. 实验目标
学习 Quartus 、Platform Designer、Nios-II SBT 的基本操作;初步了解 SOPC 的开发流程,基本掌握 Nios-II 软核的定制方法;掌握 Nios-II 软件的开发流程,软件的基本调试方法。
二、 实验内容
1.在DE2-115开发板上分别用 Verilog和 Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异;
2.分别用Verilog和Nios软件编程, 实现DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑串口助手。
3.分别在DE2-115开发板和树莓派上编写串口通信程序, 实现树莓派串口指令对FPGA板子上的流水灯程序的控制,控制方式自定
三、实验过程
1、新建Quartus项目
- 项目命名为
hello_led
2、进行硬件平台设计
Tools->Platform Designer
3、在新窗口中添加相关外设并连线
- 将时钟频率设置为
50MHz
![image-20240512161009558](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fbxs-1315075022.cos.ap-chengdu.myqcloud.com%2Fimg%2Fimage-20240512161009558.png&pos_id=img-NZNsvzCq-1715524847950%29)
- 添加
Nios II Processor
,设置保持默认即可
- 将
Nios II Processor
重命名为cpu
- 添加
JTAG UART
,设置保持默认,重命名为jtag-uart
- 添加
On-Chip Memory(RAM or ROM)
,将Size
栏中的Total memory size
改为40960
,其余设置保持默认,外设重命名为onchip_ram
- 添加
PIO(Parallel I/O) Intel FPGA IP
,设置保持默认,重命名为pio_led
,并在在 Export 栏处双击,把输出口引出来,并命名为out_led
- 添加
System ID Peripheral
,设置保持默认,重命名为sysid
- 进行连线
![image-20240512165418508](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fbxs-1315075022.cos.ap-chengdu.myqcloud.com%2Fimg%2Fimage-20240512165418508.png&pos_id=img-92s1gDKO-1715524848132%29)
- 设置
cpu
->Vector
->onchip_ram.s1
,若没有这个选项检查一下onchip_ram
的两个s1是否都已连接
- 主界面菜单栏中的
System
下的Create Global Reset Network
完成后会自动连接所有复位端口。
System
下的Assign Base Addresses
Generation HDL
标签栏中Generate
按钮生成Qsys文件,文件命名为kernel
- 完成后关闭Platform Designer窗口
3、Quartus设计
- 新建原理图文件
- 双击空白处,加入生成的bsf文件
Assignments
->Settings
,添加 kernel.qip 文件
4、进行逻辑连接和生成管脚
- 在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚
- 将管脚”inclk0”改名为 clock,管脚”reset_reset_n”改名为 reset_n,管脚 out_led_export[7…0]改为 out_led[7…0]。
- 菜单里选择
Assignment
->device
,然后如下图所示点击 Device pin options
-
编译
-
分配物理针脚
- 全编译
5、软件部分设计
- Tools->Nios II Software Build Tools for Eclipse
![image-20240512221321844](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fbxs-1315075022.cos.ap-chengdu.myqcloud.com%2Fimg%2Fimage-20240512221321844.png&pos_id=img-Fk44jGDG-1715524848345%29)
![image-20240512221456331](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fbxs-1315075022.cos.ap-chengdu.myqcloud.com%2Fimg%2Fimage-20240512221456331.png&pos_id=img-yq8Uv5qa-1715524848545%29)
- 修改程序
#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 (void)
{
int count=0;
alt_u8 led;
volatile int i;
while (1)
{
if (count==7)
{
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;
}
- 编译代码
6、编译下载
连接 JTAG 到开发板,确定已正确安装驱动,防火墙不会影响到 JTAG的正常工作。最后给开发板上电。