• 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

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

  • 相关阅读:
    Java 添加OLE对象到Excel文档
    【51Nod1769】Clarke and math2(数论,组合数学)
    【UOJ#308】【UNR#2】UOJ拯救计划
    【UOJ#390】【UNR#3】百鸽笼(动态规划,容斥)
    【UOJ#389】【UNR#3】白鸽(欧拉回路,费用流)
    【UOJ#388】【UNR#3】配对树(线段树,dsu on tree)
    【UOJ#386】【UNR#3】鸽子固定器(贪心)
    【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)
    【洛谷5439】【XR-2】永恒(树链剖分,线段树)
    【洛谷5437】【XR-2】约定(拉格朗日插值)
  • 原文地址:https://www.cnblogs.com/fangying7/p/3361960.html
Copyright © 2020-2023  润新知