理解 FPGA 的关键知识点整理

虽说接触和学习 FPGA 有一段时间了,但每次在给人介绍FPGA时,还是不能说得很清楚。因为呢,FPGA还是很有门槛的。所以,针对FPGA的关键知识再学习和整理了一次。供参考,对于FPGA老鸟,直接跳过,如果是初学者,可以看看。

FPGA 做为一个特殊的芯片,为什么存在?原理如何?如何设计和使用FPGA。

1:什么是FPGA?

要理解FPGA,如果连计算机结构都不清楚(比如:冯诺依曼架构,标准指令集),还有数字集成电路设计(组合/时序逻辑,逻辑综合,CMOS电路,时序分析,布局布线,低功耗设计,存储设计,电路测试和验证),这些还是得大致了解一下。

最基础的知识: 乘法是可以通过 加(Add) 和 移位(Shift)来完成,

所以,加法器和移位器是一切运算的基础。这个很重要!!!!!

如上图,是移动运算和加法运算。

那具体我们要运算时,有哪些实现方案呢?这里要注意了,特别是做软件的同学,有两种方案:

一种是硬件方案,一种是软件方案,如何理解?

1.1:运算的软/硬件实现方案

以 4位(二进制)乘以 4位(二进制),我们的实现方案分为软件,硬件实现方案。

对于一个数学运算,我们可以通过软件来实现,比如:CPU

软件的实现方案就是:冯式定理,通过控制器,运算器,内存。控制器确认流程,接受输入,运算时通过内存来缓存中间结果,缓存数据再运算时做数据搬运,最终给出输出。

于是,会有很多搬运的过程。(冯式原理,也就是软件的计算原理,如下)

这种做法,非常符合人的思维习惯,相当于把一个问题拆成多个步骤,按顺序来执行。

另外,软件同学并不熟悉的是:可以通过硬件方式来实现:

上图是四位的乘法。如果我们认为4位的乘法是由多次移位和加法组成的,在软件实现时,可能会把一个乘法变成多次的运算,中间结果用内存来缓存。但是,在上图的硬件实现中,我们直接把运算的过程全部通过硬件一次完成了。当然, 它在往后传递数据,进行运算时,必须要保证同步。而同步实际上是靠其它来保证(这里不细讲了)。但确实,它没有缓存,搬运数据的过程,速度更快。

上图表达了最重要的 组织逻辑,时序逻辑的实现。前者不依赖历史和状态。后者依赖历史和状态有记忆的能力。

硬件可以将运算并行,总是在第一时间拿到结果后,立即进行下一步运算,运算更快。

结论:硬件的实现比软件的能耗比更低。硬件更快,消耗能量更小。

软件有很多高级编程语言来支持,符合人的思考逻辑,开发效率高。

硬件实现较复杂,开发难度大,并且,一旦在硬件上实现,不能修改,生产成本也很高。

1.2:FPGA可以结合软硬件的优势

那如何结合软件和硬件的优势?

FPGA是其中一种可编程的方式(运行快,可编程)Programable circuit

随着FPGA的工艺提升,芯片的产量越大,消耗越高,高于某个特定量,ASIC的成本会低于FPGA。

1.3:FPGA的特点

当然,FPGA的劣势也很明显:

1:编程难度大。

对于软件,只需要学习简单的指令,做一下编译就OK了。属于指令架构。

对于FPGA的编程,除了要学会电路编程语言verilog以外,还需要学会如何 Synthesis,place,rout,逻辑电路还需要映射到当前FPGA的 Primitive Cell。

2:比 ASIC 更贵一些(10x的面积),

3:比 ASIC 更慢一些。(3x的差距)

以上讲了那么多,关键是讲了FPGA是如何产生的,以及它在芯片行业中的定位。

那FPGA的可编程具体是如何实现的呢?大家都知道是LUTS表和Switch,但具体细节呢?我们来仔细看一下。

2:如何实现Field-Programmable

如何要改上面的运算,一是改逻辑一是改连线

2.1:FPGA实现编程的方式

对于FPGA 的实现方式如下:

通过 内存位(1和0)来控制开关。

逻辑如何实现,可以通过真值表来表达所有逻辑。所以,更改真值表的值,就变更了逻辑。

所以,不管是逻辑还是开关,都是通过 Memory 来完成定制的,所以,我们会发现,在往FPGA上烧录最终的bitstream时,实际上就是一行 1010的数据写入。

对于Memory的实现,有很多种实现方式。但是在实现时,我们会考虑如下几种场景:

* 是否支持多次编程

* 是否非易失。失电后的是否丢失内容

* 是否要采用标准工艺进行生产

* 可扩展性,伸缩性

* 是否可现场编程,不依赖工厂。

2.2:如何选择用于配置的存储

