基于Quartus Prime的NiosII基础开发流程

2018年11月23日 21:44:13 bt_ 阅读数 2246 更多

分类专栏: FPGA

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接: https://blog.csdn.net/botao_li/article/details/84403894

基于Quartus Prime的NiosII基础开发流程

本文原始文档及代码工程上传至https://download.csdn.net/download/botao_li/10804031
也许对新入门FPGA的朋友有所帮助

软件版本:Quartus Prime Standard Edition 18.0 Windows

1. 建立工程

启动Quartus Prime选择New Project Wizard

设置工程名及工作目录

根据提示使用默认配置直到器件选择页面,选择FPGA型号

2. 建立顶层模块

在File菜单选择New

在弹出窗口中选择Block Diagram/Schematic File

完成后弹出模块图设计界面

3. 添加时钟模块

板上时钟进入FPGA即使频率保持不变,最好也经过时钟模块以保证FPGA内的时钟质量

在Tools菜单选择IP Catalog

在IP Catalog页选择PLL Intel FPGA IP,双击

在弹出窗口输入模块名称及保存路径

在弹出的配置窗口中进行PLL功能配置

在弹出的确认窗口中选择将生成的IP加入当前工程

双击模块图设计界面的空白处,选择加入时钟模块

保存当前模块图设计

保存后的模块图设计界面

4. 创建Platform Designer模块(原QSys)

在Tools菜单选择Platform Designer

Platform Designer窗口的File菜单选择保存

在System Contents页双击clk_0

在弹出的Parameters页设置时钟频率与时钟模块输出频率一致

5. 添加片上ROM和RAM

Nios工作必须像PC一样连接ROM和RAM,ROM用于存储程序文件,RAM用于程序运行。

一般情况下使用板上外接的ROM(比如Flash)和RAM(比如SDRAM)。

由于本演示程序规模极小(而且试验板上没有外接),因此使用片上ROM和RAM。两者都是使用FPGA的RAM资源。

由于ROM数据在FPGA烧写时才能写入,因此完成Nios软件编程后,需要重新编译FPGA工程。

