NIOS II 流水灯

 

第一个NIOS工程,流水灯!我使用的9.0本版的。

1、建立一个流水灯工程,如下图:

Next选择器件,再Finish。我的开发板上是Cyclone II系列EP2C8,大家按自己的实际选择器件。

2、打开SOPC Builder,配置NIOS硬件,如下图:

CPU配置经济型的就OK了

添加on-chip menory  ROM 改名为progam,RAM改名为data

再添加PIO,4位OUTPUT改名为led,但这样Quartus II RUN时会产生错误,如下图:

在错误上面点击右键help,上面提示:

Project too complex: hierarchy path is too long


CAUSE:The depth of the design hierarchy is too deep for the Quartus II software to process. This could also be due to an undetected recursion.
ACTION:Reduce the depth of the hierarchies. If necessary, modify the design so that it does not contain any recursive logic.

 recursive logic迭代逻辑太多,为什么呢?其实很简单,因为PIO改名为led和工程名led一样,Quartus II无法辨别。所以以后大家注意这一点,工程名一定不要和SOPC PIO的名字相同。

这里我们就改名为led_pio,再进入CPU中,选择Reset Vector和Exception Vection分别为progam和data,如下图:

然后是地址分配和终端分配,先点击Auto-Assign Base Address,再点击Auto-Assign IRQs,如下图:

最后Generate,等一会儿……

3、在Quartus II中建立原理图文件BDF,双击原理图的空白处,选择project里面我们建立SOPC例化图标:

点击OK,放置SOPC在BDF中,选中SOPC点击右键选择,会自动生成引脚,在更改你想要命名的引脚名即可。

这里我们命名为clk,reset和led[3..0] 。

4、锁定引脚,和FPGA的IO对应,建立TCL脚本文件,按自己FPGA开发板的实际情况,我的开发板TCl为

set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"

#未用的IO设为输入三态
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_23 -to clk                               
set_location_assignment PIN_56 -to reset   

set_location_assignment PIN_6 -to led\[0\]
set_location_assignment PIN_5 -to led\[1\]
set_location_assignment PIN_3 -to led\[2\]

set_location_assignment PIN_4 -to led\[3\]

保存TCl文件后,选择Tools/Tcl Scriples

点击RUN,最后Start compilation

5、下载到FPGA中,点击progammer

到这里我们的硬件设计就OK了

6、打开NIOS II IDE软件,新建一个NIOS II C/C++ Application

Select Project Template: Blank Project

Name : led

SOPC Builder System PTF File选择我们建立的SOPC文件

NEXT,Finish……

7、在led上点击右键,NEW一个C语言文件

Source File输入C语言文件名,一定要加".c" ,Finish……

在NIOS 文件led上点击右键,选择System Library Properties

Program memory选择progam后OK!

8、下面我们在led.c里面写软件

#include "system.h"
#include "altera_avalon_pio_regs.h"

void delay(void)
{
    unsigned int i;
    i=100000;
    while(i>0)
    {
        i--;
    }
}

int alt_main(void)
{
    unsigned char led_data;
    unsigned int  led_code;
   
    while(1)
    {
        for(led_data=0;led_data<4;led_data++)
        {
            led_code=0x01<<led_data;
            IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~led_code);
            delay();
        }
    }
    return 0;
}

在NIOS工程led上面点击右键选择Build Project,稍等片刻……

同样在NIOS工程led点击右键Run AS--NIOS II Hardware,流水灯跑起来了……

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值