基于 NIOS-II 软核的流水灯

一、实验介绍

(一)实验目的

(1)学习 Quartus Prime 、Platform Designer、Nios II SBT 的基本操作;
(2)初步了解 SOPC 的开发流程,基本掌握 Nios II 软核的定制方法;
(3)掌握 Nios II 软件的开发流程,软件的基本调式方法。

(二)实验内容

使用 FPGA 资源搭建一个简单 Nios II 处理器系统,具体包括:
(1) 在 Quartus Prime 中建立一个工程;
(2) 使用 PD 建立并生成一个简单的基于 Nios II 的硬件系统;
(3) 在 Quartus Prime 工程中编译基于 Nios II 的硬件系统并生成配置文件.sof;
(4) 在 Nios II SBT 中建立对应硬件系统的用户 C/C++工程,编写一简单用户程序,在
Nios II SBT 中编译程序生成可执行文件.elf;
(5) 将配置文件.sof 和可执行文件.elf 都下载到 FPGA 进行调试运行。

(三)实验原理

等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如图 1 所示。
从图 1.1 控制 LED 闪烁的系统框图可知,其它逻辑与 Nios II 系统一样可存在于 FPGA
中。Nios II 系统可与其它片内逻辑相互作用,取决于整个系统的需要。为了简单起见,本实
验在 FPGA 内不包括其它逻辑
在这里插入图片描述

(四)实验器件

硬件:PC 机、DE2-115 FPGA 实验开发平台;
软件:Quartus Prime 18.1、Platform Designer、Nios II SBT

二、硬件设计

(一) 新建一个工程

选择目标芯片:cycloneIVE系列的EP4CE11529C7,这里根据自己板子的芯片型号选择即可
一些 Quartus-II的基本操作请参考:
Quartus II三种方式实现D触发器及时序仿真
https://blog.csdn.net/weixin_56102526/article/details/123732398
在这里插入图片描述

(二) Qsys 系统设计

  1. 点击 Tools 下拉菜单下的 Qsys 工具
    在这里插入图片描述
    2.启动Qsys后,点击File->Save as,命名为kernel,然后保存
    在这里插入图片描述
    3.c. 鼠标放在 clk_0 处点击右键 Edit 或是双击 clk_0 元件,对 Clock 进行时钟设置,设为为 50M
    在这里插入图片描述
    在这里插入图片描述
    4.添加 CPU 和外围器件
    (1)添加Nios II 32-bit CPU
    a.component library标签栏找到Nios II Processor,然后点击add
    在这里插入图片描述
    b.Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项,然后点击finish
    在这里插入图片描述
    c.将 nios2_qsys_0 重命名为 cpu,选择 nios2_qsys_0 ,点击Rename即可重新命名
    在这里插入图片描述
    d.将 cpu 的 clk 和 reste_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连
    在这里插入图片描述

(2)添加 jtag uart 接口。

a. Component Library标签栏中的查找窗口输入jtag找到 JTAG UART ,然后点击 Add

jtag uart 接口是 Nios II 嵌入式处理器新添加的接口元件,通过内嵌在 Intel FPGA 内部的 JTAG电路,可以实现在 PC 主机与 Qsys 系统之间进行串行字符流通信。

在这里插入图片描述

b. 保持默认选项,点击finish
在这里插入图片描述

c.将jtag_uart_0重命名为jtag_uart;
d.进行clk、reset以及master-slave的连线;
在这里插入图片描述
(3) 添加片上存储器 On-Chip Memory(RAM)核
a. 在左侧 Component Library标签栏中的查找窗口输入 On Chip 找到 On-Chip Memory(RAM or ROM) 后点击 Add
在这里插入图片描述
b Size栏中的Total memory size中的窗口输入40960(即片上内存的大小为40KB),其余选项保持默认,点击finish
在这里插入图片描述
c.重命名为onchip_ram
d.进行时钟、数据端口、指令端口的连接;
在这里插入图片描述
(4)添加 PIO 接口
a.在左侧 Component Library标签栏中的查找窗口输入pio 找到 PIO后点击Add
在这里插入图片描述
b.Width为8bits,Direction选择output,其余选项保持默认,点击finish;
在这里插入图片描述
c.重命名为pio_led,并在export栏处双击,将输出口引出来,并命名为out_led;
d.进行时钟、数据端口、指令端口的连接
在这里插入图片描述
(5)添加片 System ID Peripheral 核
a.从下图左侧Component Library标签栏中的查找窗口输入 sys 找到System ID Peripheral后点击 Add
在这里插入图片描述
b.保持默认选项,单击 Finish
在这里插入图片描述
c.返回 System Contents”标签栏可以看到新加入的 System ID Peripheral核。将 sysid_qsys_0 改名为 sysid
d.进行时钟、数据端口的连接
在这里插入图片描述
最终连线图在这里插入图片描述

