DE2-115基于NIOSII软核的流水灯实验

一、实验目的

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

二、实验设备

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

三、实验内容

使用 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 进行调试运行。

四、实验原理

2004年,Altera 正式推出了Nios II 系列32位RISC嵌入式处理器。Nios
II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera
FPGA中实现仅需35美分。Altera的Stratix 、Stratix GX、 Stratix II和
Cyclone系列FPGA全面支持Nios II处理器,以后推出的FPGA器件也将支持Nios II。

Nios Ⅱ系列包括3种产品,分别是:
Nios Ⅱ/f(快速)——最高的系统性能,中等FPGA使用量;
NiosⅡ/s(标准)——高性能,低FPGA使用量;
Nios Ⅱ/e(经济)——低性能,最低的FPGA使用量。
这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入。

特别的,Nios Ⅱ系列支持使用专用指令。专用指令是用户增加的硬件模块,它增加了算术逻辑单元(ALU)。用户能为系统中使用的每个NiosⅡ处理器创建多达256个专用指令,这使得设计者能够细致地调整系统硬件以满足性能目标。专用指令逻辑和本身NiosⅡ指令相同,能够从多达两个源寄存器取值,可选择将结果写回目标寄存器。同时,NiosⅡ系列支持60多个外设选项,开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合,而不必支付根本不使用的硅片功能。
——摘自百度百科

本次实验需要在FPGA上通过Nios Ⅱ软核完成流水灯控制,由于控制 LED 灯闪烁的用户程序代码很小,可将其固化在片内 ROM 来执行。变量、堆栈等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如图 1.1 所示。

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

五、实验步骤

5.1 硬件部分设计

5.1.1 创建项目

具体可见博主之前的博客,不再赘述。

5.2.2 Qsys系统设计

1、点击 Tools 下拉菜单下的 Platform Designer 工具,启动 Platform Designer 后,点击 File-save,在文件名中填写为kernel,具体如下图所示:
在这里插入图片描述
在这里插入图片描述

2、鼠标放在 clk_0 处点击右键 Edit 或是双击 clk_0 元件,对 Clock 进行时钟设置
在这里插入图片描述
3、添加 CPU 和外围器件。从 PD 的元件池中选择以下元件加入到当前设计的系统中:Nios II 32-bit CPU、jtag uart、片上存储器、PIO、system ID

添加 Nios II 32-bit CPU
在“component library”标签栏中找到“Nios II Processor”后点击 Add(在查找窗口
输入nios 即可)。
在这里插入图片描述

在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项
在这里插入图片描述

将 nios2_qsys_0 重命名为 cpu,点击”Rename”即可重新命名
在这里插入图片描述

将 cpu 的 clk 和 reste_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连(右键器件—> connection)
在这里插入图片描述
在这里插入图片描述

添加 jtag uart 接口

jtag uart 接口是 Nios II 嵌入式处理器新添加的接口元件,通过内嵌在 Intel FPGA 内部的 JTAG 电路,可以实现在 PC 主机与 Qsys 系统之间进行串行字符流通信。
从下图左侧”Component Library”标签栏中的查找窗口输入 jtag 找到”JTAG UART”,然后点击 Add。
在这里插入图片描述

在 JTAG UART-jtag-uart_0 的设置向导中保持默认选项,点击 Finish
在这里插入图片描述

将 jtag-uart_0 重命名为 jtag-uart
进行 clk、reset 以及 master-slave 喝中断 irq的 连线
在这里插入图片描述

添加片上存储器 On-Chip Memory(RAM)核
从下图左侧”Component Library”标签栏中的查找窗口输入 On Chip 找到”On-Chip
Memory(RAM or ROM)”后点击 Add
在这里插入图片描述

在”Size”栏中的”Total memory size”窗口中输入 40960(即片上内存的大小为 40KB),
其余选项保持默认,点击 Finish
在这里插入图片描述

将 onchip_memory2_0 改名为 onchip_ram
进行时钟、数据端口、指令端口的连接,连接后如下图所示
在这里插入图片描述

添加 PIO 接口
从下图左侧”Component Library”标签栏中的查找窗口输入 pio 找到”PIO”后点击
Add
在这里插入图片描述

确定以下选项:Width 为 8bits,Direction 选择 output,其余选项保持默认,点击
Finish
在这里插入图片描述
将pio_0 改名为 pio_led。并在在 Export 栏处双击,把输出口引出来,并命名为 out_led。
进行时钟、数据端口、指令端口的连接:
在这里插入图片描述

添加片 System ID Peripheral 核
从下图左侧”Component Library”标签栏中的查找窗口输入 sys 找到” System ID
Peripheral”后点击 Add
在这里插入图片描述

保持默认选项,单击 Finish
在这里插入图片描述

将 sysid_qsys_0 改名为 sysid,进行时钟、数据端口的连接:
在这里插入图片描述

5.2.3 后续设计

