Nios初体验之——Hello world!

news2024/12/29 8:52:05

文章目录

  • 前言
  • 一、系统设计
    • 1、系统模块框图
    • 2、系统涉及到的模块
      • 1、时钟
      • 2、nios2_qsys
      • 3、片内存储(onchip_rom、onchip_ram)
      • 4、串行通信(jtag_uart)
      • 5、System ID(sysid_qsys)
  • 二、硬件设计
    • 1、创建Qsys
    • 2、重命名IP核&连线
    • 3、集成 Qsys 系统
    • 4、顶层文件实例化:
    • 5、编译下载操作:
  • 三、软件设计
  • 四、下载验证
  • 五、总结
  • 六、参考资料


前言

环境:
1、Quartus18.0
2、vscode
3、板子型号:原子哥开拓者2(EP4CE10F17C8)
要求:
通过Nios输出Hello world!


一、系统设计

1、系统模块框图

在这里插入图片描述
在这里插入图片描述

Nios II 处理器通过 Avalon 总线与 ROM 和RAM 连接,其中 Avalon 总线用来传输指令与数据。除此之外,Qsys 系统还提供了一个 JTAG 接口,供用户下载和调试程序。

2、系统涉及到的模块

1、时钟

clk IP 核的全称是 Clock Source,在这里设定我们整个系统的工作时钟频率。

2、nios2_qsys

这是我们之前对Qsys介绍时了解到,这是整个Qsys的控制中心,起着分配中断、管理地址、调度内存等主要的控制作用,相当于大脑的低位吧,通过Avalon与外界进行通信。

3、片内存储(onchip_rom、onchip_ram)

这里我们创建了两个片内存储器,ROM和RAM。这两个片内存储器都是利用FPGA的片上存储资源进行实现,除了用于存储指令和数据外,还是程序的运行空间。需要注意的是ROM的实现,在FPGA内部并没有专用的ROM资源,我们通过对 RAM 赋初值,并始终保持该值,使其变得只读,从而实现片内 ROM(只读存储器)。

4、串行通信(jtag_uart)

JTAG UART IP 核使用 JTAG 接口来实现上位机与 Qsys 系统之间的串行通信。JTAG UART IP 核为用户提供了 Avalon-MM 接口映射,屏蔽了复杂的 JTAG 接口协议。

5、System ID(sysid_qsys)

System ID IP核是一个具有Avalon接口的只读设备,它给每个Nios II系统生成一个唯一的标识符(ID),并将其写入 System ID 核的寄存器中。编译器和用户可以利用该 IP 核来验证编译后的可执行程序与配置到FPGA 中的硬件环境是否匹配。如果可执行程序中的 ID 与 FPGA 中 System ID 核所存储的 ID 不一致,那么程序在运行时可能会出错

二、硬件设计

在开始Qsys系统设计之前我们需要先根据我们的芯片型号创建Quartus 工程,这里前面已经介绍过这里不在赘述。不同的是我们需要多创建一个qsys文件夹,下面新建hardware 和 software 文件夹,分别存放 qsys设计的硬件部分和软件部分。然后我们需要在prj文件夹下新建一个ipcore 文件夹,用于存放 Quartus II 工程 IP 核。

1、创建Qsys

  • 点击tools->platfrom Desiger进入设计界面:
    在这里插入图片描述
  • 修改时钟频率为100M:
    在这里插入图片描述

修改为100MHZ,并点击finish完成,否则修改失败。

  • 添加Nios II IP 核:
    在这里插入图片描述

  • 双击Nios II IP 核进入配置界面:
    在这里插入图片描述

这里我们保持默认选择“Nios II/f‖内核“,报错我们后面再进行解决,点击finish。

  • 添加成功:
    在这里插入图片描述
  • 添加片内存储ROM IP核:
    在这里插入图片描述
  • 同样双击进入配置界面:
    在这里插入图片描述

我们需要将其设置为ROM(只读),大小设置为10240,为10KB,其余默认。

  • 同样的方法,配置RAM:
    在这里插入图片描述

将“Type”选项设置为“RAM(Writable)”,然后将“Total memory size”修改为“20480”,也就是 20KB。其他的选项保持默认设置,最后点击 Finish

  • 添加 JTAG UART IP 核:
    在这里插入图片描述
  • 这里保持默认:
    在这里插入图片描述
  • 添加 System ID IP 核:
    在这里插入图片描述
  • 这里保持默认,点击finish:
    在这里插入图片描述

