第 217 篇
考研数电·零基础讲义 第23讲|可编程逻辑器件(PLD)简介
考研数电·零基础讲义 · 第 23 讲|可编程逻辑器件(PLD)简介 学完这一讲,你能说清 PLD 和普通逻辑芯片有什么不同,能读懂 PLA 的"点阵图"并写出它实现的函数,也能用一句话区分 PAL、GAL、CPLD、FPGA。预计用时 80–100 分钟。
本讲地图
- PLD 的核心思想:芯片出厂时"什么功能都没有",由用户写入编程数据来决定内部怎么连线,从而决定逻辑功能。
- PLA:与阵列、或阵列都可编程,是最简单的 PLD;任何逻辑函数都能写成"与—或"式,所以用"一排与门+一排或门"就够了。
- PAL / GAL:PAL 与阵列可编程、或阵列固定;GAL 在 PAL 基础上加了可擦写和输出逻辑宏单元(OLMC)。
- CPLD / FPGA:CPLD 是"很多个 GAL 拼起来";FPGA 是"一大堆查找表 LUT+可编程连线",用 SRAM 存配置。
- 华师怎么考:考纲把 PLD 与存储器放在同一章,通常是简答/概念题(PLD 是什么、分哪几类、PLA 与 ROM 的关系),也可能给一张 PLA 的点阵图让你写函数式。教材对应第 4 章 4.6 节与附录一。
前置知识
- 任何逻辑函数都能写成与—或式(最小项之和,见第 03 讲)。
- ROM 的"地址译码(与阵列,固定)+存储矩阵(或阵列,可编程)"结构(见第 22 讲上)。
- 同步触发器、D 触发器(见第 13 讲)。
一、为什么需要 PLD?
大白话
想象你要做一道菜。标准逻辑芯片(74 系列、4000 系列)像超市里卖的"预制菜":与非门就是与非门,译码器就是译码器,功能是工厂定死的。**专用集成电路(ASIC)**像"请大厨定做":功能完全贴合,但开模贵、周期长,销量小就不划算。
PLD(Programmable Logic Device,可编程逻辑器件)像一块"空白的面团":芯片里预先做好大量的门、触发器和连线,但连线是通的还是断的由你写入的数据决定。你想做什么电路,就写什么数据,一块芯片今天当译码器,明天当计数器。
与教材思考题对应的要点
| 类型 | 逻辑功能由谁决定 | 特点 |
|---|---|---|
| 标准化通用集成电路 | 厂家,固定 | 成本低,但功能固定,规模受限 |
| ASIC(专用集成电路) | 厂家按用户需求设计 | 性能好;设计、流片周期长、费用高,适合大批量 |
| PLD | 用户编程设定 | 通用器件;研制周期短,适合新产品研制和小批量;集成度高的可做"片上系统(SoC)" |
可编程连接元件:连线怎么"可编程"?
PLD 里每个交叉点上有一个"可编程连接元件",相当于一个可以被设置成通或断的小开关。教材列了三种:
- 熔丝型:出厂时是通的,编程时用大电流烧断不要的熔丝。一次性。
- 反熔丝型:出厂时是断的,编程时用高电压击穿绝缘层把它接通。一次性。
- 叠栅(浮栅)隧道 MOS 管型:浮置栅上没电荷时管子正常工作,等于"接通";充入负电荷后管子始终截止,等于"断开"。电荷可以擦除,所以能反复改写(和 EPROM、EEPROM 的存储单元同一个原理,见第 22 讲)。
此外 FPGA 还用第 4 种:SRAM 单元控制一个 MOS 开关,SRAM 存 1 开关导通,存 0 截止。更换 SRAM 里的数据就能改变电路,但断电后数据丢失。
⚠️ 易错:熔丝型、反熔丝型只能编程一次;叠栅 MOS 型可擦写;SRAM 型可无限次改写但易失。
二、读懂 PLD 的"简化画法"
PLD 内部一个与门可能有几十个输入端,如果每个输入都画一根线,图会密密麻麻。所以教材(图 4.6.1)规定了简化画法:
- 与门/或门只画一根输入线,这根线与竖线的交叉处如果有"圆点",就表示这个交叉点接通(保留了连接);没有圆点表示断开(本讲图中蓝点、橙点即此意)。
- 与门输出恒等于 0 的情况(所有交叉点都接通,)有专门的简化画法(教材图 4.6.1(b))。
- 输入缓冲器有互补输出:一个输入经缓冲器后同时得到和两根竖线,所以与阵列的每个输入变量占两列。
读图口诀:横线=一个乘积项(与门),竖线=输入变量(或其反变量),交叉点有点=该变量参与这个乘积。
三、PLA:最基本的与—或阵列
大白话
还记得第 22 讲的 ROM 吗?ROM 的结构是:地址译码器(把每个地址对应成一个最小项)→ 存储矩阵(决定每个最小项送到哪几个输出)。所以 ROM 本身就是"固定的与阵列+可编程的或阵列"。
PLA(Programmable Logic Array,可编程逻辑阵列) 更灵活:与阵列也可编程。这样不必把所有最小项都生成出来,只生成化简后需要的乘积项,节省资源。
结构
PLA 由三部分组成:
- 可编程的与阵列:产生若干个乘积项;
- 可编程的或阵列:把乘积项相加,得到若干个输出函数;
- 输出缓冲器:三态输出,受使能端控制(低电平有效)。
教材图 4.6.2 的 PLA 最多能产生 8 个乘积项,输出 4 个函数,编程后得到(时):
⚠️ 注意异或、同或要先展开成与—或式才能放进 PLA:,。所以 8 个乘积项正好用完:用 2 个,用 2 个,用 2 个,用 2 个(本例中各函数的乘积项互不共用)。
我们用 Python 对这组函数代入检验:时;时;或时都是,与式子一致。
例题 1:用 PLA 实现全加器
题目:用 PLA 实现一位全加器,输入(这里记),输出和、进位。
第一步:写函数式。 全加器真值表(见第 11 讲)给出
- (4 个最小项,卡诺图上互不相邻,无法化简);
- (化简后 3 项)。
第二步:数乘积项。 要 4 个,要 3 个,二者没有公共项(不在的化简式中),共 7 个乘积项。
第三步:画点阵。 每个乘积项一根横线:
图 1:蓝点是与阵列保留的连接,橙点是或阵列保留的连接。红色高亮行是 A=1,B=1,C=0 时唯一为 1 的乘积项 AB(动画闪烁)
逐行读图: 第一行在、、三列有蓝点,表示这个与门接了这三个输入;它右边的橙点落在竖线上,表示它参与的或运算。
第四步:数连接点。 与阵列:7 个乘积项 × 6 条竖线()=42 个可编程交叉点;或阵列:7 个乘积项 × 2 个输出=14 个。我们用 Python 对 8 种输入全部代入,均与全加器真值表一致。
第五步:代入检验一组。 输入:只有这一行为 1,的或门里没有它,所以;的或门里有它,所以。确实是(和 0、进位 1)。
例题 1 的补充:乘积项可以共享
PLA 的乘积项数是有限的资源,所以同一个乘积项如果被多个输出用到,应当共享。例如要实现,:如果每个输出各用各的,要个乘积项;但在两个函数里都出现,只要产生一次,然后在或阵列里让它同时连到和,总共只要这 3 个乘积项。此时与阵列有个交叉点(3 个乘积项,共 6 条竖线),或阵列有个连接点。(已用 Python 对 8 种输入核对。)这就是"化简时尽量找公共项"在 PLD 里的意义,和第 04 讲"多输出函数化简"是一回事。
PLA 的缺点
编程要同时设置与阵列和或阵列,编程软件复杂、速度较慢;而且早期 PLA 的两级阵列都可编程,器件性能不好做。后来的 PAL 把或阵列固定下来,简化了结构。今天已很少单独使用 PLA,但这种"与—或阵列"的思想仍用在集成电路内部。
四、PAL:与阵列可编程,或阵列固定
大白话
PLA 里两层都能调,灵活但复杂。PAL(Programmable Array Logic,可编程阵列逻辑) 想:"大部分函数的乘积项不多,不如把每个输出固定分配几个与门,用不着再让或阵列可编程了。"
于是 PAL = 可编程与阵列+固定或阵列+输出电路。
- 未编程前,与阵列所有交叉点都有熔丝接通;编程时保留有用的、熔断没用的。
- 每个输出的或门输入端数固定(比如 4 个或 8 个)。如果某个函数的乘积项数超过了或门的输入端数,这一个器件就实现不了(要借别的输出做级联)。
- 常见器件指标:输入最多 20 个,乘积项最多 80 个,输出最多 10 个,每个或门最多 16 个输入。
PAL 的四种输出电路(教材图 F1.6)
| 结构 | 特点 | 能干什么 |
|---|---|---|
| 专用输出 | 或门输出经三态缓冲器输出 | 只能做组合函数输出 |
| 可编程 I/O | 由一个乘积项控制三态门:为 1 时引脚作输出,为 0 时作输入 | 引脚可当输入也可当输出,更灵活 |
| 带异或门的 I/O | 在或门和三态门之间加异或门,编程控制输出极性(同相/反相) | 可编程得到原函数或其反函数 |
| 寄存器输出 | 或门输出经 D 触发器再输出,触发器状态又反馈回与阵列 | 可以做时序电路(如计数器) |
教材例子 PAL16R4 被编成了 4 位二进制可控计数器:加计数,预置数,保持,清零(计数器的原理见第 16 讲)。
⚠️ 易错:PAL 的或阵列是固定的,这是它与 PLA 的根本区别;PAL 靠"寄存器输出"才能做时序电路,没有触发器的 PAL 只能做组合电路。
五、GAL:可擦写+输出可编成各种模式
GAL(Generic Array Logic,通用阵列逻辑)是 PAL 的升级版,结构仍是"可编程与阵列+固定或阵列+输出电路",但有两点改进:
- 连接元件改用叠栅 MOS 管,可以用电压擦除后重新编程。GAL 是最早能反复编程的 SPLD。
- 输出电路改成输出逻辑宏单元 OLMC(Output Logic Macro Cell)。一个 OLMC 里有一个或门、一个 D 触发器和 4 个数据选择器等控制电路;通过写入"结构控制字"(SYN、AC0、AC1(n)、XOR(n)),可以把输出设置成 4 种模式:专用输入、专用组合输出、反馈组合输出、寄存器输出。一种 GAL 器件就能代替多种 PAL,所以叫"通用"。
以 GAL16V8 为例:与阵列规模(共个可编程交叉点,我们用 Python 算过),8 个 OLMC,10 个输入缓冲器,8 个三态输出缓冲器和 8 个反馈/输入缓冲器。
⚠️ 易错:OLMC 的"可编程"指输出结构可以改,不是指或阵列可编程——GAL 的或阵列仍是固定的。
六、CPLD 与 FPGA
PLA、PAL、GAL 都叫 SPLD(简单 PLD,也叫低密度 PLD),规模有限。需要更大规模时有两条路:
图 2:PLD 家族一览。SPLD 里是 PLA、PAL、GAL,之外是 CPLD 和 FPGA
CPLD:把很多 GAL 拼起来
CPLD(Complex PLD,复杂 PLD,高密度 PLD)的结构是若干逻辑阵列块 LAB 加一块可编程互联阵列 PIA。每个 LAB 里有很多宏单元,每个宏单元大致就是"一组与或阵列+一个触发器+几个数据选择器",相当于一个 GAL 的输出单元。
- 例:Altera 的 MAX7000 系列,EPM7256S 含 256 个宏单元;新的 MAX II 系列 EPM2210 约相当于 1700 个宏单元。
- 采用**在系统可编程(ISP)**技术:不用把芯片从电路板上取下,计算机的编程数据可直接写入。
- 特点:本质是"与或阵列",延时可预测,配置数据存在片内非易失性存储器里,上电即可工作。
FPGA:查表+海量小模块
FPGA(Field Programmable Gate Array,现场可编程门阵列)结构完全不同,由三部分组成:
- CLB(可组态逻辑模块):每个里面有若干逻辑单元,每个单元由查找表 LUT和辅助逻辑(触发器等)组成;
- IOB(输入/输出模块);
- PIM(可编程互联矩阵):用 MOS 开关管连线,开关由 SRAM 位控制。
名字里的"门阵列"是因为 CLB 排成阵列,像早期的门阵列集成电路,并不是说内部有一大堆与非门。
什么是查找表(LUT)?
LUT 就是一小块 SRAM。个输入变量当作地址,SRAM 里存的是真值表的函数值,输入一变,就"查"出对应的输出。**一个输入的 LUT 能实现任意变量逻辑函数,需要位存储。**这和第 22 讲"用存储器实现组合逻辑函数"是同一回事。
例题 2: 用 4 输入 LUT 实现,写出要存入的 16 位数据。
地址顺序,逐个算:
| 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
存入数据(地址从小到大):,共 7 个 1。(Python 逐位核对过。)同理,2 输入 LUT 实现异或只需存这 4 位。
不同输入数的 LUT 所需位数:2 输入 4 位,3 输入 8 位,4 输入 16 位,6 输入 64 位。
CPLD 与 FPGA 对比
| 项目 | CPLD | FPGA |
|---|---|---|
| 核心结构 | 与—或阵列+宏单元 | LUT(查表)+触发器 |
| 逻辑块规模 | 复杂、数量较少 | 简单、数量巨大(可达数万 CLB) |
| 编程元件 | 非易失(E²PROM/Flash) | 通常是 SRAM(易失,断电要重新配置) |
| 集成度 | 较低 | 很高 |
七、EDA 与硬件描述语言(了解即可)
PLD 的编程数据量巨大,不可能手工生成,必须用 EDA(Electronic Design Automation,电子设计自动化)工具:先用硬件描述语言 HDL(如 VHDL、Verilog)或原理图描述电路,编译软件自动化简逻辑、生成编程数据,再写入芯片。ISP(在系统可编程)让这一步不必取下芯片。
微处理器、单片机也"可编程",但它们是写入运行程序,不改变内部连接结构;PLD 是写入配置数据,改变的是内部电路连接。这是两种"可编程"的本质区别。
速记卡
| 器件 | 与阵列 | 或阵列 | 输出 | 可擦写 | 要点 |
|---|---|---|---|---|---|
| PLA | 可编程 | 可编程 | 三态缓冲 | 早期熔丝,一次 | 最灵活,最简单的 PLD |
| PAL | 可编程 | 固定 | 4 种输出结构,可带触发器 | 熔丝,一次 | 或门输入数有限 |
| GAL | 可编程 | 固定 | OLMC(4 种模式) | 可(叠栅 MOS) | 通用,最早可重复编程 |
| CPLD | 与或阵列+宏单元 | LAB+PIA | 可,ISP | 上电即用 | |
| FPGA | CLB 里是 LUT | IOB+PIM | SRAM,断电丢 | 集成度最高 |
- 一个输入 LUT 存位。
- 熔丝/反熔丝:一次;叠栅 MOS:可擦写;SRAM 开关:可重配置但易失。
- 读点阵图:横线乘积项、竖线变量、圆点=接通。
自测练习
1.(概念) PLA 与 ROM 在结构上有什么联系和区别?
答案与提示
两者都是"与阵列+或阵列"。ROM 的与阵列(地址译码器)固定,产生全部个最小项,或阵列可编程;PLA 的与阵列、或阵列都可编程,只产生化简后需要的乘积项,更节省资源。
2.(概念) PAL 和 GAL 的区别有哪两点?
答案与提示
① 连接元件:PAL 多为熔丝,一次编程;GAL 用叠栅 MOS 管,可擦除重写。② 输出电路:PAL 的输出结构固定(不同型号不同);GAL 用可编程的 OLMC,一种器件可组态成多种输出结构。
3. PLA 与阵列有 4 个输入变量,每个乘积项都接在互补输出缓冲器上,共 12 个乘积项,求与阵列的可编程交叉点个数。
答案与提示
每个输入有两条竖线,4 个输入共 8 条竖线;个交叉点。
4. 教材 PLA 的函数,请写出实现它所需的乘积项和或阵列连接。
答案与提示
,需要两个乘积项与,两者都在或阵列里连到。
5. 用 PLA 实现半加器,,需要几个乘积项?
答案与提示
用 2 项,用 1 项,共 3 项(Python 验证真值表:00→00,01→10,10→10,11→01)。
6. 用 3 输入 LUT 实现,要存几位?存什么数据?
答案与提示
位。地址时奇偶个数:(即中有奇数个 1 时存 1)。
7.(华师风格) 简述 FPGA 与 CPLD 在结构和编程方式上的主要区别。
答案与提示
CPLD 由若干 LAB(宏单元=与或阵列+触发器)与可编程互联阵列组成,一般采用非易失的编程元件,上电即用;FPGA 由大量 CLB(LUT+触发器)、IOB 和可编程互联矩阵组成,一般用 SRAM 存配置数据,断电丢失需重新载入,集成度更高、结构更灵活。
8.(概念) PLD 与单片机"编程"有什么不同?
答案与提示
PLD 编程写入的是配置数据,改变器件内部的连接结构,从而改变硬件逻辑;单片机编程写入的是运行程序,硬件连接不变,由 CPU 逐条执行指令。
下一讲预告
下面进入最后一章数-模和模-数转换:第 24 讲先讲 D/A 转换器怎样把一串二进制数变成对应大小的电压,包括权电阻网络和倒 T 形电阻网络,这也是华师 2026 回忆真题中 D/A 题的基础。
👉 点击进入下一讲:第24讲(上)|D/A 转换器的结构与原理
评论
还没有评论。 来写第一条。