失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Nios II】以SOPC开发流程完成流水灯以及串口输出实验

【Nios II】以SOPC开发流程完成流水灯以及串口输出实验

时间:2021-12-09 17:56:20

相关推荐

【Nios II】以SOPC开发流程完成流水灯以及串口输出实验

一、前言

实验内容及步骤

使用 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 内不包括其它逻辑。

二、实验过程记录

2.1 设计硬件

1、新建项目

创建了一个名为helloworld的项目

2、Qsys系统设计

打开Qsys设计界面,点击【File】→【Save】保存文件

点击edit,并时钟设为 50M Hz。

添加 Nios II 32-bit CPU,在搜索框输入nios

右击添加的 Nios II 32-bit CPU 元件,点击【Rename】,重命名为【cpu】

cpu 的 clk 和 reset_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连

同样的方法添加 jtag uart 接口

重命名为【jtag_uart】

进行 clk、reset、avalon_jtag_slave 的连线,以及中断 irq 连线,中断号设为 0。

同样的方法添加片上存储器 On-Chip Memory(RAM)核

配置窗口内,设置内存为 40960(40 KB)

重命名为onchip_ram并连接 clk1、s1、reset1

同样的方法添加 PIO 接口

确定 Width 为 8 bits,Direction 选择 output

重命名为 pio_led并引出管脚:双击 Export 列的 external_connection ,命名为 out_led

同样的方法添加片 System ID Peripheral 核。

重命名为 sysid 再连接 clk、reset、control_slave

整体如下图所示:

3、配置Qsys系统

完成基地址分配

点击【System】→【Assign Base Addresses】

【Base】一列不再出现重复的具体的地址

指定 Nios II 的复位和异常地址。

双击 cpu 配置属性,在【Core Nios II】栏

配置 Reset Vector 和 Exception Vector 为【onchip_ram.s1】

使用 FPGA 资源。

点击【Generate】

如果提示是否保存 .qsys 文件,选择保存。

点击【Generate】,再点击【Save】

generate成功

4、设计原理图

关闭Qsys页面

新建原理图文件

点击元件按钮,搜索刚创建的元件,放置在原理图上

加入 Quartus II IP File 文件。

点击【Assignments】→【Settings】

选择 kernel.qip 文件

点击【Add】

右击 kernel 模块,点击【Generate Pin for Symbol Ports】生成管脚

双击管脚名进行重命名

芯片引脚设置。

点击【Assignments】→【Device】

点击【Device Pin Options】(如图所示)

将未用的引脚设置为【As input tri-stated】

将特殊引脚设置为常规引脚【Use as regular I/O】,最后点击【OK】

此时保存原理图文件

5、配置物理针脚

首先编译原理图文件

点击【Pin Planner】快捷键

如图所示配置物理针脚

2.2 软件设计

点击【Tools】→【Nios II Software Build Tools for Eclipse】

进入eclipse后,新建工程

如图所示

选择 kernel.sopcinfo 文件,再输入工程名,选择 Hello World

打开 hello_world.c 文件,修改为如下代码:

#include <stdio.h>#include "system.h"#include "altera_avalon_pio_regs.h"#include "alt_types.h"const alt_u8led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};int main (void) {int count=0;alt_u8 led;volatile int i;//串口打印printf("Hello world!\n");//流水灯循环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<5000000)i++;}return 0;}

右击工程名,点击【Build Project】编译

编译完成

2.3 运行项目

连接开发板并给开发板上电

启动【Quartus Prime Programmer】

下载完成后,可以看到 Console 里打印信息:Hello World

板子上看到流水灯效果

三、总结

在此次流水灯及串口输出实验中,我掌握了SOPC开发流程,基本掌握 Nios-II 软核的定制方法;掌握 Nios-II 软件的开发流程,软件的基本调试方法。感受到了软硬件结合的开发方式的有利之处。

如果觉得《【Nios II】以SOPC开发流程完成流水灯以及串口输出实验》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。