2、重命名IP核&连线

为了方便我们的理解,以及后面的软件程序中可能会使用到,所以我们尽量重命名为简单易理解的名字。

  • 右击点击rename重命名:
    在这里插入图片描述
  • 修改过后的名称:
    在这里插入图片描述
  • 连线:将IP核进行连接:

连接时,用鼠标点击“Connections‖一栏中相应的结点,连接后各结点处的空心圆会变成实心的点,同时相应的连线由浅灰色变成黑色。

  • 将复位信号与时钟信号接入到各IP核下:
    在这里插入图片描述
  • 数据主端口―data_master‖和指令主端口―instruction_master‖的连线:
    在这里插入图片描述
  • 注意:

这两个端口的连线遵循以下规则:数据主端口与所有的外设 IP 核连接,而指令主端口只连接存储器 IP 核。

  • 连接“jtag_debug_module_reset‖信号:
    在这里插入图片描述
  • 注意:

在连完线后,我们需要在“IRQ”一栏将 jtag_uart IP 核的中断信号与 Nios II 处理器连接起来。在连接中断的时候,Qsys 会自动为中断分配一个优先级。

  • 双击Nios II IP核设置复位地址和异常地址:
    在这里插入图片描述

这个时候finish会报错,我们先设置一下下面的自动分配

  • 设置基地址分配:
    在这里插入图片描述
    设置完了以后,之前的爆红就会消失,然后可以finish,Generate生成Qsys 系统了。
  • 生成过程:
    在这里插入图片描述

3、集成 Qsys 系统

  • 将Qsys生成的.qip文件添加到工程:
    在这里插入图片描述
  • 配置Pll锁相环:
    这里因为我们前面设计Qsys系统时,配置的是100Mhz,所以这里我们需要创建一个PLL IP 核实现二倍频,这里由于前面文章已经介绍过,就不在赘述。
    IP核简介及PLL_IP核的调用

4、顶层文件实例化:

  • 打开我们的Qsys设计界面,在Qsys文件夹找到qsys文件打开:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 自动生成Qsys系统例化代码:
    在这里插入图片描述

但是这里不知道咋的不能生成,那没事我们自己例化顶层模块,例化完放到rtl文件夹中,并添加到工程里设置为顶层文件。

module qsys_hello_world(
 input sys_clk, //晶振时钟,50Mhz
 input sys_rst_n //按键复位,低电平有效
 );
 
 //wire define
 wire clk_100m; //Qsys 系统时钟,100Mhz
 
 //例化 pll IP 核
 pll u_pll(
 .inclk0 (sys_clk),
 .c0 (clk_100m)
 );

 //例化 Qsys 系统
 hello u_qsys(
 .clk_clk (clk_100m),
 .reset_reset_n (sys_rst_n)
 );

 endmodule

5、编译下载操作:

  • Assignment→Device:
    在这里插入图片描述

  • 将未使用的引脚设置为高阻输入:
    在这里插入图片描述

  • 将“Value‖一栏全部设置为 ―Use as regular I/O”:
    在这里插入图片描述

  • 下面就是分析综合然后分配引脚全编译:
    在这里插入图片描述
    在这里插入图片描述

编译通过,下一部分是软件的设计阶段。

三、软件设计

  • 点击Toos下的Nios II SBT for Eclipse:
    在这里插入图片描述

  • 修改工作空间到 software 文件夹:
    在这里插入图片描述

  • 点击ok进入后选择file→New→Nios II Application and BSP from Template用于新建Nios II工程:
    在这里插入图片描述

  • 设置Nios II工程:
    在这里插入图片描述

  • 系统默认帮我们创建一个BSP(板级支持包)、保持默认、点击finish:
    在这里插入图片描述

  • 点击finish完成过后,我们会发现左边增加了两个文件:在这里插入图片描述

  • 点击c/c++的点c文件,修改输出内容并保存:
    在这里插入图片描述

  • 右击hello_world选择Build Project进行编译:

报错:
在这里插入图片描述
解决:
选中hello_world_bsp,右击,进行下面操作:
在这里插入图片描述

  • 添加勾选:
    在这里插入图片描述