(三)完成 Qsys 设计的后续工作

1.基地址分配,点击system下的Assign Base Address
在这里插入图片描述
2.
2.分配中断号:在IRQ标签栏下选择Avalon_itag_slave和IRQ的连接点就会jtag_uart核添加一个值为0的中断号
在这里插入图片描述
3.指定 NIos II 的复位和异常地址:从 System Contents 标签栏双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset VectorException Vectoronchip_ram.s1,点击 Finish
在这里插入图片描述
4.点击 Qsys 主界面菜单栏中的 System 下的Create Global Reset Network。完成后会自动连接所有复位端口
在这里插入图片描述
5.生成 Qsys 系统,点选 Generation HDL 标签栏中 Generate 按钮生成 Qsys 系统
在这里插入图片描述
如果提示是否保存.qsys 文件,请选择保存
在这里插入图片描述
在这里插入图片描述
点击 Close 后关闭窗口后,再关闭 Qsys 主界面
6.在 Quartus-II 中新建一个原理图,然后在该原理图(BDF)文件中添加 Qsys 生成的系统符号
在这里插入图片描述
7. 点击 Assignments-Settings,添加 kernel.qip 文件
在这里插入图片描述

(四)进行逻辑连接和生成管脚

在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚,然后将管脚命名如下
在这里插入图片描述

(五)芯片引脚设置

1.菜单里选择 Assignments-device,然后如下图所示点击 Device pin options
在这里插入图片描述
在这里插入图片描述
2. 进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As input tri-stated
在这里插入图片描述

(六)编译工程

在这里插入图片描述
在这里插入图片描述

(七)分配物理针脚

1.查看DE2-115 开发板引脚配置表
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
2.分配引脚
在这里插入图片描述

三、软件设计

(一)用 Eclipse编写流水灯程序

1.在 Quartus-II 界面,点击Tools,然后点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse
在这里插入图片描述

2…启动 Workspace 选择当前的项目目录,点 OK
在这里插入图片描述

3创建工程
(1)建立新的软件应用,File->New
在这里插入图片描述

(2)在 ”SOPC Information File name” 窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU”。在 ”Project name” 输入 ”helloWorld” ,Project template选择 Hello World。
在这里插入图片描述
4.修改程序
将 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 (void) {
	int count=0;
	alt_u8 led;
	volatile int i;
	while (1)
	{
	printf(”Hello world!\n");
		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;
}


5.编译工程
(1)右键单击项目名称,在弹出的菜单中选择 Build Project
在这里插入图片描述
(2)编译完成
在这里插入图片描述

(二)运行流水灯项目

  1. 配置 FPGA
    (1)连接 JTAG 到开发板
    (2) 启动 Quartus Prime Programmer
    在这里插入图片描述

(3)添加下载文件,如图所示
在这里插入图片描述
2.运行/调试程序

(1). 用户将运行程序来观察编译代码的执行,在菜单栏中选择 RunRun Configurations
在这里插入图片描述
(2)配置Run Configurations,转到Target Connection标签栏,点击右侧的Refresh Connection,将USB-Blaster加入
在这里插入图片描述
(3)点击Apply后,点击Run

(三)运行结果

结果如下,按key0会复位
在这里插入图片描述
控制台会同时打印Hello world!
在这里插入图片描述

四、总结

本次实验,我初步掌握 了Nios II 软核的定制方法、通过流水灯的实验基本上掌握 Nios II 软件的开发流程,软件的基本调式方法。

五、参考资料

基于NIOS-II软核流水灯实现

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值