网教网

搜索
查看: 119|回复: 1

第八章·CPLD和FPGA

[复制链接]

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2022-9-20 18:33:34 | 显示全部楼层 |阅读模式
引言

前面有关章节已经介绍了低密度(或简单)的可编程逻辑器件(PLD),如PAL和GAL。
与中、小规模逻辑集成器件相比,PLD 在集成度、功耗和系统可靠性等方面有显著的优势。但是对于规模更大、更复杂的教字系统,低密度 PLD 仍然相形见绌。目前,采用集成度更高、功能更复杂的CPLD和FPGA设计实现大型数字系统已成为普遍应用的方法
由于实际的CPLD和FPGA内部电路规模庞大且非常复杂,所以本章仅从基本原理和一般性问题出发,简要介绍 CPLD 和FPGA 的基本结构、逻辑功能编程实现原理和一般开发过程,以期读者对此有一定了解,并作为进一步学习和运用它们开发数字电路或系统的基础知识。
<hr/>8.1 复杂可编程逻辑器件(CPLD)简介

前面有关章节已介绍了可编程逻辑器件PAL和GAL,它们都属于简单的 PLD。随着微电子技术的发展和应用上的需求,简单 PLD在集成度和性能方面难以满足要求,因此集成度更高、功能更强的CPLD便迅速发展起来。
早期的CPLD大多采用 EPROM编程技术,其编程过程与简单 PLD一样,每次编程需要在专用或通用设备上进行。后来采用  E^{2}PROM  和快闪存储器技术,使 CPLD 具有了"在系统可编程(In System Programmability,ISP)"特性。
所谓在系统可编程是指未编程的ISP器件可以直接焊接在印制电路板上,然后通过计算机的数据传输端口和专用的编程电缆对焊接在电路板上的ISP 器件直接多次编程,从而使器件具有所需要的逻辑功能。这种编程不需要使用专用的编程器,因为已将原来属于编程器的编程电路和升压电路集成在 ISP器件内部。
ISP技术使得调试过程不需要反复拔插芯片,从而不会产生引脚弯曲变形现象,提高了可靠性,而且可以随时对焊接在电路板上的 ISP 器件的逻辑功能进行修改、从而加快了数字系统的调试过程。目前,ISP已成为系统在线远程升级的技术手段。
与简单PLD(PAL、GAL等)相比,CPLD的集成度更高,具有的输入、乘积项和宏单元更多。


图8.1.1是一般CPLD器件的结构框图。其中逻辑块就相当于一个GAL器件(见6.6 节),CPLD中有多个逻辑块,这些逻辑块之间可以使用可编程内部连线实现相互连接。
为了增强对  I/O 的控制能力,提高引脚的适应性,CPLD中还增加了I/O控制块。每个I/O块中有若干个I/O单元。
<hr/>
1、逻辑块
由前述知识已知,用与-或阵列和触发器可以实现任何组合或时序逻辑函数,这便是 CPLD实现逻辑功能电路的基本原理
逻辑块就是CPLD实现逻辑功能的核心模块。逻辑块的构成如图8.1.2所示。


