一、可编程逻辑器件概述:从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 选型策略:我的经验之谈

选型这件事,说白了就是“匹配需求”。我总结了几个要点:

  1. 先定容量:估算你的逻辑资源需求,留出30%-50%的余量。别抠门,后期加功能时你会感谢我的。
  2. 再看接口:需要高速SerDes?需要DDR3/4?需要PCIe?这些决定了你要选哪个系列。
  3. 考虑功耗:电池供电?选Lattice或低功耗系列。插电使用?可以放宽。
  4. 工具链偏好:Vivado还是Quartus?这决定了你的开发效率。
  5. 供货和价格:别选冷门型号,否则采购会找你哭。我建议选主流型号,比如Xilinx的Artix-7或Intel的Cyclone V。

警告:

千万不要为了省钱选过时的器件。比如Xilinx的Spartan-3系列,虽然便宜,但工具链已经停止更新,新设计不建议使用。

1.5 知识体系框架图

下面这张图,概括了本章的核心内容。我画了很久,希望能帮你建立整体认知。

可编程逻辑器件知识体系 发展史 PAL (70s) GAL (80s) CPLD (90s) FPGA (85s) CPLD vs FPGA CPLD 乘积项结构 时序确定 非易失 FPGA LUT结构 布线延迟 SRAM易失 主流厂商 AMD(Xilinx) Intel(Altera) Lattice Microchip 选型策略 容量估算 接口需求 功耗约束 工具链偏好 供货与价格 核心:匹配需求,留有余量,关注工具链与供货

这张图从左到右,展示了本章的三个核心模块:发展史、CPLD与FPGA的对比、主流厂商与选型策略。你可以把它当作一张“地图”,随时回来查阅。

我的建议:

如果你是初学者,先别急着买开发板。花一周时间,把本章内容吃透。搞清楚CPLD和FPGA的区别,了解主流厂商的产品线。然后,根据你想做的项目,选一款合适的器件。

记住:选型比设计更重要。选对了,事半功倍。选错了,事倍功半。


公众号:蓝海资料掘金营,微信deep3321