Difference Between CPLD and FPGA

本文主要介绍CPLD和FPGA的区别。

CPLD和FPGA都是由逻辑阵列模块构成的,但是CPLD的LAB基于乘积和宏单元,而FPGA的LAB使用基于LUT的逻辑单元。CPLD的LAB围绕中心全局互连排列,随着器件中逻辑数量的增加,呈指数增长。FPGA的LAB以网格阵列排列,随器件密度线性增长。CPLD互连包括LAB本地可编程阵列及中心可编程互连。FPGA器件除了包括本地互连,用于各个LAB,但是和LAB逻辑分开,器件还包括行列互连,这些互连跨过阵列中的多个LAB,以及整个芯片的长宽。

CPLD

CPLD是基于乘积项技术(Product-Term)、EPPROM或FLASH工艺;直接烧写程序调电后程序不会消失;一般可以擦写几百次,并且一般宏单元在512以下。比如ALTERA的MAX3000/5000/7000/9000和CLASSIC系列)。

CPLD可分为三块结构:可编程逻辑阵列LAB(Logic Array Block,由若干宏单元(LMC,Logic Maro Cell)组成),可编程内部连线(PIA)和I/O控制块(IO Control Block)。

宏单元是CPLD的基本结构,由它来实现基本的逻辑功能。LMC内部主要包括与阵列、或阵列、可编程触发器和多路选择器等电路,能独立地配置为时序或组合工作方式。

每个宏单元都与GCLK(全局时钟)、OE(输出使能)、GCLR(清零)等控制信号直接相连,并且延时相同。各宏单元之间由固定长度的金属线互连,这样保证逻辑电路的延时固定。

一个宏单元主要包括了LAB的Local Array(逻辑阵列),Product-Term SelectMatrix(乘积项选择矩阵)和一个可编程D触发器组成。其中逻辑阵列的每一个交叉点都可以通过编程实现导通从而实现与逻辑,乘积项选择矩阵可实现或逻辑。这两部分协同工作,就可以实现一个完整的组合逻辑。输出可以选择通过D触发器,也可以对触发器进行旁路。因此CPLD非常适合实现组合逻辑,再配合触发器也能够实现一定的时序逻辑。

I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。

可编程内部连线的作用是在各逻辑宏单元之间以及逻辑宏单元和I/O单元之间提供互连网络。各逻辑宏单元通过可编程连线阵列接收来自输入端的信号,并将宏单元的信号送往目的地。这种互连机制有很大的灵活性,它允许在不影响引脚分配的情况下改变内部的设计。

FPGA

FPGA是基于查找表(Look-Up-Table,LUT)技术、SRAM工艺(可迅速反复地编程);直接烧写程序掉电后程序丢失;理论上擦写100万次以上;一般使用需要外挂EEPROM,可以达到几百万门电路。比如ALTERA的APEX、FLEX、ACEX、STRATIX、CYCLONE等等系列,Xilinx的Spartan、Artix、Kintex、Virtex、UltraScale、UltraScale+等等系列。

FPGA由可编程逻辑功能块(CLB)、输入/输出模块(IOB)及可编程互连资源(PIR)等三种可编程电路和一个SRAM结构的配置存储单元组成。

CLB是实现逻辑功能的基本单元,CLB主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB主要由查找表LUT构成,查找表是FPGA最根本的逻辑单元。我们设计的逻辑电路最终都是通过EDA工具把所有可能的结果计算出来然后储存在查找表里面。每次根据输入信号查找对应的结果,然后输出就可以了。也就是说FPGA的工作更像是一个RAM,根据不同的输入信号(地址)输出相应的数据。

IOB主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成,每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能,主要完成芯片上的逻辑与外部引脚的接口。

可编程互连资源(PIR)包括各种长度的连线线段和一些可编程连接开关,通过自动布线实现各种电路的连接,实现FPGA内部CLB之间或IOB之间以及CLB与IOB之间连接起来,构成特定功能的电路。

 

  CPLD FPGA
内部结构 Product-Term Look-Up  Table
程序存储 内部EEPROM SRAM,外挂EEPROM
资源类型 组合电路资源丰富 触发器资源丰富
使用场合 组合逻辑 时序逻辑
基本逻辑组成 LAB由宏单元构成 LAB有LE或ALM构成
建立逻辑功能 乘积和 LUT或ALUT
逻辑布局  LAB围绕中心全局互连  LAB网格阵列排列
 互连  LAB本地和全局互连  LAB本地和行/列/分段/整片互连
 集成度  低  高
布线结构 连续式 分段式
引脚延迟 时序延迟是均匀的和可预测的 延迟不可预测
保密性 可加密 一般不能保密
使用灵活性 通过修改具有固定内连电路的逻辑功能来编程(在逻辑块下编程) 通过改变内部连线的布线来编程(在逻辑门下编程,更灵活)

最新工艺的CPLD也是基于SRAM工艺,结构上和资源上越来越和FPGA趋同。主要差异在于:CPLD通过集成片内FLASH实现掉电不丢失数据,FPGA需要外部FLASH加载。