一:什么是FPGA?
Field Programable Gate Array,现场可编程门阵列。当然,它和 CPU,GPU一样,都是半导体芯片的一种。
1.1 先看看最复杂的,什么是逻辑门阵列?
它由大量的逻辑门阵列组成,逻辑门阵列是什么,用来做什么?我们来看一个全加器的逻辑结构图就明白了。
上面就是一个完成 Cin + A + B 的一个 二进制的加法运算器,也就是说逻辑门是用来完成1,0运算的电路设计。
使用这些最基本的逻辑门,就可以组合成复杂的运算模块,最终形成一个个功能特异的 IP( Intellectual Property)。
实际上,正常的芯片都是通过逻辑门组成的,但FPGA的逻辑门有什么不同吗?
不同,FPGA的逻辑运算式是通过查找表(Lookup-Table LUT)方式实现的。这有点象我们写软件时,使用的索引表,先把所有的结果放到索引表对应的库中,输入参数,直接获取结果。这个很神奇,大概的意思就是,如果你是 2 个输入,那就用 4个bit来存储所有的结果,如果是 3 个,那就是 8bit,如果是 6 输入,那就是使用 64 bit 来存储结果。
总结:
N个输入项的逻辑函数可以由一个2^N为容量的SRAM来实现
N个输入的查找表可以实现任意N个输入变量的组合逻辑函数
我好象是明白了,但又没有完全搞懂,但大概知道查找表是什么了吧。但通过查找表来实现真实的运算,我还是没有想太明白。
1.2 什么是可编程
这个可编程和 CPU,GPU的编程是不同的。CPU编程对于电脑CPU,那就是纯数据处理方面的,不可以把一颗CPU通过编程后变成网络交换芯片(干的事情不一样),但FGPA可以通过编程更改逻辑阵列,也就是芯片的作用可以在编程中发生变动。比如:将网络芯片变成视频处理芯片。
1.3 现场代表什么?
这指的是可以在运行时更改程序,这个好象对于凡是支持可擦除的ROM都可以做到。
那FPGA的应用场景有哪些呢?
1: 专用芯片流片前的硬件仿真或原型验证平台。这是早期的应用。
2:作为乐高积木,可以灵活的组成任何的数据电路。当然,这是理论上,因为受限于它的性能,其实它适用的还是数据中心,数据处理相关的功能。
二:FPGA的发展阶段
它被分成了三个阶段:
1: 1984年 Xilinx 推出了第一款商用的FPGA,这标志着第一阶段开始:发明阶段,为了解决流片成本高的问题,用来做流片前的验证工作。
2: 20世界90年代,迎来扩张阶段。专用于FPGA的EDA软件产生,
3: 进入21世界,进入累积阶段,FPGA也从可编程门阵列 转变为 功能复杂的可编程片上系统。为了易用性,为它提供了诸多可重用的IP。
2.1 3D FPGA的发展
为了突破摩尔定律的质疑,芯片从平面向立体发展,FPGA芯片也向垂直方向上扩展。
向3D方向探索的方案,主要有两个:Xilinx 的 SSI, Intel 的 EMIB
2.1.1 堆叠片互联(SSI)技术
由于越大面积的芯片的成功率越低,所以,将面积缩小然后通过别的方式连接起来,自然是一个很容易想到的选择,当然需要一系列手段保证各片之间的联通。于是,有了 SSI技术。
原理很简单,加了一层无源硅中介层,在中介层上可以放置多枚硅片,这些硅片通过中介层里的硅通孔,微凸块以及大量连线进行互联。
优点:能更快速生成良率更高的大型FPGA(因为面积变小了)。
缺点:缺点好象很多
1: 随着工艺成熟,在大的硅片上的良品率大大提高,SSI必要性降低。
2: 性能大大降低,因为有了更多的连接环节。
3: 多块芯片的逻辑划分,为了尽量使硅片不散落在各个区,导致设计难度增加。
4: 设计工具的复杂度升高。
2.1.2 嵌入式多管桥联(EMIB)技术
对于不同IP(功能)的芯片,要让它们异构整合,英特尔提出了EMIB技术。
原理是增加硅桥接层,重新定制硅边缘的I/O引脚,以配合桥接标准。
优点:与SSI相比,降低了设计难度和传输时延。实际上,英特尔对EMIB的使用目前只是将FPGA与收发器以及高带宽存储器HBM进行连接。可编程模型只针对一枚完整的FPGA。
缺陷:
1: 如果要做较大的晶片时,良品率有问题。
2: 不同IP混一起,造成不规则的晶片结构,芯片工作时,两端的一致性可能会成为问题,比如:发热问题。
实际上,上面两种技术,很多认为并非真正的3D,最多能算作 2.5D。
2.2 从FPGA 到 ACAP
与FPGA相比,ACAP的不同点:AdapTIve Compute AcceleraTIon Platform
1: 芯片中固化了一组AI加速引擎阵列,可以加速神经网络的推断计算和一些常见数学计算和信号处理。每个AI加速引擎中,内置32位的RISC处理器,和一个有512位总线的向量处理器。每个AI引擎有32KB分布式内存,每个AI引擎之间以DMA方式共享传输数据。
2: 采用NoC(Network on Chip)技术,提高数据传输速率,减少布线。
3: FPGA 相对于CPU有一个较大缺点,FPGA的编译时间很长。所以,ACAP采用了更加规整的可编程逻辑阵列和时钟域分布。这样,提升IP接口复用性,这样IP移动位置时,不需要整个设计重新编译。
4: CLB(Configurable Logic Block)是FPGA的基本单元,在ACAP中,加大了CLB的面积,减轻了全局布线的压力。每个LUT也新增了一个额外的输出,这样可以合并部分LUT,另外,原有加法器中的进位链被替换(为什么要替换?)
5: 针对SSI技术做了优化,采用了更多的硅片间的互联通道。
6: 引入固化的NoC网络,将数据传输与计算分离,缓解布线压力,提升速度。
2.3 英特尔 Agilex FPGA
对了,这并不是新的一种FPGA,只是基于10nm工艺的最新 FPGA。
Agilex 有敏捷和灵活的含义。灵活指的是可编程性,这里就不再多提了。敏捷指的是异构,它既可以是逻辑单元之间的异构,也可以是不同工艺的异构。
英特尔有两个绝技:一是x86架构,一是半导体制造工艺。
从2011年开始,英特尔为了巩固自己的大哥地位,推出Tick-Tock战略发展模式: 即Tick奇数年提升晶体管的制造工艺;Tock 偶数年改进处理器微架构。
2011年是Tick年,如今十年过去了,今年处是Tick年,工艺提升至10nm!
Agilex 使用了EMIB 技术,用来连接周边各类其它芯片。
芯片布局做了变化,变成流行的间隔排列,这样简化了设计过程中的硬件资源布局规划。在布局上会有更高的灵活性。
对芯片最小单元ALM做了架构优化。
增加了片上内存(MLAB)的逻辑密度。
对布线单元做了重新设计,对逻辑单元间的延迟做优化
2.3.1 CPU加速器方案
FPGA有一个主要应用场景是在数据中心作CPU的硬件加速器,用来加速各类应用。为了更好服务于CPU,首先要考虑就是与 至强CPU的兼容性问题。
首先是缓存一致性的问题,因为传输一定会用到缓存,而缓存协议,英特尔联合微软,阿里,思科,戴尔,EMC,Facebook, google,Hp , 华为 搞了一个,名为 CXL。与 AMD发起的CCIX(联合高通,ARM,华为,Xilinx),IBM发起的OpenCAPI(联合AMD,ARM,Xilinx,nvidia,google) ,看得出来,英特联合的厂商更多元,包含了更多的互联网与数据中心应用相关的厂商。
2.3.2 增强版HyperFlex架构
因为FPGA的时钟频率很低,所以需要使用更高的数据总线宽度,弥补时钟频率的不足。主要思路是加入很多名为Hyper-Register的小型寄存器,把原来比较长的时序分割成多个较短的路径,从而达到提升工作频率的目的。
但其实这有较多的问题,造成流水线算法变复杂,因此,Intel 升级架构。解决类似的问题。
2.3.3 OneAPI
Intel 使用OneAPI 来支持旗下所有芯片产品:CPU,GPU,FPGA,以及各种AI和其它应用的硬件加速器,提供统一的软件编程接口,使得开发者可以随意在底层硬件之间切换和优化。
FPGA这里只是科普了一下行业背景,后面再继续学习……