User Tools

Site Tools


programmable_logic_device

可编程逻辑器件

数字集成电路可以分为通用型和专用型两类. 中, 小规模数字集成电路一般都属于通用型数字集成电路, 它们可以用来构成更加复杂的大规模甚至超大规模集成电路. 一些为某种专门用途设计的集成电路称为专用集成电路, 即所谓的ASIC(Application Specific Integrated Circuit).通用型数字集成电路用量大, 可以大量生产, 而专用集成电路的用量则具有不确定性. 尤其在设计和验证阶段, 专用型电路的产量很小, 使用常规的生产线有成本高, 制造周期长等问题. 可编程逻辑器件 (Programmable Logic Device, PLD) 很好地解决了这个问题. 这种器件作为通用型器件进行大规模生产, 但是其内部逻辑功能由用户通过对器件编程来决定.

PLD主要有:

  • 可擦除的可编程ROM, EPROM, 作为存储器使用.
  • 可编程阵列逻辑PAL (Programmable Array Logic)
  • 通用阵列逻辑GAL (Generic Array Logic)
  • 可擦除的可编程逻辑器件EPLD (Erasable Programmable Logic Device)
  • 复杂的可编程逻辑器件CPLD (Complex Programmable Logic Device)
  • 现场可编程门阵列FPGA (Field Programmable Gate Array)

逻辑图形符号

实现可编程的关键点
半导体存储器中所讲的PROM的各种编程单元一样. 最初使用的编程单元也是熔丝或反熔丝, 后来多数PLD都改用CMOS工艺制作了, 编程单元也相应地改成了叠栅MOS管.

现场可编程逻辑阵列 (FPLA)

全称Field Programmable Logic Array, 为最早使用的PLD. 出现与20世纪70年代后期. 虽然今天很少使用FPLA了, 但是PAL, GAL等PLD的基本原理都源于FPLA.

核心的思路
任何一个逻辑函数式都可以变换成与或表达式, 因而任何一个逻辑函数都能用一级与逻辑电路和一级或逻辑电路来实现.

如下图所示为一个FPLA的基本电路结构, 与逻辑阵列可以最多产生8个可编程的乘积项, 或逻辑阵列可以最多产生4个组合逻辑函数. 图中所示的编程情况为, OE'=0时, 得到4个组合逻辑函数:

  1. Y3=ABCD+A'B'C'D'
  2. Y2=AC+BD
  3. Y1=AB'+A'B=A⊕B (异或)
  4. Y0=CD+C'D'=C NXOR D (同或)

半导体存储器最后提到了存储器作为产生组合逻辑函数的应用. 其实存储器可以作为与逻辑阵列来使用, 而且该阵列可以表示出确定位数的所有最小项. 但是一般我们需要的组合逻辑函数只包含所有最小项中的一部分, 而且有时这些最小项还可以合并, 因此存储器作为与逻辑阵列使用的话利用率并不高.
FPLA的规格用输入变量数, 与逻辑阵列的输出端数, 或逻辑阵列的输出端数三者的乘积表示. 如16x48x8表示有16个变量输入端, 48个与逻辑阵列输出端和8个或逻辑阵列输出端.
FPLA中输出缓冲器的结构形式除了三态输出外, 也有做成集电极开路 (OC) 结构的, 便于挂负载, 或者可编程的异或门, 以便于对输出的极性进行控制. 如下图所示, XOR的熔丝联通时, XOR=0, 输出相位保持不变, XOR的熔丝断开时, XOR=1, 输出相位相反. 上面所示的FPLA没有触发器, 只能用于设计组合逻辑电路, 称为组合逻辑型FPLA. 为了便于设计时序逻辑电路, 在有些FPLA芯片内部增加了若干触发器组成的寄存器, 这种含有内部寄存器的FPLA称为时序逻辑型FPLA, 也称为可编程逻辑时序器PLS (Programmable Logic Sequencer) . 如下图所示为PLS的基本电路结构, Q1~Q4反馈回与-或逻辑阵列, 这样就可以产生状态数不大于16的时序逻辑电路. Q5和Q6只作为组合逻辑电路的输出. 除此之外, 还有PR/OE'控制端. 当可编程接低端联通时, M=0,G8输出高电平, 6个输出通道打开, PR/OE'=1时对所有触发器异步置0;当可编程接低端断开时, M=1, G7输出低电平, 不再异步置零, PR/OE‘控制输出端的工作/禁止状态.

可编程阵列逻辑 (PAL)

PAL与FPLA最大的差别在于或逻辑阵列不再支持编程, 为固定的阵列, 输出电路结构有多种形式. 如下图所示为PAL器件的基本电路结构: 在尚未编程之前, 与逻辑阵列的所有交叉点上均有熔丝接通. 像半导体存储器中描述的PROM一样, 通过编程器的编程, 将不需要的输入所对应的熔丝熔断, 即可得到所需的电路. 如下图所示为一个编程后的PAL电路,

