SOC FPGA介绍及开发设计流程
目录
一、SoC FPGA简介
二、SoC FPGA开发流程
2.1 硬件开发
2.2 软件开发
一、SoC FPGA简介
SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS),包括处理器、外设和存储器控制器。相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片,SOC FPGA既拥有ARM处理器灵活高效的数据运算和事务处理能力,又拥有FPGA的高速并行数据处理优势。同时,基于两者独特的片上互联结构,在使用时可以将 FPGA 上的通用逻辑资源经过配置,映射为ARM处理器的一个或多个具有特定功能的外设,并通过高达128位位宽的AXI高速总线进行通信以完成控制命令和高速数据的交互。

HPS中的MPU子系统包括了两个Cortex-A9处理器核、二级(L2)高速缓存(Cache)和缓存器子系统、侦测控制单元(SCU)、一致性加速端口(ACP)以及调试功能模块。Cortex-A9处理器核中包括浮点单元(FPU)用于支持浮点运算,可以极大的提升依赖于浮点运算应用系统的性能,如高级控制算法、成像(缩放、三维变换)、快速傅里叶变换以及图像中的滤波等。每个Cortex-A9处理器核都包含一个ARM NEON媒体处理引擎(Media Processing Engine,MEP),该引擎支持多数据的同时运算,而可以加速多媒体等信号处理运算的速度。
HPS其他部分位于MPU子系统之外,处理器通过一组64位的ABMA(Advanced Microcontroller Bus Architecture)高级扩展接口(Advanced eXtensible Interface, AXI)主机访问HPS的其他部分。
SOC FPGA集成芯片的HPS和FPGA能够独立工作,通过高性能ARM AMBA AXI总线连接。FPGA架构中的IP总线能够通过FPGA至HPS互连访问HPS总线从机,HPS总线主机能够通过HPS至FPGA桥接访问FPGA架构中的总线从机,ARMBA AXI接口均可配置为32/64/128位。

二、SoC FPGA开发流程
2.1 硬件开发
硬件开发使用Quartus Prime和Platfom Designer。

硬件设计工作流程:
(1) 在Platform Designer中添加HPS组件以及各外围器件(如片内存储器、PIO、定时器、UART、片外存储器、DMA 等),并定制和配置它们的功能;分配外设地址及中断号;设定复位地址:;最后生成系统。
(2) 使用Platform Designer生成含HPS的系统后,会得到一个.qsys 后缀的文件,将其集成到整个Quartus Prime工程中。可以在Quartus Prime工程中加入 qsys 系统以外的逻辑。用户可以将HPS高性能处理器和具有强大并行处理能力的FPGA高度整合,以得到最佳的性能。
(3) 使用Quartus Prime选取具体的SOC FPGA器件型号;然后为系统分配引脚,对于 HPS,主要是设置 SDRAM的引脚电平和IO Bank电平。另外还要根据要求进行硬件编译选项或时序约束的设置;最后编译工程,在编译过程中Quartus Prime将对Qsys生成系统的HDL设计文件进行布局布线从HDL源文件综合生成一个适合目标器件的网表,生成FPGA配置文件(.sof)。
(4)使用Quartus Prime编程器和IntelFPGA下载电缆(如 USB Blaster),将配置文件(用户定制的含 HPS 系统的硬件设计)下载到目标板上。当校验完当前硬件设计后,可将新的配置文件下载到目标板上的非易失存储器里(如EPCS器件)。下载完硬件配置文件后,软件开发者就可以将此目标板作为软件开发的初期硬件平台进行软件功能的开发验证了。
2.2 软件开发
软件开发主要使用到两个工具,SOC EDS和Intel FPGA 部门深度定制的DS-5软件。
SOC EDS:类似一个Linux虚拟机,支持 Linux 系统中常用的各种命令如cd、ls、chmod、cat、make,也包含了一些专用的工具,如用于生成dts文件的spocdts工具、用于生成Altera专属的 Preloader头文件用的mkpimage工具,用以烧写U-Boot和 Preloader文件到sd卡中用的alt-boot-disk-util工具等等。使用SOC EDS,可以针对特定的硬件工程生成相应的U-Boot 源码并编译得到 U-Boot镜像文件,也可以实现对Linux 应用程序、内核和驱动的编译。在不安装 Linux 操作系统的情况下,就能完成基于HPS系统的软件开发和调试。
DS-5可以用来编写、编译、调试 SoC 片不含操作系统的裸机程序,Linux 内核和驱动模块,该软件包含以下特性:基于易用的Eclipse编辑器、支持GCC编译器编译和调试Linux应用程序、支持调试Linux内核和驱动模块、支持使用USB Blaster调试ARM处理器、支持FPGA和ARM交叉触发联合调试、支持优化软件的profile特性
硬件设计经过Quartus编译后会产生三个文件:
Handoff文件夹:包括HPS元件配置信息,例如使能的HPS外设、复用引脚的选择和IOSCR设置、存储器参数设置等;
SVD文件:包括HPS寄存器描述以及FPGA部分的软核IP寄存器描述;
SOPCINFO文件:包括整个系统的描述信息。