如此,我们一般会选择SRAM的方案:(除了失电会丢失数据,其它都很OK)

SRAM并不是唯一的选择:也有其它选择,可参考下表:

好,基于上面的学习,我们重新再来理解一下FPGA。

好了,如何实现可编程,应该已经讲清楚了。

接下来,就是难点了,硬件是如何实现FPGA的,架构是怎样的?硬件是如何实现的?

3:如何实现FPGA

FPGA内部的逻辑架构如下:

首先看一下 Floorplan:(逻辑单元,输入/输出,DSP,ERAM,

3.1:逻辑单元

针对单个的Logic Block 如下:它由多logic-cell组成,注意,一个logic cell 是由 Luts,carray,register 组成。

做多大的颗粒度,与工艺相关。

3.2:连接方式

看了逻辑单元,再来看连接方式,目标很明确,走通,时序,面积,功耗。

对于连接的架构,有以下几种:

而最常见的连接架构是如下的Mesh方式:横(纵)Routing chanel + Switch Box

对于时钟网络,设计如下:

3.3:FPGA的通常架构

以下的 tile-base 架构是最常见的FPGA架构,如图,就是一种堆积相同逻辑单元的方式。

这是最早的FPGA的一个CLB的结构:

FPGA随着应用场景增加,加入了越来越多的IP,变成了一个平台。

常见的IP如下:

最新,最先进的FPGA是一个非常复杂的SoC。

什么是Scalar Engine,实际上相对于并行/向量运算的普通运算。我们用CPU实现的普通数学运算,我们都可以认为是标量(Scalar,单一数据)运算。相对应的 AI运算一般是并行的向量或者说Tensor运算,会采用DSP或者AIE,

对于FPGA的可适应用性,我们可以理解为它可以在硬件层面重新配置电路,和ARM,DSP,AIE的编程是大不相同的。

这里SoC特别强调了图像处理,神经网络推理这种热门场景,但并不仅限与此。而对于神经网络压缩的在线处理,这个好像很少有人这么使用。

3.4:软件如何建模

软件需要进行建模的元素有:

架构(为了GUI显示,为了Place / Route)

Logic block:CLB(Xilinx的称呼)

interconnects:连接方式的建模

global clocks:全局时钟网络,保证时钟同步。

Floorplan:整体的布局。

PRAM configuration(为了bitstream的生成):这是指的为了加载FPGA的配置的内存。

Timing delays:为了计算STA

Power data :为了做能耗的分析

Primitive:FPGA中原生的基础元件,为了综合时的Map和综合的处理。

我们在建模时,不可能针对每一个Lut进行单独建模,一定是按照 Tile模块的方式,只对单个Tile进行建模,其它都重复的。

3.5 软硬件如何配合

而软硬件有很强的依赖,两者交互点较多,下面的图列出了一部分关键点:

理解一下上面的图:

3.6:数字/模拟的设计过程

对于模拟电路的整个设计过程,有如下的步骤:

  • DRC:检查设计是否符合工艺规则,确保制造可行性。
  • LVS:验证版图与原理图的一致性,确保电气连接正确。相当于对逻辑图和物理实现进行对比。
  • PEX:提取寄生参数,用于评估电路的实际性能影响。

对于数字电路的设计,有以下步骤:

硬件相关的知识大概就了解这么多了,接下来,非常重要的是,芯片生产出来后,如何进行测试?

4:芯片如何测试?

芯片有是就设计,生产,封装测试,三个大步骤。

4.1:MOSFET的架构

下图是一个标准的MOSFET的结构,以及改进的FinFET版本,按FinFET实际生产的一款7nm芯片。

4.2:制造过程

关注一下半导体的制造过程:

1:晶园的准备------先是拉制成硅锭,然后切割成晶园。

2:光刻------这里称为图形转移,就是将电路图转移到晶园上。光刻机使用光源将光通过掩模,将掩膜上的图案通过缩放投影在涂有光刻胶的昌园表面。

3:掺杂------形成源极和漏极。通过注入杂质。形成芯片的基本元件。

4:沉积------形成金属导电层,形成芯片中各个元件之间的导线。形成电路互连结构。

5:蚀刻------把不需要的部分去掉,只保留电路。去除掉不需要的材料。

6:封装------将wafer中的die切出来,切成祼片,加上保护壳,成为集成电路的芯片。经过测试和质量检测,就可以投入市场使用。

4.3:光刻过程

对于光刻过程,有必要重点了解一下:

4.4:芯片的面积约束

芯片不能太大,因为越大,良率越低。如下图。一般最大的面积是 25mm * 25 mm

4.5:芯片的测试

那我们如何判断一颗芯片是OK,可用的?

1:回片测试

是否和设计的要求一致,需要严格的回片测试。

2:功能测试

按需要达成的功能进行测试,比如:乘法是否正常。

3:性能测试

运行时的最高频率。也就是能跑到的最高频率。

4:量产测试

可能需要对测试的芯片划分等级,因为质量可能不同。如:速率,温度......)

