可编程逻辑器件概述孟庆斌2010年9月4.通用阵列逻辑(GAL)PAL器件已经给逻辑设计者带来了很大的灵活性,但是PAL器件采用熔丝工艺,一旦编程(烧录)后便不能改写。另外,虽说PAL器件的输出结构有多种形式,但对每一种型号的PAL器件来说,其输出结构是固定的,用户不能改变,且型号太多,通用性差,使设计者在选择最佳型号时遇到困难。通用阵列逻辑器件GAL不但弥补了上述不足,而且还能和PAL器件100%地兼容。表3列出了常用GAL器件GAL16V8和GAL20V8可替代的PAL器件。表3GAL器件替代PAL器件表4.1GAL器件的电路结构GAL器件是在前面已介绍过的PROM、E2PROM、PLA和PAL四种PLD器件基础上发展起来的可编程逻辑芯片。表4列出了它们的结构特点。表4四种PLD器件结构特点GAL器件在制造工艺上,采用了E2CMOS工艺,使其可以反复编程。在结构上,它不但直接继承了PAL器件的由一个可编程的“与”阵列驱动一个固定的“或”阵列的结构,而且还具有输出逻辑宏单元(OutLogicMacroCell,简称OLMC)。通过对OLMC编程实现多种工作模式的输出,使用起来比PAL更加灵活方便。图32GAL16V8的外引脚排列图GAL16V81234567891020191817161614131211(GND)(VCC)图10是GAL器件的基本结构图。常见的GAL器件,如GAL16V8和GAL20V8,其基本电路结构大致相同,只是器件引脚数和规模不同而已。现以GAL16V8为例,介绍GAL器件的结构和工作原理。图32是GAL16V8的外引脚排列图。引脚1是时钟输入端,时钟信号不加入“与”逻辑阵列,而是直接加到输出逻辑宏单元(OLMC);引脚2~9只能做输入端;引脚11是输出使能输入端;引脚12~19由三态门控制,既可以做输入也可以做输出。GAL16V8的电路结构图如图33所示。它有一个32×64位的可编程“与”逻辑阵列、8个输出逻辑宏单元(OLMC)、九个输入缓冲器、八个三态输出缓冲器和八个反馈/输入缓冲器。GAL的“与”阵列的每个交叉点上设有E2CMOS存储单元,编程和擦除都用电完成,并可反复编程。它没有独立的“或”阵列,而是将或门放在各自的输出逻辑宏单元(OLMC)中。图33GAL16V8的电路结构图OLMC(19)CP198OLMC(18)1816OLMC(17)1724OLMC(16)1632OLMC(15)1540OLMC(14)1448OLMC(13)1356OLMC(12)126311071523313947550~3OE4~712~1520~2328~318~1116~1924~27~~~~~~~~0~34~712~1520~2328~318~1116~1924~274.2输出逻辑宏单元(OLMC)输出逻辑宏单元(OLMC)是GAL比其他PLD器件更加灵活方便的关键,然而GAL的各种配置和OLMC的各种工作模式的设定则是通过结构控制字使OLMC中数据选择器和异或门得到不同的连线来实现的。因此,我们只有在了解OLMC结构的同时,熟悉OLMC结构控制字结构和结构控制字各位的功能,在逻辑设计中才能正确运用GAL。4.2.1.OLMC结构控制字图34给出了OLMC结构控制字的结构。其中,XOR(n)、AC0、AC1(n)、SYN和PT是结构控制字的字段助记符;XOR(n)和AC1(n)字段下面的数字,分别代表它们控制的GAL16V8中各OLMC的输出引线编号。OLMC结构控制字各字段的功能如下:图34OLMC结构控制字32位乘积项禁止四位XOR(n)一位SYN八位AC1(n)一位AC0四位XOR(n)32位乘积项禁止82位PT63~PT32PT31~PT016~191212~1519~同步字段SYN:该字段只有一位,它与AC0和AC1(n)字段配合,决定GAL的输出工作模式。在GAL器件开始编程时,应首先确定SYN的状态。结构控制字AC0字段:该字段只有一位,它为八个OLMC所共有,并和每个OLMC(n)中的AC1(n)配合在一起来控制OLMC(n)中的四个数据选择器。结构控制字AC1(n)字段:该字段共有八位,每个OLMC(n)有各自的AC1(n),这里,n代表OLMC的输出端编号。例如,对于GAL16V8来说,n取12~19中的任意一个数。极性控制字段XOR(n):该字段也有八位,每个OLMC(n)有各自的XOR(n)。它通过OLMC里的异或门来控制每个OLMC的输出极性。即:XOR(n)=0,输出信号O(n)低电平有效;XOR(n)=1,输出信号O(n)高电平有效。积项禁止字段PT:该字段共有64位,分别屏蔽“与”阵列64个积项中某些不用的乘积项。对于GAL16V8来说,它控制64个乘积项PT0~PT64。前面我们说过,GAL器件给提供逻辑设计带来的灵活性,体现在它的“与”阵列可编程、输出结构可编程以及输出极性也可编程。从上述的OLMC结构控制字各字段功能中不难看出,GAL器件对“与”阵列编程实质由乘积项禁止字段PT来完成;对其输出工作模式的定义(编程),实质由SYN、AC0和AC1(n)三个字段的不同组合来实现;输出极性的改变则由极性控制字段XOR(n)来决定。在SYN、AC0和AC1(n)的组合控制下,OLMC可以被定义为五种不同的工作模式,即专用输入方式、专用组合输出、带反馈组合输出、带寄存器的组合输出和寄存器输出。这五种不同的工作模式的电路图如图35所示。表5给出了OLMC结构控制字中SYN、AC0、AC1(n)和XOR(n)字段与OLMC的五种工作模式、输出极性的关系。4.2.2.输出逻辑宏单元(OLMC)结构GAL16V8的输出逻辑宏单元(OLMC)结构如图36所示。它包含有四个数据选择器,即输出数据选择器(OMUX)、乘积项数据选择器(PTMUX)、三态数据选择器(TSMUX)以及反馈数据选择器(FMUX),一个异或门、一个或门、一个D触发器及一些门电路组成的控制电路。由图可见,或门用来产生不超过八项的与-或逻辑函数,它的八个输入端来自“与”逻辑阵列,其中有七个直接来自“与”逻辑阵列,有一个输入(也就是第一个输入)还要经过乘积项数据选择器(PTMUX)。图35OLMC输出五种工作模式的结构图CLKNCOLMC(n)OE至另一个邻级NCNCNCOECLK来自邻级输出(m)I/O(n)反馈(a)I/O(n)CLKOLMC(n)OENCNCNCNCNCCLKOENC来自邻级输出(m)反馈来自与逻辑阵列XOR(n)I/O(n)CLKOLMC(n)OENCNCNCNCCLKOENC来自邻级输出(m)反馈来自与逻辑阵列XOR(n)VCC(b)(c)图35OLMC输出五种工作模式的结构图CLK(至存储器输出单元)I/O(n)OLMC(n)CLKOENC来自邻级输出(m)反馈来自与逻辑阵列XOR(n)(d)(e)OE(至存储器输出单元)I/O(n)OLMC(n)NCCLKOE来自邻级输出(m)反馈来自与逻辑阵列XOR(n)NCCLKOEQDNC本宏单元未库Q表5OLMC结构控制字与其五种工作模式、输出极性的关系图36输出逻辑宏单元(OLMC)结构图输出缓冲器来自与逻辑阵列PTMUXXOR(n)QQDAC1(n)AC0反馈FMUX10×11×0×10×0AC0*AC1(m)*AC1(n)11100100TSUXMOUXMVCCG2来自邻级输出(m)I/O(n)CLKOECLKOEG10101三态数据选择器乘积项数据选择器输出数据选择器反馈数据选择器异或门用于控制输出函数的极性。当结构控制字中的XOR(n)字段为0时,异或门的输出和或门的输出相同;当XOR(n)字段为1时,异或门的输出和或门的输出相反。输出数据选择器(OMUX)是一个二选一数据选择器。它根据结构控制字中的AC0和AC1(n)字段的状态决定OLMC是组合输出模式还是寄存器输出模式。当AC0AC1(n)=00、01或11时,G2门输出为0,异或门输出的“与-或”逻辑函数经输出数据选择器(OMUX)的“0”输入端,直接送到输出三态缓冲寄存;当AC0AC1(n)=10时,G2门输出为1,异或门输出的“与-或”逻辑函数寄存在D触发器中,其Q端输出的寄存器型结果送到输出数据选择器(OMUX)的“1”输入端后,再送到输出三态缓冲器。乘积项数据选择器(PTMUX)也是一个二选一数据选择器。它根据结构控制字中的AC0和AC1(n)字段的状态决定来自“与”逻辑阵列的第一个乘积项是否作为或门的第一个输入。当AC0AC1(n)=00、01或10时,G1门输出为1,第一个乘积项作为或门的第一个输入;当AC0AC1(n)=11时,G1门输出为0,第一个乘积项不作为或门的第一个输入。三态数据选择器(TSMUX)是一个四选一数据选择器。它的输出是输出三态缓冲器的控制信号。换句话说,输出数据选择器(OMUX)的结果能否出现在OLMC的输出端,是由TSMUX的输出来决定的。从图36可知,AC0AC1(n)是TSMUX的地址输入信号,VCC、地、OE和来自“与”逻辑阵列的第一个乘积项是TSMUX的数据输入信号。它们之间的关系如表6所示。表6TSMUX的控制功能表反馈数据选择器(FMUX)是一个八选一数据选择器。它的地址输入信号是AC0AC1(n)AC1(m)(n表示本级OLMC编号,m表示邻级OLMC编号);它的数据输入信号只有四个,分别是:地、邻级OLMC输出、本级OLMC输出和D触发器输出。显然,它的作用是根据AC0AC1(n)AC1(m)的状态,在四个数据输入信号中选择其中一个作为反馈信号接回到“与”逻辑阵列中。FMUX的控制功能如表7所示。Q表7FMUX的控制功能表4.2.3.GAL器件的行地址映射图当用户对GAL器件编程时,除了对“与”阵列编程外,还要对各个OLMC中的结构控制字、电子标签、加密、擦除方式等进行编程,所以有必要了解编程单元的地址分配情况。GAL16V8的编程单元的地址分配如图37所示,因为它并不是编程单元实际的空间分布图,所以又把它称为行地址映射图。图37GAL16V8的行地址映射图移位寄存器SCLKSDI与逻辑阵列PT63PT32与逻辑阵列PT0PT31电子标签电子标签031结构控制字保留地址空间32335960616263加密单元保留整体擦除行地址¡«¡«¡«¡«SDI用户可用的行地址共有63个,它们的含义是:(1)行地址0~31对应“与”阵列的32个输入。而每个行地址单元有64位,对应“与”阵列的64个积项。(2)行地址32是器件的电子标签字,也有64位,供用户存放各种备查信息。如用户或厂家代码、器件编程数据、编程器识别码和模式识别码等信息。用户可以在任何时间读出标签数据,与下述保密单元的状态无关。(3)行地址33~59是保留给制造厂家使用的地址空间,用户不能使用。(4)行地址60是结构控制字,共有82位,用于设定八个OLMC的工作模式和64个乘积项的禁止。(5)行地址61是保密单元,只有一位。该位一旦被编程,对“与”阵列的任何访问都无效,它可防止对“与”阵列的再次编程和检验,从而实现对电路设计结果的保密。这个单元只能在整体擦除时和阵列一起擦除,当然它不影响电子标签单元的读出。(6)行地址63是整体擦除位,只有一位。在器件编程期间访问该行地址,意味着执行整体擦除操作,使器件恢复到位使用前的原始状态。最后必须说明的是,应用可编程逻辑器件,必须具备相应的软件开发工具和硬件开发工具。所谓软件开发工具,是指PLD专用的程序设计语言和相应的汇编程序或编译程序;硬件开发工具就是编程器。不同的PLD器件有不同的软件开发工具和硬件开发工具。有关PLD器件的开发工具及应用,有兴趣的同学可以参考有关资料。4.3GAL器件的应用用GAL设计电子系统的全过程如下:(1)根据设计要求写出逻辑函数表达式。(2)按GAL编程器使用的汇编语言(如FM汇编语言或ABEL汇编语言)编写汇