PAL的几种输出电路结构和反馈形式

根据PAL器件输出电路结构和反馈方式的不同, 可将它们大致分成专用输出结构, 可编程输入/输出结构, 寄存器输出结构, 异或输出结构, 运算选通反馈结构等几种类型.

专用输出结构

专用输出结构的PAL器件只能用来产生组合逻辑函数, 比如PAL10H8, PAL14H4, PAL10L8等. 它们的输出端是与或门或与或非门等结构, 有的还带有互补输出的或门结构, 如PAL16C1.

可编程输入/输出结构

此类结构有的可以使得端口可以作为输入端也可以作为输出端. 如下图所示, 该结构由一个三态缓冲器和一个互补输出的缓冲器构成. 三态缓冲器的使能端由与逻辑阵列的某一路控制, 当三态缓冲器的使能为1时, 该端口为输出端口, 输出通过互补输出缓冲器反馈回与逻辑阵列;当三态缓冲器的使能为0时, 该缓冲器为高阻态, 该端口的输入只能经由互补输出缓冲器进入与逻辑阵列, 成为了一个输入端口. 属于这种输出结构的器件有PAL16L8, PAL20L10等. 此类结构有的支持对输出的极性进行编程, 如下图所示. 在三态缓冲器之前引入一个可编程的异或门, XOR=0时, Y与S同相, XOR=1时, Y与S反相.

寄存器输出结构

如下图所示, 在三态输出缓冲器之前加入一个D触发器作为寄存器, 触发器的状态又经过互补输出缓冲器反馈到与逻辑阵列中. 这样既可以存储与或逻辑阵列输出的状态, 又可以很方便地组成各种时序逻辑电路.

异或输出结构

异或输出结构型PAL的电路结构与寄存器输出结构类似, 只是在与或逻辑阵列的输出端又增设了异或门. 如下图所示的异或输出结构实现了对寄存器状态保持的控制, 当I1=0,寄存器状态保持不变, 当I1=1, 寄存器状态取反.

运算选通反馈结构

在异或输出结构的基础上在增加一组反馈逻辑电路, 就构成了如下图所示的运算选通反馈结构. 这个运算选通反馈结构可以产生16中算数运算和逻辑运算的结果. 如下图所示.

通用阵列逻辑 (GAL)

PAL器件采用的是双极型熔丝工艺, 一旦编程以后不能修改, 而且输出端结构多样, 需要根据不同的需求选择合适的型号. GAL相比PAL主要的改进有:

  • 采用E2CMOS 制作, 其工作原理与半导体存储器中介绍的EEPROM的存储单元的相同. 这样GAL器件就具有反复擦写的能力.
  • 输出端设置了可编程的输出逻辑宏单元OLMC (Output Logic Macro Cell) , 通过将OLMC设置成不同的工作状态, 这样就可以用同一种型号的GAL器件实现PAL器件所有的各种电路工作模式.

电路结构

如下图所示为GAL16V8的电路结构图. 如下图为3个编程单元构成的GAL与逻辑阵列的局部示意图, 当T2和T4导通而T6截止时, 相当于得到 P=A·B. 除了基本的逻辑阵列, GAL还有一些编程单元. 如下图所示:

  • 移位寄存器: 编程数据存入此寄存器, 寄存器满了的时候写入逻辑阵列中.
  • 电子标签: 供用户存放各种备查的信息. 如器件的编号, 电路的名称, 编程日期, 编程次数等.
  • 保留地址空间: 制造厂家保留的地址空间, 用户不能使用.
  • 结构控制字: 设定OLMC的工作模式和乘积项的禁止等
  • 加密单元: 这一位被编程以后, 将不能对与逻辑阵列做进一步的编程或读出验证, 因此可以实现对电路设计结果的保密. 只有在与逻辑阵列被整体擦除时, 才能将加密单元同时擦除. 但是电子标签不受影响.
  • 整体擦除: 对此单元寻址, 则把所有编程单元都擦除, 恢复初始状态.

输出逻辑宏单元 (OLMC)

如下图所示为OLMC的结构图, 包含一个或门, 一个D触发器和4个数据选择器及一些门电路组成的控制电路. 图中的AC0, AC1(n), XOR(n)都是结构控制字中的一位数据, 通过对结构控制字编程, 便可设定OLMC的工作模式.

  • XOR(n)控制异或门的输出的极性
  • OMUX为2选1数据选择器, 根据AC0和AC1(n)的状态决定OLMC是工作在组合输出模式还是寄存器输出模式.
  • 乘积项数据选择器PTMUX也是2选1数据选择器, 根据AC0和AC1(n)的状态决定来自与逻辑阵列的第一乘积项是否作为或门的一个输入.
  • 三态数据选择器TSMUX是4选1数据选择器, 用来控制输出端三态缓冲器的工作状态. 它根据AC0和AC1(n)的状态从Vcc, GND, OE和来自与逻辑阵列的第一乘积项当中选择一个作为输出三态缓冲器的控制信号.

  • 反馈数据选择器FMUX是8选1数据选择器, 但是输入信号只有4个. 它根据AC0, AC1(n)和AC1(m)的状态从触发器的Q'段, I/O(n)端, 邻级输出和地电平中选择一个作为反馈信号接回到与逻辑阵列的输入.

