8.1复杂可编程逻辑器件(CPLD)简介8.2现场可编程门阵列(FPGA)8.3可编程逻辑器件开发过程简介简介8.半导体存储器16.6简单的时序可编程逻辑器件GAL6.6.1GAL的结构—GAL16V8的结构为例可编程与阵列(32X64位)8个输入缓冲器2~98个反馈/输入缓冲器8个三态输出缓冲器12~198个输出逻辑宏单元OLMC26.6.2GAL中的输出逻辑宏单元6.6简单的时序可编程逻辑器件GAL2、输出逻辑宏单元C110×11×0×10×0011DQQAC0AC1(n)AC1(m)XOR(n)PTMUXFMUX来自与阵列反馈CLKOE来自相邻的I/O(m)至下一相邻OLMCI/O(n)00011011VCCTSMUX三态控制选择器SEL乘积项选择器10OMUX输出选择器SEL反馈选择器SELSEL128OR(n)18D(n)OLMC乘积项数据选择器(2选1)输出数据选择器(2选1)三态数据选择器(4选1)反馈数据选择器(4选1)4个数据选择器:用不同的控制字实现不同的输出电路结构形式3可以通过编程,将OLMC配置后各种不同的逻辑功能。每个OLMC有2个编程单元AC1(n)和XOR(n),一个全局编程单元AC0,同步控制单元SYN。将这些编程单元组合在一起即是结构控制字,GAL16V8的结构控制字共有82位,它们的定义如图。乘积项禁止位32位XOR(n)4位SYN1位AC1(n)8位AC01位XOR(n)4位乘积项禁止位32位82位PT63PT32PT31PT0121314151617181912···196.6.3GAL中的结构控制字6.6简单的时序可编程逻辑器件GAL4逻辑块逻辑块逻辑块逻辑块逻辑块逻辑块逻辑块逻辑块更多乘积项、更多宏单元、更多的输入信号。8.1复杂可编程逻辑器件(CPLD)5可编程内部连线矩阵I/OI/O6.6简单的时序可编程逻辑器件GAL6.6.1GAL的结构—GAL16V8的结构为例可编程与阵列(32X64位)8个输入缓冲器2~98个反馈/输入缓冲器8个三态输出缓冲器12~198个输出逻辑宏单元OLMC6与PAL、GAL相比,CPLD的集成度更高,有更多的输入端、乘积项和更多的宏单元;为了增强对I/O的控制能力,提高引脚的适应性,增加了I/O控制块,每个I/O块中有若干个I/O单元。CPLD器件内部含有多个逻辑块,每个逻辑块都相当于一个GAL器件;每个块之间可以使用可编程内部连线(或者称为可编程的开关矩阵)实现相互连接。8.1复杂可编程逻辑器件(CPLD)71、CPLD器件的逻辑块8.1复杂可编程逻辑器件(CPLD)XilnxXC9500:输入变量有36个,宏单元18个AlteraMAX7000:输入变量有36个,宏单元16个。逻辑块内部的可编程连线区I/O单元乘积项阵列乘积项分配宏单元MacrocellPI81、CPLD器件的逻辑块8.1复杂可编程逻辑器件(CPLD)(1)可编程乘积项阵列逻辑块内部的可编程连线区I/O单元乘积项阵列乘积项分配宏单元MacrocellPI乘积项阵列有n个输入,可以产生n变量的乘积项。一般一个宏单元对应5个乘积项,这样在逻辑块中共有5*m个乘积项。91、CPLD器件的逻辑块8.1复杂可编程逻辑器件(CPLD)(2)乘积项分配逻辑块内部的可编程连线区I/O单元乘积项阵列乘积项分配宏单元MacrocellPI乘积项分配电路是由可编程的数据选择器和数据分配器构成。GAL中的乘积项是固定的,对应一个宏单元。但逻辑块中的乘积项可以编程,分配到不同的宏单元。灵活性大大提高。106.6.2GAL中的输出逻辑宏单元6.6简单的时序可编程逻辑器件GAL118个输出逻辑宏单元OLMC1、CPLD器件的逻辑块8.1复杂可编程逻辑器件(CPLD)(3)宏单元逻辑块内部的可编程连线区I/O单元乘积项阵列乘积项分配宏单元MacrocellPICPLD中的宏单元与GAL中的类似。其中包含一个或门、一个触发器和一些可编程的数据选择器及控制门。或门用来实现与-或阵列的或运算。通过对宏单元的编程可以实现组合逻辑输出、寄存器输出、清零、置位等工作方式。126.6.2GAL中的输出逻辑宏单元6.6简单的时序可编程逻辑器件GAL2、输出逻辑宏单元C110×11×0×10×0011DQQAC0AC1(n)AC1(m)XOR(n)PTMUXFMUX来自与阵列反馈CLKOE来自相邻的I/O(m)至下一相邻OLMCI/O(n)00011011VCCTSMUX三态控制选择器SEL乘积项选择器10OMUX输出选择器SEL反馈选择器SELSEL128OR(n)18D(n)OLMC乘积项数据选择器(2选1)输出数据选择器(2选1)三态数据选择器(4选1)反馈数据选择器(4选1)4个数据选择器:用不同的控制字实现不同的输出电路结构形式132、可编程内部连线可编程内部连线的作用是实现逻辑块与逻辑块之间、逻辑块与I/O块之间以及全局信号到逻辑块和I/O块之间的连接。连线区的可编程连接一般由E2CMOS管实现。可编程连接原理图内部连线宏单元或I/O连线E2CMOS管T当E2CMOS管被编程为导通时,纵线和横线连通;未被编程为导通时,两线则不通。由开发软件的布线程序自动完成。8.1复杂可编程逻辑器件(CPLD)14I/O单元是CPLD外部封装引脚和内部逻辑间的接口。每个I/O单元对应一个封装引脚,对I/O单元编程,可将引脚定义为输入、输出和双向功能。3、I/O单元到其他I/O单元输入缓冲输出缓冲驱动VCCINTD1D2VCCIOI/O10M到内部可编程连线区OUTPTOE来自宏单元全局输出使能可编程接地可编程上拉摆率控制到其他I/O单元rrrOE数据选择器提供OE信号。OE=1,I/O引脚为输出二极管D1、D2是钳位二极管,用于保护I/O引脚。8.1复杂可编程逻辑器件(CPLD)158.2现场可编程门阵列(FPGA)8.2.1FPGA实现逻辑功能的基本原理8.2.2FPGA结构简介16•CPLD是用可编程“与-或”阵列实现逻辑函数。编程是基于E2PROM或快闪存储器的编程技术。•FPGA是用查找表(LUT)实现逻辑函数。复杂函数使用众多的LUT和触发器实现。编程是基于SRAM的编程技术。8.2现场可编程门阵列(FPGA)17BCACABLABCCBACBACBAL10全加器BAL0L1C4.5.2组合逻辑电路的PLD实现1、可编程逻辑阵列PLA4.5组合可编程逻辑器件(2)数据选择器构成查找表LUTLUT实质是一个小规模的存储器,以真值表的形式实现给定的逻辑函数。3输入LUT的结构及逻辑符号如图。01Y01S1S0YS0S10101010101S20/10/10/10/10/10/10/10/1S2LUT(a)结构(b)符号存放0或1的存储单元4.3.3数据选择器01Y01S1S00101010101S20/10/10/10/10/10/10/10/101L101BC0101010101A00001111用查找表LUT实现逻辑函数用LUT实现逻辑函数,变量A、B、C接选择输入端,对存储单元进行编程。BCCAABL11076435210DDDDDDDD)7,6,4,3(1mBCCAABL(2)数据选择器构成查找表LUT4.3.3数据选择器某函数L的真值表ABL0010101011111011Y=LS0S1011011AB实现L的LUT编程M0M1M2M300YS0S10110112输入LUT8.2.1FPGA实现逻辑功能的基本原理LUT是FPGA实现逻辑函数的基本单元,它由若干存储单元和数据选择器构成。2输入LUT可实现任意2变量组合逻辑函数。4个SRAM存储单元8.2现场可编程门阵列(FPGA)21301201101001DSSDSSDSSDSSY1011Y=LS0S1011011AB实现L的LUT编程8.2.1FPGA实现逻辑功能的基本原理8.2现场可编程门阵列(FPGA)实现逻辑函数时具体的编程任务:(1)将FPGA的I/O引脚上的输入变量A和B通过可编程连线资源连接到LUT的S0和S1。(2)将真值表中L的函数值写入LUT中对应的SRAM单元中。(3)将LUT的输出Y通过可编程连线资源连接到FPGA的I/O引脚上,作为逻辑函数L的输出。22M0M1M2M300YS0S10110112输入LUT8.2.1FPGA实现逻辑功能的基本原理4个SRAM存储单元目前FPGA中的LUT大多是4~5个输入,1个输出。当变量数超过一个LUT的输入数时,需要将多个LUT扩展连接以满足更多变量数的要求。8.2现场可编程门阵列(FPGA)23LUT的扩展—用2输入LUT实现3变量的逻辑函数21FFCBABFABF1000010100111BCF2000011100110F1F2F000011101111函数F的真值表BC0100F2F1F20111FBACFAB0001F1已编程FPGA的一部分F1=ABF2=BCF=F1+F28.2现场可编程门阵列(FPGA)8.2.1FPGA实现逻辑功能的基本原理24M0M1M2M300YS0S10110112输入LUT8.2.1FPGA实现逻辑功能的基本原理在FPGA中,LUT是实现组合逻辑功能的基本电路,而触发器仍然是实现时序逻辑功能的基本电路。在LUT的基础上再增加触发器,便可构成既可实现组合逻辑又可实现时序逻辑的基本逻辑单元电路。FPGA就是由很多类似这样的基本逻辑单元来实现各种复杂逻辑功能的。8.2现场可编程门阵列(FPGA)258.2.2FPGA结构简介FPGA包括:可编程逻辑块、可编程互联开关、可编程I/O模块。…I/O块I/O块…I/O块I/O块逻辑块互联开关I/O8.2现场可编程门阵列(FPGA)26G4G3G2G1G-LUTYQBYF5INDECRdQSdSRCLKCEF4F3F2F1F-LUTXQBXCINCOUTXXBYYBDECRdQSdCYF6CYF5F5XCMUXXMUXDXMUXDYMUXYMUXYBMUXYCMUXC-1MUXI4I3I2I1OI4I3I2I1OFFYFFX01011010104输入LUTD触发器可编程数据选择器8.2现场可编程门阵列(FPGA)1.可编程逻辑块8.2.2FPGA结构简介27G4G3G2G1G-LUTYQBYF5INDECRdQSdSRCLKCEF4F3F2F1F-LUTXQBXCINCOUTXXBYYBDECRdQSdCYF6CYF5F5XCMUXXMUXDXMUXDYMUXYMUXYBMUXYCMUXC-1MUXI4I3I2I1OI4I3I2I1OFFYFFX01011010108.2现场可编程门阵列(FPGA)1.可编程逻辑块8.2.2FPGA结构简介通过对逻辑块中的LUT和相关数据选择器编程,可以实现所需要的组合逻辑电路。如果触发器的输出,经可编程连线资源反馈给输入,再经LUT产生激励函数驱动触发器的D端,可以构成时序逻辑电路。28G-LUTBYSRCLKCEQ0F-LUTDECRdQSdI4I3I2I1OI4I3I2I1OFFXQ10QDECRdQSdFFY0101QQQQ011010逻辑块编程实现2位二进制计数器Q1nQn0Q1n+1(D1)Q0n+1(D0)00010110101111002位二进制状态转换表0001011QDQQQQD得用可编程逻辑块实现2位二进制递增计数器。8.2现场可编程门阵列(FPGA)1.可编程逻辑块8.2.2FPGA结构简介292.I/O块弱保持电路TDI/OIQICECLKIOECQQECD可编程输出缓冲器可编程输入缓冲器VCCOVCCOVCCOVREF可编程延时电路OFFIFFDECQTFFOCETCE可编程开关MM输出控制输入将引脚编程为输入、输出和双向功能。8.2现场可编程门阵列(FPGA)8.2.2F