第1章 初识FPGA
1.1 FPGA是什么
1.1.1 名词解释
FPGA是一种以数字电路为主的集成芯片,于1985年由Xilinx创始人之一Ross Freeman发明,属于可编程逻辑器件(Programmable Logic Device,PLD)的一种。这个时间比著名的摩尔定律出现的时间晚20年左右,但是FPGA一经发明,后续的发展速度之快,超出大多数人的想象。图1-1中给出了FPGA芯片的实物图。
图1-1 FPGA芯片实物图
1.1.2 FPGA发展历程
在PLD未发明之前,工程师使用包含若干个逻辑门的离散逻辑芯片进行电路系统的搭建,复杂的逻辑功能实现起来较为困难。
为了解决这一问题,20世纪70年代,可编程逻辑阵列(Programmable Logic Array,PLA)问世,PLA中包含了一些固定数量的与门、非门,分别组成了“与平面”和“或平面”,即“与连接矩阵”和“或连接矩阵”,以及仅可编程一次的连接矩阵(因为此处编程是基于熔丝工艺的),因此可以实现一些相对复杂的与、或多项表达式的逻辑功能,PLA内部结构如图1-2所示。
图1-2 PLA内部结构
与PLA同时问世的还有可编程只读存储器(Programmable Read-Only Memory,PROM),其内部结构如图1-3所示。与PLA相同,PROM内部包含“与连接矩阵”和“或连接矩阵”,但是与门的连接矩阵是硬件固定的,只有或门的连接矩阵可编程。
图1-3 PROM内部结构
若只有与门的连接矩阵可编程,而或门的连接矩阵是硬件固定的,那么这种芯片叫作可编程阵列逻辑器件(Programmable Array Logic,PAL),根据输出电路工作模式的不同,PAL可分为三态输出、寄存器输出、互补输出,但PAL仍使用熔丝工艺,只可编程一次。PAL的结构图如图1-4所示。
图1-4 PAL结构图
在PAL的基础上,又发展出了通用阵列逻辑器件(Generic Array Logic,GAL),相比于PAL,GAL有两点改进:一是采用了电可擦除的CMOS工艺,可多次编译,增强了器件的可重配置性和灵活性;二是采用了可编程的输出逻辑宏单元(Output Logic Macro Cell,OLMC),通过编程OLMC可将GAL的输出设置成不同状态,仅用一个型号的GAL就可以实现所有PAL器件输出电路的工作模式,增强了器件的通用性。GAL的结构图如图1-5所示。
图1-5 GAL结构图
早期的PLD主要由上述四种类型的芯片组成,即PROM、PLA、PAL和GAL。它们的共同特点是可以实现速度特性较好的逻辑功能,但由于其结构过于简单,所以只能实现规模较小的数字电路。
随着科技的发展、社会的进步,人们对芯片的集成度要求越来越高。早期的PLD产品不能满足人们的需求,复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)诞生。可以把CPLD看作PLA器件结构的延续,一个CPLD器件也可以看作若干个PLA和一个可编程连接矩阵的集合。CPLD的内部结构图如图1-6所示。
图1-6 CPLD结构图
FPGA比CPLD早几年问世,与CPLD并称为高密度可编程逻辑器件,但它们有着本质的区别。FPGA芯片的内部架构并没有沿用类似PLA的结构,而是采用了逻辑单元阵列(Logic Cell Array,LCA)这样一个概念,改变了以往PLD器件大量使用与门、非门的思想,主要使用查找表和寄存器。
除此之外,FPGA和CPLD在资源类型、速度等方面也存在差异,如图1-7所示。
图1-7 FPGA与CPLD的性能比较
FPGA的类型从内部实现机理来讲,可以分为基于SRAM技术、基于反熔丝技术、基于EEPROM/Flash技术。就电路结构来讲,FPGA可编程是指三个方面的可编程:可编程逻辑块、可编程I/O、可编程布线资源。可编程逻辑块是FPGA可编程的核心,我们上面提到的三种技术也是针对可编程逻辑块的技术。这三方面的可编程资源在后面的章节中会穿插讲解,在这里就不专门叙述了。FPGA的结构图如图1-8所示。
图1-8 FPGA结构图