FPGA的NIOS-II开发入门(实验)

FPGA的NIOS-II开发入门

本次实验,我将学习 Quartus-II 、Platform Designer、Nios-II SBT 的基本操作;初步了解 SOPC 的开发流程,基本掌握 Nios-II 软核的定制方法;掌握 Nios-II 软件的开发流程,软件的基本调试方法。

并完成以下实验:

  1. 流水灯显示;
  2. 串口循环输出“Hello Nios-II"

首先,点开Tools,打开Qsys (Platform Designer)
在这里插入图片描述
点击File->save,保存名为"Kernel"的文件
在这里插入图片描述
在这里插入图片描述
退出,双击clk_0,将时钟设置为50M(50000000)
在这里插入图片描述
在这里插入图片描述
在左侧工具栏输入Nios,找到 Processor,点击add
在这里插入图片描述
Nios Core 选择f,点击其他属性,均为默认设置,点击Finish.
在这里插入图片描述
然后将添加进的nios2改名为cpu,再将其clk和reset_n与时钟的clk和reset相连接
在这里插入图片描述
添加一个JTAG UART接口,通过工具栏直接搜索可以找到
在这里插入图片描述
保持默认选项,点击完成
在这里插入图片描述
顺便重命名一下,将末尾的“_0”去掉
在这里插入图片描述
clk与reset同样绑好
在这里插入图片描述
找到On-Chip Memory(RAM or ROM)
在这里插入图片描述
将内存空间填写为40960(40KB),点击Finish
在这里插入图片描述
重命名一下
在这里插入图片描述
将时钟和端口进行连接
在这里插入图片描述
找到PIO进行添加
在这里插入图片描述
Width为8,Direction为Output,其他保持默认,完成
在这里插入图片描述
将pio_0改名为pio_led,连线
双击PIO后的Export改为out_led,PIO配置完成
在这里插入图片描述

输入sys找到System ID…
在这里插入图片描述
保持默认,点击完成,出来以后给他改个名
在这里插入图片描述
点击System->Assigh Base Addresses,这样base处就不会有重复的地址了
在这里插入图片描述
点选irq中Avalon_jtag_slave,为其添加一个值为0中断号
在这里插入图片描述
配置基本完成了,双击其中的cpu,下划到图中所指处,配置如图所示
在这里插入图片描述
完成后,点击System->Create Global Reset Network,会自动连接复位端口
在这里插入图片描述
完成后连接如图,检查无错.
在这里插入图片描述
点击Generate->Generate。。检查后点击Generate,询问是否保存时选择保存
在这里插入图片描述
完成
在这里插入图片描述
到这一步基本完成,关闭qsys,回到主界面
在block中找到自己刚才新建的Kernel。
在这里插入图片描述

点击Assighments->settings,找到Files下的添加,将kernel.qip添加进去
在这里插入图片描述

在这里插入图片描述
回到block,右键点击生成管脚
在这里插入图片描述
分别改名为 clk 、out_led[7…0] 、reset_n.
在这里插入图片描述

点击Assighments->Device,点击Device and Pin Options,如图调整
在这里插入图片描述
点击Dual-Purpose Pins ,设置常规引脚
在这里插入图片描述
设置好后编译,编译无错
在这里插入图片描述
点击Pin Planner,如图设置管脚,顺带一提,芯片是EP4CE115F29C7
在这里插入图片描述

管脚设置好后再次编译,编译无错,硬件设计完成
在这里插入图片描述
点击Tools->Build Tools for eclipse
在这里插入图片描述
新建一个如图所示的文件夹
在这里插入图片描述

选择之前创建的Kernel.sopcinfo,名字输入hello_world.
在这里插入图片描述
将里面的hello world修改为如下代码

#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,OxFF};
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;
}

点击编译
在这里插入图片描述

编译完成
在这里插入图片描述


版权声明:本文为CNLWW原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。