Altera官方推出NIOS已经很久了,个人感觉C+V代码配合会是后面FPGA使用的一个主流,由C来完成一些对时序要求不高,对功能要求偏高的部分,比如运动控制等;由V来配合时序完成高时序要求的需求以及一些底层的驱动供C来调用,这样的设计结构感觉更加合理有效,也更加适合于一些大型工程。但是有一点不好的就是程序可移植性可能有点差,毕竟使用Eclipse编辑环境(我也不确定,反正个人感觉移植起来有些麻烦)。

好了,本文就开始我们的第一个例程,HelloNIOS。软件语言中经典的HelloWorld在这里变成了HelloNIOS,看起来也很不错。

简介

其实,网络上有关于NIOS的教程已经很多了,本文在此只作为我自己的一个学习使用记录。首先,要用NIOS,你肯定得有相匹配的硬件吧,在这里先来介绍下我自己的硬件环境。

  • 硬件:开发板黑金AX301
  • 软件:QuartusII 13.0sp1,NIOS13.0sp1

最关键的因素就是这些了,开发板很普通,买了后觉得资源有些少了,不过一些简单的开发以及使用NIOS那还是足够了,物尽其用,搞起来。

先说下所参考的一些资料,《NIOS的奇幻漂流》和《NIOS那些事儿》,感觉都是很经典的资料,完全可以用作入门。

Quartus工程建立

这里和普通的硬件Quartus工程建立没有什么区别,在这里就不多说,简要提过。

  1. 建立Quartus工程,分配好各部分所在文件夹(这是个人习惯,现在我一般的框架如下图)

    其中ipcore用来存放自创建的官方IP核,tcl用于存放tcl引脚文件,verilog用于存放个人编写的V代码。

  2. 创建对应的PLL,这里是否创建PLL自行决定,因为我们要用到板上资源SDRAM,其需要100MHz的时钟,而我们的输入是50MHz,所以此处需要一个PLL。

  3. 建立完PLL后,我们建立Qsys。Qsys就是之前版本中的SOPC Builder,其主要就是创建一个虚拟SOPC出来。Tools->Qsys可以打开,打开后我们可以看到如下界面。

  4. 依次添加NIOS、SYSID、SDRAM、EPCS、JTAG、添加后进行改名连线。改名方法为选中NAME后按“2”或者“R”即可,我一般会将这几部分的名字全部改为大写。其中可能会有部分Warning或者Error出现,下面对一些需要注意的点进行了说明。

    • 下图为添加所有部件后的示意图
    • 按照一定的规则连线后,可以参考下图形式连线,下方仍然发现了部分如下Error的存在。

    • 这里就需要对NIOS核进行一定的设置,双击打来NIOS核,进行如下的设置。设置完成后就可以看到Error消失了。
    • 当然这时下方还会出现一些有关于地址线错误的Warning或者Error,这是由于很多部件的地址占用空间相同了,这在右侧可以看出,类似于如下截图。
    • 这时可以点击System->Assign Base Address进行地址线的自动分配,这里我有一个习惯就是会把EPCS模块的地址线固定为0x0,从上面连线图也可以看出。
    • 以上完成后要注意我们最后一列的中断IRQ,也要记得将他们连起来。
    • 之后点击上边标签栏中的Generation进行生成,该页面记得将以下部分勾选。
    • 至此,Qsys中的配置部分结束。
  5. 在Quartus顶层中添加PLL和Qsys,参考资料上多用原理图的形式进行连接,我一般是使用代码的方式进行连接,这部分就看个人喜好了。使用代码连接可移植性好些但是没有原理图形式直观。

  6. 然后编译,将SOF下载到FPGA开发板中。至此,Quartus中的所有工作完毕。

NIOS工程建立

这部分按照参考资料说明书来即可,十分简单,简写如下。

    1. 选择一个空间用于存放工程,我一般放于Qsys的目录下
    2. File->New->NIOS II Application and BSP Template
    3. 选中Quartus下的sopcinfo文件,然后命名工程,一路Next就行
    4. 工程生成后,选中左边的文件夹,右键NIOS II->Generate BSP
    5. 生成后,Ctrl+B进行编译
    6. 编译完成后,打开Run-Configuation,进行下载配置,Apply,Run
    7. 最后就可以等待调试框中的结果了
    8. 最后放上成功的结果

