FPGA的可编程技术

不同于软件代码最终是翻译成一条条指令供CPU执行,CPU内部电路是固定的,FPGA是内部电路根据用户所写的硬件代码而改变,即用户可以将自身设计的电路写入芯片,并可以反复更改,这种特性使得FPGA可适应各种不同的应用场合。那么FPGA芯片实现这一特性的原理是什么呢?又是哪种内部结构支撑电路反复更改呢?本文将介绍FPGA的可编程技术。

通过上一篇博客已经介绍了数字电路是如何搭建的,总结下来,基本组成元件是与或非三种门电路,由它们组成组合逻辑电路,组成触发器构成时序逻辑电路。

传送门: 数字电路是如何搭建的

FPGA内部的硬件资源是固定的,简单理解一下,FPGA内部有固定的与门和或门,根据硬件代码,将外部输入A和B接到与门就实现了A&B,接到或门就实现了A||B,可以理解为有两个开关,通过控制连接与门的开关闭合实现与逻辑,控制连接或门的开关闭合实现或逻辑。FPGA内部这个起到开关作用的结构被为可编程开关font>。所谓的可编程技术就是如何构成和控制这个可编程开关。

一. 可编程技术

FPGA通过可编程的开关来控制电路的结构,这种可编程开关可使用多种半导体技术来实现。FPGA历史上使用过熔丝,反熔丝,EPROM,EEPROM,SRAM与FLASH这几种技术来实现,现代FPGA常用的是其中的三种,反熔丝,FLASH和SRAM。

1.1 熔丝连接技术

熔丝连接技术是最早被用于PLD的可编程技术,它的概念与保险丝类似。当一个基于熔丝技术的可编程器件被买回来后,它的初始状态如下图所示,所有的熔丝都是连接状态,此时器件处于未编程状态。通过对器件的输入施加大的电流和电压,可以有选择的去除不需要的熔丝,以实现用户设计的逻辑电路,这个过程就是对器件编程。

FPGA的可编程技术

例如:要实现y = a&(!b)的逻辑,可可以熔断上图中间两条熔丝,如下图:

FPGA的可编程技术

基于熔丝连接技术的PLD被称为一次性可编程器件,即OTP(One Time Program),因为熔丝一旦熔断就不能再恢复#pic_center原状。

1.2 反熔丝技术

基于熔丝连接技术的器件输入端开始是连接的,通过把熔丝熔断进行编程,与其相反,基于反熔丝连接技术的器件输入端开始是断开的,通过把熔丝加上进行编程。如下图:

FPGA的可编程技术

自然,反熔丝也是一次性编程器件。

1.3 掩模编程器件-ROM

ROM是非易失的,通过一种称为掩模的技术将数据固化在ROM中。ROM单元的结构如下图所示,ROM中包含大量的行和列,每一列都有上拉电阻与逻辑1相连,还有一个晶体管和一个可能的掩模连接。通过掩模技术来控制哪些晶体管通过掩模连接到对应的列上。因为上拉电阻的存在,原本列上的值是逻辑1,当其中一行进入工作状态时,与此行相连的晶体管导通,有掩模连接的列被拉到逻辑0,这就是掩模编程的过程。所以,ROM中的值初始是全1的,通过编程将部分或全部改为0。基于ROM的PLD只能编程一次。

FPGA的可编程技术

1.4 PROM

PROM和ROM是类似的,不同在于,ROM的编程类似使用熔丝连接,PROM的编程则使用反熔丝熔断,显然,基于PROM的器件也是一次性编程器件。

FPGA的可编程技术

1.5 EPROM

从EPROM开始,后续的可编程技术就没有使用熔丝和反熔丝了,PLD也从仅可编程一次升级成了可多次编程。EPROM的单元结构如下图所示。当行工作时晶体管导通,与晶体管相连的列被拉到逻辑0,对EPROM进行编程是通过加大控制栅和漏极之间之间的电压(12V)来使得晶体管失效,从而与此相连的列回到逻辑1。

FPGA的可编程技术

与标准的MOS晶体管相比,EPROM晶体管多了氧化层绝缘的多晶硅浮栅,内部结构如下图所示。当晶体管处于未编程状态时,浮栅不带电,也不影响控制栅即栅极的一般操作。当在栅极和漏极之间加大电压(12V)时,在电压驱动下,高能电子穿越氧化层进入浮置栅,这一过程称为热电子注入。当编程信号撤销后,负电荷储存在浮置栅中,这些电荷非常稳定,正常状态下可保持10年以上。浮栅里存储的电荷阻止了栅极的正常操作,未编程的晶体管在行线加导通电压时正常导通,列线为逻辑0;已编程的晶体管无法导通,列线为逻辑1。这样就可以把已编程的单元和没编程的单元区分开。

FPGA的可编程技术

EPROM可以通过浮置栅放电来擦除,放电需要的能力由一个紫外(UV)射线源提供,擦除时间大约20分钟。另一个潜在的问题是,随着制造工艺的进步,晶体管越来越小,芯片表面大部分被金属覆盖,这是EPROM器件吸收紫外线照射变得困难,擦除时间会越来越长。

