| |||
FPGA 与CPLD
David
其实现在,就我个人而言已经很少听到或是用到CPLD,或许是因为所从事的行业或专业的原因。但在很多书,很多介绍FPGA的书籍里,我看到了他们很多将FPGA与CPLD对比。一直心中存了疑问。今天花点时间,将这两个东西的基本概念给弄清楚。
一、 是什么
要知道FPGA和CPLD的本质区别,就需要弄清楚,FPGA 和CPLD的本质到底是什么。
1.1 FPGA
FPGA,全称为Field Programmable Gate Array,中文为现场可编程门阵列。FPGA是由通过可编程互联连接的可配置逻辑块矩阵构成的半导体器件 [1] 。
图1 Cyclone V架构
上图是Cyclone V 的架构,整个FPGA包括自适应逻辑模块(ALM)(Xilinx为CLB)、I/O、PLLs、M10K嵌入式内存、分布式内存逻辑阵列模块(MLAB)、数字信号处理(dsp)模块以及其外固化的外设IP,比如Transceiver和外部存储接口控制器,这些资源通过灵活的时钟网络和英特尔的MultiTrack布线结构来连接。一个FPGA中可以有数百万个ALM/CLB,而每个ALM/CLB主要有查找表(Look Up Table)、寄存器和多路复用器组成(Xilinx和Altera大体相同)。也就是说,一个FPGA可以有数百万的寄存器。那么,说白了,这是一个灵活的asic,但性能上是无法和ASIC相比较的。FPGA与ASIC的区别与特点也是十分的有意思,我在后续的文章中会提到。此外,FPGA上电时,无法立即工作,需要由外部配置电路进行配置。
1.2 CPLD
CPLD,全称为Complex Programmable Logic Devices,中文为复杂可编程逻辑器件。CPLD是完全可编程阵列组和宏单元的组合 [2] 。
图2 CoolRunner-II 架构
以上是Xilinx的CoolRunner-II的架构图,其由多个功能块(FB)组成,高级互联矩阵(AIM)将各个功能块连接起来,FB由可编程逻辑阵列(PLA)和16个宏单元组成,而其实PLA其实是两级与或门,而宏单元的结构如下:
图3 CoolRunner-II宏单元
从图三可以看出,宏单元可以简单的认为就是一个触发器加PLA的输出的组合,宏单元直接与输入输出I/O进行交互。这里可以得到一个很直观的概念,CPLD的寄存器偏少(FBs*16)。另外 ,通过JTAG的ISP接口进行编程,而这些基于闪存(FLASH)的连接,不会因掉电而消失,因此程序烧录完成后,CPLD一上电就可以工作。
二、 对比
了解了FPGA和CPLD的基本结构之后,其区别也愈加明显,总结如下:
|
FPGA |
CPLD |
1 |
上电后,需从外部ROM加载配置数据,加载完成后方可工作 |
上电即可工作 |
2 |
寄存器数目众多,结构复杂,功能更加强大 |
寄存器数目少,结构简单,可以实现简单电路 |
3 |
具有片上硬核 |
没有片上硬核1 |
4 |
基于RAM结构,掉电后代码丢失 |
基于ROM结构,掉电后,代码不会丢失 |
因此,FPGA与CPLD相比,资源更多,功能更加复杂,可以应用于一些复杂的场所,而CPLD则应用于简单的应用场景。
1.听说目前最新的CPLD已经带硬核,具体型号未知,如知,请告悉。
[1] https://china.xilinx.com/products/silicon-devices/fpga/what-is-an-fpga.html
[2] https://www.xilinx.com/products/silicon-devices/cpld/cpld.html
[3] 吴厚航.《深入浅出玩转FPGA》北京航空航天大学出版社 2010.