Intel FPGA数字信号处理设计(基础版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 FPGA的工作原理

众所周知,类似于PROM(Programmable Read Only Memory,可编程只读存储器)、EPROM(Erasable Programmable Read Only Memory,可擦可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read Only Memory,电可擦可编程只读存储器)可编程器件的可编程原理是通过加高压或紫外线使三极管或MOS管内部的载流子密度发生变化,实现所谓的可编程的,但是这些器件大多只能实现单次可编程,或者编程状态难以稳定。FPGA则不同,它采用了LCA(Logic Cell Array,逻辑单元阵列)这样一个新概念,内部包括CLB(Configurable Logic Block,可配置逻辑模块)、IOB(Input Output Block,输入/输出模块)和内部连线(Interconnect)三部分。FPGA的可编程实际上是改变了CLB和IOB的触发器状态,这样可以实现多次编程。由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求。目前主流的FPGA都采用了基于SRAM工艺的查找表结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找表结构。

根据数字电路的基本知识可以知道,对于一个n输入的逻辑运算,不论是与、或运算,还是其他逻辑运算,最多只可能存在2n种结果。所以如果事先将相应的结果存放于一个存储单元,就相当于实现了与非门电路的功能。FPGA的原理也是如此,它通过烧写程序文件配置查找表的内容,从而在相同电路结构的情况下实现不同的逻辑功能。查找表在本质上就是一个RAM。目前,FPGA中多使用4~6输入的LUT,所以每个LUT都可以看成一个有4~6位地址线的RAM。当用户通过原理图或HDL语言描述一个逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有可能结果,并把真值表(结果)事先写入RAM,如表1-1所示。这样,每输入一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

表1-1 LUT输入与门的真值表

从表1-1中可以看到,LUT具有和逻辑电路相同的功能。实际上,LUT具有更快的执行速度和更大的规模。由于基于LUT的FPGA具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序逻辑与组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此工作时需要对片内RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式编程。加电时,FPGA芯片将EPROM中的数据读入片内RAM,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此FPGA能够反复使用。FPGA的编程不需要专用的FPGA编程器,只需用通用的EPROM、PROM编程器。Actel、QuickLogic等公司还提供反熔丝技术的FPGA,具有抗辐射、耐高低温、功耗低和速度快等优点,在军品和航空航天领域中应用较多,但这种FPGA不能重复擦写,在开发初期应用比较麻烦,费用也比较昂贵。