FPGA学习笔记之Nios II(一)简单介绍及新建工程及下载

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • Qsys
  • Nios II
  • hello world 实例
    • Platform Design
    • Nios II程序设计


前言

利用Quartus中的Qsys工具,可以实现在FPGA里面跑嵌入式的功能


Qsys

Altera 公司将主控制器、数字信号处理模块、存储器及其控制模块、各种接口协议等模块,通过硬件描述语言实现并封装成 IP 核。 用户可以在 Qsys 中直接调用这些 IP 核,从而节省了自己去Verilog编程的时间。
Qsys可以重构SoC(System on Chip, 片上系统),可以增减构成系统的 IP核或修改已有 IP 核的参数。

SOPC( System On a Programmable Chip, 也就是可编程片上系统)

Qsys 即Platform Designer,用Qsys来创建硬件环境,不同于 ARM、单片机等处理器的固定硬件环境,通常是指以 Nios II 处理器为核心的嵌入式系统。

Nios II

Nios II 是应用于 Intel FPGA 的嵌入式软核处理器,在一片 FPGA 内部构建多个 Nios II 处理器,它们可以作为主CPU,也可以是协处理器,在同一芯片内部协调有序地完成整个复杂系统的各项功能。32 位 RISC 架构(精简指令集架构) 处理器。
在这里插入图片描述
Nios II 处理器为用户提供了 Nios II/e(经济型) 、 Nios II/s(标准型) 、 Nios II/f(快速型) 三种内核,占用FPGA的资源依次增多,但运行速度也依次增强。

hello world 实例

Platform Design

打开设计平台
在这里插入图片描述
在这里插入图片描述
之后在左上角的IP Catalog界面搜索添加Nios II Processor、On-Chip Memory (设置为ROM,10240)、On-Chip Memory (设置为RAM,20480)、JTAG UART、System ID Peripheral。之后更改名字。
在这里插入图片描述
在“Connections”一栏中相应的结点,可以实现连线,连接后各结点处的空心圆会变成实心的点,同时相应的连线由浅灰色变成黑色。

按照这样的连接方式:
在这里插入图片描述
clk IP 核的时钟信号―clk‖和复位信号―clk_reset‖与其余的各个 IP 核都连接起来。

Nios II 处理器 IP 核的数据主端口data_master和指令主端口instruction_master:
数据主端口与所有的外设 IP 核连接
指令主端口只连接存储器 IP 核

Nios II 处理器 IP 核的jtag_debug_module_reset信号:连接起来并在“IRQ”一栏将 jtag_uartIP 核的中断信号与 Nios II 处理器连接起来。

在这里插入图片描述
设置NIOS的IP核,在Vector一栏中,指定复位地址(ResetVector) , 一般我们选择使用非易失性存储器来存储复位代码。复位地址是由所选存储器的基地址和偏移地址“Reset vector offset”共同计算出来的。

在“Exception Vector”一栏我们需要指定存储异常处理代码的存储器, 同时指定异常地址。 一般我们选择读写速度较快的存储器(多数为易失性存储器) 用来存储异常处理代码,异常地址是同样是由所选存储器的基地址和偏移地址“Exception vectoroffset”共同计算出来的,在异常事件发生时,程序从异常地址开始运行。
在这里插入图片描述
然后,我们进入基地址分配阶段。点击菜单栏中的【System】→【Assign Base Addresses】, Qsys 工具会自动为各个 IP 核分配基地址。 之后generate生成就行了。

之后把生成的qip文件添加了项目中:
在这里插入图片描述
Unused Pins, 设置为高阻输入(As inputtri-state)
Dual-Purpose Pins,全部设置为 Use asregular I/O ,这个不太明白是啥意思
在这里插入图片描述
之后就可以调用:(名字忘记改了),然后给他一个设置频率所对应的时钟核复位,编译
在这里插入图片描述
在生成的文件中可以查看verilog例化代码
在这里插入图片描述

Nios II程序设计

