别再傻傻分不清了!一张图看懂PROM、PLA、PAL、GAL这些老古董PLD
从PROM到GAL图解早期可编程逻辑器件的进化之路记得第一次在实验室见到那些布满灰尘的老式开发板时导师开玩笑说这些都是数字电路界的活化石。确实在FPGA和CPLD大行其道的今天PROM、PLA、PAL和GAL这些老前辈们已经逐渐淡出主流视野。但了解它们的工作原理和演进历程不仅能帮助我们理解现代可编程逻辑器件的设计哲学更能培养对数字电路本质的直觉认知。本文将用最直观的方式带你理清这些老古董之间的区别与联系。1. 可编程逻辑器件的基础架构所有可编程逻辑器件(PLD)的核心思想都可以追溯到布尔代数的基本定理——任何逻辑函数都可以表示为与或表达式。这就是为什么早期的PLD都采用与-或阵列作为基本结构框架。想象一下这个结构就像两层筛选网与阵列负责生成所有可能的输入组合最小项或阵列则选择哪些最小项参与最终输出这种结构的精妙之处在于通过控制两个阵列的可编程性就能实现不同的逻辑功能组合。四种经典LDPLD的区别本质上就是谁固定、谁可编程的排列组合器件类型与阵列或阵列输出单元PROM固定可编程固定PLA可编程可编程固定PAL可编程固定固定GAL可编程固定可编程(OLMC)提示OLMC(Output Logic Macro Cell)是GAL的创新之处允许输出极性、寄存器等特性可配置2. 四大经典LDPLD详解2.1 PROM存储器的逻辑变身PROM(可编程只读存储器)本是为存储数据设计的但工程师们发现它也能实现逻辑功能。它的与阵列是固定的全解码器会产生所有可能的输入组合2^n个最小项或阵列则通过熔丝编程决定哪些最小项参与输出。// 用PROM实现2位比较器的例子 // 输入A1,A0,B1,B0 → 输出AB, AB, AB module prom_comparator( input [1:0] A, input [1:0] B, output GT, EQ, LT ); // 与阵列自动生成16种输入组合 // 或阵列编程示例 assign GT (A2b10 B2b01) | (A2b11 B!2b11); // 其他输出类似... endmodule典型应用场景作为查找表(LUT)使用代码转换器简单组合逻辑主要局限随着输入增加与阵列呈指数增长大量最小项未被利用效率低下2.2 PLA双可编程的灵活架构PLA(可编程逻辑阵列)改进了PROM的效率问题允许两个阵列都可编程。这意味着与阵列不再生成全部最小项而是按需产生乘积项或阵列可以灵活组合这些乘积项这种结构特别适合实现多输出共享乘积项的逻辑函数。例如实现7段数码管译码器时多个输出段可能共享某些判断条件。PLA编程示例实现全加器 与阵列生成乘积项 P1 A·B·Cin P2 A·B·Cin P3 A·B·Cin P4 A·B·Cin 或阵列组合 Sum P2 P3 P4 P1 Cout P1 P2 P3优势比PROM更节省芯片面积适合具有公共项的复杂组合逻辑缺点两个阵列都需编程开发工具复杂信号延迟较大2.3 PAL速度与简化的平衡PAL(可编程阵列逻辑)采取了不同的设计哲学——固定或阵列。每个输出对应一组固定的乘积项通常4-8个与阵列决定哪些输入参与这些乘积项。这种结构带来了几个关键变化确定性时序固定布线意味着更可预测的延迟简化开发只需编程与阵列更适合时序逻辑后续发展出带触发器的版本典型PAL结构示意图输入A ──┬──╱╲──┐ 输入B ──┼──╱╲──┤→ 或门 → 输出1 输入C ──┴──╱╲──┘ 可编程与阵列应用场景状态机实现接口逻辑转换简单控制逻辑2.4 GAL通用性革命GAL(通用阵列逻辑)在PAL基础上引入了输出逻辑宏单元(OLMC)这是革命性的进步。OLMC允许每个输出独立配置为组合输出或寄存器输出输出极性选择三态控制-- GAL16V8的OLMC配置示例 -- 以下为JEDEC文件片段 QF2048* G0 /RESET * CLK -- 与阵列编程 G1 A * B /A * /B ... OLMC1.MODE REGISTERED -- 配置为寄存器输出 OLMC1.ACLR G0 -- 异步清零 OLMC1.OE VCC -- 始终使能GAL的关键创新电可擦除(E²PROM)工艺可重复编程引脚兼容替代多数PAL器件灵活的OLMC配置实际应用技巧使用GAL实现简单状态机时建议先定义状态编码用与阵列生成状态转移条件配置OLMC为寄存器模式存储状态3. 从LDPLD到现代PLD的技术演进观察这些老器件的演进路线可以清晰看到几个关键技术转折点可编程技术的进化熔丝 → UV可擦除 → 电可擦除一次性编程 → 多次编程结构复杂度的提升简单与或阵列 → 增加宏单元 → 集成互连资源应用场景的扩展纯组合逻辑 → 时序逻辑 → 系统级功能技术对比表特性PROMPLAPALGALCPLD可编程次数OTPOTPOTP多次多次典型工艺熔丝熔丝熔丝E²PROMFlash最大门数几百上千几百上千数万关键创新-双可编程固定或阵列OLMC互连矩阵注意现代CPLD本质上可以视为多个GAL-like模块通过可编程互连组成的阵列4. 老器件的现代启示虽然这些LDPLD已不再是设计主流但它们蕴含的设计思想仍然影响着现代EDA工具和FPGA架构LUT与PROM的渊源FPGA的查找表(LUT)本质上是小型PROM4输入LUT 16x1位PROM逻辑综合的PLA影子现代综合工具仍使用类似PLA的两级逻辑优化例如Espresso算法就是针对与或阵列的优化宏单元设计的延续FPGA的CLB中的可配置逻辑单元继承了GAL的OLMC灵活配置理念实际操作建议学习Verilog/VHDL时可以尝试用PROM思路实现真值表用PLA风格编写共享乘积项的代码用OLMC概念理解FPGA的触发器配置// 现代Verilog中仍可见PLD设计思想 module pal_style( input a, b, c, output reg y ); // 相当于PAL的与阵列编程 always (*) begin y (a ~b) | (~a c); // 固定或项 end endmodule在开源EDA工具如Yosys中我们甚至还能看到针对这些老器件的综合支持。例如使用synth_gal命令可以专门优化GAL器件的实现。