大猪蹄子的个人博客

大猪蹄子

【教程 2】2、FPGA历史发展和现状

2024 / 2 / 9

简介

本章目的在于学习具体编程之前,先浏览一遍整个行业的规划和芯片的发展,至少在学会“怎么做”之前就应该明白“怎么来的”,“能做什么”——而不是傻乎乎的跟着例程敲代码,不知道在干啥

正文内容

在学习Verilog“编程”之前,这里我给出了几个问题,帮助大家来理解。注意这个“编程”的引号,我们先按下不表

2.1 为什么会有FPGA?或者说,FPGA怎么来的?

FPGA,File Program Gate Array,中文名现场可编程门阵列,属于数字芯片一种,除此之外还有模拟芯片等芯片分类,对应的工种为数字IC(芯片)设计、验证以及后端版图规划等工程师、芯片架构师等。那么这里首先就要引出数字芯片的概念,通常来说“数字信号01”处理的芯片都可以列为广义上的数字芯片,比如常见的所有电脑手机处理器(高通、AMD、INTEL的都算),部分通信基站,部分摄像头图像处理芯片(ISP)等——当然看得出来,大头还是处理器类的,如果这些数字芯片都能直接设计生产那么就没FPGA什么事了 。 20世纪80年代,三分之二的芯片项目由于需求变化、设计漏洞、流片失败等种种原因而赔钱,只有三分之一的芯片设计能够实际投入生产。因此业界急需一种技术能够在流片前充分测试与验证、从而降低流片失败率——所以FPGA应运而生。也就是说,FPGA不是被 “发现”出来的,而是顺应时代潮流必然出现的一种工具[1]——如果FPGA能够设计测试验证数字芯片,那么它结构应该是怎么样的?

2.2 FPGA为了实现流片验证的目的,它需要“长什么样”?

一般来说,这里说的流片验证的芯片指的是数字芯片,FPGA需要做的就是“按照实际生产的逻辑架构”,在内部搭建起一个数字芯片来实际运行测试。这里说明了几个特点,第一,FPGA内部的电路是可编程的;第二,根据第一个结论进行发散推理,FPGA可以在理论上实现任何数字芯片。

怎么理解这两句话?第一点,它指的是FPGA内部实际上是一堆可以相互连接的电路,包含可编程的功能逻辑和连接各个功能逻辑的电路“连接线”,通过不同的连接和功能逻辑的组合实现不同的功能;第二点,它指的是你可以把FPGA内部的电路连接设计成路由器结构并且可以实际运行,这个时候它就是一台路由器,也可以把电脑芯片做进去,这个时候它就是台电脑——一块芯片既可以做成路由器,下一秒也可以切换成电脑,这就是内部电路可编程的具体体现,理论上也可以实现任何数字芯片。

关于现代FPGA的结构解析可转附录详细阅读,这里只做入门概要。

3.3 FPGA能做路由器,在电脑上用C\Python也可以实现路由器的功能,有什么区别吗?

那么FPGA和路由器本身有什么区别呢? 从结果来看,两者实现的功能确实是一样的,但是,两者实现的方式大不一样。FPGA是真的把某个路由器的芯片在自己的电路结构中实现了路由器的协议,他就是一个路由器;而电脑是用自己电脑X86或者ARM的架构来实现了同一种路由器的协议,本质上他还是电脑。所以FPGA能够作为路由器芯片的硬件电路流片验证,电脑只能做它的软件协议的验证。 而路由器和FPGA搭成的路由器有什么区别呢?也就是说由FPGA模拟的A芯片和实际量产的A芯片有什么区别吗?理论架构上是没有区别的,但是实际布局布线上有区别——这里引出了数字IC设计后端的工作内容,版图规划[2]。前端的人员负责在FPGA内部设计并验证完成A芯片的架构和功能的完整性,但是FPGA是可编程的,内部的走线肯定是弯弯绕绕的,功能逻辑和数据寄存、读写RAM\ROM也是均匀分布的,这些功能布局在设计阶段确实是必须的,但是在设计完成之后就不需要了。后端版图设计的工作就是将可编程的电路结构拆解,将固定逻辑从均匀分布到集中,将弯弯绕绕的可编程连线改成直连等等。在后端的工作之后,芯片架构布局布线更加合理(芯片面积---,最大可运行时钟+++),去除优化不需要的寄存器RAM\ROM等(功耗----)。这样你就可以明白实际的A芯片和FPGA搭出来的A芯片的区别了。

FPGA和流片ASIC内部架构对比

3.4 FPGA既然什么都能做,为什么不用到死?