Quartus II 软件菜单栏中的【Toos】中的【Nios II SBT for Eclipse】
在这里插入图片描述
单击菜单栏中的【File】→【New】→【Nios II Application and BSP from Template】来新建 Nios II 工程
在这里插入图片描述
在第一栏中,选择我们利用Platform Design生成的.sopcinfo文件,之后CPU name会自动识别,这里可以命名项目核路径,默认会与.sopcinfo生成在一个路径下,生成一个software文件,最下方可以选择项目模板。

next之后,可以看到工具会自动创建板级支持包BSP(Board Support Package)
在这里插入图片描述
在这里插入图片描述
对项目,右键,build project,发现有报错,显示RAM容量不够,但我们分配了20KB的
在这里插入图片描述
右键项目,选择【Nios II】→【BSP Editor】,会出现Nios II BSP Editor界面

勾选:
在这里插入图片描述
取消勾选:
在这里插入图片描述
enable_reduced_device_drivers: BSP 为处理器的外设提供了两个版本的驱动库:一种是执行速度快,但代码量比较大的版本;另一种是封装小的版本 。默认使用的大代码量的,通过选项可以选另一种。

enalbe_small_c_library:完整的 ANSIC 标准库通常不适用于嵌入式系统, 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()返回,所以可以不勾选该选项。

之后就可以下载程序了,先下载.sof文件,之后右键工程,然后点击【Run As】→【Nios II Hardware】
在这里插入图片描述
在“Target Connection‖标签页中点击【Refresh Connections】按钮, 这时软件便会自动识别我们开发板上的 Qsys 系统,并显示 Qsys 系统的相关信息。我们接着点击【Apply】→【Run】

在软件下方的Nios II Console中会打印Hello,World信息,说明下载成功
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊测评还能做吗?

只能说测评不是唯一的手段,但是推销量的一把好手。首先测评能让listing快速成长,短期内有望成为爆款,速度快,利润高,回款快。相对其他推广,测评无疑是有效,省培养listing的方法。其次新品前期太…

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好,我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库,这个库是专门用来处理 JWT 的,JWT 全称是 JSON Web Token ,JSON 格式的 Token。 今天就来简单入门一下 JWT。 官方介绍:https://jwt.io/intr…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置

1、Gpt组件包含的子配置项 GptDriverConfigurationGptDemEventParameterRefsGptConfigurationOfOptApiServicesGptChannelConfigSet2、GptDriverConfiguration 2.1、GptAlreadyInitDetCheck 该参数启用/禁用Gpt_Init API中的GPT_E_ALREADY_INITIALIZED Det检查。 true:开启Gpt_…

JS核心语法【流程控制语句、函数】;DOM【查找元素、操作元素、事件】--学习JavaEE的day48

day48 JS核心技术 JS核心语法 继day47 注意&#xff1a;用到控制台输出、弹窗 流程控制语句 If else、For、For-in(遍历数组时&#xff0c;跟Java是否一样【java没有】)、While、Do while、break、continue 案例&#xff1a; 1.求1-100之间的偶数之和 <!DOCTYPE html> …

Android消息机制回顾(Handler、Looper、MessageQueue源码解析)

回顾&#xff1a; Android消息机制 Android消息机制主要指的是Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作机制。 介绍 通过Handler 消息机制来解决线程之间通信问题&#xff0c;或者用来切换线程。特别是在更新UI界面时&#xff0c;确保了线程间的数…

5.23 学习总结

一.项目优化&#xff08;语音通话&#xff09; 实现步骤&#xff1a; 1.用户发送通话申请&#xff0c;并处理通话请求&#xff0c;如果同意&#xff0c;为两个用户之间进行连接。 2.获取到电脑的麦克风和扬声器&#xff0c;将获取到的语音信息转换成以字节数组的形式传递。 …

基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 FPGA的仿真图如下&#xff1a; 将数据导入MATLAB&#xff0c;对比结果如下&#xff1a; 2.算法运行软件版本 MATLAB2022a vivado2019.2 3.部分…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时&#xff0c;需要Google的驱动&#xff0c;后面才…

