FPGA实验二:基于 NIOSII 软核的流水灯实验

目录

  • 一、实验目的
  • 二、实验设备
  • 三、实验内容
  • 四、实验原理
  • 五、实验步骤
    • 1.硬件部分设计
      • (1)先建立新项目
      • (2)进行 Qsys 系统设计
      • (3)完成 Qsys 设计的后续工作
      • (4)生成 Qsys 系统:点选” Generation HDL”标签栏中 Generate 按
      • (5)(5)在原理图(BDF)文件中添加 PD 生成的系统符号,如图 1.36 在空白处双击将已生成的 kernel
      • (6)加入 Quartus II IP File 文件,为了以后编译成功,请务必将对应的 Quartus II IP
      • (7)进行逻辑连接和生成管脚
      • (8)芯片引脚设置
      • (9)编译工程
      • (10)分配物理针脚
    • 2.软件部分设计
      • (1)打开Nios II Software Build Tools for Eclipse
      • (2)启动 Workspace 选择当前的项目目录,点 OK。
      • (3)创建工程
      • (4)修改程序
      • (5)编译项目
    • 3.运行项目

一、实验目的

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

四、实验原理

控制 LED 灯闪烁的用户程序代码很小,可将其固化在片内 ROM 来执行。变量、堆栈
等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如图 1 所示。
从图 1.1 控制 LED 闪烁的系统框图可知,其它逻辑与 Nios II 系统一样可存在于 FPGA
中。 Nios II 系统可与其它片内逻辑相互作用,取决于整个系统的需要。为了简单起见,本实
验在 FPGA 内不包括其它逻辑。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第1张图片

五、实验步骤

1.硬件部分设计

(1)先建立新项目

步骤与实验一一样

(2)进行 Qsys 系统设计


FPGA实验二:基于 NIOSII 软核的流水灯实验_第2张图片

②启动 Platform Designer 后,点击 File-save,如图 1.7 所示,在文件名中填写为 kernel
后点击 OK,

FPGA实验二:基于 NIOSII 软核的流水灯实验_第3张图片
FPGA实验二:基于 NIOSII 软核的流水灯实验_第4张图片

鼠标放在 clk_0 处点击右键 Edit 或是双击 clk_0 元件,对 Clock 进行时钟设置,设
为为 50M
FPGA实验二:基于 NIOSII 软核的流水灯实验_第5张图片
④添加 CPU 和外围器件。从 PD 的元件池中选择以下元件加入到当前设计的系统中:
Nios II 32-bit CPU、 jtag uart、片上存储器、 PIO、 system ID。

  1. 添加 Nios II 32-bit CPU
    a. 在“component library”标签栏中找到“Nios II Processor”后点击 Add(在查找窗口
    输出 nios 即可)。
    FPGA实验二:基于 NIOSII 软核的流水灯实验_第6张图片
    b. 在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项,
    FPGA实验二:基于 NIOSII 软核的流水灯实验_第7张图片
    c. 在”Caches and Memory Interfaces”标签栏中保持默认设置(Instruction Cache 选择4Kbytes) 。
    FPGA实验二:基于 NIOSII 软核的流水灯实验_第8张图片
    d.点击 Finish 回到 PD 界面。将 nios2_qsys_0 重命名为 cpu,点击”Rename”即可重新命名
    FPGA实验二:基于 NIOSII 软核的流水灯实验_第9张图片

e.将 cpu 的 clk 和 reste_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连
FPGA实验二:基于 NIOSII 软核的流水灯实验_第10张图片
2.添加 jtag uart 接口。 jtag uart 接口是 Nios II 嵌入式处理器新添加的接口元件,通过
内嵌在 Intel FPGA 内部的 JTAG 电路,可以实现在 PC 主机与 Qsys 系统之间进行串行字符
流通信。

a. 从下图左侧”Component Library”标签栏中的查找窗口输入 jtag 找到”JTAG UART ”,
然后点击 Add。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第11张图片
b. 在 JTAG UART-jtag-uart_0 的设置向导中保持默认选项,点击 Finish。
c. 返回” System Contents”标签栏可以看到新加入的” JTAG UART”核。在” Name”
列中将 jtag-uart_0 重命名为 jtag-uart。
d. 进行 clk、 reset 以及 master-slave 的连线,完成后如图 1.15 所示。
e. 进行中断 irq 连线。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第12张图片
FPGA实验二:基于 NIOSII 软核的流水灯实验_第13张图片
3.添加片上存储器 On-Chip Memory(RAM)核

a. 从下图左侧”Component Library”标签栏中的查找窗口输入 On Chip 找到”On-Chip
Memory(RAM or ROM)”后点击 Add

FPGA实验二:基于 NIOSII 软核的流水灯实验_第14张图片
b. 在”Size”栏中的”Total memory size”窗口中输入 40960(即片上内存的大小为 40KB),其余选项保持默认,点击 Finish。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第15张图片
c. 返回” System Contents”标签栏可以看到新加入的” On-Chip Memory”核。在” Name”
列中将 onchip_memory2_0 改名为 onchip_ram。
d. 进行时钟、数据端口、指令端口的连接,连接后如下图所示
FPGA实验二:基于 NIOSII 软核的流水灯实验_第16张图片
4.添加 PIO 接口
a. 从下图左侧”Component Library”标签栏中的查找窗口输入 pio 找到”PIO”后点击Add。
b. 确定以下选项: Width 为 8bits, Direction 选择 output,其余选项保持默认,点击Finish。
c. 返回” System Contents”标签栏可以看到新加入的” PIO”核。在” Name”列中将pio_0 改名为 pio_led。并在在 Export 栏处双击,把输出口引出来,并命名为 out_led。
d. 进行时钟、数据端口、指令端口的连接,连接后如下图所示