通过对AC0, AC1(n)等控制位的设置, 可以调整上述XOR(n)和数据选择器的工作状态, 从而实现OLMC在PAL的5种工作模式间的切换.

GAL的输入特性和输出特性

在GAL器件的每个输入端都设置有如下图所示的输入缓冲器电路, 主要的作用有:

  • 将输入端的信号A变换为一对内部标准电平的A和A'信号
  • 扩散电阻R和电容C组成噪声滤波电路, 有效抑制加到输入端上的白噪声型噪声电压
  • 隔离输入和内部电路, 保护内部电路

可见GAL是一种较为理想的高输入阻抗器件. 不过要注意未使用的输入端不应悬空, 可以接电源或接地. 如下图所示为GAL的输出缓冲器电路, 它除了具备一般三态输出缓冲器的特点 (能驱动较大负载, 起隔离作用以及实现对输出的三态控制) 以外, 还有两个突出的特点.

  • 输出级采用了单一类型的N沟道增强型MOS管, 而不是采用P沟道管与N沟道管互补的CMOS结构, 不会发生CMOS电路的锁定效应.
  • 输出具有“软开关特性”. 输出级的两个驱动管T1和T2分别由T5和T6驱动. 但是G6被有意地设计得慢了一些, 避免T1和T2同时开关带来过于剧烈的负载电流变化, 也就减小了由于电流变化在电源线和地线寄生电感上产生的噪声电压.

可擦除的可编程逻辑器件 (EPLD)

Erasable Programmable Logic Device (EPLD) 是继PAL, GAL之后推出的一种可编程逻辑器件, 它采用CMOS和UVEPROM工艺制作, 集成度比PAL和GAL器件高得多, 其产品多半属于高密度PLD.
与PAL和GAL相比, EPLD有以下几个特点:

  1. 采用了CMOS工艺, 具有CMOS器件低功耗, 高噪声容限的优点.
  2. 采用了UVEPROM的工艺, 可靠性高, 集成度高且造价便宜.
  3. 采用了GAL的输出逻辑宏单元OLMC, 同时增加了对OLMC中触发器的预置数和异步置零功能, 具有更大的灵活性.
  4. 与-或逻辑阵列, 每组的乘积项的数目不完全相等, 保证逻辑门的充分使用;同时支持不同组的乘积项进行合并, 共享等.

EPLD的OLMC

如下图所示为AT22V10的OLMC的电路结构图, 包含一个D触发器, 异或门和两个2选1数据选择器MUX1, MUX2. MUX1用于实现输出逻辑类型的选择, 输入高电平时不经过触发器直接读取与或逻辑阵列的输出, 为组合逻辑输出, 输入低电平时则为时序逻辑输出 (寄存器输出) . MUX2用于选择反馈信号, 输入高电平时选择触发器的输出为反馈信号, 输入低电平时选择I/O端的输出为反馈信号.
触发器的异步置零信号AR和同步预置信号SP各由一个可编程的乘积项控制. 有的EPLD的AR和SP是分别由一个共同的乘积项控制的, 只能用于同步时序逻辑电路的设计, 有的EPLD的AR和SP则各自独立, 还可以用于异步时序逻辑电路的设计.

复杂的可编程逻辑器件 (CPLD)

CPLD的主要思路是将多块通用可编程逻辑电路, 多块输入输出控制单元组合起来, 通过一个甚至多个全局的连线控制区来控制不同通用逻辑模块的连接, 从而提高集成度. 可以认为, CPLD是从EPLD演变而来的. 如下图所示为ispLSI1032的电路结构框图. ispPLD是基于CPLD的系统可编程器件. CPLD多采用E2CMOS工艺制作. ispPLD集成了编程所需的高压脉冲产生电路以及编程控制电路. 因此, ispPLD不需要额外的编程器, 也不需要将CPLD从其中拔出.
ispLSI1032由32个通用逻辑模块 (Generic Logic Block, GLB) , 64个I/O Cell (IOC) , 可编程的内部连线区和编程控制电路组成.

CPLD的通用逻辑模块 (GLB)

