NIOS ii 流水灯
为了做项目的前期验证工作,实验室购买了某开发板,下面是基于该板子的实现过程。作为笔记记录,供入门者参考。
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(1){ for(i=0;i<4;i++){ LED->DATA = 1 << i; usleep(100000); } } return 0; }
6:编译下载
在Project菜单栏,点击Build All,编译程序……
然后在led工程右键,run as Nios II hardware
可以看到流水灯在板子上跑起来了