1.6 EEPROM

EEPROM实现可编程的思路和EPROM是相同的,EPROM通过栅漏间加大电压使浮栅带电来编程,通过紫外线照射使浮栅放电来返回未编程状态;EEPROM同样是在删漏间加大电压使浮栅带电,但可以通过在栅漏间加大的反向电压即加负压使浮栅放电。EEPROM单元结构如下图所示。

FPGA的可编程技术

EEPROM晶体管与EPROM晶体管结构基本一致,不同点在于EEPROM浮栅周围的SiO2绝缘层非常薄,使得浮栅上的电子可以在电压驱动下转移到漏极。

一个EEPROM单元由一个普通MOS管和EEPROM晶体管串联组成,并加入了控制栅线和源线。一个EEPROM单元体积约是同等EPROM单元的2.5倍,因为它包括两个晶体管和这两个晶体管之间的距离。因为体积的问题,EEPROM的容量一般都不大。EEPROM的优势则是电可擦除,比紫外线擦除方便很多。

1.7 FLASH

FLASH的全称是FLASH EEPROM,所以FLASH其实是EEPROM的一种,但为了区别,一般说EEPROM指的都是常规EEPROM并不包含FLASH。FLASH被称为闪存,“闪”反映出这种技术的擦除时间要比EPROM和EEPROM快很多,这是因为EEPROM是按字节擦除的,而闪存是按块擦除,所以速度更快。闪存根据写入方式不同分为两种:NAND型和NOR型。NAND型写入时需要高电压,而NOR型写入时需要大电流。

FLASH的单元结构和EEPROM相似,如下图所示。

FPGA的可编程技术

可以看到此单元由两个共浮栅共控制栅的MOS管组成,左边的MOS专门负责编程、擦除等操作,即是一个专用的写入/擦除晶体管,通过在左边MOS的控制栅极和源极间加正/负压来使浮栅带/放电,使得右边MOS也随之失效/有效。右边MOS管的作用相当于熔丝连接技术的熔丝font>,控制用户信号是否接入。

1.8 SRAM

SRAM即静态存储器的单元的原理如下图所示,左图是说明原理的门级电路图,右图是晶体管级别的电路图。SRAM单元由一个传输晶体管(Pass-Transistor,PT)和两个CMOS反相器构成的触发器组成,此处PT为一个NMOS管。SRAM单元利用触发器的双稳态(0和1)记录数据,通过字线来控制PT的导通/关断,导通时单元输出为数据,关断时单元输出为原值,通过字线和数据实现对SRAM单元的编程。

FPGA的可编程技术

SRAM单元只用到了普通结构的MOS管,这使得SRAM可以应用现在最先进的CMOS工艺,这也成为SRAM可编程开关的最大优点,这一优点使得现在大部分的FPGA都是基于SRAM的。另外,SRAM是易失性存储器,断电丢失配置信息,所以采用SRAM的FPGA都需要外挂一个非易失存储器(通常是FLASH)来保存配置信息。

二 . 总结

前面介绍的8种可编程技术是整个PLD中使用过的,而作为PLD的子类FPGA在历史上所使用过的可编程技术(暂时)只有其中的四种,即反熔丝,EEPROM,FLASH 和 SRAM,其中,EEPROM随着技术发展现已经被FLASH替代。所以现代的FPGA可编程技术只有三种:反熔丝,FLASH 和 SRAM。下表总结了三种可编程技术的特征。

项目 反熔丝 FLASH SRAM
非易失性 具备 具备 不具备
重配置次数 一次 10000次左右 无数次
制造工艺 CMOS工艺+反熔丝 FLASH工艺 CMOS工艺
工艺节点 落后最新CMOS工艺几代 落后最新CMOS工艺几代 最新CMOS工艺
配置单元尺寸 非常小 比较小(2个晶体管) 大(6个晶体管)
开关电阻 500~1000Ω 20~100Ω 500~1000Ω
开关电容 1~2 fF (1000 fF = 1 pF) < 1 fF 1~2 fF
功耗 适中 适中

反熔丝技术在功耗,开关电阻方面有优势,但只能一次写入导致此技术使用存在较大风险,而且无法使用最新的CMOS工艺,导致芯片集成度低,所以反熔丝技术应用很少。

闪存既可重复编程又有非易失性,但重写闪存需要的功耗大,所以不适用于需要频繁重写的情况。另外闪存工艺也相对落后,集成度不高,所以现在闪存大部分作为FPGA的外接程序存储器,而不是作为FPGA的编程主体。

SRAM的主要缺点是易失性,其它缺点还有待机功耗大,耐放射能力弱,安全性弱(电路配置信息可能被盗取)等,但能应用最新的CMOS工艺这一个优点就能遮蔽所有缺点,工艺先进意味着高集成度和高性能,目前市场上绝大部分的FPGA都是基于SRAM工艺的。

三. 参考

  1. FPGA设计指南 器件、工具和流程 [美]Clive “Max” Maxfield著 杜生海、邢闻 译
  2. 《FPGA原理与结构》第二章 日本 田野英晴主编, 赵谦译