1. CPLD概述:什么是CPLD、CPLD与FPGA的区别、CPLD的发展历史与主流厂商

1.1 什么是CPLD?从我的第一块开发板说起

CPLD,全称是Complex Programmable Logic Device,复杂可编程逻辑器件。说白了,它就是一块可以让你「重新连线」的芯片。

我记得刚入行那会儿,第一次拿到一块CPLD开发板,心里还挺忐忑的。那时候我还在想:这玩意儿跟单片机有啥区别?后来做了一两个小项目才明白——单片机是软件跑指令,CPLD是硬件搭电路。你写的是代码,但烧进去之后,它就变成了实实在在的硬件逻辑。

CPLD的核心结构,其实没那么神秘。它主要由三部分组成:

  • 逻辑块(Logic Block):这是CPLD的基本单元,每个逻辑块里包含一些乘积项和宏单元。你可以把它理解成一个个小型的「乐高积木」。
  • 互连矩阵(Interconnect Matrix):负责把各个逻辑块连起来。我习惯叫它「高速公路网」。
  • I/O块(I/O Block):负责和外部世界打交道,输入输出全靠它。

你想想看,CPLD和FPGA最大的不同在哪?CPLD用的是EEPROM或Flash工艺,掉电不丢配置。FPGA呢?大部分是SRAM工艺,一断电就「失忆」了。所以很多工业控制场合,大家更愿意用CPLD——上电就能干活,不用等配置加载。

核心要点:CPLD适合做「胶合逻辑」(Glue Logic),比如地址译码、接口转换、状态机控制。我做过一个项目,用一块小CPLD把几个不同电压的传感器信号统一成3.3V逻辑,省掉了一大堆分立元件。

1.2 CPLD与FPGA的区别:别选错了器件

很多新手会问:CPLD和FPGA到底有啥区别?我能不能用FPGA代替CPLD?嗯,这个问题我当年也纠结过。

直接上对比表吧,这样更清楚:

对比项 CPLD FPGA
基本架构 乘积项结构,逻辑块较大 查找表(LUT)结构,逻辑块较小
配置方式 EEPROM/Flash,掉电保持 SRAM,掉电丢失,需外部配置芯片
逻辑容量 较小,通常几百到几千宏单元 较大,从几千到数百万逻辑单元
时序特性 可预测,延迟相对固定 布局布线影响大,时序需仔细分析
适用场景 胶合逻辑、简单状态机、接口转换 复杂算法、高速通信、图像处理
功耗 通常较低 取决于资源利用率,可能较高
成本 小容量时性价比高 大容量时性价比高

为什么会这样?我简单解释一下。CPLD的互连矩阵是「全局」的,你写一个逻辑,它的延迟基本固定。FPGA就不一样了,同样的逻辑放在不同位置,走线延迟可能差好几倍。我曾经在一个项目中用FPGA做地址译码,结果时序跑不过,折腾了两天才发现是布局问题。换成CPLD,一次搞定。

我的建议:如果你的设计逻辑量在500个宏单元以内,对时序要求严格,而且不想折腾配置芯片——选CPLD。如果逻辑量大、需要大量寄存器或片上RAM——选FPGA。

1.3 CPLD的发展历史:从PAL到今天的演变

聊历史之前,我先问一个问题:你知道CPLD的「祖宗」是谁吗?

答案是PAL(Programmable Array Logic),上世纪70年代末的产品。那时候的PAL只能编程一次,烧错了就报废。我记得听老工程师讲过,他们当年烧PAL之前,要反复检查好几遍,生怕一根线画错。

后来到了80年代,出现了GAL(Generic Array Logic)。GAL可以反复擦写,这简直是革命性的进步。我刚开始学数字电路时,用的就是GAL16V8,现在有些老项目里还能见到它的影子。

90年代初,Lattice和Altera(现在被Intel收购了)推出了真正的CPLD。Lattice的ispLSI系列和Altera的MAX系列,是那个时代的两大主力。我记得2000年左右,一个MAX7000系列的CPLD要卖到几十块钱,现在几块钱就能买到性能更好的。

发展到现在,CPLD的主流工艺已经进化到0.18μm甚至更小。主流厂商的产品线也基本定型:

  • Intel(原Altera):MAX 10系列,集成了Flash和ADC,性价比很高
  • Lattice:MachXO系列,低功耗做得很好,工业领域用得很多
  • Microchip(原Atmel):ATF15xx系列,老牌产品,稳定可靠
  • Xilinx(现AMD):XC9500/ CoolRunner系列,虽然Xilinx重心在FPGA,但CPLD产品线依然在维护

避坑指南:我曾经遇到过一个问题——选了一款即将停产的CPLD,结果做到一半发现买不到货了。所以选型时一定要查一下厂商的「产品生命周期」文档。尽量选那些还在「量产」或「成熟」阶段的产品,别碰「不推荐用于新设计」的型号。

1.4 主流厂商与选型建议

说到选型,我个人的经验是:先看需求,再看价格,最后看工具链。

举个例子,如果你做的是消费电子,对成本敏感,Lattice的MachXO2系列就很合适。它的功耗低,封装小,而且Lattice的Diamond软件是免费的。如果你做的是工业控制,需要宽温度范围和长期供货保证,Intel的MAX 10系列更靠谱。

这里我整理了一个简单的选型参考表:

厂商 代表系列 特点 推荐场景
Intel (Altera) MAX 10, MAX II 集成Flash、ADC,工具链成熟 工业控制、汽车电子
Lattice MachXO, MachXO2, MachXO3 低功耗、小封装、性价比高 消费电子、通信接口
Microchip ATF15xx, ATF22V10 老牌产品、稳定可靠、供货周期长 军工、航天、长生命周期项目
AMD (Xilinx) XC9500XL, CoolRunner-II 低功耗、高性能、但逐渐淡出 现有项目维护、特殊需求

最后说一句,选CPLD的时候,别只看逻辑容量。还要看I/O数量、封装尺寸、工作电压、温度范围。我见过有人为了省几毛钱,选了个小封装的CPLD,结果布线时发现I/O不够用,最后不得不改板——得不偿失。

总结一下:CPLD虽然看起来「老」,但在很多场合它依然是不可替代的。它的确定性、易用性和可靠性,是FPGA在某些场景下比不了的。接下来的章节,我会带大家一步步用CPLD做几个实际的小项目,从最简单的门电路开始,到状态机、接口协议——相信我,学完这些,你就能自己动手做东西了。