上一节完成了FPGA的管脚分配、闲置管脚配置,这一节使用NIOS II开发工具创建工程,并把程序烧录到FPGA内部,实现点灯的效果。
首先,打开NIOS II
点击菜单栏的Tools,在弹出的下拉菜单中,如下点击。
点击:Nios II Software Build Tools for Eclipse,弹出该软件。需要选择该工程所在的文件夹,根据自己创建的路径进行选择。我这里选好了:
点击OK,正式打开NIOS II软件。用过Eclipse软件的都能看出来,这就是基于该软件进行的二次开发。
二、创建NIOS II应用工程
点击左上角的File菜单,如下图1、2、3步骤操作:
会弹出:Nios II Application and BSP from Template窗口。SOPC那里选择之前生成的sopcinfo文件,CPU name那里会自动填充相关信息。
Porject name这里,根据工程起个名字,不要和已有名称冲突。我这里命名为:led_blink。整体效果如下:
然后一路点击next和finish,结束即可。创建完成后,效果如图:
三、编写NIOS II代码
首先点击:led_blink左侧的箭头,展开内容。修改hello_world.c的名字为main.c。
输入如下代码,实现LED闪烁的效果。
#include <stdio.h>
#include <stdlib.h>
#include "unistd.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
int main()
{
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0x0f);
usleep(500000);
IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0x00);
usleep(500000);
}
return 0;
}
有一定编程基础的人基本是能看懂的,这里包含了几个关键的头文件。
unistd.h,里面有usleep函数,延时用的。
system.h,包含了各个外设的定义,这里用到的是:LED_BASE。
altera_avalon_pio_regs.h,主要是和PIO相关的寄存器、函数的相关定义,如赋值、读取操作等。
四、编译工程
上面操作结束,保存,然后鼠标右键点击led_blink,在弹出的选项中点击:Build Project。
开始编译工程。
编译结束,正常情况如下所示,不会报错。
五、程序下载
折腾这么久,终于到了要下载程序的时候。程序下载分两部分,一部分是FPGA的程序,也可以成为硬件架构;另一部分是NIOS II的程序。
5.1 FPGA程序下载
先下载FPGA的程序,回到quartus ii软件界面。点击快捷菜单中的Programmer,弹出下载页面:
下载页面:
给板子上电,连接USB BLASTER。如下图1、2、3步骤所示,点击左上角的Hardware Setup,在弹出的页面中选择USB-Blaster,然后点击close,关闭页面。
接着,点击左上方Start按钮即可完成FPGA部分程序下载。
注意,不能断电。
5.2 NIOS II程序下载
回到NIOS II软件界面,先做一下下载前的配置。
点击菜单Run,在弹出的菜单中点击:Run Configurations。弹出如下对话框,双击:Nios ii Hardware,如下操作。
备注:有时候,需要勾选System ID checks下面的两个勾选框。
最后,如上图,点击Run,程序就已经开始运行了。这时,能看到板子上的LED正常闪烁。
至此,完成了在FPGA芯片中搭建NIOS II软核,通过C语言编程,控制LED闪烁的工作。
但是,现在的程序并没有固化到FPGA芯片内部。也就是说,只要一下电,程序就没了。因为当前的程序全部都是在SDRAM中存储、运行的。SDRAM的特性,下电数据丢失。然而,有个好处,支持Debug调试。因此,可以先在SDRAM中调试通过,然后在固化程序。
程序固化的操作,咱们后面说。我是单片机爱好者-MCU起航,打完收工!
从第一节看到第六节,终于看到你点灯了!
这个东西,前期配置确实比较繁琐,习惯就好了。