FPGA实验二:基于 NIOSII 软核的流水灯实验_第17张图片
5.添加片 System ID Peripheral 核
a. 从下图左侧”Component Library”标签栏中的查找窗口输入 sys 找到” System IDPeripheral”后点击 Add。
b. 保持默认选项,单击 Finish。
c. 返回”System Contents”标签栏可以看到新加入的” System ID Peripheral”核。在”Name”
列中将 sysid_qsys_0 改名为 sysid。
d. 进行时钟、数据端口的连接。如下图所示:
FPGA实验二:基于 NIOSII 软核的流水灯实验_第18张图片

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

①基地址分配:点击 PD 主界面菜单栏中的”System”下的”Assign Base Addresses”。
如下图所示:
FPGA实验二:基于 NIOSII 软核的流水灯实验_第19张图片
完成后” Base”栏将出现不会重复的具体的地址,如下图:FPGA实验二:基于 NIOSII 软核的流水灯实验_第20张图片
②分配中断号:在” IRQ”标签栏下点选” Avalon_jtag_slave”和 IRQ 的连接点就会
为” jtag_uart”核添加一个值为 0 的中断号。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第21张图片
③ 指定 NIos II 的复位和异常地址:从” System Contents”标签栏双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为” onchip_ram.s1”,点击 Finish。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第22张图片
④点击 Qsys 主界面菜单栏中的” System”下的” Create Global Reset Network”。完成后会自动连接所有复位端口FPGA实验二:基于 NIOSII 软核的流水灯实验_第23张图片
⑤最终完成图如下
FPGA实验二:基于 NIOSII 软核的流水灯实验_第24张图片

(4)生成 Qsys 系统:点选” Generation HDL”标签栏中 Generate 按

钮生成 Qsys 系统。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第25张图片
点击 Close 后关闭窗口后,再关闭 Platform Designer 主界面。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第26张图片

(5)(5)在原理图(BDF)文件中添加 PD 生成的系统符号,如图 1.36 在空白处双击将已生成的 kernel

FPGA实验二:基于 NIOSII 软核的流水灯实验_第27张图片

(6)加入 Quartus II IP File 文件,为了以后编译成功,请务必将对应的 Quartus II IP

File (.qip) 加入项目中。步骤如下:
①点击 Assignments-Settings,添加 kernel.qip 文件,选中该文件后,点解 OK 按钮加入 kernel.qip 文件
FPGA实验二:基于 NIOSII 软核的流水灯实验_第28张图片

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

①逻辑连接。开发板晶振为 50M,与系统默认一致,因此,这里我们不需要修改。
②在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚。如
下图所示:
FPGA实验二:基于 NIOSII 软核的流水灯实验_第29张图片
③将管脚” inclk0”改名为 clock,管脚” reset_reset_n”改名为 reset_n,
管脚 out_led_export[7…0]改为 out_led[7…0]。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第30张图片

(8)芯片引脚设置

①菜单里选择 Assignments-device,然后如下图所示点击 Device pin options
FPGA实验二:基于 NIOSII 软核的流水灯实验_第31张图片
②进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
input tri-stated。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第32张图片
③ 特殊引脚设置,设置为常规引脚
FPGA实验二:基于 NIOSII 软核的流水灯实验_第33张图片

(9)编译工程

无错误
FPGA实验二:基于 NIOSII 软核的流水灯实验_第34张图片

(10)分配物理针脚

FPGA实验二:基于 NIOSII 软核的流水灯实验_第35张图片
按照开发板提供的管脚名称分配针脚,下图所示
FPGA实验二:基于 NIOSII 软核的流水灯实验_第36张图片
再次编译后,硬件部分设计完成

2.软件部分设计

(1)打开Nios II Software Build Tools for Eclipse

在这里插入图片描述

(2)启动 Workspace 选择当前的项目目录,点 OK。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第37张图片

(3)创建工程

①建立新的软件应用
FPGA实验二:基于 NIOSII 软核的流水灯实验_第38张图片
②点击后出现下图,在” SOPC Information File name”窗口中选择 kernel.sopcinfo文件,以便将生成硬件配置信息和软件应用关联, CPU 栏会自动选择”CPU”。在” Project name”输入” hello_world,” Project template”选择 Hello_World。点击 Finish。

FPGA实验二:基于 NIOSII 软核的流水灯实验_第39张图片
系统会自动生成一个打印“hello_world”的软件工程,在 hello_world.c 中我们可以看
到相应代码,如下图:
FPGA实验二:基于 NIOSII 软核的流水灯实验_第40张图片

(4)修改程序

将程序修改为

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

(5)编译项目

右键单击项目名称,在弹出的菜单中选择 Build Project,如下图所示。
FPGA实验二:基于 NIOSII 软核的流水灯实验_第41张图片
如图编译完成

FPGA实验二:基于 NIOSII 软核的流水灯实验_第42张图片

3.运行项目

完成中······

你可能感兴趣的:(嵌入式,fpga)