NIOS ii 流水灯

2022-11-06,

为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程。作为笔记记录,供入门者参考。

1:创建一个Quartus II的工程

next选择器件,然后finish。我的器件是cyclone IV 系列 EP4CE15F18。

2:打开SOPC Builder,配置NIOS ii硬件。

Quartus II 11同时包含了SOPC Builder和Qsys,SOPC Builder是Qsys的低版本,已经被高版本的Quartus II 移除。

添加NIOS II 的CPU,System ID,On-Chip RAM 和 On-Chip ROM (RAM和ROM大小默认即可),位宽为4的输出类型的PIO和timer(timer period 设置为1ms)。然后重新分配地址和中断号,设置CPU的复位和异常向量位置。如下图:

然后保存,编译系统。

3:编辑原理图文件。如下图所示:

4:管脚锁定和程序下载。

使用Tcl脚本文件进行管脚分配:

#------------------GLOBAL--------------------#
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF

#复位引脚
set_location_assignment PIN_M1 -to RESET

#时钟引脚
set_location_assignment PIN_R9 -to CLOCK

#LED对应的引脚
set_location_assignment PIN_J1 -to LED[0]
set_location_assignment PIN_J2 -to LED[1]
set_location_assignment PIN_K1 -to LED[2]
set_location_assignment PIN_K2 -to LED[3]

最后对整个NIOS工程进行编译。然后下载sof文件到FPGA中。

5:创建NIOS II IDE工程(Quartus ii 11版本以上默认安装 NIOS EDS)

finish之后NIOS II EDS生成了led_bsp(IDE下生成led_syslib工程)。

点击NIOS II菜单下边的Edit BSP,对BSP进行编辑,主要是设置代码段的分配选项。

并且将System Clock Timer设置为:timer_ms

添加流水灯的C程序,led.c如下:

/*-----------------------------------------------------------------------
* Include
*---------------------------------------------------------------------*/
#include <unistd.h> #define _LED /*-----------------------------------------------------------------------------
* Peripheral registers structures
*-----------------------------------------------------------------------------*/
typedef struct
{
unsigned long int DATA;
unsigned long int DIRECTION;
unsigned long int INTERRUPT_MASK;
unsigned long int EDGE_CAPTURE; }PIO_STR; /*-----------------------------------------------------------------------------
* Peripheral declaration
*-----------------------------------------------------------------------------*/
#ifdef _LED
#define LED ((PIO_STR *) LED_BASE)
#endif /*_LED*/ /*
* === FUNCTION ========================================================
* Name: main
* Description:
* =======================================================================
*/
int main(void)
{
int i; while(){
for(i=;i<;i++){
LED->DATA = << i;
usleep();
}
} return ;
}

6:编译下载

在Project菜单栏,点击Build All,编译程序……

然后在led工程右键,run as Nios II hardware

可以看到流水灯在板子上跑起来了

NIOS ii 流水灯的相关教程结束。

《NIOS ii 流水灯.doc》

下载本文的Word格式文档,以方便收藏与打印。