一、实验原理
2004年,Altera 正式推出了Nios II 系列32位RISC嵌入式处理器。Nios
II系列软核处理器是Altera的第二代FPGA嵌入式处理器,其性能超过200DMIPS,在Altera
FPGA中实现仅需35美分。Altera的Stratix 、Stratix GX、 Stratix II和
Cyclone系列FPGA全面支持Nios II处理器,以后推出的FPGA器件也将支持Nios II。
Nios Ⅱ系列包括3种产品,分别是:
Nios Ⅱ/f(快速)——最高的系统性能,中等FPGA使用量;
NiosⅡ/s(标准)——高性能,低FPGA使用量;
Nios Ⅱ/e(经济)——低性能,最低的FPGA使用量。
这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入。
本次实验需要在FPGA上通过Nios Ⅱ软核完成流水灯控制,由于控制 LED 灯闪烁的用户程序代码很小,可将其固化在片内 ROM 来执行。变量、堆栈等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如图 1.1 所示。
从图 1.1 控制 LED 闪烁的系统框图可知,其它逻辑与 Nios II 系统一样可存在于 FPGA中。Nios II 系统可与其它片内逻辑相互作用,取决于整个系统的需要。为了简单起见,本实验在 FPGA 内不包括其它逻辑。
二、实验步骤
1.Qsys系统设计
具体参考:https://blog.csdn.net/qq_54347584/article/details/130028655
最终连接图为:
在原理图(BDF)文件中添加 PD 生成的系统符号,在空白处双击将已生成的 kernel 加入 top_level.bdf 中
在 kernel 模块内点击鼠标右键选取 Generate Pin for Symbol Ports 生成管脚
将管脚”inclk0”改名为 clock,管脚”reset_reset_n”改名为 reset_n,
管脚 out_led_export[7…0]改为 out_led[7…0]
芯片引脚设置
进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As
input tri-state
编译工程后设置引脚
2.启动 Nios II SBT
点击 Nios II Software Build Tools for Eclipse 打开 Nios II SBT for Eclipse。
建立新的软件应用
在”SOPC Information File name”窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU”。在”Project name”输入”hello_world,”Project template”选择 Hello_World。点击 Finish。
系统会自动生成一个打印“hello_world”的软件工程,在 hello_world.c 中我们可以看到相应代码。
修改代码:
#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)
{ 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;
}
最后编译建立工程后运行项目
最终的演示结果为:
参考链接:https://blog.csdn.net/wakeup_high/article/details/138731372
https://blog.csdn.net/qq_54347584/article/details/130028655