它主要由可编程乘积项阵列(即与阵列)乘积项分配宏单元三部分组成。与GAL相比,逻辑块中增加了乘积项分配电路
对于不同厂商、不同型号的 CPLD,逻辑块中乘积项的输入变量个数n和宏单元个数 m不完全相同。
例如,Xilinx公司的 XC9500 系列中,乘积项输入变量有36个,宏单元为18个。Altera公司的 MAX7000系列有36个乘积项输入变量,16个宏单元。
(1)可编程乘积项阵列
逻辑块中的可编程乘积项阵列与GAL中的相似,只是规模上有所差别。
此处,乘积项阵列有n个输入,可以产生n变量的乘积项。一般一个宏单元对应5个乘积项。这样,在逻辑块中共 有5×m 个乘积项。
例如,XC9500系列的逻辑块中有90个36 变量乘积项,MAX7000系列的逻辑块中有80个36变量乘积项。
(2)乘积项分配
乘积项分配电路是由可编程的数据选择器数据分配器构成。
我们知道,在GAL中一个宏单元对应的乘积项是固定的,而在 CPLD的逻辑块中并不是这样。这里,乘积项阵列中的任何一个乘积项都可以通过可编程的乘积项分配电路,分配到任意一个宏单元中,从而增强了逻辑功能实现的灵活性。
在 XC9500 系列CPLD中,理论上可以将90个乘积项组合到一个宏单元中,产生90个乘积项的与-或式,但此时其余17 个宏单元将不能使用乘积项了。在 Altera 公司生产的CPLD中,还有乘积项共享电路,使得同一个乘积项可以被多个宏单元同时使用。
(3)宏单元
此处的宏单元与GAL中的类似,其中包含一个或门、一个触发器和一些可编程的数据选择器控制门
或门用来实现与-或阵列或运算。通过对宏单元编程可实现组合逻辑输出、寄存器输出、清零、置位等工作方式。宏单元的输出不仅送至 I/O单元,还送到内部可编程连线区,以被其他逻辑块使用。
<hr/>
2、可编程内部连线
可编程内部连线纵横交错地分布在CPLD中,其作用是实现逻辑块与逻辑块之间、逻辑块与I/O块之间,以及全局信号到逻辑块和I/O块之间的连接
连线区的可编程连接也是基于 E^{2}CMOS 单元编程实现的。
不同制造商对可编程内部连线区的称呼也不同,Xilinx公司的称为 Switch Mattrix(开关矩阵),Altera公司的称为PIA(Programmable Interconnect Array),Lattice 公司的称为GRP(Global Routing Pool)。当然,它们之间存在一定的差别,但所承担的任务是相同的。这些连线的编程工作是由开发软件的布线程序自动完成的。
<hr/>
3、I/O单元
I/O单元是 CPLD外部封装引脚和内部逻辑间的接口。每个 I/O单元对应一个封装引脚,通过对 I/O单元中可编程单元的编程,可将引脚定义为输入、输出和双向功能。
CPLD 的 I/O 单元简化原理框图如图8.1.3所示。


I/O单元中有输入和输出两条信号通路
当I/O引脚作输出时,三态输出缓冲器的输入信号来自宏单元,其使能控制信号OE由可编程数据选择器 M选择其来源。其中,有多个全局输出使能控制信号,不同型号的器件,其数量也不同(XC9500 系列中r=4,MAX7000系列中r=6)。
当OE 为低电平时,输出缓冲器为高阻,I/O引脚可用作输入,引脚上的输入信号经过输入缓冲器送至内部可编程连线区。
图中 D_{1} 和  D_{2} 是钳位二极管,用于I/O引脚的保护。另外,通过编程可以使I/O引脚接上拉电阻或接地,也可以控制输出摆率(转换速率 SR)
快速方式可适应频率较高的信号输出,慢速方式则可减小功耗和降低噪声。 V_{CCINT} 是器件内部逻辑电路的工作电压(也称为核心工作电压(Core Voltage)),而 V_{CCIO} 的引入,可以使I/O引脚兼容多种电源系统。
与后面将要介绍的 FPGA相比,尽管CPLD在电路规模和灵活性方面不如 FPGA,但是它的可加密性和传输延时预知性,使得CPLD仍广泛应用于数字系统设计中
目前,各大生产厂商仍不断开发出集成度更高、速度更快、功耗更低的CPLD新产品,核心工作电源可以低到1.8V。表8.1.1列出了几种典型的CPLD产品。


实际上,Altera公司的 MAX Ⅱ 系列 CPLD中的逻辑块已不再是基于与-或阵列架构,而是基于与FPGA类似的 LUT架构。  
<hr/>复习思考题

8.1.1:CPLD在结构上可分为哪几个部分?各部分的主要功能是什么?
<hr/>
8.1.2 CPLD的可编程特性是基于什么编程技术?其有什么特点?
<hr/>8.2 现场可编程门阵列(FPGA)

FPGA是另一种可以实现更大规模逻辑电路的可编程器件。它不像 CPLD那样采用可编程的"与-或"阵列来实现逻辑函数,而是采用曾在4.4.3 节中介绍的查找表(LUT)工作原理来实现逻辑函数。这种逻辑函数实现原理避开了与-或阵列结构规模上的限制,使FPGA 中可以包含数量众多的LUT和触发器,从而能够实现更大规模、更复杂的逻辑电路。
FPGA的编程机理也不同于CPLD,它不是基于 E^{2}PROM 或快闪存储器编程技术,而是采用 SRAM实现电路编程。随着生产工艺的进步,FPGA的功能愈来愈强大,性价比愈来愈高,目前已成为数字系统设计的首选器件之一
<hr/>8.2.1 FPGA 中编程实现逻辑功能的基本原理

