基于Nios-II的流水灯实验

文章目录

一、实验内容

基于Nios-II的流水灯实验

二、实验原理

控制 LED 灯闪烁的用户程序代码很小,将其固化在片内 ROM 来执行。变量、堆栈等空间使用片内 RAM,不使用任何片外存储器。整个系统的框图如下图 所示。
基于Nios-II的流水灯实验

三、实验步骤

3.1、硬件部分

1、新建一个项目
2、进行Qsys系统设计
Tools→Qsys
在弹出来的窗口中File→save as,将文件命名为kernel并保存
基于Nios-II的流水灯实验
3、右键clk_0,设置时钟值:
基于Nios-II的流水灯实验
4、添加CPU和外围器件
①添加Nios II 32-bit CPU
基于Nios-II的流水灯实验
勾选下图选项其余保持默认设置即可
基于Nios-II的流水灯实验

重命名nios2_qsya_0为cpu,将cpu的clk和reste_n分别与系统时钟clk_0的clk和clk_reset相连。
基于Nios-II的流水灯实验
基于Nios-II的流水灯实验
②添加jtag uart接口
基于Nios-II的流水灯实验
弹出的窗口中保持默认。修改"JTAG UART" 核的名称为jtag-uart并进行clk 、reset、master-slave的连线,以及中断irq连线。
基于Nios-II的流水灯实验

③添加片上存储器On-Chip Memory(RAM)核
基于Nios-II的流水灯实验
修改下图数据,其他保持默认。
基于Nios-II的流水灯实验
重命名"On-Chip Memory"核为onchip_ram。然后进行时钟、数据端口、指令端口的连接。
基于Nios-II的流水灯实验
④添加PIO接口,保持默认选项。

基于Nios-II的流水灯实验
基于Nios-II的流水灯实验
重命名其核为pio_led,并在external_connection行中的Export栏中双击命名为out_led。然后连接时钟、数据端口、指令端口。
基于Nios-II的流水灯实验⑤添加system ID peripheral核,保持默认选项,重命名为sysid,连接时钟、数据端口。
基于Nios-II的流水灯实验
5、完成Qsys设计的后续工作
①寄地址分配:system->assign base addresses
完成后Base栏将出现不会重复的具体地址。
基于Nios-II的流水灯实验
②分配中断号:在IRQ标签栏中点击连接点即可为jtag_uart核添加一个值为0的中断号。
基于Nios-II的流水灯实验
③复位端口:system->create globalresetnetwork,自动复位所有端口,完成最终连线。
基于Nios-II的流水灯实验

④指定NIos II的复位和异常地址:双击cpu 后,第一列往下拉配置Reset vector 和exception vector

基于Nios-II的流水灯实验
6、生成Qsys系统
基于Nios-II的流水灯实验
基于Nios-II的流水灯实验
7、关闭窗口,回到quartus主页面,创建原理图文件,添加生成的kernel文件。

基于Nios-II的流水灯实验
加入kernel.qip 文件:

基于Nios-II的流水灯实验
进行逻辑连接和生成管脚
①逻辑连接:
开发板晶振为50m,与系统默认一样,因此不需要修改。
②在kernel模块中右键选择Generate Pin for Symbol Ports生成管脚
基于Nios-II的流水灯实验
将管脚重命名
基于Nios-II的流水灯实验

8、芯片引脚设置:Assignments->Device
基于Nios-II的流水灯实验
基于Nios-II的流水灯实验
基于Nios-II的流水灯实验
回到主页,进行编译。
基于Nios-II的流水灯实验
分配针脚
基于Nios-II的流水灯实验
回到主页后再次编译。

3.2、软件部分

1、启动Nios II SBT
菜单栏中Tools-> Nios II Software Build Tools for Eclipse,在弹出来的窗口中选择当前工程的目录为工作空间
基于Nios-II的流水灯实验
2、创建工程
基于Nios-II的流水灯实验
在SOPC Information File name窗口中选择 kernel.sopcinfo文件,以便将生成硬件配置信息和软件应用关联

基于Nios-II的流水灯实验
给程序命名
基于Nios-II的流水灯实验
在自动生成的.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;
}

编译:
基于Nios-II的流水灯实验

上一篇:FPGA/IC笔试——联发科


下一篇:28 典型的时序电路模块1