复杂可编程逻辑器件cpld是在八十年代中期,随着半导体工艺的不断完善,用户对器件的集成度要求不断提高的形式下发展起来的产物。
复杂可编程逻辑器件(cpld)的生产厂家众多,品种繁多、结构多样,但大多采用了以下两种结构。一种是基于乘积项的cpld,这种cpld的逻辑单元沿用了简单pld(pal、gal等)的乘积项逻辑单元结构,目前大多cpld都是属于这种类型。这种cpld对简单pld 的结构和功能进行了扩展,cpld具有更多的乘积项、更多的宏单元和更多的i/o端口。如altera公司的多阵列矩阵max系列、flashlogic和经典系列,以及xilinx公司和lattice公司的cpld产品均采用可编程乘积项结构。近几年,altera公司推出的基于查找表的cpld,其结构与基于乘积项的cpld有很大的差异,这种cpld是基于sram工艺,逻辑单元采用了查找表lut来实现各种复杂的逻辑功能,如altera公司的apex20k、flex10k和felx8000系列产品。具体应用时,两种产品有各自的特点,本文对这两种器件进行分别介绍。
一、基于乘积项的cpld的基本结构
基于乘积项的cpld是由简单pld的结构演变而来的。cpld是由多个类似pal的逻辑块组成,每个逻辑块就相当于一个pal/gal器件,逻辑块之间使用可编程内部连线实现相互连接。但基于乘积项的cpld比pal/gal在集成规模和工艺水平上有了很大的提高,出现了大批结构复杂、功能更多的逻辑阵列单元形式.,如altera公司的epm系列器件,atmel公司的atv5000系列器件采用多阵列矩阵max(multiple array matrix)结构的大规模cpld,xilinx公司的xc7000和xc9500系列产品采用通用互连矩阵uim(universal interconnect matrix)及双重逻辑功能块结构的逻辑阵列单元。生产这种cpld的公司有多家,各个公司的器件结构千差万别,但一般情况下,都至少包含了三种结构:可编程逻辑块;可编程i/o单元和可编程内部连线。可编程逻辑块是基于简单pld的乘积项结构,包含有积项、宏单元等,能有效地实现各种逻辑功能。基于乘积项cpld的基本结构如图1所示。
图1 基于乘积项cpld的基本结构
二、基于查找表的cpld的电路结构
altera公司近几年推出的新型cpld ---flex系列产品。克服了固定的与-或逻辑阵列结构的局限性,基于查找表的cpld与基于乘积项的cpld的结构和简单pld在结构上有很大的差别,这类产品如altera公司的flex 10k系列。flex10k系列也是工业界第一个嵌入式的pld,采用重复可构造的cmos sram工艺,把连续的快速通道互连与独特的嵌入式阵列结构相结合,在芯片上能实现多种复杂功能。
下面以flex 10k系列器件为例, 介绍基于查找表的cpld的结构。
flex 10k器件的结构如图2所示。flex 10k系列主要由嵌入式阵列块eab、逻辑阵列块lab、i/o单元和快速通道组成。lab按行列排序,构成大规模紧凑型逻辑阵列。每个lab由8个逻辑单元le③组成,逻辑单元le用于实现各种简单组合逻辑和时序逻辑功能。每个lab是一个独立结构,具有共同的输入和控制信号,lab的这种结构有利于布线和提高资源利用率。在flex 10k的每行中有一个嵌入式阵列块eab,eab是一种大规模的sram资源,可方便地编程为各种容量的存储单元和实现多种复杂的逻辑功能。ioe位于每行每列快速通道互连路径的两端,可作为输入/输出和双向引脚,实现快速的数据输入输出。内部信号互连和器件引脚之间的互连是由一系列贯穿长宽分布于整个芯片的快速连续通道连线提供。flex 10k系列主要器件特性见表1。
表1 flex 10k系列主要器件特性
特性
epf10k10
epf10k10a
epf10k30
epf10k30a
epf10k30b
epf10k50
epf10k50v
epf10k50b
epf10k100
epf10k100a
epf10k100b
epf10k200e
epf10k200s
epf10k250a
epf10k250b
提供门数
10,000
30,000
50,000
100,000
200,000
250,000
逻辑单元 (le)
576
1,728
2,880
4,992
9,984
12,160
逻辑阵列块(lab)
72
216
360
624
1,248
1,520
嵌入式阵列块(eab)
3
6
10
12
24
20
总ram/bit
6,144
12,288
20,480
24,576
98,304
40,960
最大用户i/o数
134
246
310
406
470
470
图2 flex 10k器件的结构图
2.1 嵌入式阵列块(eab)
flex 10k中的嵌入式阵列是由一系列用于实现逻辑功能和具有存贮功能嵌入式阵列块eab的组成。eab是在输入、输出口带有寄存器的ram块,它可以非常方便地实现-些规模不太大的fifo、rom、ram和双端口ram等功能;这些随机存储单元块可以根据设计者的要求, 比较灵活的改变电路结构,以实现乘法器,错误纠正电路和数字滤波器等电路的功能。eab具有快速可预测的功能,并且是全局可编程的和动态重配置的功能,这为-设计者提供了嵌入式阵列中完全可控制的编程功能。
图3 eab的原理电路图
eab的原理电路如图3所示, flex 10k在每行嵌入一个eab。每个eab提供一个2048位的ram/rom,ram/rom的大小是很灵活的,可配置为256×8位、512×4位、1024×2位和2048×1位,数据总线和地址总线的宽度随ram大小而变化。设计人员可用开发系统如max+plus将eab配置成任意尺寸。eab的输出也可以是组合输出,当设计所需ram模块比-个eab的配置更宽或深度更深时,开发系统如max+plus软件可自动级联eab可以实现更大的ram块。
eab包含用于同步性设计的输入寄存器、输出寄存器和地址寄存器,eab可用于寄存器输出和组合逻辑输出并易于实现同步ram。eab写使能信号we可以与输入时钟同步,也可以异步工作。当eab用于实现同步ram时,数据和地址信号应在eab中进行锁存。所有的控制信号,包括we信号都应在eab中实现。当-个高的we信号被锁存至eab中时,eab中的电路产生-个能够满足输入数据、地址建立和保持时间要求的写脉冲,可消除引起数据损伤的潜在毛刺。当we为高电平时,允许输入地址改变,在每个时钟同期里we信号都会自动跳到高电平。因此在相继的时钟周期中写入时,用户不必撤消we信号。
2.2 逻辑单元(le)
le是构成flex10k器件的最小单元, 能有效地实现各种逻辑功能。le的原理电路如图3.4所示。每个le含有4输入查找表、一个可编程触发器、一个进位链路和一个级连链路。
4输入查找表是4输入静态存储器sram构成一个函数发生器, 逻辑函数真值表存储在sram中, 它能实现4变量的任意组合逻辑函数,而且实现组合逻辑的速度要比一般算法快。le中的可编程触发器可编程为d、t、jk或rs触发器。触发器的时钟、清零和置位控制信号可由专用的输入引脚,通用i/o引脚或任何内部逻辑驱动。对于纯组合逻辑, 可将该触发器设置为旁路, 查找表的输出可直接作为le的输出。
le还提供了两条专用的高速数据通道,即进位链和级联链。进位链提供le快速向前进位的功能, 级联链用于把相邻的le连接起来形成多输入函数。
每个le能驱动快速通道互连和lab内的局域互连,其输出可单独控制,如查找表驱动一个输出,寄存器驱动另一个输出,它能提高le的利用率。
图4 le的原理电路图
2.3 逻辑阵列块(lab)
每个逻辑阵列块含有8个le及相应的进位链路和级联链路、以及lab局部互连线和lab控制信号组成。lab构成了flex10k的“粗粒度”结构,可以有效地布线,并使器件有高的利用率.又能达到高性能。逻辑阵列块lab的原理电路如图5所示。
lab提供4个供8个le使用的可编程反向的控制信号。其中两个用作时钟,另两个用作清除或置位功能。这些信号可由专用时钟信号、全局信号、i/o信号或者lab局部互连的内部信号直接驱动。
图5 flex10k lab的原理电路图
lab中进位链路和级联链路连接同一lab中所有的le和同一行中所有的lab,能够提供在一个逻辑阵列块内各逻辑单元之间的快速进位,使芯片能够实现高速的加法器和记数器;级连链能够