从体系结构的维度认知FPGA

从体系结构的维度认知FPGA

目录:

0 引言

1 什么是体系结构

2 FPGA的结构

3 FPGA的体系结构

4 FPGA的优势

5 FPGA的劣势

6 FPGA的通用应用场景

7 FPGA的特化应用场景:ASIC前体、控制系统体系结构的ASIC化演进

8 结语

正文:

0 引言

FPGA与CPU、GPU、DSP、ASIC并列,是的一种处理数字量的、执行通信/控制/运算任务的核心芯片,具备独特的优势与劣势。

为了促进深入应用FPGA的技术理念在各前沿行业被广泛接受,笔者撰写了本文,用尽可能短的篇幅,向不熟悉FPGA的专家、决策者介绍FPGA的体系结构。

1 什么是体系结构

体系结构的最标准定义来自计算机设计领域的经典书籍《计算机体系结构 量化研究方法》(作者:John L. Hennessy,David A. Patterson),笔者看的是第五版,相关英文原文是:

Genuine Computer Architecture: Designing the Organization and Hardware to Meet Goals and Functional Requirements.

翻译成中文是:

真正的计算机体系结构:为实现所要求的目标、功能而针对组织及硬件进行的设计。

笔者基于对这本书中部分内容的有限理解,基于多年FPGA应用研发经验,对上述定义进行了引申、具象化,将其推广到一切控制模块,定义体系结构为:

为实现应用场景所要求的的目标(=功能+性能),设计者对一定数量、结构的硬件资源进行组织,使其以某种模式(至少涉及各个硬件资源单元之间的空间位置关系、信号连接关系、动作逻辑关系、动作时序关系、对供电/控温/控湿/EMC/支撑等基础设施的共用关系)协同工作,上述硬件资源的物理结构以及相关的组织方式、协同工作模式的具体形式,就是为实现上述目标而设计的体系结构。

[注:笔者不知道是否有人公开过类似的、对体系结构一词的引申定义,若有,则雷同部分的原创资格属于这些定义的创作者。]

2 FPGA的结构

图1是FPGA(Field Programmable Gate Array,现场可编程门阵列)芯片的基本结构 (图片来源:深入理解 FPGA 的基础结构)。

图1 FPGA芯片的基本结构

其中,以分布式格局排列着大量功能可配置的硬件模块,包括(最多):

上百万个逻辑-时序-寄存器单元(Soft Logic -- 如图1所示,下同),各单元内含查找表即LUT,以实现灵活、复杂的逻辑功能,结合寄存器就能实现复杂的、直接面向应用的(而非层层映射的)时序逻辑功能;

上万个乘-加运算单元(Mult.)以实现复杂的运算功能;

两千多个存储器块(Memory Block),每个几kB,以实现数据的近场批量存储;

几百个用户输入输出模块(I/O Block),连同图中未画出的几十个带宽十几Gbps的高速串行通信接口,以实现与片外功能模块之间的互联 -- 这些功能模块包括但不限于:CPU/SoC,GPU,DSP,ASIC,DDRx-SDRAM,ADC,DAC,IPM,MEMS,图像sensor/ISP,激光/毫米波/超声波雷达,编码器,类似于六维力/力矩传感器的集成测量模块,类似于以太网PHY的通信芯片,光通信模块,射频通信模块;

以及在图中未画出的时钟处理模块、配置模块(用于配置大量可配置RAM位)、ADC、可能存在的多个硬核CPU单元/AI运算核心。

上述功能模块之间,在芯片内部的金属布线层,用分段的硬件连线(Routing Channel)实现互联,硬件连线段之间通过硅层的可配置的互联模块(Connection Block)、切换模块(Switch Block)实现交叉互联,以提供各个功能模块之间的、极其灵活多变的可配置硬件连接(由配置模块对大量可配置RAM位写入0/1而实现)。

3 FPGA的体系结构

先说结论:

FPGA的体系结构 -- 时钟信号驱动的、用大量可灵活配置的底层硬件资源直接实现应用层算法的、分布式专用硬件算法模块的并行协作集合体。