[原创]迈出NIOS的第一步,HelloNIOS的更多相关文章

  1. 迈出物联网的第一步,玩儿一下Arduino

    大家知道,现在物联网Internet of Things(IoT) 方兴未艾,各种智能设备层出不穷,手表.手环.甚至运动鞋等可穿戴设备,还有智能家居产品,无时无刻不冲击着我们的思想和眼球.Autode ...

  2. Openstack(企业私有云)万里长征第一步——安装

    一.前言 单位新进了十几台服务器,建了一个高标准的一体化机房,状似刘姥姥进大观园的我,从机房规划到企业私有云搭建一一重头学来,除了机房泥墙其他基本都涉猎到了. 从企业私有云这个名字就能看出这是多么复杂 ...

  3. 创业小记:ALL IN才是迈出创业第一步的关键

    对于创业而言,能卖出这创业第一步的,大多都经过了长期反复的心理拷问与折磨. 因为当你迈出创业的那一步,你可能需要面对的是毫无收入保障的生活,以及后果自负的结局. ALL IN才是迈出创业第一步的关键( ...

  4. C#开发学习人工智能的第一步

    前言 作为一个软件开发者,我们除了要学会复制,黏贴,还要学会调用API和优秀的开源类库. 也许,有人说C#做不了人工智能,如果你相信了,那只能说明你的思想还是狭隘的. 做不了人工智能的不是C#这种语言 ...

  5. 高德携手阿里云发布“LBS云”,账户打通只是第一步

    位置.游戏.视频,是公认的基于云计算的三大移动端应用方向.而今,LBS云有了更多进展,在高价值应用与云平台之间实现了资源打通和融合,高德迈出了实质性的一步. 高德地图副总裁郄建军(左)与阿里云业务总经 ...

  6. Django第一步

    对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步. 1. 准备开发环境 2. 创建一个工程,并运行 3. 开发hello world应用 1. 准备环境 首先应该是安装python和dj ...

  7. java学习第一步,使用IntelliJ IDEA编写自己的第一个java程序

    首先下载java的jdk,然后说一下IDEA的配置 IntelliJ IDEA目前公认的最好的java开发工具,不过一般的学校的教学还是使用eclipse来进行java的开发.所以老师一般只会教你如何 ...

  8. 开发thinkphp的第一步就是给Application目录(不包括其下的文件)777权限, 关闭selinux

    开发thinkphp的时候, 总是会出现各种个样 的奇怪的毛病, 比如: 说什么Application目录不可写, 比如: 说什么 _STORAGE_WRITE_ERROR, 不能生成 Runtime ...

  9. ElasticSearch第一步-环境配置

    ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSearch第四步-查询详解 Elasti ...

随机推荐

  1. C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别

    全局变量.局部变量.静态全局变量.静态局部变量的区别 C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作 ...

  2. 期待许久的事情终于发生-微软收购Xamarin

    刚在VS推送的新闻中看到了醒目的标题:Microsoft to acquire Xamarin and empower more developers to build apps on any dev ...

  3. SQLServer查询所有库表结构信息

    1.查询数据库中的所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.查询某个数据库中所有的表名: SELECT Name FR ...

  4. 2016-08-16: 检测函数是否存在的C++模板

    #include <iostream> struct Hello { ; } }; struct Generic {}; // SFINAE test template <typen ...

  5. EI目录下载地址及保护密码

    EI目录下载地址:http://www.elsevier.com/solutions/engineering-village/content EI工作薄保护密码:AAAAABABAABD

  6. Java开发环境配置

    JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 安装:双击exe文件一直下一步就Ok了. 环境变 ...

  7. java做的比较完善的FTP上传下载文件服务器源码

    Filename: ftp.java Author: leetsing(elove) Create date: 2004-08-30 Use: connect to FTP server,then u ...

  8. 通过DIV+span方式模拟进度条的实现方法

    上上周用FusionCharts做报表时,有个图是进度条的形式,其实在FusionCharts 3.0之后已经支持了(Linear Gauge),可惜现有系统用的还是1.2.3版本的,重新引入新版本有 ...

  9. hbase hmaster故障分析及解决方案:Timedout 300000ms waiting for namespace table to be assigned

    最近生产环境hbase集群出现停掉集群之后hmaster无法启动现象,master日志报异常:Timedout 300000ms waiting for namespace table to be a ...

  10. HPUX 只取syslog.log当前三天的信息

    LOG_DAYS=1todays_date=`date +%m:%d:%Y`current_date=`echo $todays_date | sed 's/://g'`day=`echo $toda ...