第二章-FPGA的概要
目录
2.1 FPGA的构成要素
FPGA是可编程逻辑器件(PLD)的一种
现场:field
可编程:programmable
门阵列:gate array
实际上,FPGA并不是单纯由"门"形成的结构
如下图展示了一个典型的岛型(island style)FPGA结构。
FPGA大致由三大部分构成
第一部分是实现逻辑电路的逻辑要素(逻辑块,Logic Block,LB)
第二部分是和外部进行信号输入/输出的要素(I/O,input/Output Block,IOB)
第三部分是链接前两种元素的布线要素[布线通道、开关块(Switch Block,SB)、连接块(Connection Block,CB)]
除了这三大部分
其实还要一些必要电路,例如时钟树、配置/扫描链(configuration/scan chain)、测试电路
-
逻辑要素
可编程逻辑中逻辑块的实现有多种方式,比如GAL时代就有的乘积项(product term 是基于逻辑或运算的逻辑式表达方式,也就是AND-OR阵列结构)、查找表和数据选择器(Mutiplexer,MUX)
无论是何种方式,都是可以实现任意逻辑电路的可编程部分触发器(Flip-Flop,FF)等数据存储电路和数据选择器组成的
-
输入/输出要素
输入/输出要素是链接I/O引脚和内部布线要素的模块,其中包含上拉、下拉、输入/输出的方向和极性、转换速率(slew rate)、开漏(open drain)等控制电路
商用的FPGA通常支持时钟规格的输入/输出,其中包括;LVTTL、PCI、 PCI express、SSTL等单端I/O和LVDS等差分标准I/O。
-
布线要素
布线要素作为逻辑块间及逻辑块和I/O块间的连接部分
主要是由布线通道、连接块和开关块构成
布线通道还有多层构造、H-TREE构造等多种类型
布线要素中的开关可以编程配置,利用内置的布线资源可以形成任意的布线通路。
-
其他要素
逻辑块、I/O块、开关块和连接块全部由配置存储单元控制,用以实现任意逻辑函数和连接关系。
所有的配置存储单元前后相连,形成配置链,配置数据顺序写入配置链即可完成FPGA的配置
配置数据串行输入配置链,可以写入也可以读回。
类似配置链这种遍布整个器件的构造还有扫描路径、时钟网络等。
此外,FPGA上还有LSI测试电路、嵌入式处理器、块存储器、乘法器等固定功能的硬核电路。
2.2 可编程技术
前面介绍的,FPGA通过可编程的开关来控制电路结构,这种"可编程"的开关可以使用多种半导体技术来实现。
FPGA历史上使用过EPROM、EEPROM、闪存、反熔丝和静态存储器(SRAM)等
其中闪存、反熔丝和静态存储器是现代FPGA常用的可编程技术
2.2.1 闪存
1.闪存的原理
闪存是EEPROM的一种,属于非易失存储器,如下图2-2所示
闪存采用的是MOS晶体管技术,特点是绝缘层中含有浮置栅极(floating gate),即为浮栅。
是在一层不与外界连接的绝缘层(SiO2)中浮空的栅极。
闪存根据写入方式不同可以分为两种:NAND型和NOR型。
NAND:
在写入的时候需要高电压;
NOR:
在写入时候需要大电流。
下面以NAND型为例讲解闪存的原理
浮栅在写入之前不带电荷,晶体管表现为耗尽型,栅极零偏压电流也可流过;
浮栅在写入后带电,晶体管表现为增强型,栅极零偏压时电流不能流过;
因此根据在浮栅上存储的电荷,在电流流过时控制电压就可以产生“0”和"1"。
具体来说
当浮栅上没有电荷时,控制栅极上就算加低电压(1V左右)也会有电流流过;
当浮栅上存在电荷时,只有加相对较高的电压(5V左右)才会有电流通过;
浮栅中的电荷没有逃脱的路径,因此可以半永久地保存数据
没有连接到任何地方的浮栅如何锁住电荷呢?
写入时,在漏极和控制栅极间加高电压,电子可成为隧道电流注入浮栅(2-3a)
(隧道电流指量子力学中因隧道效应而流动的电荷。隧道效应指电子可以按照一定概率通过势垒的现象,
江崎玲于奈博士因发现了固体中的隧道效应,在1973年被授予诺贝尔物理学奖;
擦除时,在源极加高电压即可将浮栅中的电子以隧道电流的形式引出。(2-3c)
此外通常闪存能够以位(比特)为单位进行写入,但擦除是以块为单位的,也就是说它具有不能覆盖写入的特征。
基于闪存的可编程开关
如图为基于闪存的可编程开关的构造。
这种开关是由两个晶体管构成
左侧的小晶体管是对闪存进行写入/擦除时使用的
右侧的大晶体管是FPGA中控制用户电路的开关
两个晶体管有着共同的控制栅极和浮栅
从编程用的开关注入电子,就可以直接决定用户所使用开关的状态
基于闪存的可编程开关在实际编程时,和NAND闪存一样,利用隧道电流按照如下过程进行:
1、首先在编程晶体管的源极和漏极加5V电压,然后在控制栅极加-11.0V电压后电子就会流入
2、开关变为开启状态。
3、正常工作时控制栅极保持2.5V电压,这样浮栅的电位大致会维持在4.5V左右。
4、擦除时(开关关闭)让编程晶体管的源极和漏极接地(GND)
5、在控制栅极加16.0V电压后浮栅内电位就能降到0V一下;
2.闪存可编程开关的优缺点
闪存可编程开关的优点如下:
-
非易失;
-
尺寸比SRAM小;
-
LAPU(Live At Power-UP,上电后立刻工作);
-
可重编程;
-
对软件错误容错性强
闪存可编程开关的缺点如下:
-
重写时需要高电压;
-
无法使用最先进工艺CMOS(闪存的工艺不适合微缩化);
-
重写的次数有限
-
接通电阻和负载电容较大
2.2.2反熔丝
反熔丝开关的初始状态位开放(断开)状态,反熔丝在通电熔断(严格来说是熔合)后导通,它和熔丝的特性相反,因此被称为反熔丝。
反熔丝开关的构造和特点
Actel公司的反熔丝开关PLICE的构造如图2-5所示
PLICE使用多晶硅和n+扩散层作为导体,并在他们中间插入Oxide-Nitride-Oxide(ONO,氧化物-氮化物-氧化物)电介质作为绝缘体的构造。
ONO电介质厚度在10nm以下,通常在加以10V左右电压,并有约5mA电流流过时可以形成上下连接的通路。
反熔丝的尺寸大概和接触孔相当,ONO电介质型反熔丝的接通电阻大概为300-500Ω。
QuickLogic公司的反熔丝开关则是连接布线层的可控开关
因此也成为了Metal-to-Metal反熔丝
下图是QuickLogic公司的ViaLink构造
ViaLink反熔丝的构造是在上下两层金属布线层插入非晶硅(绝缘体)和钨插塞(tungsten plug)等导体
非晶硅在为编程时呈现高阻抗状态,也就是绝缘状态;
当通电编程处理以后,可以变为几乎和金属层连线同等程度的阻抗状态。
ViaLink的接通电阻大概为50-80Ω,变成所需要的电流约为15mA
Metal-to-Metal型反熔丝相比多晶硅主要有两种优势:
一、可以直接控制金属布线层的连接,因此面积小
二、反熔丝的接通电阻低,Metal-to-Metal型称为反熔丝技术的主流。
如果从器件的安全角度上讲,
静态存储器(static memory)会有从器件回读配置信息的可能,因此需要额外的加密措施。
反熔丝方式没有专用的配置路径,构造上不可能将配置信息读取出来。
反熔丝可编程开关的优点:
-
尺寸小、密度高
-
接通电阻和负载电容小;
-
非易失;
-
几乎不可能被逆向工程;
-
对软性错误容错性强;
反熔丝可编程开关的缺点:
-
无法重写
-
为了可编程性,每根线都需要1-2个晶体管
-
需要专用编程器,且编程时间长
-
无法测试写入缺陷
-
因此,编程后难以保证100%良品率
2.2.3 静态存储器
静态存储器实现可编程技术的FPGA。
CMOS型静态存储器单元的原理和构造如图2-7
左边图是说明原理的门级电路图,右图是晶体管级别的电路图。
左图可以看出要写入需要写使能
静态存储器由两个CMOS反相器构成的触发器和两个传输晶体管(Pass-Transistor,PT)组成。
静态存储器利用触发器的双稳态(0和1)记录数据,而数据的写入通过PT进行。
PT使用nMOS型晶体管
静态存储器通常根据地址信号来驱动字线(和图中Write信号相连),数据的读取也通过PT。
因此可以将存储单元输出的VDD到VTH(voltage drain指的是电源电压,Vth,阈值threshold电压,当通知栅极的电压超过该电压时晶体管的开关状态会被切换)
在FPGA中数据是直接从触发器读取而不是通过PT。
采用静态存储器作为可编程开关的FPGA大多在逻辑块中使用查找表,并使用数据选择器等来切换布线连接。查找表在后面介绍
静态存储器的优点:
-
能够应用最先进的CMOS工艺;
-
可重配置;
-
重写次数没有限制;
静态存储器的缺点:
-
存储器尺寸大;
-
是易失性存储器;
-
难以确保电路信息安全;
-
对软性错误敏感
-
接通电阻、负载电容较大
虽然静态存储器和其他可编程技术相比有不少的缺点,但是仅仅"能够"应用最先进的CMOS工艺“这一点就能遮蔽其他所有的缺点。当前,基于静态存储器的FPGA是先进CMOS制程的制程驱动产品(process driver).
2.2.4 可编程技术的总结
一、反熔丝
1、反熔丝在待机时耗电较低且连接开关的接通电阻小,因此速度快。
2、同时其内部电路信息难以读取,可用在机密性需求高的领域
3、一旦信息写如电路后就不能对电路配置进行重写
4、难以应用到最先进的工艺上,这导致电路集成度低。
二、闪存
1、闪存既可重编程又具有非易失性,因此支持LAPU(Live At Power-UP,上电后立刻工作);
2、静态存储器单元由多个晶体管组成,漏电流较大,而采用浮栅的闪存单元只是使用一个晶体管,有漏电流小的优势
3、闪存的数据重写比静态存储器需要更高的能量,也就是说重写闪存所需的功耗较大
4、闪存的数据重写次数有限制(1万次左右),因此并不使用于具有动态重配置等需要频繁重写操作的设备。
三、静态存储器
1、采用静态存储器FPGA需要在上电从外部读入电路配置信息。
2、静态存储器对数据重写次数没有限制,可以自由对电路进行重新配置;
3、可以在制造中采用最先进的CMOS工艺;
4、适合高集成度、高性能的器件。
5、而易失性是静态存储器的主要缺点,采用静态存储器的FPGA在断电后电路配置信息会丢失,因此不支持LAPU。
6、还有漏电流大导致待机功耗大、耐放射线能力弱、安全性弱等。
2.3 FPGA的逻辑实现
2.3.1 在FPGA上实现电路
下面我们使用一个多数表决电路来说明在FPGA上实现电路的原理
该电路将三个输入通过多数表决电路,结果为1时点亮LED。
实现整个实验需要按钮、LED、FPGA等电子部件。图2-8中虚线内部分是在FPGA上实现的电路部分
图2-9给出了多数表决电路的真值表、卡诺图和简化后的逻辑表达式。
在FPGA上实现的逻辑电路最好尽量简单,因为基于查找表的FPGA逻辑块,可以实现任何输入数再查找表电路输入数量之内的逻辑。
基于乘积项实现的可编程器件,需要先将表达式转换为标准积之和的形式。
图2-10展示了在FPGA上实现上述逻辑函数时使用的FPGA片上资源。逻辑电路的输入信号从FPGA的I/O PAD进入,经由内部的布线路径输入到逻辑块。
然后逻辑块基于上述真值表决定输出,最终经由布线路径输出到I/O PAD。
由于输出需要点亮FPGA外部的LED,要在输出部分插入缓冲器来提高驱动能力。
找找上述过程分解后的电路在FPGA内部的实现如图2-11所示。
FPGA内部由可编程开关决定信号线的连接路径,再由而编程的存储器,也就是查找表来实现逻辑函数。
2.3.2 基于乘积项的逻辑实现
为了说明FPGA逻辑块的实现方式,我们以乘积项方式为例来介绍PLA中的逻辑实现原理。图2-12位PLA的简明结构。
PLA由一个AND阵列和一个OR阵列连接构成,两个阵列都具有可编程的连接结构。
使用乘积项方式实现电路时,为了减少片上资源的使用量,需要计算逻辑函数的最小项之和。
积之和形式的逻辑函数可以将"与项"和“或项”分开,分别使用AND阵列和OR阵列实现。
乘积项的内部构造如图2-13所示。
在AND阵列内部,输入信号和各个AND门的输入通过可编程的开关连接。
OR阵列也同样将AND门的输出和OR门的输入通过可编程开关连接。
一般来说,AND阵列上可以实现k个最大输入数为n的逻辑与项。
k个输出再作为OR阵列的输入,OR阵列可以实现m个k输入的逻辑或项
如下图的实例可以实现4个三输入的乘积项逻辑函数
图2-14展示了再PLA上实现前面提到的多数表决电路的实例。
图中的交叉点处的菱形代表可编程开关,白色和黑色菱形分别代表开关关闭和打开的状态。
在本例中,AND阵列的第一个AND门的输入连接A和B,第二个AND门的输入连接A和C,然后第三个AND的输入连接B和C。
最后所有AND门的输出连接到OR阵列,就可以实现逻辑函数M
M = AB + AC +BC
2.3.3 基于查找表的逻辑实现
查找表是一个字(word)只有1位的内存表,字数取决于地址的位数。
FPGA上查找表的存储单元大多时用SRAM实现的
查找表的结构概要如图2-15所示。
可以实现任意3输入的逻辑函数
一般k输入的查找表由2的k次方个SRAM单元和一个2的k次方输入的数据选择器组成
图2-16 是采用查找表实现了2.3.1节中的多数表决电路的示例。
使用查找表时,先一句查找表的输入数对真值表进行装换,然后就可以将函数值(f栏)直接写入配置内存。
当所要实现的逻辑函数的输入数比查找表的输入数多时,可以联合使用多个查找表实现。
因此需要一种方法将多输入的逻辑函数分解为小于或者等于查找表输入数的逻辑函数(在第五章详细介绍)
查找表的构造
我们以Xilinx公司在FPGA中所采用的查找表构造为例,结合查找表的进化历史来介绍。
图2-17展示的是Xilinx早期FPGA中使用的静态存储器和查找表的结构。
图2-17a中的静态存储器由5个晶体管组成,现在这种结构比较少见。
查找表由于重写频率较低,因此削减了重写用的传输晶体管,以牺牲速度来换取更小的面积。
图2-17b是基于这种存储器单元的2输入查找表实例,其中M部分指的是图2-17a所示的5晶体管静态存储器单元。因为查找表中的静态存储器总是在输出数据,所以查找表只要加上F0和F1作为选择信号,就可以实现任意的逻辑电路
随后Xilinx的Freeman改良了查找表的配置存储器(如图2-18所示),让其可以作为FPGA上的分散存储器使用。
图2-18a中的存储器结构比上面的5晶体管多出一个晶体管,这使其可以在通常的配置路径(Addr和Data)之外独立写入端口(WS和d)。
WS是写入使能信号,而所选地址的输入d则由图2-18b上方的数据分配器从外部信号Din输入。
存储器的读取端口和查找表的输出是通用的
图2-18c为3输入查找表和8位RAM的结构示例。
在后来查找表除了作为存储器,还可以作为移位存储器使用,如图2-19所示。
这次的改良同样来自Xilinx公司,由Bauer发明并获得了专利
图2-19a的存储单元中,添加了两个用于移位控制的传输晶体管。
Din:来自外部的输入
Pre-m:来自前级存储器的以为输入
图2-19b的中间部分可以看出这些信号的连接关系
PHI1和PHI2为移位控制信号
PHI1和PHI2的输入必须是无重叠且相反的信号,如图2-20
通过PHI1开启下方的传输晶体管后,如果通过PHI2开启上方的传输晶体管,那么前级存储单元的输出就能和后级存储但愿你的输入相连,从而使得数据移位。
2.3.4 其他逻辑实现
下面我们介绍一下除了上述方式之外的逻辑块的实现方式。
除了乘积项和查找表还有一个就是数据选择器方式。
下面是Actel公司的FPGA产品ACT1为例来说明
图2-21
由3个2输入1输出的数据选择器(2-1 MUX)和1个逻辑或门组成,
可以实现多种8输入1输出以内的逻辑电路。
不同于乘积项或查找表,这种逻辑单元不能实现其输入数量之内的所有电路。
ACT1中最小的逻辑单元为2-1MUX。
表2-2列出了2-1MUX能够实现的逻辑函数
只要照表连接输入,就能实现其对应的逻辑函数
根据这个公式一套入就可以了
我们可以把2-1 MUX看作3输入1输出的逻辑单元。
本来三输入(3-LUT)应该可以实现256种逻辑电路,而2-1MUX只能实现表中所列的10种
图中的函数轮在EDA工具对所需逻辑进行香农展开分解作为参照使用。分解得到的逻辑如果在函数轮中,就可以单一MUX实现。
参考这个网址了解香农展开
图2-23给出了实现逻辑函数M= AB+AC+BC的具体方法
首先先用变量A对逻辑式进行香农展开,得到部分函数F1和F2。
由于这两个函数在前面的函数轮中存在,分别是AND和OR,因此都可用一个MUX来实现。
部门函数F1该函数的连接方式遵从表2-2中的第七个函数
其他逻辑单元的总结
下面对MUX型逻辑单元的优缺点进行总结
优点:
1、图2-21b所示的传输晶体管实现的MUX是一种晶体管较少的逻辑单元。
通常查找表存储逻辑函数所需的存储单元,以及控制连接的存储单元要消耗大量晶体管。
2、而ACT1采用反熔丝作为可编程开关,布线不需要存储单元,所以逻辑单元面积更小
缺点:
1、MUX实现的会降低集成度
2、使用MUX作为逻辑单元还会使得EDA工具变得复杂