ASIC与FPGA能达到的频率差异巨大是为什么
为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?
而FPGA呢?加法器可能已经不是你知道的那个加法器了(当然高端FPGA都有加法器的hard logic这个另算),它已经被FPGA综合工具变成了一堆LUTs,没错,就是前面所说的这些逻辑元素。乘法器同理。导线呢?不是一根不间断的直导线了,它首先要从一个逻辑块出发,先经过一个开关,进入布线管道,然后前面遇到了一个Switch Box(假设是Altera家的板子),也就是十字路口,经过十字路口中的开关跳转,它可能左拐了,然后又遇到一个SB,……几经周折,终于到了目的逻辑块的门口,又要经过一个开关,进入目的逻辑块和里面的逻辑元素相连,就这样构成一个可能再普通不过的加法器、乘法器,等等。
所以FPGA为什么频率肯定没有Asic高你现在一定清楚了。第一,实现同样的功能,FPGA需要更大的面积,在更大的面积的情况下,即使用纯导线,其导线总长度(或严格一点,critical path的导线长度)也要比asic的电路长吧?第二,其实也是最重要的一点,就是布线结构(routing architecture)非常复杂,一条导线从a到b,一般总要经过几个开关,而这些开关都是有延时的,这个延时非常大,是FPGA频率不得提高的主要原因。
上图中粉色线为一整条等电平的“导线”,又臭又长。asic看到了肯定会嫌弃有没有啊
(工具用的是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电路的距离,提高性能。
为了提高速度,还有很多方法,比如用流水线对逻辑做分段等等