基于Nios 软核的流水灯

一、PIO的介绍

1、定义

PIO IP核:Avalon-MM从端口和通过I/O端口提供了一个存储器映射接口

2、用途

用户逻辑或外围器件提供了简单的I/O控制

例如

1)、控制LED灯

2)、获取按键的电平变化信息

3)、控制显示设备

4)、与片外器件通信(SPI,I^2C)

二、Nios ||软核实现流水灯

(一)、硬件部分设计

1、参考链接完成硬件部分设计

基于Nios 的 hello world

2、添加其他IP核

添加PIO

搜索pio、选择PIO进行添加

在这里插入图片描述

设置宽度(设置为4个LED)

在这里插入图片描述

3、连接时钟和复位

在这里插入图片描述

4、设置led的输出

在这里插入图片描述

5、系统分配地址

选择System->Assign Base Address

6、使用FPGA资源

选择Generate->Generate,保持默认设置,保存

7、创建顶层文件(参考上面链接)

在Quarus中选择New->Verilog HDL File

代码内容

module hello_world(
	input clk,
	input reset_n,
	output  [3:0] led
);
//此处的代码可以通过Qsys中的Generate->Generate Example,复制里面的内容,粘贴到此处,进行相应的修改
system_qsys u0 (
        .clk_clk       (clk),       //   clk.clk
        .reset_reset_n (reset_n), // reset.reset_n
        .led_export    (led)     //   led.export
    );

endmodule

8、芯片引脚设置

选择Assignments->device,Device pin options

进行unused pin设置

在这里插入图片描述

特殊引脚设置,设置为常规引脚

在这里插入图片描述

9、编译完成后,分配管脚

在这里插入图片描述

再次编译

(二)软件设计

参考同上链接

修改代码文件为

#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[4]={0x01,0x03,0x07,0x0F};
int main (void) {
 int count=0;
 alt_u8 led;
 volatile int i;
 while (1)
  {
 	 if (count==4)
 	 {
 		 count=0;
 	 }
 	 else
 	 {
 		 count++;
 	 }
 	 led=led_data[count];
 	 IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);
 	 //延时的设置
 	 i = 0;
 	 while (i<5000000)
 		 i++;
   }	
 return 0;
}

保存编译

(三)下载硬件和软件

与上链接相同,有板子了及时更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值