IC基础(七):FPGA为什么与ASIC频率差异巨大?
为什么ASIC的频率可以达到GHz,而FPGA只能达到几百MHz?
为什么实现同样的电路,ASIC 频率总是比 FPGA 要高?
简单来看这是FPGA在要求“可重构”的特性时对速度做出的妥协。
FPGA
FPGA为了满足可重构的特性,被设计成了一个岛状的逻辑块矩阵电路,每个逻辑块里又有很多个相同的子逻辑块,每个子逻辑块中有要实现任意电路的各种元素,比如LUT(逻辑查找表),用于组合逻辑的构成,和FF(flip-flop,即触发器)用于时序电路的构成。
逻辑块之间是布线管道,其中有各种固定长短的线(segment)和连接这些线的开关(switch)们。
ASIC
一块ASIC电路要实现一个逻辑电路,只需按照你的电路设计图纸按原样把电路刻在芯片上,里面加法器就是我们在数电课本中看到的加法器,乘法器就是所熟知的乘法器,导线也是熟悉的不能再熟悉的没有中断的一根金属线而已。
FPGA中的加法器和乘法器呢?
加法器可能已经不是你知道的那个加法器了(当然高端FPGA都有加法器的hard logic这个另算),它已经被FPGA综合工具变成了一堆LUTs,没错,就是前面所说的这些逻辑元素。乘法器同理。
FPGA中的导线呢?
不是一根不间断的直导线了,它首先要从一个逻辑块出发,先经过一个开关,进入布线管道,然后前面遇到了一个Switch Box(假设是Altera家的板子),也就是十字路口,经过十字路口中的开关跳转,它可能左拐了,然后又遇到一个SB,……几经周折,终于到了目的逻辑块的门口,又要经过一个开关,进入目的逻辑块和里面的逻辑元素相连,就这样构成一个可能再普通不过的加法器、乘法器,等等。
所以FPGA为什么频率肯定没有ASIC高你现在一定清楚了。
第一,实现同样的功能,FPGA需要更大的面积,在更大的面积的情况下,即使用纯导线,其导线总长度(或严格一点,critical path的导线长度)也要比ASIC的电路长。
第二,其实也是最重要的一点,就是布线结构(routing architecture)非常复杂,一条导线从a到b,一般总要经过几个开关,而这些开关都是有延时的,这个延时非常大,是FPGA频率不得提高的主要原因。
要使FPGA做到完全和ASIC速度一样快应该是不可能的,这是由它的可重构特性直接决定的。
但折中的办法不是没有,比如我前面提到hard logic,就是把一些通常使用频次很高的逻辑电路直接以ASIC的方式嵌入到FPGA里面,比如加法器乘法器等等,一旦要用到它们,也就不用再像以前那样用好多个逻辑块来造它了,这样就减小了面积、提高了速度、降低了功耗。现在高端一点的FPGA里面不仅有这些加法乘法器的小玩意,还有存储器,DSP,微处理器等等。它们的目的都是相同的,就是为了在保证可重构特性的情况下,尽量拉近与ASIC电路的距离,提高性能。
Hello world! Keep coding!