在使用FPGA“为实现所要求的目标、功能而针对组织及硬件进行的设计(第1节的经典定义)”的过程中,FPGA应用研发工程师编写HDL(Hard Description Language,硬件描述语言)代码,以实现应用层算法为目标,定义FPGA芯片内部大量模块的工作模式、互联方式、时序配合方式,再将代码交给专用的开发软件平台,由后者将代码转换为大量可配置RAM位的取值(0/1)并且形成一个下载文件。

然后,FPGA工程师操作软件开发平台、经专用的FPGA配置线缆将这个下载文件传输到第1节所述的配置模块,由配置模块将下载文件中包含的大量0/1信息写入FPGA内部各个模块中的各个可配置RAM位,从而使这些模块在时钟信号(高端芯片主频400MHz左右)驱动下,以FPGA工程师在HDL代码中预设的模式工作(包括它们彼此之间的协同工作)、实现所需的应用层算法。

在上述配置后的FPGA芯片中,各个硬件模块各自占据物理上独立的一个硬件区块、由统一的时钟信号或互相关联的多个时钟信号驱动,模块之间并行运行(时序上可以有先后关系从而形成硬件流水线)、以可配置的专用硬件连线互联、以纳秒级精度互相协同。

图2 基于ASIC+FPGA+扁平化GPU的人形机器人控制系统架构

图2就是一个典型的案例 -- 来自笔者的知乎文章:人形机器人控制系统核心芯片从SoC到ASIC的进化路径(版本A)的图8。

4 FPGA的优势

从1.2节可以看出,在FPGA中,应用层算法的实现,是由大量分立的、可配置的底层硬件基础单元的定制化集合完成的,即,硬件底层实现的算法就是应用层算法,相比于CPU+软件体系结构的多个软件层:机器码、汇编码、操作系统、API、应用程序,FPGA的这个特征,使控制系统体系结构的功能映射/抽象的层级数量大幅度减少,并且以专用的硬件布线直连各个算法模块

这种实现应用层算法的模式,不必再如CPU+软件体系结构那样时分复用硬件系统(硬件底层单元构成的CPU core)、读取指令、解析并执行指令、串行执行各个算法模块;实现算法的硬件模块可以直接访问物理上邻近的RAM块(如图1 所示),不必再访问多级存储器(寄存器、1-2-3级Cache、内存),因此节省了大量时钟周期

同时,FPGA基于片内可配置硬件布线直连的低延迟时钟网络、低至2~3ns的时钟周期,为上述运算、互联、协同提供了精准的时间节拍。

并且,由于FPGA的算法抽象层次少、硬件动作直接就是应用层功能,其在执行相同算法的情况下,功耗远低于CPU、GPU。

5 FPGA的劣势

CPU+软件已经主导自动控制系统体系结构40年,即使是GPU,也要依靠CUDA这种复杂的附加抽象层级,使其体系结构兼容现有的软件生态。

FPGA体系结构与CPU体系结构的差别,显著大于GPU体系结构与CPU体系结构的差别。FPGA研发生态与软件研发生态的对接工作已经做了十几年,据笔者所知,目前还达不到CUDA的水平。

这就导致,多年来一直主导自动控制系统研发工作的、擅长软件的项目负责人/系统架构师,因为对FPGA体系结构不了解,导致对其不信任(黑箱决策风险)。

同时,FPGA应用研发由于需要在硬件底层进行设计、应对调试场景,其开发工具的抽象层次也比较较低,其研发时长显著大于CPU应用研发,并且相关人才的市场存量也比软件人才少得多,导致人力资源综合成本显著增加

以上因素共同导致,即使不考虑GPU,在控制系统架构设计工作中,FPGA也被项目负责人视为万不得已(兼具多通道、大数据量、大运算量、算法复杂、强实时性)才考虑引入的技术。

并且,由于FPGA的功能实现依赖于对大量RAM位的配置,这就导致其运行主频通常低于400MHz,约为高端CPU/GPU主频的10~20%,从而对冲、稀释了FPGA在体系结构方面的优势