Jenkins 构建 Maven 项目:项目和服务器在一起的情况

bash.sh内容 #!/bin/bash#删除历史数据 rm -rf ruoyi-admin.jar# appname$1 appnamevideo.xxxxx.com #获取传入的参数 echo "arg:$appname"#获取正在运行的jar包pid # pidps -ef | grep $1 | grep java -jar | awk {printf $2} pidps -ef | grep $appname | grep ja…

高铁VR虚拟全景展示提升企业实力和形象

步入VR的神奇世界&#xff0c;感受前所未有的汽车展示体验。VR虚拟现实技术以其独特的沉浸式模拟&#xff0c;让你仿佛置身于真实展厅之中&#xff0c;尽情探索汽车的每一处细节。 一、定制化展示&#xff0c;随心所欲 VR汽车虚拟展厅打破空间束缚&#xff0c;让汽车制造商能够…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

基于轻量级神经网络GhostNet开发构建CIFAR100数据集场景下的图像识别分析系统,对比不同分辨路尺度下模型的性能情况

Cifar100数据集是一个经典的图像分类数据集&#xff0c;常用于计算机视觉领域的研究和算法测试。以下是关于Cifar100数据集的详细介绍&#xff1a; 数据集构成&#xff1a;Cifar100数据集包含60000张训练图像和10000张测试图像。其中&#xff0c;训练图像分为100个类别&#x…

webgl入门-绘制三角形

绘制三角形 前言 三角形是一个最简单、最稳定的面&#xff0c;webgl 中的三维模型都是由三角面组成的。咱们这一篇就说一下三角形的绘制方法。 课堂目标 理解多点绘图原理。可以绘制三角形&#xff0c;并将其组合成多边形。 知识点 缓冲区对象点、线、面图形 第一章 web…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

C++设计模式---面向对象原则

面向对象设计原则 原则的目的&#xff1a;高内聚&#xff0c;低耦合 1. 单一职责原则 类的职责单一&#xff0c;对外只提供一种功能&#xff0c;而引起类变化的原因都应该只有一个。 2. 开闭原则 对扩展开放&#xff0c;对修改关闭&#xff1b;增加功能是通过增加代码来实现的&…

探索 Rust 语言的精髓:深入 Rust 标准库

探索 Rust 语言的精髓&#xff1a;深入 Rust 标准库 Rust&#xff0c;这门现代编程语言以其内存安全、并发性和性能优势而闻名。它不仅在系统编程领域展现出强大的能力&#xff0c;也越来越多地被应用于WebAssembly、嵌入式系统、分布式服务等众多领域。Rust 的成功&#xff0…

计算机网络数据链路层知识点总结

3.1 数据链路层功能概述 &#xff08;1&#xff09;知识总览 &#xff08;2&#xff09;数据链路层的研究思想 &#xff08;3&#xff09;数据链路层基本概念 &#xff08;4&#xff09;数据链路层基本功能 3.1 封装成帧和透明传输 &#xff08;1&#xff09;数据链路层功能…

Redis常见数据类型(3)-String, Hash

目录 String 命令小结 内部编码 典型的使用场景 缓存功能 计数功能 共享会话 手机验证码 Hash 哈希 命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat String 上一篇中介绍了了String里的基本命令, 接下来总结一…

《Python编程从入门到实践》day37

# 昨日知识点回顾 制定规范、创建虚拟环境并激活&#xff0c;正在虚拟环境创建项目、数据库和应用程序 # 今日知识点学习 18.2.4 定义模型Entry # models.py from django.db import models# Create your models here. class Topic(models.Model):"""用户学习的…

Vue2基础及其进阶面试(一)

简单版项目初始化 新建一个vue2 官网文档&#xff1a;介绍 — Vue.js 先确保下载了vue的脚手架 npm install -g vue-cli npm install -g vue/cli --force vue -V 创建项目 vue create 自己起个名字 选择自己选择特性 选择&#xff1a; Babel&#xff1a;他可以将我们写…