LUT是FPGA实现逻辑函数的基本逻辑单元,它由若干存储单元数据选择器构成。2输入LUT的结构如图8.2.1所示。


其中 M_{0}\sim M_{3} 为4个 SRAM存储单元,他们存储的数据作为数据选择器的输入数据;LUT的2个输入端作为数据选择器的选择信号。该LUT可以实现任意2变量组合逻辑函数。
例如,若要实现逻辑函数L=A+B,则可列出其真值表如表8.2.1 所示。


用图8.2.1的 LUT实现时,将变量A和B分别连接 S_{1} 和 S_{0} ,同时将真值表8.2.1中逻辑函数L的0、1值按由上到下的顺序分别存入 M_{0}\sim M_{3}的4个SRAM单元中,得到图8.2.2。


此时,LUT的输出便实现了该逻辑函数,即 Y=L。由此看出,只要改变 SRAM单元M_{0}\sim M_{3}中的数据,就可以实现不同的逻辑函数。这就是 FPGA 可编程特性的具体体现,其逻辑功能的编程就好像向 RAM中写数据一样容易(图中未画编程电路)。同时看到,LUT相当于以真值表的形式实现给定的逻辑函数
在 FPGA中实现该逻辑函数时需要完成以下编程任务
(1)将 FPGA 的I/O 引脚上的输入变量A和B通过可编程连线资源连接到LUT的S_{1}和S_{0};
(2)将真值表中L的函数值写入LUT中对应的SRAM单元中;
(3)将LUT的输出Y通过可编程连线资源连接到FPGA的I/O引脚上,作为逻辑函数L的输出。
实际上,上述的LUT也可以看作是一个4×1位的 SRAM,S_{1}S_{0}为2 位地址码输入。这样,每输入一组 AB信号进行逻辑运算,就相当于输入一个地址进行查表,找出地址对应的内容输出,在Y端便得到该组输入信号逻辑运算的结果,查找表(LUT)因此得名。这一原理也与7.1.5节ROM实现组合逻辑函数的原理相同。
目前FPGA中大多使用4~5个输入、1个输出的LUT。当变量数超过一个 LUT的输入数时,可以将多个LUT扩展连接以满足更多变量数的要求。
下面还是以2变量 LUT为例,说明在FPGA中如何扩展连接实现一个3变量的逻辑函数。用一个小规模的 FPGA 实现逻辑函数 F=F_{1}+F_{2}=AB+\bar{B}C ,该逻辑函数的真值表如表8.2.2所示。


编程后FPGA中一部分逻辑块和连线资源的编程状态如图 8.2.3 所示。


符号×表示纵横线交叉点上的可编程开关接通
连线资源将I/O引脚上的输入A、B、C和输出F连接到内部逻辑电路中,而内部逻辑块之间也通过连线资源实现连接。图中上方两个逻辑块被编程实现逻辑函数 F_{1}=AB 和 F_{2}=\bar{B}C ,右下角的逻辑块实现 F=F_{1}+F_{2}。逻辑块中的0、1值表示 LUT中 SRAM单元的编程数据,也就是表8.2.2中 F_{1} 、 F_{2} 和 F 的值。
在 FPGA 中,实现组合逻辑功能的基本电路是LUT,而触发器仍然是实现时序逻辑功能的基本电路。在 LUT的基础上再增加触发器,便可构成既可实现组合逻辑又可实现时序逻辑的基本逻辑单元电路。FPGA中就是由很多类似这样的基本逻辑单元来实现各种复杂逻辑功能的。
当用户通过原理图或 HDL语言描述了一个逻辑电路后,FPGA 开发软件会自动计算逻辑电路的所有可能的结果(真值表),并把结果写入 SRAM,这一过程就是所谓的编程。此后,SRAM中的内容始终保持不变,LUT就具有了确定的逻辑功能。由于 SRAM具有数据易失性,即一旦断电,其原有的逻辑功能将消失。所以 FPGA 一般需要一个外部的 PROM(或其他非易失性存储器)保存编程数据
上电后,FPGA首先从 PROM中读入编程数据进行初始化,然后才开始正常工作。由于 SRAM中的数据理论上可以进行无限次写入,所以,基于 SRAM技术的 FPGA可以进行无限次的编程。
<hr/>8.2.2 FPGA的结构简介

