基于Nios ||软核的流水灯
一、PIO的介绍
1、定义
PIO IP核:Avalon-MM从端口和通过I/O端口提供了一个存储器映射接口
2、用途
用户逻辑或外围器件提供了简单的I/O控制
例如
1)、控制LED灯
2)、获取按键的电平变化信息
3)、控制显示设备
4)、与片外器件通信(SPI,I^2C)
二、Nios ||软核实现流水灯
(一)、硬件部分设计
1、参考链接完成硬件部分设计
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;
}
保存编译
(三)下载硬件和软件
与上链接相同,有板子了及时更新