CPLD和FPGA都是我们经常会用到的器件。有的说有配置芯片的是FPGA,没有的是CPLD;有的说逻辑资源多的是FPGA,少的是CPLD;有的直接就不做区分,把他们都叫做FPGA。那么两者到底有什么区别呢?下面我们就以Altera公司的CPLD和FPGA为例来说说两者的区别。
首先我们看一下CPLD的芯片结构,搞清楚CPLD是由哪几部分组成的。下图是MAX系列CPLD的芯片结构图:
从图中可以清楚的看出来CPLD主要由三部分组成:Macro cell(宏单元),PIA(可编程连线),和IO Control Block(IO控制块)。每个宏单元都与GCLK(全局时钟)OE(输出使能)GCLR(清零)等控制信号直接相连,并且延时相同。各宏单元之间也由固定长度的金属线互连,这样保证逻辑电路的延时固定。其中宏单元模块是CPLD的逻辑功能实现单元,是器件的基本单元,我们设计的逻辑电路就是由宏单元具体实现的。下面我们再来看看宏单元的具体结构:
一个宏单元主要包括了LAB Local Array(逻辑阵列),Product-Term Select Matrix(乘积项选择矩阵)和一个可编程D触发器组成。其中逻辑阵列的每一个交叉点都可以通过编程实现导通从而实现与逻辑,乘积项选择矩阵可实现或逻辑。这两部分协同工作,就可以实现一个完整的组合逻辑。输出可以选择通过D触发器,也可以对触发器进行旁路。通过这个结构可以发现,CPLD非常适合实现组合逻辑,再配合后面的触发器也能够实现一定的时序逻辑。