目前,FPGA 产品种类繁多,各生产厂商的产品也各不相同。这里仅从构成 FPGA 的最基本原理出发,介绍FPGA的基本结构。在实际使用时,用户必须根据所选用的器件型号查阅相关的数据手册。
FPGA的一般结构如图8.2.4所示。


它至少包含三种最基本资源∶可编程逻辑块、可编程连线资源和可编程I/O模块
对比图8.2.4和图8.1.1 CPLD的结构,看似两者非常类似,但是FPGA与CPLD最大的差别在于实现逻辑功能的原理不同。FPGA中逻辑块是以 LUT为基础的,而CPLD中的逻辑块是以与-或阵列为基础的。另外编程技术也不同,CPLD是基于 E^{2}PROM 或快闪存储器的编程技术,而 FPGA 则是基于SRAM的编程技术。
FPGA中的逻辑块排列成二维阵列。规模不同,FPGA 所含逻辑块的数量也不同。连线资源在逻辑块行和列之间纵横分布,它包括纵向和横向连线以及可编程开关(互连开关)。逻辑块用来实现所需要的逻辑功能;连线资源用来实现逻辑块与逻辑块之间、逻辑块与 I/O块之间的连接;I/O块是芯片外部引脚数据与内部数据进行交换的接口电路,通过编程可将 I/O引脚设置成输入、输出和双向等不同的功能。
<hr/>
1、可编程逻辑块
可编程逻辑块是FPGA实现各种逻辑功能的基本单元
为了能实现时序逻辑功能,逻辑块中除了包含LUT外,还附加了触发器和一些可编程数据选择器和必要的逻辑门。这些附加电路的作用非常类似于GAL或CPLD中的宏单元
图8.2.5是Xilinx公司 Spartan-Ⅱ系列FPGA的逻辑块主要逻辑电路原理图,其中数据选择器除了CY、F5、F6 外均为可编程选择器(未画 SRAM单元)。


由图看出,逻辑块有15个输入端和8个输出端。
输入端
(1) F_{1}\sim F_{4} 和 G_{1}\sim G_{4} 为两组4变量逻辑函数输入端;【8个】
(2)SR、CE和 CLK为触发器的控制及时钟信号输入端;【3个】
(3)F5IN 为级联输入端,用于 LUT 的级联扩展;【1个】
(4)BX、BY为旁路输入端,信号由此进入逻辑块后可以绕过LUT直接传至输出;【2个】
(5)CIN为进位链输入端,当与其他逻辑块实现多位数加法运算时,CIN可作为进位输入。【1个】
输出端
(1)组合逻辑输出端X和Y;【2个】
(2)寄存器输出端XQ和 YQ;【2个】
(3)算术运算进位端XB和YB;【2个】
(4)级联输出端 F5;【1个】
(5)进位链输出端COUT;【1个】
通过对逻辑块中的LUT 和相关数据选择器编程,可以实现所需要的组合逻辑电路。当逻辑电路规模较大时,可以级联扩展多个逻辑块来实现。如果触发器的输出,经可编程连线资源反馈给输入,再经 LUT产生激励函数驱动触发器的D端,可以构成时序逻辑电路
例如,用图8.2.5实现2位二进制递增计数器


由表8.2.3所示的2位二进制递增计数器状态转换,可得D触发器的激励方程为


用G-LUT产生 D_{1} ,仅需要用到2个输入变量,高位的2个输入接地。此时,G-LUT相当于图8.2.1的2输入LUT,所以仅需对其中SRAM单元的 M_{0}\sim M_{3} 编程。
类似地,用F-LUT产生 D_{0} ,仅用到1个输入变量,F-LUT相当于1个输入的 LUT,所以仅需对它的  M_{0} 和  M_{1} 编程。图8.2.6就是对图8.2.5编程后,实现2位二进制递增计数器的结果。


由多个逻辑块便可构成更复杂的时序逻辑电路。由于4输入的LUT相当于一个16×1位的 SRAM,所以逻辑块也可用来做存储器使用。不过此时 LUT中的内容不再是预先配置好的,而是在正常工作时可以随时读写的,而且 LUT不能再作为逻辑函数产生器使用。
<hr/>
2、I/O块
I/O块是 FPGA外部封装引脚和内部逻辑间的接口。每个I/O单元对应一个封装引脚,通过对I/O单元编程,可将引脚分别定义为输入、输出和双向功能。I/O单元的简化原理图如图8.2.7所示。图中的 V_{CCO} 和 V_{REF} 引脚与其他 I/O单元共用。


