Nios-||入门实践

1、实验目的

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

2、实验内容

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

3、实验步骤

建立工程,芯片为
在这里插入图片描述

选择
在这里插入图片描述
修改名字

在这里插入图片描述右键点击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_0 重命名为 jtag-uart。
搜索On Chip,点击添加,设置内存为40960
在这里插入图片描述
在这里插入图片描述
搜索pio,点击添加,Width 为 8bits,Direction 选择 output
在这里插入图片描述
在这里插入图片描述
重命名为pio_led,在 Export 栏处双击,把输出口引出来,并命名为 out_led
在这里插入图片描述
搜索System ID Peripheral,点击添加,
在这里插入图片描述
重命名为sysid。
在这里插入图片描述
端口连接总图如下:
在这里插入图片描述
添加基地址:

在这里插入图片描述
选择Address
指定 NIos II 的复位和异常地址:选中CPU,单击右键,点击edit 进入 Nios II
Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为
”onchip_ram.s1”:
在这里插入图片描述
点击 Qsys 主界面菜单栏中的 ”System” 下的 ”Create Global Reset Network”。完成后会自动连接所有复位端口。
在这里插入图片描述
选择create
生成Qsy系统
在这里插入图片描述

选择HDL
在这里插入图片描述
在原理图文件中添加我们生成的Qsy文件。
在这里插入图片描述
在这里插入图片描述
点击菜单 Project-add/remove files in project,点击右侧浏览按钮找到qip 文件,选择并点击 add 添加。
在这里插入图片描述
在这里插入图片描述

编辑引脚
在这里插入图片描述
点击 Tools,然后点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse。
创建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;
}


在这里插入图片描述
然后build一下,就可以烧录了
然后run一下程序看下结果

在这里插入图片描述

在这里插入图片描述

4、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

一开始建工程那里添加一个文件就行
然后编译,烧录
参考链接
https://blog.csdn.net/zhoushuaiyxlmwan/article/details/130132662?spm=1001.2014.3001.5502
https://blog.csdn.net/cjhz2333/article/details/130187654?spm=1001.2014.3001.5502

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1482581259

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值