另外,在多通道、大数据量、大运算量应用场景下,虽然FPGA的实时性已被反复证明显著优于CPU,但由于高端GPU执行简单重复算法时的并行算力大约是FPGA的几十上百倍,导致GPU在这类场景下(尤其是在执行较复杂算法的FPGA优势场景下)的实时性性能很可能与FPGA有可比性,并且未曾做过实测对比验证

6 FPGA的通用应用场景

上述底层硬件层面的并行性,使FPGA在执行同时要求多通道并行、大数据量、大运算量、算法不易简化的的数据采集-运算-控制反馈控制功能时,其实时性(低延迟量 & 低延迟抖动量,下同)性能显著优于CPU+软件体系结构。

相比于GPU,FPGA虽然在并行算力方面有显著的差距,但GPU适用于高并行度的简单算法,FPGA则由于其底层硬件的高度灵活性,能够在提供远较CPU丰富的强实时性并行算力的同时,实现远较GPU应用层算法复杂的强实时性算法,卡到了两者之间的生态位

进而,图1中位于FPGA内部外圈的、经可配置硬件布线资源连接片内各个算法模块的大量I/O Block,确保了片内算法模块与片外功能模块(如第2节列举的)之间的大带宽、强实时性互联,确保了整个反馈控制系统的强实时性。

7 FPGA的特化应用场景:ASIC前体、控制系统体系结构的ASIC化演进

尤其重要的是,FPGA的体系结构与ASIC的体系结构非常相似,除了灵活性、中小批量投片成本的差距之外,后者具备前者一切体系结构特征、性能优势并且予以极致化。

二者在结构层面的表观区别在于,将FPGA中的可配置RAM位改成了固化的硬件,尤其是将FPGA中由位于硅层的可编程结构进行分段、衔接(见图1)的硬件连线,完全固化到了金属布线层;深层次区别则是,在底层模块级别进行了大量极致优化(例如将可配置的LUT改成固化的逻辑门阵列)。

由此导致,ASIC既具备FPGA体系结构的优势,又大幅度提高了运行主频、降低了功耗,由此导致:FPGA的经典应用场景是,验证ASIC逻辑原型设计的功能。

事实上,FPGA在江湖上还有一个外号:可编程ASIC

关于将FPGA作为ASIC前体的应用场景,本文希望强调的是:

在控制系统体系结构技术演进的层面,在某些具备大批量市场应用前景的、对控制系统性能需求极高的前沿应用领域(例如人形机器人),由FPGA在体系结构层面“卡CPU、GPU的bug”(如第6节所述)的同时强调将其ASIC化之后的性能跃升前景(!!!!!),深入参与控制系统的原型设计,运用其结构及功能可以灵活配置的特征、绕开ASIC投片成本高的劣势,针对应用场景的反馈进行快速迭代,为最终以ASIC为核心实现这类领域核心产品的控制系统铺平道路。

笔者的知乎文章:人形机器人控制系统核心芯片从SoC到ASIC的进化路径(版本A),就是针对这个方向的一次探讨。

8 结语

FPGA相比于CPU、GPU,有其独特的性能优势,占据独特的生态位。

FPGA的劣势使其被擅长软件的广大项目负责人/系统架构师视为歧途。

至少在具有广阔应用前景的、对控制系统性能需求极高的前沿技术领域,例如人形机器人,FPGA由于其“ASCI前体”的属性,理应被视作控制系统技术架构的核心备选项之一。

Read more

OpenClaw对接飞书机器人高频踩坑实战指南:从插件安装到回调配对全解析

