如前所述,fpga是在pal、gal、epld、cpld等可编程器件的基础上进一步发展的产物。它是作为asic领域中的一种半定制电路而出现的,即解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。
由于fpga需要被反复烧写,它实现组合逻辑的基本结构不可能像asic那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流fpga都采用了基于sram工艺的查找表结构,也有一些军品和宇航级fpga采用flash或者熔丝与反熔丝工艺的查找表结构。通过烧写文件改变查找表内容的方法来实现对fpga的重复配置。
根据数字电路的基本知识可以知道,对于一个n输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n种结果。所以如果事先将相应的结果存放于一个存贮单元,就相当于实现了与非门电路的功能。fpga的原理也是如此,它通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。
查找表(look-up-table)简称为lut,lut本质上就是一个ram。目前fpga中多使用4输入的lut,所以每一个lut可以看成一个有4位地址线的 的ram。 当用户通过原理图或hdl语言描述了一个逻辑电路以后,pld/fpga开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)事先写入ram,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
下面给出一个4与门电路的例子来说明lut实现逻辑功能的原理。
例1:给出一个使用lut实现4输入与门电路的真值表。
表1 4输入与门的真值表
从中可以看到,lut具有和逻辑电路相同的功能。实际上,lut具有更快的执行速度和更大的规模。
由于基于lut的fpga具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序与逻辑组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域。其组成部分主要有可编程输入/输出单元、基本可编程逻辑单元、内嵌sram、丰富的布线资源、底层嵌入功能单元、内嵌专用单元等,主要设计和生产厂家有xilinx、altera、lattice、actel、atmel和quicklogic等公司,其中最大的是xilinx、altera、lattice三家。
如前所述,fpga是由存放在片内的ram来设置其工作状态的,因此工作时需要对片内ram进行编程。用户可根据不同的配置模式,采用不同的编程方式。fpga有如下几种配置模式:
并行模式:并行prom、flash配置fpga;
主从模式:一片prom配置多片fpga;
串行模式:串行prom配置fpga;
外设模式:将fpga作为微处理器的外设,由微处理器对其编程。
目前,fpga市场占有率最高的两大公司xilinx和altera生产的fpga都是基于sram工艺的,需要在使用时外接一个片外存储器以保存程序。上电时,fpga将外部存储器中的数据读入片内ram,完成配置后,进入工作状态;掉电后fpga恢复为白片,内部逻辑消失。这样fpga不仅能反复使用,还无需专门的fpga编程器,只需通用的eprom、prom编程器即可。actel、quicklogic等公司还提供反熔丝技术的fpga,只能下载一次,具有抗辐射、耐高低温、低功耗和速度快等优点,在军品和航空航天领域中应用较多,但这种fpga不能重复擦写,开发初期比较麻烦,费用也比较昂贵。lattice是isp技术的发明者,在小规模pld应用上有一定的特色。早期的xilinx产品一般不涉及军品和宇航级市场,但目前已经有q pro-r等多款产品进入该类领域。