将FPGA用到死就是一个极端了,上面在讲解数字IC后端工作的时候已经提到一部分, 这里要谈到具体的性能参数,就像一个人看起来啥都会,其实啥都不精——对FPGA来说也是,像一颗成熟的intel Core i9-14900k,随随便便运行频率5个Ghz起步,半个人类都要感谢你,但是FPGA一般系统最高频率不超过300-400Mhz(IO可以更高,但是是纯采集输入输出,无法进行算法处理)。为什么?因为FPGA要想实现各种结构,它的内部资源一定是偏向于均匀分布(逻辑资源等)、指定分布(时钟布线等)的。这就造成FPGA内左右两边电路连线延迟可以达到ns级别,在上百M的电路中已经影响很大了,更别说上G了。所以FPGA虽然看起来啥都能做,但是很难处理上G的信号(有,但是不是你想的那样1个G的时钟在内部跑,以后会学到再说)。实体芯片因为是根据需求规划的电路,频率和性能当然各个方面都要比FPGA强,除了比较花钱,《比较花钱》,《比较花钱》,重要的事情说三遍。另一方面来说,FPGA的闲置资源太多,一般FPGA的逻辑规模大于其设计使用规模,这就造成了一部分闲置资源的电路通电浪费电费——当然这里还要提到流片的工艺实际上可能优于FPGA本身制造工艺带来的制程优势,进而进一步提高频率和能效比。大的公司在衡量投入产出比后,自然就该流片流片了。

3.5 FPGA既然什么都不精,为什么还要用?

因为FPGA不够精就不用它就是另一个极端了,你忘了开头的两个问题了吗?如果不用FPGA,用什么实现数字信号处理?动不动就流片吗?且不谈流片的成功率,光流片本身就是七八位数的投入,可不是一般公司消耗的起的。另一方面,并不是所有的芯片都要跑上G的频率,FPGA的频率已经可以应付很多芯片了。所以只要有频率不高,又不想流片的产品,用FPGA来实现,当然是不二之选,比如各类传感器矩阵的信息处理,比如雷达导航等。再换个角度,有的东西就是想用实体芯片跑一跑性能,但是又不想流片——比如神经网络的推理,想用上FPGA的加速特性吧,但我肯定又不是想流片吧?大的公司像地平线,寒武纪之类的AI芯片公司实际上已经流片了,小一点规模的比如打打比赛做做学术项目啥的还是用FPGA,这些都是FPGA在应用市场的一席之地。 另一方面来说,FPGA的本职工作还是提供数字IC的设计与验证,在这个领域几乎是不可替代的,至于性能高低这和FPGA本身没有太大关系,因为上面也提到了FPGA的能力也是有限的,只能在能力范围内去做芯片功能的验证。现在拿FPGA验证后流片的产品去吊打FPGA进而说明FPGA无用论,属于是过河拆桥了。这是FPGA在设计验证的《亿》席之地。

3.6 现在的FPGA还和以前一样吗?

