从1985年第一颗FPGA诞生至今,FPGA已经历了将近20多个年头,从当初的几百个门电路到现在的几百万门、几千万门等等,从原来的上千元的天价到现在几元的超低价,可谓是出现了翻天覆地的变化。所以当前正是学习FPGA的最好时机,无论是社会的需求也好,还是技术的成熟度也好,已经达到了前所未有的高度,我们可以花更少的成本,并以最快的速度掌握一种新的前沿技术,这对我们的未来发展将会是非常大的帮助。FPGA是在PAL、GAL、CPLD等可编程器件的基础上一步一步发展起来的。PAL是与阵列可编程或阵列固定,它的缺点是:PAL采用熔丝工艺,只能一次编程,并且它的输出是固定的,不能编程;也就是说芯片一旦选定,输出结构将不可改变。GAL是在PAL的基础上发展起来的,可以重复编程。与PAL的最大区别是:输出结构可以由用户自己定义。但它结构简单,I/O数目有限。CPLD是在GAL的基础上发展起来的。它主要由输入输出控制单元、宏单元和互连矩阵等组成。随着电子市场对功能要求的不断提高,CPLD越来越不能满足市场的需求。它最大只有512个宏单元,大部分是组合逻辑,难以实现复杂的时序逻辑设计,并且功耗很大。随着工艺的发展,FPGA登上了历史舞台成为主角,他内部资源丰富,不管是时序逻辑还是组合逻辑都很多。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
一般的FPGA内部是由最小的物理逻辑单位LE、布线网络、输入输出模块以及片内外设组成,所谓的最小物理逻辑单元IE,就是指用户无法修改的、固定的最小的单元,我们只能将这些单元通过互联线将其连接起来,再通过输入输出模块与外界通信,然后实现用户特定的功能。一个LE由触发器、LUT以及控制逻辑组成,可以实现组合逻辑和时序逻辑;随着FPGA集成度的不断增加,它内部的片内外设也越来越多,集成SRAM、Flash、AD、RTC等外设,真正实现单芯片解决整个系统功能的目的。所以我们所理解的FPGA最底层是一些实实在在的门电路构成,然后由门电路构成最小的物理逻辑单元,然后通过布线层将这些最小物理逻辑单元连接成用户需要的特定功能,我们所需要控制的是布线层之间的互连开关,这也是我们编程的对象,通过这些开关来改变功能。
当今的FGPA按工艺分主要有SRAM工艺和Flash工艺两类,工艺是针对它们的编程开关来说的,SRAM工艺的FPGA最大的特点是掉电数据会丢失,无法保存,所以它们的系统除了一个FPGA以外,外部还需要增加一个配置芯片用于保存编程数据,每次上电的时候都需要从这个配置芯片将配置数据流加载到FPGA,然后才能正常的运行;但是Flash架构的FPGA掉电不会丢失数据,无需配置芯片,上电即可运行,它的特点非常类似ASIC,但是又比ASIC更加的灵活,可以重复编程。在一些小规模的公司或者产品量不是很大的时候往往更倾向于用FPGA来取代ASIC,不仅能够降低风险,而且能够降低成本。
FPGA由于其特殊的结构、可编程的特性以及开发周期短、功能强、可靠性高和保密性好等特点广泛地应用于各个领域。它较之于其它电子器件又有什么优势呢,同CPLD相比,FPGA具有逻辑资源丰富,规模与密度高的特点,CPLD与FPGA同属可编程器件类型,但是CPLD内部只有组合逻辑,难以实现时序逻辑,而且逻辑单元有限,只能做一些小规模的对时序要求较小的电路,而FPGA既有时序逻辑也有组合逻辑且资源丰富,这大大促进了FPGA的应用,更重要的是FPGA由于工艺的不断改进,其功耗比CPLD小很多。对于MCU大家应该不是太陌生,但是与FPGA相比,由于MCU以软逻辑实现功能,而FPGA通过硬件连线逻辑来实现功能所以它在速度及应用灵活性方面还是有一定差距的。ASIC为专用集成电路,FPGA与之相比具有编程灵活性高,中小规模时设计成本低以及设计周期短等优势。
简单地比较了现在市场上的电子器件之后,我们来详细地分析一下MCU与FPGA之间的区别:MCU又称为单片机,它为8位的微控制器,主要用在工业控制,FPGA则为可编程逻辑器件的一种,拥有丰富的硬件资源,可实现强大的逻辑功能,由于其硬件重构的特性,适合各种领域的应用;MCU的编程语言主要为C语言,以软逻辑实现,它通过顺序执行指令来实现特定功能,避免不了低速的缺点,相比之下,FPGA它以Verilog或VHDL等硬件描述语言为编程语言,由于直接由硬件实现逻辑,所以它并行执行,从而使速度大大提高;MCU的这种同一时间只能处理一条指令的特点也影响了它的应用,它只能用于一些算法的设计及简单的控制,而FPGA由于并行执行的特性,大量应用于复杂逻辑控制以及大量的数据运算和处理。