CPLD的GLB相比GAL有了一些改进, 在组态上有更大的灵活性.

  1. 全局布线区采用乘积项共享的结构形式, 利用率进一步提高.
  2. 乘积项共享的或逻辑阵列的输出到4个触发器的连接也是共享模式.
  3. 除了图示的标准配置模式外, 还有高速旁路模式, 异或逻辑模式, 单乘积项模式和多重模式. 这些模式可能需要引入诸如异或门的额外的门电路.

CPLD的输入输出单元 (IOC)

如下图所示为IOC的电路结构. 主要有以下几个要点:

  1. I/O处有一个用于输入的缓冲器和一个用于输出的三态缓冲器.
  2. 当配置为可输出时, 输出的使能由MUX1控制, 极性由MUX3控制, 输出信号的传送通道由MUX2控制.
  3. 当配置为可输入时, 输入的模式由MUX4控制, 选择直接经缓冲器送入全局布线区或者经触发器进行同步时序控制下的输入;输入的时钟选择由MUX5控制, 时钟的极性由MUX6控制.

通过对MUX1至MUX6进行配置, 可以得到如下的各种IOC组态:

现场可编程门阵列 (FPGA)

FPGA属于高密度PLD, 其集成度可达百万门/片以上. 前面提到的几种PLD电路, 都采用了与或逻辑阵列加上输出逻辑单元的结构形式. 这类结构形式还是存在不少局限性, 内部逻辑阵列的自由度还不够高, 输入输出逻辑单元的数量往往受限. FPGA的电路结构形式相比前面讲的几种PLD有了很大的变化, 它由若干独立的可编程逻辑模块组成. 如下图所示为FPGA的基本结构, 由三种可编程单元和一个可用于存放编程数据的静态存储器组成. 这三种可编程的单元分别是输入/输出模块(I/O Block, IOB), 可编程逻辑模块(Configurable Logic Block, CLB)和互连资源IR(Interconnect Resource).它们的工作状态都可以由编程数据存储器中的数据设定. FPGA中除了个别的几个引脚之外, 大部分引脚都可以与编程的IOB相连, 均可根据需要设置成输入端或输出端. 因此, FPGA器件最大可能的输入端数和输出端数要比同等规模的EPLD多.

可编程逻辑模块CLB

每个CLB中都包含组合逻辑电路和存储电路 (触发器) 两部分, 可以设置成规模不大的组合逻辑电路或时序逻辑电路. 以Xilinx的XC2064为例, 其CLB的电路结构如下图所示. 此电路的组合逻辑电路部分有4个输入端, 两个输出端. 根据设计的需要可以将组合逻辑部分设置成如下3种不同的组态.

静态存储器

静态存储器的存储单元由两个CMOS反相器和一个控制管T组成, 如下图所示.

互连资源IR

为了将CLB灵活地连接成各种应用电路, 在CLB之间的布线区内配备了丰富的连线资源. 这些互连资源包括不同类型的金属线, 可编程的开关矩阵(Switching Matrices, SM)和可编程的连接点 (Programmable Interconnect Points,PIP). 如下图所示. 金属线 布线区里的金属线分为水平通用连线, 垂直通用连线, 水平长线, 垂直长线, 全局连线和直接连线等几种. 这些金属线经可编程的连接点与CLB, IOB和开关矩阵相连. 其中的通用连线主要用于CLB之间的连接, 长线主要用于长距离或多分支信号的传送, 全局连线则用于输送一些公共信号 (如公用的RESET‘信号等) . 开关矩阵 如下图所示为某种可编程开关矩阵的可能的连接方式. 开关矩阵的作用如同一个可以实现多根导线转接的接线盒, 而且接线方式有一定的自由度. 通过对开关矩阵编程, 可以将来自任何一个方向上的一根导线转接至其他方向的某一根导线上.

FPGA的缺点

  1. 由于内部连接的高度自由化, FPGA的信号传输延迟时间不是确定的, 在构成复杂的数字系统时一般总要将若干个CLB组合起来才能实现. 由于每个信号的传输途径各异, 所以传输延迟时间也就不可能相等. 这给设计带来了麻烦, 也限制了器件的工作速度.
  2. FPGA的编程数据不能断电保存, 需要EPROM的配合. 这样可以将编程数据从EPROM读取出了实现破解, 不便于保密. 而CPLD则可以设有加密编程单元.

在系统可编程通用数字开关 (ispGDS)

在系统可编程通用数字开关 (In-System Programmable Generic Digital Switch, ispGDS) 主要为了满足不改变硬件结构的情况下修改电路内部的连接. 在一个由多片ispPLD构成的数字系统中, 为了改变电路的逻辑功能, 有时不仅要重新设置每个ispPLD的组态, 而且需要改变它们之间的连接以及它们与外围电路的连接. ispGDS能很好地满足这个需要. 其结构图如下图所示, 由一个可编程开关矩阵和一系列的输入输出单元组成.

programmable_logic_device.txt · Last modified: 2019/01/07 20:22 by daizhirui