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

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

posted @ 2013-10-10 18:56  fangying  阅读(642)  评论(0编辑  收藏  举报