这里得分几种情况说了:FPGA本身,FPGA的开发和FPGA的应用。先说FPGA的应用吧,从FPGA的背景故事我们可以知道,一开始FPGA是用来做数字IC验证的,但是2014年巨硬(微软外号)在计算机架构的顶级会议ISCA上发布一篇关于FPGA部署到自家的Bing(类似于百度)的服务器中做硬件加速,并得到了近乎一倍吞吐量提升的论文。从此各家开始了FPGA对人工智能的尝试,算是除了数字IC验证的第二春了吧;当然除了这两类大的方向,FPGA利用自己可编程并行处理的优势,在多路数据处理,高速ADDA等数据、数字信号处理方面也有一定的应用(抛开这些大佬们玩儿的不谈,附录会单独开一章讲我看到的2024秋招现状)。 第二点我们先说FPGA本身吧,世界上第一颗FPGA芯片Xilinx XC2064,在网上你可以找到这个FPGA的芯片级拆解和工作原理讲述[3],这里我们简单提一下这个芯片的内容:64个可编辑逻辑块+几十个IO口。每个逻辑块包含一个4输入的LUT和输出的寄存器,LUT就是实现组合逻辑的部分,可以实现任何四输入排列组合的真值表。现在呢,我们拿前世界最大FPGA 举例UltraScale+ VU19P,超过2000个用户可编程引脚、9百万可编程逻辑单元、224Mb片上内存以及3800个DSP单元。这些年来FPGA芯片本身增加了什么?——逻辑单元变多了,增加了片上内存,增加了DSP单元,增加了管脚。当然逻辑单元的架构也更新了。这里我们可以看出来的是,逻辑资源和管脚的更新是必然的,那么新加入的片上内存和DSP是干嘛的?第一个片上内存是为了做一些内部的小数据缓存工作,速度更快,操作更方便,如果使用外部DRAM的话就太麻烦了,具体有多麻烦可能得你们自己试试就知道了;第二个DSP是FPGA中做乘除法等复杂算法时会用到的,FPGA中如果用逻辑资源做这个的话,可能一个项目得有一半资源都花在这个上了,所以加入DSP辅助运算当然是明智之选。总的来看FPGA的整体架构并没有发生翻天覆地的变化,只是为了适应时代增加了很多附加功能,但是对于FPGA来说,由于每个模块都是可编辑,这些功能都是选装的,并不会拖后腿。 第三点我们再说FPGA开发,相比较于FPGA架构,FPGA的开发环境在近年可谓“万物生机,勃勃竞发”。通过XC2064拆解那篇文章可以看到1984年早期的FPGA开发方式以图形化为主,1982年真正的编程语言HDL(Hardware Description Language,硬件描述语言),VHDL出现,后续出现了更加“人性化”的Verilog,FPGA的开发便快速进入了代码编程的时代,但是现在的Verilog代码还是基于C的,甚至层次比C还要再低一点,FPGA在这段时间随着制程工艺的进步每两年翻一番,Verilog底层次的开发越来越不能满足日益增长的芯片资源,想要开发更高层次的系统,更高层次的编程方式迫在眉睫——于是就有了HLS(High Level Synthesis,高级层次综合),即用C/C++的语法来编写FPGA的架构,编译器自动转为Verilog。但是HLS至今还没有发展完全,因为基于FPGA的C/C++和原生的C/C++还是有很多细节不同,这些细节是可以影响大局的。怎么让编译器更好的理解C/C++也是现在FPGA大会的重要议题之一。除此之外,FPGA还发展出了带ARM、RiscV等的二合一版本,以及用Pyhton编程的分支,但是这些就不是一般人能接触到的了(说白了就是我没玩明白,把握不住)。 FPGA除了编程方式的提升以外,编程的内容也随着时代变迁变更着,从最底层的电平变化,到现在,各个厂商将各种常用的功能封装成固定的IP, 编程的内容也变成了IP+IP+IP的方式(造轮子,bushi)。 关于现代FPGA的结构解析可转附录12.1详细阅读,这里只做入门概要。

FPGA内部结构图

3.7 目前全球市场是什么情况?

其实关于FPGA的背景已经介绍的差不多了,不过我们可以聊一聊那些FPGA的公司怎么样了。从1984年Xilinx刚刚创造出FPGA开始,曾有上百家行业巨头尝试进军FPGA,其中不乏intel(嘤特尔)、Samsung(三丧)、Philips(飞利浦)、AMD(YES!)这样的大公司——但是现在留下来的只有四家:Xilinx(赛灵思)、Altera(奥特拉)、Lattice(莱迪思)、Microsemi(美高森美),当然还有一些谈不上名字的小公司——其中Xlinx(56%)和Altera(31%)占了近90%的市场[4]。现在的情况是Xlinx依然行业领先,不过在2022年被AMD纳入麾下;Altera在2015年投身intel,完成intel史上最大的一笔收购;最后,Lattice也在2017年投身苹果(AMD, INTEL, APPLE:对不起,有钱真的可以为所欲为)。 中国本土市场具有世界市场的三分之一,在这种广阔前景下,国产FPGA在近年渐渐崛起,现在有安路(Anlogic),高云(Gowin),紫光同创等品牌。前年有幸接触到高云FPGA产品,有兴趣的可以看当时写的图文[5]。在贸易战以及芯片战争以后,国产的FPGA以及数字IC这个行业才真正被重视起来。国外的altera以及xilinx的芯片在国内往年占领的市场变得愈发紧张,一方面是因为芯片禁运,另一方面也是国产FPGA 的崛起使ALTERA和XLINX“被迫”放弃了低端市场——而这也恰恰是国内用的最多的 。比如现在一片低端的altera的cyclone FPGA价格已经翻了五六倍了,各行各业甚至出现了开发板比芯片本身还便宜的情况——FPGA也不例外,当然这也是整个芯片产业的缩影。

目前国内外市场常见品牌  

参考文献

[1]. 《详解FPGA-人工智能时代的驱动引擎》.石侃.清华大学出版社

[2]. 数字IC设计流程以及FPGA开发和数字芯片设计关系

[3]. 《世界第一颗FPGA芯片级拆解:详述工作原理》

[4]. 中国报告网-全球主要FPGA厂商有哪些与占有率

[5]. 《国产FPGA之光——高云系列开箱》

更新日志

20240726:初始搬运版本