基于FPGA CPLD的EDA技术实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

二、FPGA/CPLD的特点

(一)CPLD与FPGA的结构特点

1.CPLD的结构特点

CPLD是在PAL、GAL的基础上发展起来的阵列型PLD器件,具有高密度、高速度的优点。CPLD一般包含宏单元、可编程I/O单元和可编程连线阵列(PIA)三部分。

(1)宏单元

宏单元是CPLD器件的基本单元,宏单元内部主要包括“与或”阵列、触发器和多路选择电路,能独立地配置为组合工作方式或时序工作方式。在早期的GAL器件中,宏单元与I/O单元集成在一起,称为逻辑宏单元(OLMC),高密度CPLD的逻辑宏单元都做在内部,称为内部逻辑宏单元。CPLD的宏单元内一般有多个触发器,其中只有一个触发器与输出端相连,其余触发器的输出可以反馈到“与阵列”,构成更复杂的时序电路,这些触发器称为“隐埋”触发器。

尽管大多逻辑函数能够用每个宏单元中的乘积项实现,但某些逻辑函数比较复杂,要实现它们,需要附加乘积项。为提供所需要的逻辑资源,可以借助可编程开关,将同一宏单元(或其他宏单元)中未使用的乘积项联合起来使用,称为乘积项共享方式。Lattice和Altera的CPLD无一例外地采用了乘积项共享方式。利用乘积扩展项,可保证在实现逻辑综合时,用尽可能少的逻辑资源,得到尽可能快的工作速度。

(2)可编程I/O单元

可编程I/O单元具有以下一些特点:

•能够兼容TTL和CMOS多种接口标准;

•可配置为输入、输出、双向I/O、集电极开路和三态门等各种组态;

•能够提供适当的驱动电流,以直接驱动发光二极管(LED)等器件;

•降低功率消耗,防止过冲和减少噪声。

I/O单元必须能够支持多种接口电压。随着半导体工艺中线宽的不断缩小,器件的内核必须采用更低的电压。例如当工艺线宽为1.2~0.5μm时,器件一般采用5V电压;当工艺线宽为0.35μm时,器件的供电电压为3.3V;当工艺线宽为0.25μm时,I/O单元与芯片内核的供电电压不再相同,内核的电压一般为2.5V,I/O单元的工作电压为3.3V,并且能兼容5V和3.3V的器件;当工艺线宽为0.18μm时,器件内核一般采用1.8V的电压,I/O单元则要能够兼容2.5V和3.3V的电压。

(3)可编程连线阵列(PIA)

可编程连线阵列在各逻辑宏单元之间以及逻辑宏单元和I/O单元之间提供互联网络。在FPGA中,布线延时是累加的,与路径有关;而在CPLD中,一般采用固定长度的线段来连接,这种连线的好处是有固定的延时,时间性能容易预测。

下面以MAX7000S器件为例介绍Altera的CPLD结构特点。MAX7000S器件的逻辑阵列块(LAB,Logic Array Blocks)如图1.5所示,每个LAB由16个宏单元组成,多个LAB通过PIA和全局总线连接在一起。

图1.5 MAX7000S器件的结构

MAX7000S每个宏单元由三个功能块组成:逻辑阵列、乘积项选择矩阵和可编程触发器。逻辑阵列实现组合逻辑功能,它可给每个宏单元提供5个乘积项;乘积项选择矩阵分配这些乘积项,作为“或”门和“异或”门的主要逻辑输入项,以实现组合逻辑函数;每个宏单元的一个乘积项可以反相后回送到逻辑阵列。“可共享”的乘积项能够连到同一个LAB中任何其他乘积项上。每个宏单元的触发器可以通过单独编程,采用D、T、JK、RS触发器的工作方式。也可将触发器旁路,实现纯组合逻辑的输出。

尽管大多逻辑函数能够用每个宏单元中的5个乘积项实现,但某些逻辑函数比较复杂,要实现它们的话,需要附加乘积项,将共享和并联这两种扩展项作为附加的乘积项直接送到LAB的任意宏单元中,可利用尽可能少的逻辑资源,得到尽可能快的工作速度。

MAX7000S每个LAB有16个共享扩展项。每个宏单元提供一个未使用的乘积项,并将它们反相后回送到逻辑阵列,便于集中使用,从而构成共享扩展项。每个共享扩展项可被LAB内任何宏单元共享,以实现复杂的逻辑函数。但采用共享扩展项会增加一个短的延时。共享扩展项的结构如图1.6所示。

图1.6 共享扩展项的结构

并联扩展项是一些宏单元中没有使用的乘积项,这些乘积项可分配到邻近的宏单元,实现快速复杂的逻辑函数。并联扩展项的结构如图1.7所示。

图1.7 并联扩展项的结构

图1.8所示是PIA布线到LAB的示意图。MAX7000S的PIA有固定的延时,它能消除信号之间的时间偏移。

图1.8 PIA布线到LAB

