Nios-II编程入门

一. 实验目标:

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

二. 实验过程:

1、完成以下实验:

1)  在DE2-115开发板上分别用 Verilog和 Nios软件编程两种方式完成LED流水灯显示,理解两种方式的差异; 

 2) 分别用Verilog和Nios软件编程, 实现DE2-115开发板串口输出“Hello Nios-II”字符到笔记本电脑串口助手。

3)分别在DE2-115开发板和树莓派上编写串口通信程序, 实现树莓派串口指令对FPGA板子上的流水灯程序的控制,控制方式自定。

实验原理

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

一、实验准备

1.1 新建Quartus项目

芯片选择EP4CE115F29C7

1.2 硬件部分设计

(1)点击 Tools 下拉菜单下的 Platform Designer 工具,出现对话框:

(2)启动 Platform Designer 后,点击 File-save,然后在目录中新建一个空文件夹qsys,进入文件夹,在文件名中填写为 kernel后点击 OK。

(3)鼠标放在 clk_0 处点击右键 Edit 或是双击 clk_0 元件,对 Clock 进行时钟设置,设为 50M

1.3 添加 CPU 和外围器件

从 PD 的元件池中选择以下元件加入到当前设计的系统中:Nios II 32-bit CPU、jtag uart、片上存储器、PIO、system ID。

1.3.1 添加 Nios II 32-bit CPU

a. 在“component library”标签栏中找到“Nios II Processor”后点击 Add(在查找窗口输出 nios 即可)。

在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项,如下图所示

c. 在”Caches and Memory Interfaces”标签栏中保持默认设置(Instruction Cache 选择
4Kbytes)。 

d. 在”Advanced Features”标签栏中保持默认设置,如下图所示:

e. 在”MMU and MPU Settings”标签栏中保持默认设置,如下图所示。

f. 在”JTAG Debug Module”标签栏中保持默认设置(注意勾选 Include JTAG Debug),如下图所示。

g. 点击 Finish 回到 PD 界面。
h. 将 nios2_qsys_0 重命名为 cpu,点击”Rename”即可重新命名,操作完成后如下图所示。

i. 将 cpu 的 clk 和 reset 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连,如图所示。

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

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


b. 在 JTAG UART-jtag-uart_0 的设置向导中保持默认选项,点击 Finish。如下图所示

c. 返回”System Contents”标签栏可以看到新加入的”JTAG UART”核。在”Name”列中将 jtag-uart_0 重命名为 jtag-uart。
d. 进行 clk、reset 以及 master-slave 的连线,完成后如下图所示。
e. 进行中断 irq 连线。

1.3.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. 返回”System Contents”标签栏可以看到新加入的”On-Chip Memory”核。在”Name”列中将 onchip_memory2_0 改名为 onchip_ram。

d. 进行时钟、数据端口、指令端口的连接,连接后如下图所示。

1.3.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. 进行时钟、数据端口、指令端口的连接,连接后如下图所示。

1.3.5 添加片 System ID Peripheral 核

a. 从下图左侧”Component Library”标签栏中的查找窗口输入 sys 找到” System ID Peripheral”后点击 Add。


b. 保持默认选项,单击 Finish。如下图所示:

之前在 SOPC Builder 中 System ID 是自动生成的,但是在 PD(Qsys )里已经不再自动生成。在 System ID 中可以输入一个 32 位的十进制整数值,保持 0 当然也可以。
c. 返回”System Contents”标签栏可以看到新加入的” System ID Peripheral”核。在”Name”列中将 sysid_qsys_0 改名为 sysid。
d. 进行时钟、数据端口的连接。如下图所示。

1.3.6 完成 Qsys 设计的后续工作

(1)基地址分配:点击 PD 主界面菜单栏中的”System”下的”Assign Base Addresses”。如下图所示:

 完成后”Base”栏将出现不会重复的具体的地址,如下图:

(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 系统。如下图所示

二、Quartus硬件部分设计

2.1 添加原理图文件

返回到Quartus页面,新建原理图文件:

双击空白处,加入生成的bsf文件

右键生成IO端口,并修改led端口为out_led

3.2 添加Kernel.qip 文件

加入 Quartus II IP File 文件,为了以后编译成功,请务必将对应的 Quartus II IP File (.qip) 加入项目中。步骤如下:

点击 Assignments-Settings,如下图所示。

选中该文件后,点解 OK 按钮加入 kernel.qip 文件
至此 Qsys 组件构建完成。

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

(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]。如下图所示:

3.4 芯片引脚设置

(1)菜单里选择 Assignments-device,然后如下图所示点击 Device pin options。


(2)进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As input tri-stated。

3.5 编译工程

回到 Quartus II 主界面后编译项目。如下图所示,编译成功后,点击 OK 完成。

3.6 分配物理针脚

点击下图所指快捷键进入 Pin Planner 界面,按照开发板提供的管脚名称分配针脚,下图所示:

三、软件部分设计

3.1 启动 Nios II SBT

(1)按照下图所示点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse

3.2 新建工作空间

在当前项目目录创建一个空文件夹Eclipse_ws,点 OK。

3.3 创建工程

(1)建立新的软件应用,如下图所示:

(2)点击后出现下图,在”SOPC Information File name”窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU”。在”Project name”输入”hello_world,”Project template”选择 Hello_World。点击 Finish。

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

3.4 修改程序

在 hello_word.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)
 { 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;
}

3.5 编译工程

右键单击项目名称,在弹出的菜单中选择 Build Project,如下图所示,编译无误即可

四、运行项目

4.1 配置 FPGA

(1) 连接 JTAG 到开发板,确定 A.已正确安装驱动。B. 防火墙不会影响到 JTAG的正常工作。最后给开发板上电。
(2) 如下图所示,启动 Quartus Prime Programmer

4.2 运行/调式程序

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

注意,在目标板上运行程序前,要确保 USB Blaster 下载电缆已经连接好,要保证已经使用硬件系统对 FPGA 完成配置,即完成第(1)步。

4.3 配置 Run Configurations

转到”Target Connection”标签栏,点击右侧的 Refresh Connections 将 USB-Blaster 加入,如下图所示。

4.4 运行项目

Apply 后,Run。下载完成后,可以看见 Console 里打印信息“hello from Nios II!"

运行结果

流水灯运行

输出字符串

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值