**在后续的Nios软件编写过程中发现此处设置的存储空间太小了,不足以存储Nios程序,因此ROM和RAM的存储空间大小都应当放大。**目前试验的空间大小为65536 bytes。见[Nios软件编写](#17. Nios软件编写)章节。

片上ROM

在IP Catalog页双击On-Chip Memory (RAM or ROM) Intel FPGA IP

在弹出的配置窗口作如下配置

为区分,在System Contents页右键Rename改名为onchip_memory2_rom

片上RAM

在IP Catalog页双击On-Chip Memory (RAM or ROM) Intel FPGA IP

在弹出的配置窗口作如下配置

为区分,在System Contents页右键Rename改名为onchip_memory2_ram

6. 添加CPU模块

在Platform Designer窗口的IP Catalog页(与Quartus的IP Catalog页内容不同)双击Nios II Processor

在弹出的配置窗口的Main页中选择Nios II/f

在Caches and Memory Interface页,选择设置Data Cache的Size为None

Data Cache相当于CPU内的数据高速缓冲,用于保证数据传输速度,而将部分数据打包进行传输。如果处理数据量较少并且需要突发处理,使用Data Cache可能导致数据在缓冲中保存而不会完成传输,在这种情况下可以设置Size为None,或者使用most-significant address位置1的方式将寄存器的最高位设置为1,使用该寄存器的数据传输不经过Data Cache

7. 添加System ID模块

用于自动校验的一个只读模块,用于确保软件程序与Nios的硬件配置相匹配

由Platform Designer的IP Catalog页查找并且添加System ID Peripheral Intel FPGA IP,保持默认参数

8. 添加JTAG UART模块

JTAG UART模块可以通过JTAG实现PC与Nios的串口通信

由Platform Designer的IP Catalog页查找并且添加JTAG UART Intel FPGA IP,保持默认参数

9. 连接各模块信号

添加完上述各模块后的System Contents页如下

上图左侧中的空心圆圈表示信号可连接但是未连接,鼠标点击空心圆圈后变成实心圆圈,表示建立连接。

简单起见,可以把所有的空心圆圈全部建立连接。

10. 分配基地址

给各模块分配基地址用于基功能寄存器的操作,选择System菜单的Assign Base Addresses

对于已分配地址空间的模块,在添加新模块重新执行该指令时会被重新分配地址,在开发过程中为了防止出现地址变化,可以将已分配的地址空间锁定,锁定方法为鼠标点击Base地址旁的锁图标,由开锁状态转为闭锁状态

11. 生成

设置CPU的Vector

在Vectors页,设置Reset vector memory和Exception vector memory

Reset Vector指的是CPU复位后启动时指向的存储器类型和地址偏移量,一般为掉电不可擦除型,如外接的Flash

Exception Vector指的是CPU异常情况时指向的存储器类型和地址偏移量,存储器为掉电即擦除型,如SDRAM

——“NiosII的奇幻漂流”——不理解

在Platform Designer的Generate菜单选择Generate HDL

配置生成选项后点击Generate按钮

12. 向FPGA顶层添加Nios模块

回到Quartus窗口,在Project菜单选择Add/Remove Files in Project

在弹出窗口添加nios_kernel.qsys文件

在模块图设计界面双击空白处,在弹出窗口选择添加nios_kernel模块

用鼠标拖动的方式连接pll的输出时钟与nios_kernel的输入时钟

在pll模块上右键选择Generate Pins for Symbol Ports

添加了pll上未连接的端口连接

由于板上按键保持高电平,按下为低电平,用于复位的话需要加入非门,于是添加非门模块

13. 管脚约束

在Tasks页双击运行Analysis & Synthesis

在Assignments菜单打开Pin Planner

根据板卡原理图设置Location,其它部分按默认自动设置

关闭Pin Planner回到Quartus界面发现模块图形界面已将管脚分配更新至界面

14. 时钟约束

在Tasks页双击运行Fitter

正确完成后,在Tools菜单打开Timing Analyzer

在Timing Analyzer界面的Tasks页双击运行Create Timing Netlist

完成后在Contraints菜单选择Create Clock

在弹出窗口中完成配置并且点击Run按钮

在Tasks页首先双击Update Timing Netlist,完成更新后双击Write SDC File,写入SDC文件

关闭Timing Analyzer后,回到Quartus界面,在Assignment菜单打开Settings,进入Timing Analyzer页,添加刚才在Timing Analyzer生成的SDC文件

15. 编译FPGA

在Processing菜单选择Start Compilation完成编译

16. JTAG烧写

USB Blaster加载器连接PC,以及板卡的JTAG插口

板卡上电

在Tools菜单打开Programmer

在Hardware Setup选择USB-Blaster,Mode选择JTAG

在Processing菜单选择Auto Detect,给FPGA作Change File指向编译输出的sof文件

保存后点击Start按钮

当Progress显示100%,表示烧写成功

17. Nios软件编写

在Quartus的Tools菜单选择Nios II Software Build Tools for Eclipse

首先设置Workspace路径

在打开的Eclipse界面的File菜单选择新建Nios II Application and BSP from Template

在向导中首先设置sopc info文件及工程名,模板一般就选最简单的Hello World

向导下一页是BSP工程配置,在BSP工程中包含了访问Nios硬件的函数包,按默认配置,点击Finish按钮

每个Nios软件都需要一个Nios工程(称为原工程)和一个对应的BSP工程

建立工程后Project Explorer页出现2个工程:原工程与BSP工程

双击打开

原始代码修改成以下代码

#include <stdio.h>
#include <unistd.h>//引入usleep()


http://www.taodudu.cc/news/show-6189338.html

相关文章:

  • Nios和Qsys互连
  • 基于 NIOS-II 软核的流水灯
  • niosii spi 外部_转载:NIOS II spi详解
  • Mac OS X下Adware/malware 的简单手动排除方法
  • MongoDB勒索事件中,DBA们到底该学到什么?
  • 端到端的网络流量监控
  • 网络流量监测技术
  • Linux下网络流量实时监控
  • 流量监控-ntopng
  • 网络设备流量及性能监控的实现
  • 网络流量监控介绍
  • 【网络流量监控工具之Nethogs】
  • 黑客爱用的 HOOK 技术大揭秘
  • 算法题-排列组合问题
  • java排列组合(递归算法)
  • 排列组合算法(全排列、全组合)
  • 快速组合排列算法
  • 数学和算法之---排列组合
  • 排列 组合 算法(一)
  • 终于有个高效率的排列组合算法
  • 排列组合,相关算法
  • 【Python爬虫】第一课 Python爬虫环境与爬虫简介
  • 如何自学Python爬虫,python爬虫快速入门教程
  • Python爬虫|Python爬虫入门:请求
  • Python爬虫是个啥?学了Python爬虫有什么用?
  • python爬虫—Requests
  • 如何编写Python爬虫
  • Android 8.0 SurfaceFlinger
  • 浅谈Android之SurfaceFlinger相关介绍(一)
  • android图形框架之surfaceflinger分析(一)

基于Quartus Prime的NiosII基础开发流程相关推荐

  1. 基于AUTOSAR开发工具链的AUTOSAR软件实战开发---基于工具链AUTOSAR架构的开发流程

    前一节简单介绍了CP AUTOSAR及它的分层结构,本节介绍基于工具链AUTOSAR架构的开发流程,对于多数使用AUTOSAR架构开发汽车电子软件的工程师而言,主要关注的还是如何将AUTOSAR架构应 ...

  2. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建

    为什么80%的码农都做不了架构师?>>>    一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...

  3. ZYNQ学习(1) —— 基础开发流程

    ZYNQ学习(1) -- 基础开发流程 1. 现在PlanAhead中新建一个工程 2. 添加嵌入式内核,进入EDK中配置内核(导入XML模板,添加模块,设置端口等) 3. 回到PlanAhead生成 ...

  4. 【Javaweb】基础开发流程与介绍

    本文档写于2022年7月29日,由于个人水平有限,可能存在一些问题,因此仅供参考 @萌狼蓝天 JavaWeb基础开发流程 1.确定系统和功能 在此以"宠物管理系统"为例,要开发一个 ...

  5. Quartus Prime 原理图输入以及仿真流程

    Quartus Prime 原理图输入以及仿真流程 1. 使用 Quartus Prime(18.1)新建工程,路径不要有中文以及空格! 2. 仿真工具选择"None" 3. 新建 ...

  6. Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113773009 长期持续带来更多项目与技术分 ...

  7. h5页面怎么处理文件流_H5基础开发流程

    最基础的能力依据设计稿(PSD 或 Sketch)及交互要求,利用 JavaScript.HTML 和 CSS 等技术将设计稿高保真转换为网页的能力. 设计稿审查设计稿的开发友好性帮助视觉设计师发现有 ...

  8. 按键精灵基础开发流程

    按键精灵下载地址:http://www.anjian.com/contact.htm 关于模拟器有很多 这里选用的是雷电模拟器,或者你也可以选择夜神模拟器可以 打开按键精灵,连接模拟器(注意模拟器的分 ...

  9. 基于SigmaStudio DSP车载音频功放开发流程

    (1)先根据音频策略需求绘制Sigmastudio原理图 (2)导出生成数据给到MCU编译 (3)编写MCU控制DSP的相关程序  (4) 使用CAN工具发送消息给MCU,观察功放实际状态变化

最新文章

  1. qq图片选择效果的处理
  2. STM32单片机外部中断配置讲解
  3. mysql insert报错_mysql数据库使用insert语句插入中文数据报错
  4. Git帮助文档阅读笔记----第二章
  5. VSFTP的主动模式和被动模式
  6. keyevent 封装_adb shell input keyevent 控制按键输入的数值(收藏版)
  7. Oracle11g新特性:在线操作功能增强-Oracle11g在线重建索引功能增强 (转载)
  8. tensorflow中tfrecords使用介绍
  9. Maya: Motion Graphics Workflow with MASH Maya教程:运动图形工作流程与MASH Lynda课程中文字幕
  10. 只读更新全程图解教程(转)
  11. 浅谈非数学类全国大学生数学竞赛
  12. 关于逻辑关系 “隐含(implies、p-q) 的理解
  13. Unity ML-Agents 之 环境的搭建,以及的 demo 测试
  14. excel 修改设置(将excel修改后缀名,解压缩方式)
  15. 微信授权之登录、注册、关联微信号全流程图
  16. Mongo第三个参数的用法
  17. 一年之计在于春,一日之计在于晨
  18. 小明拿了一百块钱买了三块钱的东西,老板找他97块钱, 请问,老板有多少种找法(1元,五元,十元,20元,50元)
  19. matlab三相短路电流计算程序_基于MATLAB下的供电系统三相短路电流计算研究
  20. python如何使用多线程_python如何使用多线程

热门文章

  1. PMP考试资料考试重点,不看可惜了
  2. 解决百度网盘限速超简单
  3. 2015最新苹果开发者账号(299$)申请流程
  4. 一个操作失误,阿里云大规模故障,引发大量吐槽
  5. 常见的分类算法及分类算法的评估方法
  6. 对TS流的一些理解TS流的结构
  7. Request和response的用法总结
  8. 百度云的产品及使用场景分析
  9. 敏涵控股集团刘敏:一个85后创业者的民族使命
  10. c语言中缺少参数怎么弄,printf参数不足