图1.9所示为MAX7000S器件I/O控制块的结构图。I/O控制块允许每个I/O引脚单独设置为输入、输出和双向工作方式。所有I/O引脚都有一个三态缓冲器,当三态缓冲器的控制端接地时,输出为高阻态,此时I/O引脚可作为专用输入引脚使用;当三态缓冲器的控制端接高电平时,输出有效。I/O控制块有6个全局输出使能信号。

图1.9 MAX7000S器件I/O控制块的结构

MAX7000S器件提供节电工作模式,在这种模式下,整个器件总功耗下降到原来的50%或更低。器件中的每一个独立的宏单元可切换为高速(打开Turbo位)或者低速(关闭Turbo位),从而降低整个器件的功耗。

MAX7000S器件每个I/O引脚都有一个控制漏极开路输出的Open-Drain选项,利用该选项可提供诸如中断、写允许等系统级信号。

MAX7000S器件支持多电压I/O接口,设有VCCIN和VCCIO两组电源引脚,一组供内核和输入缓冲器工作,一组供I/O引脚工作。根据需要,VCCIO引脚可连接3.3V或5.0V电源,当接5.0V电源时,输出与5.0V系统兼容;当接3.3V电源时,输出与3.3V系统兼容。

CPLD具有以下优点。

•I/O数量多。在给定的器件密度上可提供更多的I/O接口。

•时序模型简单。这主要归功于CPLD的粗粒度特性,这不但可加速初始设计速度,而且可加速调试流程。

•CPLD是粗粒结构,具有较少数量的开关,相应地延迟也小,因此CPLD可工作在更高的频率,具有更好的性能。

•CPLD软件编译快,布放设计更加容易执行。

2.FPGA的结构特征

CPLD是基于乘积项的可编程结构,而FPGA则是基于查找表(LUT)的可编程结构,即LUT是可编程的最小逻辑构成单元。与CPLD相比,FPGA具有更高的集成度、更强的逻辑功能和更大的灵活性。这里以Altera公司的FPGA器件ACEX1K为例介绍。

ACEX1K器件的内部包括嵌入式阵列(EAB)、逻辑阵列(LAB)、快速通道、I/O单元等部分。图1.10所示是ACEX1K器件的结构示意图。LAB按行和列排成一个矩阵,每一行中放置了一个嵌入式阵列块(EAB)。在器件内部,信号的互联及信号与器件引脚的连接由快速通道(Fast Track)提供,每行(或每列)的快速通道互连线的两端连接着若干个I/O单元。

图1.10 ACEX1K器件的结构示意图

ACEX1K器件的嵌入式阵列包含一系列的EAB,可实现RAM、ROM、双口RAM以及FIFO等功能,也可实现普通逻辑门功能。EAB既可独立使用,也可以联合起来实现更复杂的功能。

ACEX1K器件的逻辑阵列由许多逻辑阵列块(LAB)构成,每个LAB包含8个逻辑单元(LE)。LE由一个4输入查找表(LUT)、一个可编程触发器和专用的进位链、级连链构成。8个LE可以实现一个中等规模的逻辑电路,如8位计数器等,也可将多个LAB结合起来实现复杂的逻辑功能,每个LAB约相当于96个逻辑门。ACEX1K器件内部的信号互连由纵横贯穿于整个器件的行列通道提供。

每个I/O引脚都配有一个I/O单元(IOE),它位于每个行或列的末端。每个I/O单元包含一个双向I/O缓冲器和一个寄存器,可以用作输出或输入寄存器,当被用作专用的时钟引脚时,缓冲器可提供附加的特性。I/O单元能提供许多功能,如支持JTAG BST、转换速度控制、三态缓冲等。

FPGA具有以下特点。

①FPGA是细粒结构,每个单元间存在细粒延迟,随着设计密度的增加,信号不得不通过更多开关,路由延迟也随之增加,从而削弱了整体性能。

②如果设计中要用到大量触发器(时序逻辑),那么使用FPGA就是一个很好的选择。根据结构原理可以知道,PLD分解组合逻辑的功能很强,一个宏单元就可以分解多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。

③FPGA芯片中包含的LUT和触发器的数量非常多。FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,平均逻辑单元成本很低。

④用FPGA作为控制器,程序跑飞或死机的可能性较小;FPGA的I/O口配置灵活,可自由设定I/O口的功能,并且I/O口多,易于实现复杂I/O口控制;同时FPGA执行速度快,可实现高速的数据采集和控制。

(二)CPLD与FPGA的区别

FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但CPLD和FPGA在结构上存在差异,具有各自的特点。

①在编程方式上,CPLD主要是基于EEPROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。

②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。

④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。

⑥CPLD的速度比FPGA快,并且具有较强的时间预测性。FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。

⑦CPLD更适合完成各种算法和组合逻辑,FPGA更适合完成时序逻辑。换句话说,FPGA更适合触发器丰富的结构,而CPLD更适合触发器有限而乘积项丰富的结构。

⑧CPLD保密性好,FPGA保密性差。

⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。