文章使用的工具及板子类型
工具:Quartus II 13.1
开发板:Cyclone IV E EP4CE115F29C7
Nios II软核实现流水灯
(一)硬件部分设计
- 完成基本的硬件部分设计
请先参考下面链接中的硬件部分设计,完成相应的硬件部分设计
https://blog.youkuaiyun.com/qq_43279579/article/details/115917160 - 添加其他IP核
添加PIO
在搜索框上输入pio,选择PIO(Parallel I/O),点击Add
设置宽度(这里我设置为4,表示4个灯的流水灯),默认为8,其他保持默认设置
- 连接时钟和复位
- 设置led的输出
- 系统分配地址
选择System->Assign Base Address - 使用FPGA资源
选择Generate->Generate,保持默认设置,点击Generate,选择Save - 创建顶层文件
回到Quarters,选择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
保存文件,并编译
这时,可能报错,问题描述:
Node instance “u_qsys” instantiates undefined entity “system_qsys”
解决方法:
手动添加上面创建的系统
选择File->添加对应的文件->Add->Apply->关闭
8. 芯片引脚设置
菜单里选择 Assignments-device,点击 Device pin options
进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
input tri-stated
特殊引脚设置,设置为常规引脚
- 编译完成后,分配管脚,再次编译
(二)、软件设计
-
基本软件设计过程
请参考下面链接中,软件设计的过程,完成文件的创建
https://blog.youkuaiyun.com/qq_43279579/article/details/115933154 -
修改代码文件
打开hello_world中的.c文件
内容如下
#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;
}
- 保存编译
点击保存,选择hello_wold_bsp,右键后,选择Nios II中的Generate BSP,编译应用文件,选择hello_world右键后,点击Build Project
(三)下载硬件和软件
-
硬件的下载
-
软件的下载
选择应用工程,右键后,选择Run As中的Nios II Hardware
出现下面问题
点击Refresh Connections解决
选择Apply后,点击Run,就下载完成