enable_reduced_device_drivers
BSP 为处理器的外设提供了两个版本的驱动库:一种是执行速度快,但代码量比较大的版本;另一种是封装小的版本。默认使用的是代码量大的版本, 这里通过
enable_reduced_device_drivers: 选项来选择封装小的版本,从而减少代码量。enalbe_small_c_library:完整的 ANSI C 标准库通常不适用于嵌入式系统,BSP 提供了一系列经过裁剪的 ANSI C 标准库,占用资源比较少,我们可以通过【enalbe_small_c_library】选项来选择精简的 ANSI C 标准库。

  • 取消勾选:
    在这里插入图片描述

enable_c_plus_plus: 我们使用 C 语言来编写软件程序,因此不需要使能 C++。
enable_clean_exit: 当选中该选项时,系统库在主函数 main()返回时会调用 exit()。调用 exit()时,首先会清理 I/O 的缓冲区,然后再调用_exit()。当不选中该选项时,系统库会只调用_exit(),这样将会节省程序空间。对于嵌入式系统程序来说,一般都不会从 main()返回,所以可以不勾选该选项。

然后我们先点击Generate,再exit。

  • 编译整个工程:
    在这里插入图片描述
  • 编译成功:
    在这里插入图片描述

四、下载验证

这里我们需要下载两个文件,先下载sof,再下载elf。这里我们只介绍elf文件的下载。

  • 右击我们的工程名—>run as—>Nios II Hardware:

如果一步成功,那么你的控制台就会打印成功,否则跳出下面弹窗。

提示我们找不到与Nios II硬件系统的连接
在这里插入图片描述

如果你这一步成功,那么你的控制台就会打印成功,否则跳出下面弹窗。

在这里插入图片描述

上面这个问题博主寻找了许久也没有发现问题,或者解决方法,丢弃了几天,在周末打开时他又行了,真是玄学,如果有友友了解的可以在评论区发表一下想法,一起学习。

  • 在下载完成之后,控制台会输出相应信息:
    在这里插入图片描述

五、总结

总结的话就一句话,杀猪焉用牛刀哈,这里我们在实现简单输出时发现我们的步骤稍显复杂,这里的话为了方便我们后续的查看步骤,博主这里写的较为详细。在后面大的一些工程的话就能体会到Nios的魅力了。大家在配置的时候要细心,尤其连线那里,加油!最近在搞DHT11的温湿度读取和基于openvino的车牌识别,敬请期待。

六、参考资料

以上资料均来自正点原子的教学视频或开拓者2开发教程:原子官方
源码:https://github.com/no1jiangjiang/Nios_hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/842554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中vue-lazyload报错

1.问题: 说明:也就是版本不兼容,我安装的是vue2,因此需要 "vue-lazyload": "^1.2.6"或者更低 2.解决 npm i vue-lazyload1.2.6

第二季“数字强市建设体验团”活动感悟-张继群

目录 第二季“数字强市建设体验团”活动感悟-张继群 第二季“数字强市建设体验团”活动感悟-张继群 此次参观中山东安信木业、费县智慧城市运营中心、澳柯玛以及沂南双创科技园区给我留下深刻印象,我深深地感受到了现代科技与生活的紧密联系。我们临沂市智慧大数据…

js-3:DOM常见的操作有哪些?

1、DOM 文档对象模型(DOM)是HTML和XML文档的编程接口。 它提供了对文档的结构化的表述,并定义了一种方式,可以使从程序中对该结构进行访问,从而改变文档的结构,样式跟内容。 任何HTML和XML文档都可以用DOM表…

自然语言处理学习笔记(五)————切分算法

目录 1.切分算法 2.完全切分 3.正向最长匹配 4.逆向最长匹配 5.双向最长匹配 6.速度评测 1.切分算法 词典确定后,句子可能含有很多词典中的词语,他们有可能互相重叠,如何切分需要一些规则。常用规则为:正向匹配算法、逆向匹…

opencv基础44- Canny边缘检测详解-cv.Canny()

什么是Canny边缘检测? Canny边缘检测是一种经典的边缘检测算法,由John F. Canny在1986年提出。它被广泛应用于计算机视觉和图像处理领域,是一种多阶段的边缘检测算法,能够有效地检测图像中的边缘并抑制噪声。 Canny边缘检测的主要…

