复杂可编程逻辑器件(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系列主要器件特性
特性<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
EPF10K10 |
EPF10K30 |
EPF10K50 |
EPF10K100 |
EPF10K200E |
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可以与输入时钟同步,也可以异步工作。(http://www.ippipp.com/版权所有)当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,能够提供在一个逻辑阵列块内各逻辑单元之间的快速进位,使芯片能够实现高速的加法器和记数器;级连链能够以很小的延时将多个逻辑单元并联起来,有利于实现多输入的逻辑函数。
2.4 快速通道连接
快速通道是贯穿FLEX10K器件长宽的系列水平及垂直的连续式布线通道。在FLEX10K中,LE和器件I/O引脚是通过快速通道实现连接的。这种布线机构即使对于复杂的设计也可预测其性能。
图6 FLEX 10K器件的互连资源
快速通道连接是由遍布于整个器件的“行连线带”和“列连线带”组成,如图6所示。每行的LAB有一个专用的“行连线带”,“行连线带”能由该行LE驱动,也可由“列连线带”驱动。“行连线带”可以驱动I/O引脚或馈送到其它LAB。“列连线带”分布于两行之间,每个LAB列有一个专用的“列连线带”承载着一列的输出,这个“列连线带”把LE的输出或I/O引脚的输入信号馈送到“行连线带”并把信号送到其它LAB或者直接驱动I/O引脚。
在相邻的LAB中有两个LE通过开关实现行列通道的跨接。如一个LAB中LE通常能够由同一行的相邻的LAB中特定的LE来驱动行和列通道,反之亦然。这种布线的灵活性使布线资源能得到更有效的利用。
2.5 I/O单元(IOE)
FLEX 10K器件的I/O引脚由I/O单元IOE来驱动。IOE位于行列的末端,IOE引脚可以设置为输入输出或双向引脚,其结构如图7所示。
图7 I/O单元的结构图
每个I/O单元包括一个双向I/O缓冲器和一个可作为输入/输出的寄存器。开发软件可利用可编程的反相选择,可自动地将来自行列连线带的信号反相。
每个IOE的时钟、时钟使能、清除和输出使能控制均由被称为周边控制总线的I/O控制信号网络提供。周边控制总线使用的高速驱动能使通过器件的偏移最小,它提供多达12个周边控制信号,其分配如下:8个输出使能信号(OE),6个时钟使能信号(ENA),2个时钟信号(CLK)和2个清除信号(CLRn)。此外,周边控制总线还有两个专用时钟信号,每个IOE可以使用这两个专用时钟信号中的任意一个用于时钟以及时钟使能的控制。
每个IOE中输出缓冲器都有一个可调节的输出摆率(电平跳变的速率)控制,可控输出摆率可通过编程选择为慢速和快速,选择快速方式适用于频率较高的信号输出;选择慢速方式则可以减小功耗和降低噪声。每个I/O引脚提供了可供选择的漏极开路,使器件能够提供系统极的控制信号,如中断和写使能控制信号,也可实现“线或”功能。
FLEX10K支持多电压I/O接口,可接到不同的电源电压工作系统中,这些器件有-组供内部工作电源(VCC)和供输入缓冲器工作的电源引脚VCCINT,以及-组I/O输出驱动器的电源引脚VCCIO。
2.6 专用输入
FLEX 10K器件提供六个专用输入引脚,这些专用输入信号使用了专用的布线通道,提供比快速通道互连更短的延时和更小的失真,可用于全局时钟,清除、置位和外部输出使能以及时钟使能的控制。它们可以馈送到器件中每个LAB的局部互连,可作为器件所有的LAB控制信号。也可以作为通用数据输入,能够减小附加到控制信号网络的延迟。
2.7 时钟锁定和时钟自举
时钟锁定和时钟自举电路用于高速电路设计。这两种电路中均含有锁相环PLL。时钟锁定电路是一个同步PLL,它减小了器件内的时钟延迟和偏移,使具建立的时间到输出的时钟减小到最小。时钟自举电路提供了一个时钟乘法器,使设计人员容易地实现时域逻辑乘法,并能减小资源的使用。