前言 当前企业办公场景中,将轻量级AI框架OpenClaw与飞书机器人结合,能够快速实现智能交互、流程自动化等功能。然而,在实际对接过程中,开发者常常因权限配置、环境依赖、回调设置等细节问题陷入反复试错。本文以“问题解决”为核心,梳理了10个典型踩坑点,每个问题均配套原因分析、排查步骤和实操案例。同时,补充高效调试技巧与功能扩展建议,帮助开发者系统性地定位并解决对接障碍,提升落地效率。所有案例基于Windows 11环境、OpenClaw最新稳定版及飞书开放平台最新界面验证,解决方案可直接复用。 一、前置准备(快速自查) 为避免基础环境问题浪费时间,建议在开始前确认以下三点: * OpenClaw已正确安装,终端执行 openclaw -v 可查看版本(建议使用最新版,旧版本可能存在插件兼容风险)。 * Node.js版本不低于v14,npm版本不低于v6,通过 node -v 和 npm -v 验证,防止因依赖版本过低导致插件安装失败。 * 飞书账号需具备企业开发者权限(企业账号需管理员授权,个人账号默认具备)

【Part 3 Unity VR眼镜端播放器开发与优化】第四节|高分辨率VR全景视频播放性能优化

【Part 3 Unity VR眼镜端播放器开发与优化】第四节|高分辨率VR全景视频播放性能优化

文章目录 * 《VR 360°全景视频开发》专栏 * Part 3|Unity VR眼镜端播放器开发与优化 * 第一节|基于Unity的360°全景视频播放实现方案 * 第二节|VR眼镜端的开发适配与交互设计 * 第三节|Unity VR手势交互开发与深度优化 * 第四节|高分辨率VR全景视频播放性能优化 * 一、挑战分析与目标设定 * 1.1 主要瓶颈 * 1.2 目标设定 * 二、硬解与软解方案选型 * 2.1 平台解码能力检测 * 2.2 推荐策略 * 三、视野裁剪与分块播放 * 3.1 原理说明 * 3.2 实现流程图 * 3.3 伪代码 * 四、动态降级与多码率自适应 * 4.1

基于分布式光纤声波传感(DAS)的无人机入侵探测技术与应用

基于分布式光纤声波传感(DAS)的无人机入侵探测技术与应用

一、背景概述 随着无人机技术的普及,其在航拍、巡检、物流等领域发挥积极作用的同时,也带来了“低空入侵”与“非法飞行”等安全隐患。在机场、军事设施、能源基础设施及重要园区等重点区域,传统的雷达、视频或无线电监测手段在低空、隐身性、小目标**场景下仍存在一定局限。 分布式光纤声波传感系统(Distributed Acoustic Sensing,DAS)作为一种被动式、长距离、连续监测的感知技术,为无人机入侵预警提供了新的技术路径。 二、DAS 在无人机入侵监测中的基本原理 DAS 系统利用相干光时域反射原理,将普通通信光纤转化为沿线连续分布的振动与声波传感单元。当无人机在目标区域低空飞行、起降或悬停时,会在地面及周围结构中产生可被感知的物理扰动,包括: * 旋翼气流引起的地面微振动 * 无人机起降过程中的冲击与共振 * 低空飞行产生的特征性声波信号 这些信号通过光纤传导至 DAS 主机,经过高速采集与数字信号处理,可实现实时感知与精确定位。 三、无人机入侵场景下的 DAS 监测模式

【红黑树进阶】手撕STL源码:从零封装RB-tree实现map和set

【红黑树进阶】手撕STL源码:从零封装RB-tree实现map和set

👇点击进入作者专栏: 《算法画解》 ✅ 《linux系统编程》✅ 《C++》 ✅ 文章目录 * 一. 源码及框架分析 * 1.1 STL源码中的设计思想 * 1.2 STL源码框架分析 * 二. 模拟实现map和set(实现复用红黑树的框架) * 2.1 红黑树节点的定义 * 2.2 红黑树的基本框架 * 2.3 解决Key的比较问题:KeyOfT仿函数 * 2.4 支持insert插入 * 2.5 map和set的insert封装 * 三. 迭代器的实现 * 3.1 迭代器结构设计 * 3.2 迭代器的++操作 * 3.3 迭代器的--操作 * 3.4 RBTree中的迭代器接口 * 四. map和set对迭代器的封装 * 4.