文章目录
一、实验目的
(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.建立工程
选择芯片,Cyclone IV E系列的EP4CE11529C7。
2.Qsys系统设计
点击 platform designer
修改名字为kernel,点击保存
右键点击clk_0,选择edit,设置50M。
添加外围器件:
搜索Nios II Processor,点击add
将 nios2_qsys_0 重命名为 cpu
将 cpu 的 clk 和 reste_n 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连
添加 jtag uart 接口
搜索JTAG UART,点击添加,设置保持默认。
jtag-uart_0 重命名为 jtag-uart。
添加RAM核
搜索On Chip,点击添加,设置内存为40960
添加 PIO 接口
搜索pio,点击添加,Width 为 8bits,Direction 选择 output,其余选项保持默认。
重命名为pio_led,在 Export 栏处双击,把输出口引出来,并命名为 out_led。
添加片 System ID Peripheral 核
搜索System ID Peripheral,点击添加,保持默认设置。
重命名为sysid。
端口连接总图如下:
添加基地址:
指定 NIos II 的复位和异常地址:选中CPU,单击右键,点击edit 进入 Nios II
Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为
”onchip_ram.s1”:
点击 Qsys 主界面菜单栏中的 ”System” 下的 ”Create Global Reset Network”。完成后会自动连接所有复位端口。
生成Qsy系统
3.逻辑连接
在原理图文件中添加我们生成的Qsy文件。
点击菜单 Project-add/remove files in project,点击右侧浏览按钮找到如图所示的 qip 文件,选择并点击 add 添加。
菜单里选择 Assignments-device,然后点击 Device and Pin Options,将未用引脚设置为 As input tri-stated
绑定引脚:
进行编译。
4.软件设计
点击 Tools,然后点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse。
创建工程:
按下图进行选择和设置。
代码:
#include "stdio.h"
#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;
}
右键 bsp,选择Nios II,Generate BSP
右键该项目,build project
5.烧录
点击软件工具栏上的按钮 ,则出现下载界面。第一次下载需安装硬件。即在下载界面中点击按钮“hardware setup…”,然后在弹出的对话框中选择“USBblaster”,再点击“ok”,则硬件被安装上。
安装好硬件后,在output_files中添加相应的下载文件。
在菜单栏中选择 Run →Run Configurations
依次点击下图中的refresh,apply,run。
运行结果:
点击按键会复位。
六、Verilog实现流水灯
此处由于工程建立和设置的方法都类似,只给出代码如下:
module waterlight (
input wire clk ,
input wire rst_n ,
output [7:0] led
);
parameter CNT_MAX = 26'd5000_0000;
reg [25:0] cnt_1s;//1s 计数器,计数最大值 5000_0000 - 1
wire flag_1s;//计数器每计满1s,使能一个时钟周期
reg [7:0] led_reg;//输出信号的寄存信号
//1s计数器
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
cnt_1s <= 26'd0;
else if(cnt_1s >= CNT_MAX - 26'd1) //归零条件
cnt_1s <= 26'd0;
else
cnt_1s <= cnt_1s + 26'd1;
end
assign flag_1s = cnt_1s >= CNT_MAX - 26'd1;
//移位实现流水灯
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
led_reg <= 8'b1111_1111;//全灭
else if(flag_1s)
if(led_reg == 8'b1111_1111)
led_reg <= 8'b0000_0001;
else
led_reg <= {
led_reg[6:0],led_reg[7]};//拼接实现循环移位
else
led_reg <= led_reg;
end
assign led = led_reg;
endmodule
此处烧录运行结果与上次相同。
七、总结
本次实验主要是了解并熟悉了Nios-II软核的操作方法,自己动手配置了一遍Qsy文件,主要是对操作进行了熟悉和练习,也对Eclipse的使用方式和其如何连接FPGA开发板有了一些了解。