一 . 基于乘积项(Product-Term)的 PLD 结构
采用这种结构的 PLD 芯片有:Altera 的 MAX7000,MAX3000 系列(EEPROM 工艺),Xilinx 的 XC9500 系列(Flash 工艺)和 Lattice,Cypress 的大部分产品(EEPROM 工艺)
 
 
我们先看一下这种 PLD 的总体结构(以 MAX7000 为例,其他型号的结构与此都非常相似):
 
图 1 基于乘积项的 PLD 内部结构
 
这种 PLD 可分为三块结构:宏单元(Marocell),可编程连线 (PIA)和 I/O 控制块。 宏单元是 PLD 的基本结构,由它来实现基本的逻辑功能。图 1 中兰色部分是多个宏单元的集合(因为宏单元较多,没有一一画出)。可编程连线负责信号传递,连 接所有的宏单元。I/O 控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。 图 1 左上的 INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2 是全局时钟,清零和输出使能信号,这几个信号有专用连线与 PLD 中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。
 
宏单元的具体结构见下图:
 
图 2 宏单元结构
 
左侧是乘积项阵列,实际就是一个与或阵列,每一个交叉点都是一个可编程 熔丝,如果导通就是实现“与”逻辑。后面的乘积项选择矩阵是一个“或”阵列。两者一起完成组合逻辑。图右侧是一个可编程 D 触发器,它的时钟,清零输入都可 以编程选择,可以使用专用的全局清零和全局时钟,也可以使用内部逻辑(乘积项阵列)产生的时钟和清零。如果不需要触发器,也可以将此触发器旁路,信号直接 输给 PIA 或输出到 I/O 脚。
 
二 . 乘积项结构 PLD 的逻辑实现原理
下面我们以一个简单的电路为例,具体说明 PLD 是如何利用以上结构实现逻辑的,电路如下图:
 
图 3
 
假设组合逻辑的输出(AND3 的输出)为 f,则 f=(A+B)*C*(!D)=A*C*!D + B*C*!D ( 我们以!D 表示 D 的“非”)
 
PLD 将以下面的方式来实现组合逻辑 f:
 
图 4
 
A,B,C,D 由 PLD 芯片的管脚输入后进入可编程连线阵列 (PIA),在内部会产生 A,A 反,B,B 反,C,C 反,D,D 反 8 个输出。图中每一个叉表示相连(可编程熔丝导通),所以得到:f= f1 + f2 = (A*C*!D) + (B*C*!D) 。这样组合逻辑就实现了。 图 3 电路中 D 触发器的实现比较简单,直接利用宏单元中的可编程 D 触发器来实现。时钟信号 CLK 由 I/O 脚输入后进入芯片内部的全局时钟专用通道,直接连接 到可编程触发器的时钟端。可编程触发器的输出与 I/O 脚相连,把结果输出到芯片管脚。这样 PLD 就完成了图 3 所示电路的功能。(以上这些步骤都是由软件自 动完成的,不需要人为干预)
 
图 3 的电路是一个很简单的例子,只需要一个宏单元就可以完成。但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再做为另一个宏单元的输入。这样 PLD 就可以实现更复杂逻辑。
 
这种基于乘积项的 PLD 基本都是由 EEPROM 和 Flash 工艺制造的,一上电就可以工作,无需其他芯片配合。