Handoff文件夹用于SOC EDS软件的Preloader Generator创建Preloader,Preloader根据Handoff文件夹中的信息配置HPS元件,初始化SDRAM,将下一阶段的引导过程(boot process)加载到SDRAM中并向它传递控制信息。
通过SVD文件可以在DS-5调试器中对HPS外设及FPGA外设寄存器进行检查和修改。
SOPCINFO文件用于设备树产生器(Device Tree Generator)创建Linux内核所需的设备树。设备树是描述硬件到操作系统的标准方式,主要应用于Linux系统中,它制定了开发板硬件和FPGA的配置,使内核启动时回家再相应的驱动程序。
参考文献:
SoC FPGA 设计和开发教程
基于FPGA的嵌入式系统设计—Altera Soc FPGA
Cyclone V Hard Processor System Technical Reference Manual
相关文章:
SOC FPGA介绍及开发设计流程
目录 一、SoC FPGA简介 二、SoC FPGA开发流程 2.1 硬件开发 2.2 软件开发 一、SoC FPGA简介 SOC FPGA是在FPGA架构中集成了基于ARM的硬核处理器系统(HPS),包括处理器、外设和存储器控制器。相较于传统的仅有ARM处理器或 FPGA 的嵌入式芯片,SOC FPGA既…...
MySQL vs. Oracle: 函数比较与联系
引言 MySQL和Oracle是两个广泛使用的关系型数据库管理系统(RDBMS),它们提供了丰富的函数库来处理和操作数据。本文将详细介绍MySQL和Oracle的所有函数,并逐一介绍它们的相同和不同之处,以帮助读者更好地理解和使用这两…...
【Django学习】(十五)API接口文档平台_项目流程分析_日志器_认证_授权
一、API接口文档平台 使用API接口文档不经可以很好的的维护接口数据,还给测试人员的接口测试工作带来了便利; 我们可以在全局配置文件中添加路由路径生成接口文档 1、使用docs接口文档维护接口 1.1在全局配置文件里指定用于支持coreapi的Schema # 指…...
经营简报及考核360表格
文章目录 经营简报效果图代码tableObjectSpanMethod.js 考核360委员会效果图 经营简报效果图不需要合并单元格且有汇总表头的 懒得封装了,所以整体没有封装 经营简报 效果图 代码 <template><el-tableref"tableRef":data"tableData.lengt…...
Spring Security 构建基于 JWT 的登录认证
一言以蔽之,JWT 可以携带非敏感信息,并具有不可篡改性。可以通过验证是否被篡改,以及读取信息内容,完成网络认证的三个问题:“你是谁”、“你有哪些权限”、“是不是冒充的”。 为了安全,使用它需要采用 …...
PyTorch从零开始实现Transformer
文章目录 自注意力Transformer块编码器解码器块解码器整个Transformer参考来源全部代码(可直接运行) 自注意力 计算公式 代码实现 class SelfAttention(nn.Module):def __init__(self, embed_size, heads):super(SelfAttention, self).__init__()self.e…...
运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐
音乐是运动的灵魂,而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天,我推荐五款备受运动爱好者喜爱的耳机,它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出,助你在运动中创造最佳状态。 1、NANK南卡Runne…...
HTTP、HTTPS协议详解
文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…...
【算法与数据结构】222、LeetCode完全二叉树的节点个数
文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析:利用层序遍历,然后用num记录节点数量。其他的例如…...
登录和注册表单的11个HTML最佳实践
原文:11 HTML best practices for login & sign-up forms 原作者:Andrey Sitnik 翻译已获原文作者许可,禁止转载和商用 大多数网站都有登录或注册表单;它们是业务转换的关键部分。然而,即使是流行的站点也没有实现本文中提到的…...
Mysql删除历史数据
Mysql定时删除历史数据 实现 1.创建存储过程(函数) SQL DROP PROCEDURE IF EXISTS KeepDatasWith30Days CREATE PROCEDURE KeepDatasWith30Days() BEGINSELECT maxId:max(Id) FROM tableName WHERE CreateTime<DATE(DATE_SUB(NOW(),INTERVAL 31 D…...
Python—数据结构(一)
先放一张自己学习和整理归纳的思维导图,以便让大家都知道我自己的整体学习路线。 数据结构的学习路上内容枯燥,但坚持下来一定有很大的收获!加油💪🏻! 数据结构 数据的概念数据元素: 若干基本…...
离线环境安装flask依赖包
找到当前版本需要的所有依赖包,生产flask项目生成项目依赖包文件requirements.txt 1)在当前项目目录下 生成requirements文件:pip freeze >requirements.txt 执行requirements文件,安装依赖包:pip install -r requirements.t…...
ChatGPT与Claude对比分析
一 简介 1、ChatGPT: 访问地址:https://chat.openai.com/ 由OpenAI研发,2022年11月发布。基于 transformer 结构的大规模语言模型,包含1750亿参数。训练数据集主要是网页文本,聚焦于流畅的对话交互。对话风格友好,回复通顺灵活,富有创造性。存在一定的安全性问题,可…...
登录和注册页面 - 验证码功能的实现
目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…...
HDFS的文件块大小(重点)
HDFS 中的文件在物理上是分块存储 (Block ) , 块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M。 如果一个文件文件小于128M,该文件会占…...
深度学习(二)
目录 一、神经网络 整体架构: 架构细节: 神经元个数的影响: 神经网络过拟合解决: 卷积网络 整体架构: 卷积层 边缘填充 特征尺寸计算 池化层 特征图变化 递归神经网络 一、神经网络 整体架构: 图中分别为输入层、隐层1、隐层2、输出层 通过输入层输入某数值…...
无涯教程-jQuery - wrapInner( html )方法函数
wrapInner(html)方法使用HTML结构包装每个匹配元素(包括文本节点)的内部子内容。 wrapInner( html ) - 语法 selector.wrapInner( html ) 这是此方法使用的所有参数的描述- html - 将动态创建并环绕目标的HTML字符串。 wrapInner( html ) - 示例 以下是一个简单的示例…...
【unity之IMGUI实践】单例模式管理数据存储【二】
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:uni…...
【C++】开源:Linux端ALSA音频处理库
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端ALSA音频处理库。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
