1、基本构成
2、第一步创建一个普通工程取名LEDTEST
3、tools--Qsys,或者下图快捷键
会进入如下界面,双击修改时钟频率为自己的实际频率
4、加入nios II软核
5、给软核添加ROM
6、给软核添加RAM
7、给系统添加ID,如果使用多个系统用来区分用
8、添加IO口
9、设置nios,选定RAM、ROM。之后system--assign base adress
10、连线,设置ROM从0地址开始,上锁,之后system--assign base adress
11、生成。
12、复制2的部分,关闭qsys
13、建立顶层文件如下:
module LEDTEST
(
CLK_50M,
RST_N,
LEDOUT
);
input CLK_50M;
input RST_N;
input LEDOUT;
mysys u0 (
.clk_clk (CLK_50M), // clk.clk
.pio_led_export (RST_N), // pio_led.export
.pio_led_reset_reset_n (LEDOUT) // pio_led_reset.reset_n
);
endmodule
14、将软核加入工程
15、管脚例化,编译
16,tools--nios II ……,打开nios,选择工程文件夹
17、file-new-nios II applicatio and bsp from template,SPOC选择如下
18、hello_world_small.c文件内容替换如下。PIO_LED_BASE为当时PIO模块名字大写加BASE。此名字在"system.h"文件中有
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
int main(void) {
alt_u8 led = 0;
alt_u32 i;
while(1)
{
led = 0;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//点亮LED灯
i = 0;
while(i<500000) //延时功能,非精确延时,数值太小将无法看到灯的闪烁效果
{
i++;
}
led = 1;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//熄灭LED灯
i = 0;
while(i<500000) //延时功能,非精确延时,数值太小将无法看到灯的闪烁效果
{
i++;
} }
return 0;
}
19、右键工程,build project
20、回到quartus,下载sof文件到FPGA
21、回到nios II run-run configureration打开界面,电机nios II hardware打开如下界面
选target connection 如果2没有,点击3直到2出现如下
此时点击1处能看到ID是我们设置的那个
之后点击该界面的apply run,能看到LED闪烁
可能看不到,是因为while内什么也没做,被系统优化掉了,此时我们需要如下操作
右键工程--properities ,如下操作,把优化等级关掉
22、程序固化
右键工程------make targets--build弹出界面
此时看工程多了一个文件如下
此时回到quartus添加我们生成的.qip文件,此界面右键files---
添加此文件到工程
添加完成后,注意文件有三个,名字可能跟以前对不上了,主要是因为不是一次学习的这个内容
全编译quartus工程,之后使用jtag下载FPGA直接能看到闪烁了。不需要再从elipse中下载了。固化使用jtag转成jic、AS直接固化即可。
sof转成jic设置如下
注意事项:
1、注意这个复位是整个nios系统的复位,不能连接到其他地方,要双击导出
2、当重新编译了qsys硬件部分。我们在eclipse里边需要右键BSP工程,之后点nios II ---------generate BSP
3、此文件能看到我们的硬件信息,qsys内容。所以我们程序一开头加入头文件#include "system.h"。
PIO_LED_BASE 4000,因为在qsys我们定义了4000.所以对这个地址写入1、0能改变LED亮灭
4、#include "altera_avalon_pio_regs.h"这里边给出了很多函数。我们的PIO赋值需要用这个里边的函数
#include "alt_types.h",此函数定义数据类型的