4.6:测试的方法

功能测试:主要对开关,导线的联通性做测试。

按照功耗,速度。会对芯片分等级,分箱处理。(用在不同场景,或销售不同价格)

下面是完整的制造测试流程:

1:DFT------基于DFT规则来指导测试的试计

2:Fault Model------定义缺陷模式。

3:测试向量生成------手动生成简单故障,自动生成更复杂的故障模型。

4:形成测试程序------在生产测试中实际运行。

5:测试向量集------需要生成额外向量,处理测试中未检测到的缺陷。

6:客户产品测试------基于客户的应用做测试

7:良率分析------如果存在逃逸,需要分析原因

整个 MFT 框架包含了从测试生成、配置、执行到评估的完整流程。各模块通过数据库和仿真工具的相互配合,确保测试能够覆盖所有潜在故障,验证芯片功能的可靠性。

最终测试完成后确认的芯片,一般的命名规则:

5:FPGA的软件工具

5.1:软件开发流程

和ASIC的区别,会有一个固定的架构(这会影响后续的每一个步骤)

FPGA的EDA软件必须要适配硬件提供的架构,否则,没有用处。

5.2:RTL设计

第一步,仍然是输入RTL设计。

5.3:综合

然后,是将RTL综合成为门级网表。

5.4:Mapping

按照FPGA提供的Primitive,进行Mapping,匹配上FPGA固定的器件。

5.5:Place & Route

然后在FPGA中选择具体的物理元器件,涉及具体的物理位置。

选好位置,开始步线,保证实现原有的逻辑。

5.6:时序分析

布线如果不通,可以重新Place。同时,需要分析时序是否合适。

5.6:功耗分析

另外,需要做功耗分析。

5.7:FPGA设计关键

注意一下,实际上 FPGA 的频率要达到1G,是很难的(因为固定架构,需要更多的走线,时钟本身频率也不高)。但即使这样,运行速度仍然会比CPU要快很多(因为主频并不代表速度,高速更多源于并行运算),并且,频率越高,功耗越大,也是不适合的。

FPGA最大的一个问题:估算连线的时延很难,不是很准确。

我们在设计EDA软件前,一定要明白,在越靠前的地方,出错的成本会越高(这和做任何事情都是一样的)。

6:如何支持客户开发FPGA应用

对于客户,除了芯片,必须用到的是:

* 芯片的参数表

一般会涉及逻辑单元量(LUTS量,FF),Memory,DSP,通讯接口,DDR控制器,封装的引脚......

* 芯片的EDA工具,特别是GUI版本的工具

* 芯片的开发版

6.1:芯片参数表

6.2:EDA工具

客户使用场景最多的就是EDA工具。

在工具中完成仿真,就可以使用开发板,将程序下载到实际芯片,进行测试了。

6.3:如何获得客户

要获得一个FPGA客户,有6个步骤

第一步:做宣传,品牌营销,让客户知道。

第二步:深入介绍产品,让用户了解具体的产品。

第三步:帮助客户做验证,AE介入,评估产品是否适合客户。

第四步:与客户深入互动,解决客户遇到的问题。

第五步:免费试用,指导操作,促成客户购买芯片。

第六步:建立长期合作关系,加深客户的忠诚度。

6.4:如何更好的支持客户

客户可能不会给RTL代码,所以,很可能需要现场进行调试。

6.5:FAE是软件的最重要的客户

对于初创公司,需要尽快的发布产品,获得收入。所以,产品很有可能并不成熟。

所以,FAE可能会面临很多问题。

好了,大概就从这6个方面,重新学习一下FPGA的基础知识。

相关推荐
行思理9 分钟前
go语言应该如何学习
开发语言·学习·golang
oceanweave1 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
吴梓穆3 小时前
UE5学习笔记 FPS游戏制作43 UI材质
笔记·学习·ue5
学会870上岸华师3 小时前
c语言学习16——内存函数
c语言·开发语言·学习
XYN614 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
啊哈哈哈哈哈啊哈哈4 小时前
R3打卡——tensorflow实现RNN心脏病预测
人工智能·深度学习·学习
KangkangLoveNLP4 小时前
深度探索:策略学习与神经网络在强化学习中的应用
人工智能·深度学习·神经网络·学习·机器学习·自然语言处理
穷儒公羊5 小时前
第一部分——Docker篇 第六章 容器监控
运维·后端·学习·docker·云原生·容器
CAE虚拟与现实5 小时前
记录一下学习docker的命令(不断补充中)
学习·docker·容器·容器化·docker部署·docker命令
茶茶只知道学习5 小时前
(2)网络学习之堡垒机
网络·学习