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. 魅蓝note2在ubuntu14.04下mtp模式无法自动mount的解决方法

    是因为新机型没在列表里的原因. 处理方法如下: As far as I know, MTP works fine in Trusty. You can try this: Uncomment #use ...

  2. 如何去除My97 DatePicker控件上右键弹出官网的链接

    http://my97.net/dp/My97DatePicker/calendar.js?最后结尾处: 这个就是官网链接地址了. 然后查找 net,nte,ent,etn,ten,tne最终找到了“ ...

  3. 在 Arch Linux 玩百度 Flash 战曲游戏乱码

    #!/bin/sh #From: http://hi.baidu.com/imtinge/item/3516761d314481542b3e22f0 #Info: CJK Unicode font M ...

  4. 《疯狂Java讲义》(三) ---- JDK&JRE&JVM&CLASSPATH

    JDK: Java SE Development Kit, Java标准版开发包.包括Java编译器,JRE,以及常用的Java类库等. JRE: Java Runtime Environment,运 ...

  5. 洛谷P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...

  6. 最长公共子序列LCS问题

    很经典的一个问题,也是常考的问题

  7. Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。

    一.添加联系人 Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("cont ...

  8. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  9. 4、Python:strip(),split()

    1.strip()函数 strip()是删除'()'里面的字符,当()为空时,默认删除空白符(包括'\n','\r','\t','') (1)s.strip(rm)        删除s字符串中开头. ...

  10. java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)

    interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...