APP外包开发的学习流程

学习iOS App的开发是一项有趣和富有挑战性的任务,是一个不断学习和不断进步的过程。掌握基础知识后,不断实践和尝试新的项目将使您的技能不断提升。下面和大家分享一些建议,可以帮助您开始学习iOS App的开发。北京木奇移动技术有限公司&#…

Redis 拒绝服务漏洞(CVE-2023-28856)修复处理

一、漏洞描述 Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。 Redis 7.0.0 到 7.0.10版本、6.2.0 到 6.2.11版本、6.0.0 到 …

【Linux】【预】配置网络IP,挂载网络目录

【Linux】【预】配置网络IP,挂载网络目录 1. 配置查看IP2.配置Linux中的IP3. 串口连接开发板,配置 1. 配置查看IP a . 查看ipifconfig如下操作,其中的:192.168.252.140就是它的IP b . 使用xmodem 连接到虚拟机,最后点…

P1396 营救(最小生成树)(内附封面)

营救 题目背景 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动得热泪盈眶,开起了门…… 题目描述 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈…

2. Linux安装Git

yum安装 查看版本 版本太低,所以我们采用自己上传编译的方式进行 删除已安装的git yum remove git 下载最新安装包,并上传到服务器文件夹下 上传,解压 5.安装编译需要的依赖 yum install curl-devel expat-devel gettext-devel openssl-…

【Leetcode】无重复字符的最长字串||带输出测试(滑动窗口+HashMap)

step by step. 题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出…

UE4 Cesium for unreal 离线加载应用全流程

参考配置:Win10、请保证是在局域网环境下配置 配置IP 右键选择:打开“网络和Internet” 设置 选择更改适配器选项 请保证以太网是处于启用状态并连接线缆,点击右键选择属性 双击选择Internet协议版本4(TCP/IPv4) 将IP地…

Git从远程仓库中删除文件,并上传新文件

目录 删除: 拉取远程分支的更新: ​编辑 首先查看git状态: ​编辑 删除文件并提交版本库: 提交: 上传新文件: 首先查看git状态: 提交到暂存区: 提交到版本库: 上…

028 - having函数

-- SQL Server中的聚合函数有:聚合数据(group by)后面不能跟过滤条件where 1.count() 所有记录du数 2.count(*)所有非null记录数 3.avg() 某一列平均值 4.min() 某一列最小值 5.max() 某一列最大值 6.sum() 某一列总和 -- 聚合数据&#xf…

人大金仓数据库Docker部署

docker 搭建 yum -y install yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposystemctl start docker.servicesystemctl enable docker.servicesystemctl status docker.service 配置Docker cd /etc/docker/ vi da…

如何安全变更亚马逊收款账户?

有太多的卖家想知道如何安全变更亚马逊收款账户,因为更改了第三方收款账户可能会导致二次视频认证或者增强视频。真的是这样吗? 其实不推荐亚马逊店铺正常运营之后去变更信用卡,收款账户等重要资料的,因为玩黑科技的卖家也真的多…

嵌入式开发学习(STC51-18-LCD液晶显示)

内容 在LCD1602液晶上显示字符信息; LCD1602介绍 简介 1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符; 它是一种专门用来显示字母、数字、符号的点阵型液晶模块; 它是由若干个5x7或者5x…

PEMFC氢氧质子交换燃料电池MATLAB仿真模型

氢氧燃料电池静态模型: (1)热力学电动势En (2)活化极化过电势Vact 活化损失主要是因为电极表面的反应速度过慢,在驱动电子传递到或者传送出电极的化学反应时,部分电压会被消耗。 (…

机器学习——SMO算法推导与实践

一、 硬间隔-SMO算法推导 明天再说,啊。。。。感觉天空明朗了很多,即使现在已经很晚了 还是要打开柯南,看看电视,等待天气预报所说的台风天吧! 一时之间,忽然失去了用markdown语法写下推导过程的勇气。。。…

干货:电视盒子什么牌子好?数码博主盘点电视盒子排名

电视盒子是我们观影不可缺少的装备之一,但面对众多的电视盒子产品,大家在选购时会疑惑电视盒子什么牌子好,我作为数码测评博主,本期要分享的主题是电视盒子,通过对比今年测评过的26款热门电视盒子,我整理了…