I/O单元中有输入和输出两条信号通路。
当I/O引脚用作输出时,内部逻辑信号由O端进入I/O单元,由可编程数据选择器确定是直接送输出缓冲器还是经过触发器 OFF寄存后再送输出缓冲器。输出缓冲器使能控制信号T可以直接控制输出缓冲器,也可以通过触发器 TFF 后再控制输出缓冲器。
当I/O引脚用作输入时,引脚上的输入信号经过输入缓冲器,可以直接由 I 进入内部逻辑电路,也可以经触发器 IFF寄存后由  IQ 输入到内部逻辑电路中。没有用到的引脚被预置为高阻态。可编程延时电路可以控制输入信号进入的时机,保证内部逻辑电路协调工作,其最短延迟时间为零。
3个触发器均可编程配置为边沿触发电平触发方式,他们共用一个时钟信号CLK,但有各自的时钟使能控制信号 EC。通过它们可以实现同步输入/输出。
图8.2.7中两个钳位二极管具有瞬时过压保护和静电保护作用。上拉、下拉电阻和弱保持电路(Weak-keeper Circuit)可通过编程配置给 I/O引脚。
弱保持电路监视并跟踪 I/O 引脚输入电压的变化,当连至引脚总线上所有的驱动信号全部无效时,弱保持电路将维持在引脚最后一个状态的逻辑电平上,可以避免总线处于悬浮状态,消除总线抖动。
I/O单元中设计了两个电压输入端 V_{CCO} 和 V_{REF} ,以便兼容不同电源系统。为了增强 FPGA的适应性和灵活性,通常将 I/O单元进行分组,每组共用一个V_{CCO} 和 V_{REF},不同组可以接不同的V_{CCO} 和 V_{REF}。
这一措施可以使FPGA工作在由不同工作电源构成的复杂系统中,而 FPGA 内部逻辑电路则在其所谓的核心电源(Core Power Supply)下工作。V_{REF} 为逻辑电平的参考电压,在执行某些I/O标准时,需要输入V_{REF}。
<hr/>
3、可编程连线资源
可编程连线资源是FPGA 不可或缺的组成部分,它包括纵向和横向连线以及可编程开关


图8.2.4中灰色方块表示的可编程开关(有时也称为可编程开关矩阵)有三种位置
(1)处在和逻辑块相邻的灰色开关用来连接逻辑块相邻逻辑块之间、逻辑块和连线之间的连接;
(2)而处在逻辑块间对角线位置上的开关则用于实现内部各连线之间的连接;
(3)与I/O块相邻的开关可以实现 I/O块和逻辑块I/O块和内部连线之间的连接。
两种典型的互连开关结构如图8.2.8所示。


当NMOS开关管栅极连接的 SRAM单元M被编程为1时,开关管导通,否则开关管断开。图(a)纵横交叉互连开关通过编程,可以决定纵、横连线是否连通,而图(b)6路互连开关通过编程,可以连通上、下、左、右任意方向,非常灵活。
在实际的 FPGA芯片中,除了上述的称之为通用连线资源外,通常还有一些特殊用途的连线资源,如时钟信号线和全局控制信号线等。
信号的传输延时是限制器件工作速度的根本原因。在 FPGA 的设计过程中,由软件进行优化,确定电路布局的位置和线路选择,以减小传输延迟时间,提高工作速度。
目前在很多高性能的 FPGA产品中,已集成了乘法器、数字信号处理器、甚至 CPU 等非常复杂的模块,使FPGA在数字系统中几乎无所不能。
<hr/>复习思考题

8.2.1 LUT实现各种组合逻辑功能的原理是什么?
<hr/>
8.2.2 FPGA 在结构上主要由哪几个部分组成?各部分的主要功能是什么?
<hr/>
8.2.3 FPGA与CPLD有哪些主要区别?它们各有什么特点?
<hr/>8.3 可编程逻辑器件开发过程简介

<hr/>(未完待续)
回复

使用道具 举报

0

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2025-3-26 05:36:32 | 显示全部楼层
不错 支持一个了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表