一、可编程逻辑器件概述:从PAL到FPGA的发展史、CPLD与FPGA的区别、主流厂商与选型策略
1.1 从PAL到FPGA:一段硬件的“进化史”
做硬件设计这么多年,我经常被问到:“FPGA到底是怎么来的?”
其实,可编程逻辑器件的发展,就是一部“从死板到灵活”的进化史。
最早的可编程逻辑器件,叫PAL(可编程阵列逻辑)。
上世纪70年代,工程师们受够了用一堆74系列小芯片搭电路。PAL的出现,让大家可以用熔丝编程,实现简单的“与-或”逻辑。说白了,就是一堆逻辑门,你烧断某些熔丝,就决定了它的功能。
嗯,这里要注意:PAL是一次性编程的。烧错了?扔了重来。我刚开始入行时,还见过老工程师用PAL编程器,那玩意儿跟电烙铁似的,烧起来一股糊味。
接着,GAL(通用阵列逻辑)来了。
GAL最大的进步是:可以反复擦写。它用了EECMOS工艺,像现在的Flash一样。我记得第一次用GAL时,觉得这玩意儿太方便了——写错了,紫外线一照,清空重来。
再后来,CPLD(复杂可编程逻辑器件)登场。
CPLD其实就是多个GAL的“合体”,内部用互联矩阵连接。它的特点是:时序可预测,延迟固定。为什么?因为它的互联结构是连续的,不像FPGA那样走线复杂。
最后,FPGA(现场可编程门阵列)彻底改变了游戏规则。
FPGA的思路完全不同。它内部是大量的逻辑单元(LUT + 触发器),通过可编程的布线资源连接。你想想看,这就像给你一堆乐高积木,你想搭什么就搭什么。
Xilinx(现AMD)在1985年推出了第一款FPGA——XC2064。当时只有64个逻辑块,64个触发器。放到今天,一个高端FPGA有上百万个逻辑单元。这进步,啧啧。
核心区别一句话总结:
- PAL/GAL:小规模,简单逻辑,一次性或有限次编程
- CPLD:中等规模,时序确定,适合控制逻辑
- FPGA:大规模,灵活布线,适合复杂数字系统
1.2 CPLD与FPGA的区别:别选错了
很多新手问我:“CPLD和FPGA到底有啥区别?能不能互相替代?”
我的回答是:不能。它们根本不是一个物种。
先说架构差异。
CPLD基于乘积项结构,内部是“与-或”阵列。FPGA基于查找表(LUT)结构,内部是SRAM配置的LUT + 触发器。
这导致了一个关键区别:CPLD的时序是确定的,FPGA的时序取决于布线。
我在项目中遇到过:用FPGA做简单的地址译码,结果因为布线延迟,译码信号毛刺不断。换成CPLD,问题立刻解决。为什么?因为CPLD的延迟是固定的,不随逻辑复杂度变化。
再看容量和功耗。
| 特性 | CPLD | FPGA |
|---|---|---|
| 逻辑容量 | 小(几百到几千宏单元) | 大(几千到几百万逻辑单元) |
| 存储方式 | 非易失(Flash/EEPROM) | 易失(SRAM,需外部配置芯片) |
| 时序特性 | 固定延迟,可预测 | 布线延迟,需时序分析 |
| 功耗 | 较低,静态功耗小 | 较高,动态功耗大 |
| 适用场景 | 胶合逻辑、控制接口、简单状态机 | 复杂算法、高速接口、数字信号处理 |
避坑指南:
我曾经在一个项目中,用FPGA做简单的I/O扩展。结果发现,FPGA上电后需要几百毫秒才能配置完成,导致系统启动时I/O状态不确定。后来换成CPLD,上电即用,问题解决。
所以,如果系统需要“上电即工作”,选CPLD。如果追求高性能和大容量,选FPGA。
1.3 主流厂商与选型策略
目前市场上,可编程逻辑器件的主要玩家就两家:AMD(原Xilinx)和Intel(原Altera)。另外还有Lattice、Microchip(原Microsemi)等小众厂商。
AMD(Xilinx)
业界老大,产品线最全。从低端的Spartan系列,到中端的Artix/Kintex系列,再到高端的Virtex系列。我个人习惯用Xilinx的Vivado工具链,虽然学习曲线陡,但功能强大。
我记得第一次用Vivado时,被它的IP集成器震撼到了——拖拖拽拽就能生成一个DDR控制器,这在以前想都不敢想。
Intel(Altera)
老二,但实力不容小觑。Cyclone系列性价比高,Arria系列中端,Stratix系列高端。Intel的Quartus工具链相对友好,对新手更友好。
我建议:如果团队有Xilinx经验,继续用Xilinx。如果从零开始,可以考虑Intel,上手更快。
Lattice
主打低功耗和小封装。iCE40系列常用于消费电子,MachXO系列用于CPLD替代。Lattice的工具有点简陋,但胜在免费。
Microchip(Microsemi)
主打军工和航天。它的FPGA基于Flash工艺,抗辐射能力强。价格嘛,你懂的。
1.4 选型策略:我的经验之谈
选型这件事,说白了就是“匹配需求”。我总结了几个要点:
- 先定容量:估算你的逻辑资源需求,留出30%-50%的余量。别抠门,后期加功能时你会感谢我的。
- 再看接口:需要高速SerDes?需要DDR3/4?需要PCIe?这些决定了你要选哪个系列。
- 考虑功耗:电池供电?选Lattice或低功耗系列。插电使用?可以放宽。
- 工具链偏好:Vivado还是Quartus?这决定了你的开发效率。
- 供货和价格:别选冷门型号,否则采购会找你哭。我建议选主流型号,比如Xilinx的Artix-7或Intel的Cyclone V。
警告:
千万不要为了省钱选过时的器件。比如Xilinx的Spartan-3系列,虽然便宜,但工具链已经停止更新,新设计不建议使用。
1.5 知识体系框架图
下面这张图,概括了本章的核心内容。我画了很久,希望能帮你建立整体认知。
这张图从左到右,展示了本章的三个核心模块:发展史、CPLD与FPGA的对比、主流厂商与选型策略。你可以把它当作一张“地图”,随时回来查阅。
我的建议:
如果你是初学者,先别急着买开发板。花一周时间,把本章内容吃透。搞清楚CPLD和FPGA的区别,了解主流厂商的产品线。然后,根据你想做的项目,选一款合适的器件。
记住:选型比设计更重要。选对了,事半功倍。选错了,事倍功半。
公众号:蓝海资料掘金营,微信deep3321