为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?

作者:岑川
链接:https://www.zhihu.com/question/51179323/answer/124680433
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

为什么实现同样的电路,asic频率总是(几乎是一定)比FPGA要高?简单来看这是FPGA在要求“可重构”的特性时对速度做出的妥协。FPGA为了满足可重构的特性,被设计成了一个岛状的逻辑块矩阵电路,每个逻辑块里又有很多个相同的子逻辑块,每个子逻辑块中有要实现任意电路的各种元素,比如LUT(逻辑查找表),用于组合逻辑的构成,和FF(flip-flop,即触发器)用于时序电路的构成。逻辑块之间是布线管道,其中有各种固定长短的线(segment)和连接这些线的开关们(switch)。一块Asic电路要实现一个逻辑电路,只需按照你的电路设计图纸按原样把电路刻在芯片上,里面加法器就是你在数电课本中看到的加法器,乘法器就是你所熟知的乘法器,导线也是你熟悉的不能再熟悉的,没有中断的一根金属线而已。

而FPGA呢?加法器可能已经不是你知道的那个加法器了(当然高端FPGA都有加法器的hard logic这个另算),它已经被FPGA综合工具变成了一堆LUTs,没错,就是前面所说的这些逻辑元素。乘法器同理。导线呢?不是一根不间断的直导线了,它首先要从一个逻辑块出发,先经过一个开关,进入布线管道,然后前面遇到了一个Switch Box(假设是Altera家的板子),也就是十字路口,经过十字路口中的开关跳转,它可能左拐了,然后又遇到一个SB,……几经周折,终于到了目的逻辑块的门口,又要经过一个开关,进入目的逻辑块和里面的逻辑元素相连,就这样构成一个可能再普通不过的加法器、乘法器,等等。

所以FPGA为什么频率肯定没有Asic高你现在一定清楚了。第一,实现同样的功能,FPGA需要更大的面积,在更大的面积的情况下,即使用纯导线,其导线总长度(或严格一点,critical path的导线长度)也要比asic的电路长吧?第二,其实也是最重要的一点,就是布线结构(routing architecture)非常复杂,一条导线从a到b,一般总要经过几个开关,而这些开关都是有延时的,这个延时非常大,是FPGA频率不得提高的主要原因。

<img src="https://pic2.zhimg.com/50/1ebba50919599274f79a74fa59ac3c55_b.jpg" data-rawwidth="1630" data-rawheight="1612" class="origin_image zh-lightbox-thumb" width="1630" data-original="https://pic2.zhimg.com/1ebba50919599274f79a74fa59ac3c55_r.jpg">为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?
上图中粉色线为一整条等电平的“导线”,又臭又长。asic看到了肯定会嫌弃有没有啊……

<img src="https://pic3.zhimg.com/50/ab476e7198a716aaded841478d91053c_b.jpg" data-rawwidth="1654" data-rawheight="1578" class="origin_image zh-lightbox-thumb" width="1654" data-original="https://pic3.zhimg.com/ab476e7198a716aaded841478d91053c_r.jpg">为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?上图绿色方块是一个SB!粉色线还是刚刚那条“导线”。注意是“一条”导线哦。现在知道FPGA中导线们的十字路口有多复杂了吗?

(工具用的是VPR [2],学术界的开放综合工具。商业工具看不到这么详细的routing arch)

实际上,题主这个问题在06年已经被多伦多大学的课题组调研过了[1],他们的研究表明,对于一个只有组合和时序逻辑(没有memory等)的电路来说,平均下来,在FPGA上实现需要40倍于asic电路的面积,3~4倍的关键路径延时,和12倍的功耗。而这里面其实吧,大多数都是布线结构的锅。面积上,布线结构一般要占FPGA总面积的60~70%左右,延时上,这个数字只会更高。所以FPGA的布线结构和布局布线算法是一个FPGA领域中很重要的一个研究方向。

要使FPGA做到完全和asic速度一样快应该是不可能的,这是由它的可重构特性直接决定的。但折中的办法不是没有,比如我前面提到hard logic,就是把一些通常使用频次很高的逻辑电路直接以asic的方式嵌入到FPGA里面,比如加法器乘法器等等,一旦要用到它们,也就不用再像以前那样用好多个逻辑块来造它了,这样就减小了面积、提高了速度、降低了功耗。现在高端一点的FPGA里面不仅有这些加法乘法器的小玩意,还有存储器,DSP,微处理器等等。它们的目的都是相同的,就是为了在保证可重构特性的情况下,尽量拉近与asic电路的距离,提高性能。

为了提高速度,还有很多方法,比如用流水线对逻辑做分段等等,这里就不多说啦。题主还有什么问题还都可以问我~

Ref:
[1]. I. Kuon and J. Rose, “Measuring the gap between FPGAs and ASICs,” inProceedings of the Internation Symposium on Field Programmable Gate Arrays (FPGA ’06), Monterey,California, USA, ACM Press, New York, NY, Feb. 22–24, 2006, pp. 21–30.
[2]. J. Rose, J. Luu, C. Yu, O. Densmore, J. Goeders,A. Somerville, K. Kent, P. Jamieson, and J. Anderson.The VTR Project: Architecture and CAD for FPGAsfrom Verilog to Routing. In ACM/SIGDA Int.Symposium on Field-Programmable Gate Arrays,pages 77–86, 2012.
[3]. V. Betz, J. Rose, A. Marquardt, “Architecture & CAD For Deep-Submicron FPGAs”, Kluwer Academic Publishers, 1999.