(1)基地址分配:点击 PD 主界面菜单栏中的”System”下的”Assign Base Addresses”。
如下图所示:
在这里插入图片描述
在这里插入图片描述

(2)分配中断号:在”IRQ”标签栏下点选”Avalon_jtag_slave”和 IRQ 的连接点就会
为”jtag_uart”核添加一个值为 0 的中断号。如下图所示:
在这里插入图片描述

(3)指定 NIos II 的复位和异常地址:从”System Contents”标签栏
双击建立好的 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 系统。如下图所示:
在这里插入图片描述

如果提示是否保存.qsys 文件,请选择保存,点击 Close 后关闭窗口后,再关闭 Platform Designer 主界面。

(6)在原理图(BDF)文件中添加 PD 生成的系统符号,在空白处双击将已生成的 kernel 加入 top_level.bdf 中。如下图所示:
在这里插入图片描述
(6)加入 Quartus II IP File 文件,为了以后编译成功,请务必将对应的 Quartus II IP File (.qip) 加入项目中。步骤如下:
点击 Assignments-Settings,添加 kernel.qip 文件,如下图所示:
在这里插入图片描述
选中该文件后,点击 OK 按钮加入 kernel.qip 文件

在这里插入图片描述

5.2.4 进行逻辑连接和生成管脚

(1)逻辑连接。开发板晶振为 50M,与系统默认一致,因此,这里我们不需要修改。
(2)在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚。如下图所示:
在这里插入图片描述

(3)将管脚”inclk0”改名为 clock,管脚”reset_reset_n”改名为 reset_n,
管脚 out_led_export[7…0]改为 out_led[7…0]。
如下图所示:
在这里插入图片描述

(4)芯片引脚设置

菜单里选择 Assignments-device,然后如下图所示点击 Device pin options
在这里插入图片描述

进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
input tri-stated
在这里插入图片描述

特殊引脚设置,设置为常规引脚
在这里插入图片描述

回到 Quartus II 主界面后编译项目。如下图所示,编译成功
在这里插入图片描述

分配物理引脚
在这里插入图片描述
在这里插入图片描述

完成后关闭 Pin Planner,回到 Quartus Prime 主界面后再次编译项目。至此完成项目的硬件设计。

5.2 软件设计部分

下面使用 Nios II Software Build Tools for Eclipse 来完成当前项目的软件开发。

按照下图所示点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for
Eclipse
在这里插入图片描述
选择默认路径即可

建立新的软件应用,如下图所示:
在这里插入图片描述
点击后出现下图,在”SOPC Information File name”窗口中选择 kernel.sopcinfo
文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU”。在”Project
name”输入”hello_world,”Project template”选择 Hello_World。点击 Finish。
在这里插入图片描述

在这里插入图片描述
系统会自动生成一个打印“hello_world”的软件工程,在 hello_world.c 中我们可以看
到相应代码,如下图:在这里插入图片描述

可将其修改为流水灯程序,在FPGA板子中观察LED灯进行验证
流水灯控制程序代码如下:

#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;
}

右键单击项目名称,在弹出的菜单中选择 Build Project,如下图所示:

在这里插入图片描述

六、运行项目

配置 FPGA
连接 JTAG 到开发板,确定 A.已正确安装驱动。B. 防火墙不会影响到 JTAG
的正常工作。最后给开发板上电。

如下图所示,启动 Quartus Prime Programmer
在这里插入图片描述
如下图所示,添加下载文件。然后点击 Start 开始下载,下载成过后关闭,回到 Eclipse 主机界面。(博主手中暂无板子,所以显示无硬件)
在这里插入图片描述

运行/调试程序
用户将运行程序来观察编译代码的执行。用户可以在目标硬件上或 Nios II 指
令集仿真器(ISS)上运行程序。本节实验只讲述在目标硬件上调试和运行程序。在 C/C++ Projects 视图中右击 hello_led_0 工程文件夹,然后在弹出的快捷菜单中选择 Run As→Nios II Hardware 运行程序,也可以在菜单栏中选择 Run →Run Configurations,如下图所示:
在这里插入图片描述

注意,在目标板上运行程序前,要确保 USB Blaster 下载电缆已经连接好,要保证已经使用硬件系统对 FPGA 完成配置,即完成前面的配置。
配置 Run Configurations,转到”Target Connection”标签栏,点击右侧的 Refresh
Connections 将 USB-Blaster 加入,如下图所示
在这里插入图片描述
(2) Apply 后,Run。下载完成后,可以看见 Console 里打印信息“hello from Nios
II!”(第一段代码实现),如下图所示:
在这里插入图片描述
若修改的LED流水灯程序,则可通过FPGA板子上的LED显示进行验证

七、实验总结

本次实验首次接触了FPGA软核,为FPGA学习打开了一扇新的大门,在复杂逻辑难以实现的情况下可通过软核进行C编程搭配Verilog的硬件编程,以此实现项目所需功能。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值