想象你走进一栋大型写字楼,一楼前台负责把每位来访者登记成一个简短的房间号;到了目标楼层,门禁系统看到房间号,就只打开对应那一扇门。这里藏着数字电路里一对绝佳搭档:编码器把“多路输入”压缩成“少数几位代码”,译码器再把“少数几位代码”展开成“多路输出中的一路”。前台登记是编码,门禁引导是译码。本文就用这个“写字楼前台接待系统”的比喻,一步步拆开它们的工作原理、优先级规则、使能开关、级联扩展,以及它们在存储器选片、数码管显示等实际场景中的用法。

岗位关联

对 AI 从业者而言,编码器和译码器是理解 CPU 地址译码、AI 加速器存储管理和总线协议的基础;看懂它们,你就能读懂芯片手册里的“片选”“使能”“高有效”这些高频词。

目录
  1. 可视化演示
  2. 编码器基础:你来了,我记下你
  3. 译码器基础:按编码找人
  4. 优先编码器:急诊室的优先级
  5. 使能控制:门禁的营业开关
  6. 级联扩展:楼多了就加门牌位
  7. 存储选片:图书馆索书号
  8. 显示驱动:前台电子屏
  9. 工程实践:前台系统维护心得
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

编码器基础:你来了,我记下你

写字楼前台每天面对几十位来访者,如果每次都把“某某公司某某部门张三”这样一串信息报给门禁,门禁会崩溃。聪明的前台只登记一个短工号,比如“305”,后面的门禁只要看到数字就能处理。这个“把多路来访者压成一个短码”的动作,就是编码器。

在数字电路中,编码器接收多条输入线,但同一时刻只允许一条输入有效,然后输出对应的二进制代码。最经典的例子是 8 线-3 线编码器:8 条输入线 \(I_0\sim I_7\),3 条输出线 \(Y_2Y_1Y_0\)。当 \(I_4\) 有效时,输出就是二进制 \(100\)。如果 \(I_6\) 有效,输出就是 \(110\)。

要理解它的内部逻辑,可以看输出位是怎么“或”出来的。每个输入编号的二进制形式决定它贡献到哪几个输出位。

前台压缩工号,是为了让后面的门禁少记信息。编码器压缩输入线,也是为了让 CPU 少占引脚、少传数据,这是硬件世界里的“信息压缩术”。

\displaystyle Y_0 = I_1 + I_3 + I_5 + I_7,\qquadY_1 = I_2 + I_3 + I_6 + I_7,\qquadY_2 = I_4 + I_5 + I_6 + I_7
公式的含义是:第 0 位输出只看编号二进制最低位为 1 的那些输入;第 1 位输出看二进制第二位为 1 的输入;第 2 位输出看二进制最高位为 1 的输入。
  1. 拆出最低位把编号二进制最低位是 1 的输入收集起来,用或门输出。
    Y0=I1+I3+I5+I7Y_0 = I_1 + I_3 + I_5 + I_7
  2. 拆出中间位把编号二进制中间位是 1 的输入收集起来。
    Y1=I2+I3+I6+I7Y_1 = I_2 + I_3 + I_6 + I_7
  3. 拆出最高位把编号二进制最高位是 1 的输入收集起来。
    Y2=I4+I5+I6+I7Y_2 = I_4 + I_5 + I_6 + I_7

译码器基础:按编码找人

访客拿到工号后走向门禁,门禁不会广播“所有房间都开门”,而是只看一眼工号,只打开对应房间。这个“少数代码引导到多路输出”的动作,就是译码器。

译码器是编码器的逆变换。3 线-8 线译码器接收 3 位代码 \(A_2A_1A_0\),输出 8 条线 \(Y_0\sim Y_7\)。在“输出高有效”的约定下,只有与代码对应的一条输出为 1,其它全部为 0。很多存储芯片喜欢用“输出低有效”,也就是选中时输出 0,未选中时输出 1,这时只要在输出端加反相器就能切换约定。

门禁认码不认人,所以只要工号唯一,房间永远不会开错。译码器同理,只要代码组合不同,输出就绝不会“串门”。

\displaystyleY_0 = \overline{A_2}\,\overline{A_1}\,\overline{A_0},\qquadY_1 = \overline{A_2}\,\overline{A_1}\,A_0,\qquadY_2 = \overline{A_2}\,A_1\,\overline{A_0},\qquadY_7 = A_2\,A_1\,A_0
每个 \(Y_i\) 都对应一组唯一的输入组合,当且仅当这组组合出现时,该输出才有效。
  1. 先看地址 0 的条件三个输入全为 0 时,点亮 \(Y_0\)。
    Y0=A2‾ A1‾ A0‾Y_0 = \overline{A_2}\,\overline{A_1}\,\overline{A_0}
  2. 再看地址 1 的条件最低位为 1、其余为 0 时,点亮 \(Y_1\)。
    Y1=A2‾ A1‾ A0Y_1 = \overline{A_2}\,\overline{A_1}\,A_0
  3. 推广到最高地址三位全为 1 时,点亮 \(Y_7\)。
    Y7=A2 A1 A0Y_7 = A_2\,A_1\,A_0

优先编码器:急诊室的优先级

想象急诊室同时来了三位病人:一位轻伤、一位昏迷、一位大出血。护士不会按先来后到登记,而是先处理大出血。这种“不按时间、按危重程度”的排序,就是优先编码器的思想。

普通编码器有个致命弱点:同时多个输入有效时,输出会乱套。优先编码器专门解决这个问题。它会预先给每条输入设定优先级,多个输入同时有效时,只对优先级最高的那个输入编码,其它输入被自动忽略。常见的 74LS148 就是 8 线-3 线优先编码器,默认 \(I_7\) 优先级最高,\(I_0\) 最低。

用 4 线-2 线优先编码器来看公式,设优先级从高到低为 \(I_3 > I_2 > I_1 > I_0\):

前台、门禁、急诊室都靠优先级维持秩序。硬件里的键盘矩阵、中断控制器也在用同样的逻辑:先处理最紧急的那一路,绝不让低优先级事件堵住高优先级事件。

\displaystyleY_1 = I_3 + I_2,\qquadY_0 = I_3 + \overline{I_2}\,I_1,\qquadGS = I_3 + I_2 + I_1 + I_0
\(GS\) 是“有效标志位”,只要至少一个输入有效,它就为 1,避免把“无输入”误判成“ \(I_0\) 有效”。
  1. 先看最高两位\(I_3\) 或 \(I_2\) 只要有一个有效,输出高位 \(Y_1\) 就是 1。
    Y1=I3+I2Y_1 = I_3 + I_2
  2. 再看低位有没有机会只有最高优先级的 \(I_3\) 无效、且 \(I_1\) 有效时,\(Y_0\) 才为 1;如果 \(I_3\) 有效,则 \(Y_0\) 也直接为 1。
    Y0=I3+I2‾ I1Y_0 = I_3 + \overline{I_2}\,I_1
  3. 加一个有效标志用 \(GS\) 告诉下游“这次真的有输入来了”,而不是所有输入都是 0。
    GS=I3+I2+I1+I0GS = I_3 + I_2 + I_1 + I_0

使能控制:门禁的营业开关

大楼门禁晚上会进入“停用模式”,无论刷什么卡都不开门。数字芯片也有类似的开关,叫做“使能端”(Enable)。它像一个总闸,一拉下来,整个译码器立刻“装死”。

带使能端的译码器通常多一根输入线 \(E\)。高电平使能时,\(E=1\) 芯片正常工作;\(E=0\) 时所有输出被强制为无效状态。低电平使能则相反,\(E=0\) 正常工作。之所以设计两种约定,是为了方便和上游信号极性匹配。

以高电平使能的 2 线-4 线译码器为例:

总闸让前台不必逐个房间通知,也能让多块芯片安静待命。这个看似简单的开关,正是后面“级联扩展”实现大容量译码的关键机关。

\displaystyleY_0 = \overline{A_1}\,\overline{A_0}\,E,\qquadY_1 = \overline{A_1}\,A_0\,E,\qquadY_2 = A_1\,\overline{A_0}\,E,\qquadY_3 = A_1\,A_0\,E
使能端一关,所有输出全为 0,就像门禁断电后所有门都保持关闭。
  1. 把使能写进第 0 路\(A_1A_0=00\) 且 \(E=1\) 时,\(Y_0\) 才有效。
    Y0=A1‾ A0‾ EY_0 = \overline{A_1}\,\overline{A_0}\,E
  2. 把使能写进第 1 路\(A_1A_0=01\) 且 \(E=1\) 时,\(Y_1\) 才有效。
    Y1=A1‾ A0 EY_1 = \overline{A_1}\,A_0\,E
  3. 观察总闸效果当 \(E=0\),无论 \(A_1A_0\) 是什么,所有 \(Y_i\) 全为 0。
    Y0=Y1=Y2=Y3=0Y_0 = Y_1 = Y_2 = Y_3 = 0

级联扩展:楼多了就加门牌位

写字楼 A 座住满了,公司又租下 B 座。此时前台不能再只说“305 房间”,必须改成“A-305”“B-305”。多出一个“楼栋位”,可容纳的房间数就翻倍了。译码器扩展也是这个道理。

单块 3 线-8 线译码器只能输出 8 路。想要 16 路,就用两块 3 线-8 线译码器,把最高位当作“楼栋选择位”。最高位 \(A_3=0\) 时选第一块,\(A_3=1\) 时选第二块;低三位 \(A_2A_1A_0\) 则决定楼内具体哪个房间。这样 4 位地址可以对应 16 个输出。

前台现在只需多问一句“你去几号楼”,门禁系统就能从 8 个房间扩展到 16 个,再往大扩展也只需继续增加“楼栋位”。这就是级联扩展的优雅之处。

\displaystyleE_a = \overline{A_3},\qquad E_b = A_3,\qquadY_k = \text{译码}(A_2A_1A_0) \cdot \text{片选}
高地址位不直接参与“房间号”,而是决定“去哪栋楼”;低地址位进入被选中的那块译码器,完成最终展开。
  1. 给 A 座发门禁许可\(A_3=0\) 时,第一块译码器的使能端有效。
    Ea=A3‾E_a = \overline{A_3}
  2. 给 B 座发门禁许可\(A_3=1\) 时,第二块译码器的使能端有效。
    Eb=A3E_b = A_3
  3. 叠加低三位结果低三位在选中的那块译码器里算出具体输出,未选中的那块保持全无效。
    Yk=译码(A2A1A0)⋅片选Y_k = \text{译码}(A_2A_1A_0) \cdot \text{片选}

存储选片:图书馆索书号

图书馆的索书号一般分两段:先告诉你书架区号,再告诉你书位号。你不会在整个图书馆里乱翻,而是先跑到对应的区,再在那一排里找书。计算机访问内存,走的正是同一套导航逻辑。

CPU 地址总线位数有限。假设地址总线有 16 位,每片内存芯片有 12 条地址引脚,也就是每片内部有 \(2^{12}=4096\) 个存储单元。低位 12 条地址线直接接进芯片内部,高位 4 条地址线送给译码器,译码器把它们变成 16 个“片选信号”,每次只点亮一块芯片。

译码器就是图书馆导航员:先按索书号找到区,再按书位号找到书。没有它,所有内存芯片会同时抢答,总线上一片混乱。

\displaystyleCS_0 = \overline{A_{15}}\,\overline{A_{14}}\,\overline{A_{13}}\,\overline{A_{12}},\qquadCS_{15} = A_{15}A_{14}A_{13}A_{12}
高 4 位的每一种组合对应一个区号,译码器把区号翻译成“选中第几块芯片”的片选信号。
  1. 低 4 位全是 0 时选第 0 块只有高四位为 0000 时,片选 0 才有效。
    CS0=A15‾ A14‾ A13‾ A12‾CS_0 = \overline{A_{15}}\,\overline{A_{14}}\,\overline{A_{13}}\,\overline{A_{12}}
  2. 高 4 位全是 1 时选第 15 块只有高四位为 1111 时,片选 15 才有效。
    CS15=A15A14A13A12CS_{15} = A_{15}A_{14}A_{13}A_{12}
  3. 片内地址负责定位低 12 位进入被选中的芯片,定位到具体的 4096 个单元之一。
    A11A10⋯A0→片内地址A_{11}A_{10}\cdots A_0 \to \text{片内地址}

显示驱动:前台电子屏

前台旁边挂着一块电子屏,滚动显示“A-305 正在开会”。这块屏上的数字,并不是电脑大脑里直接认识的 0 和 1,而是由七段数码管拼出来的。数码管有 7 个笔画,分别叫 \(a\sim g\),亮起不同笔画就能拼出 0 到 9。

BCD 码(4 位二进制数)进入七段译码器后,电路内部根据“段码表”决定 \(a\sim g\) 哪几段点亮。共阴极数码管需要对应段输出高电平才亮;共阳极数码管则相反,输出低电平才亮。若要多位显示,人眼来不及分辨刷新,工程师就用“动态扫描”轮流点亮每一位数码管,利用视觉暂留让人看到完整数字。

用最简化的表达,a 段在哪些数字下点亮可以用最小项求和表示:

没有七段译码器,CPU 就得亲手管理每个笔画的亮灭,就像前台要记住每个房间所有细节一样。有了它,CPU 只需丢出 4 位数字,屏幕就能自动拼出数字。

Ya=∑m(0,2,3,5,6,7,8,9)\displaystyle Y_a = \sum m(0,2,3,5,6,7,8,9)
意思是:当 BCD 输入对应的十进制数是 0、2、3、5、6、7、8、9 时,a 段需要点亮;显示数字 1 和 4 时 a 段熄灭。
  1. 列出 a 段亮的所有数字从数字 0 到 9 中挑出需要点亮上横段的数字。
    m∈{0,2,3,5,6,7,8,9}m \in \{0,2,3,5,6,7,8,9\}
  2. 写成最小项求和每个数字对应一个 BCD 最小项,全部“或”起来就是 a 段的逻辑。
    Ya=∑m(0,2,3,5,6,7,8,9)Y_a = \sum m(0,2,3,5,6,7,8,9)
  3. 译码器内部实现用与门生成每个最小项,再用或门合成为段驱动信号。
    Ya=∑minterm of BCDY_a = \sum \text{minterm of BCD}

工程实践:前台系统维护心得

前台系统运行久了会出现各种小毛病:门禁偶尔误开、屏幕闪一下、多栋楼之间响应变慢。组合电路同样逃不开毛刺、延迟和功耗这些工程问题。

组合逻辑的结果只取决于当前输入,但信号从输入传到输出有多条路径,路径长短不一。当几个输入同时变化时,某个输出可能在瞬间出现不该有的脉冲,这就是“竞争冒险”产生的毛刺。级联译码器时,高位地址要先穿过使能端,再穿过一级译码器,延迟会明显增加。实际设计中,工程师常用“选通输出”“锁存后续电路”“减少多级级联”等手段规避,同时在 PCB 布局时尽量缩短关键路径。

级联路径的总延迟可以近似表示为:

好的前台会安排错峰、备用通道和最短路线;好的硬件工程师也会通过时序约束、毛刺消除和功耗优化,让编码器和译码器在高速系统中稳稳运行。

tpd=tdecoder+tbuffer+twire\displaystyle t_{pd} = t_{\text{decoder}} + t_{\text{buffer}} + t_{\text{wire}}
晶体管的开关需要时间,导线也需要时间,级联层数越多,总延迟越长。
  1. 算译码器本级延迟信号每经过一级译码器,就要付出一次门级传播时间。
    tdecodert_{\text{decoder}}
  2. 加缓冲驱动延迟输出要驱动很多负载时,需要加缓冲器,这也会增加延迟。
    tbuffert_{\text{buffer}}
  3. 加上布线延迟信号在 PCB 或芯片内部走线也需要时间,频率越高越不可忽略。
    twiret_{\text{wire}}

AI 应用场景

AI推理服务器地址译码器

阶段:硬件加速与存储管理

解决的问题:AI 模型的权重和中间结果非常庞大,需要分散存储在多块 DRAM 中。如果靠软件逐块轮询寻址,速度慢且易出错;用译码器将高位地址翻译成片选信号,硬件就能在单个时钟周期内精准定位芯片。

具体案例:某 AI 推理服务器使用 16 位地址总线管理 16 块 4KB 内存芯片。工程师把低 12 位直连芯片地址引脚,高 4 位送入 4 线-16 线译码器,译码器输出 16 个片选信号。CPU 每次访存都像索书号找书架一样,先选芯片再选单元。

边缘AI设备数码管显示驱动

阶段:模型推理结果输出与人机交互

解决的问题:边缘设备识别出数字后,需要立刻显示在数码管上。如果 CPU 亲自控制 7 个笔画,会浪费大量时间;用 BCD 到七段码译码器,CPU 只需输出 4 位数字,显示工作交给硬件完成。

具体案例:一块智能电表通过 AI 识别电表读数,识别结果通过 BCD 码送到七段译码器,再由动态扫描电路轮流点亮 4 位数码管。人眼看到的是连续稳定的读数,而 CPU 全程只需发送一次数字。

多传感器中断优先级编码

阶段:机器人/自动驾驶多传感器融合

解决的问题:激光雷达、摄像头、毫米波雷达可能同时上报紧急事件,CPU 来不及并行处理。优先编码器能为每个传感器分配固定优先级,编号最高者先进入中断服务,避免低优先级任务拖垮主控。

具体案例:自动驾驶域控制器中,硬件中断控制器用 8 线-3 线优先编码器管理 8 类传感器事件。当碰撞预警和 GPS 信号同时触发时,碰撞预警的优先级更高,编码器只把它的编号送往 CPU,保证安全响应最快。

Python 演示

python49 行
import random  def priority_encode(inputs, size=8):    # 返回有效标志与优先编码的二进制字符串    if not any(inputs):        return False, None    for idx in range(size - 1, -1, -1):        if inputs[idx]:            return True, format(idx, '03b')    return False, None  def decode(code_bits):    # 3线-8线译码器,输出高有效    addr = int(code_bits, 2)    outputs = [0] * 8    outputs[addr] = 1    return outputs  SEVENSEG = {    0: '1111110', 1: '0110000', 2: '1101101',    3: '1111001', 4: '0110011', 5: '1011011',    6: '1011111', 7: '1110000', 8: '1111111',    9: '1111011'}  def seven_seg_code(code_bits):    # 把3位二进制码转成七段显示码    decimal = int(code_bits, 2)    return SEVENSEG.get(decimal, '0000000')  if __name__ == '__main__':    patterns = [        [0, 0, 0, 0, 0, 1, 0, 1],        [0, 1, 0, 0, 0, 0, 0, 1],        [0, 0, 0, 0, 0, 0, 0, 0]    ]    for pattern in patterns:        valid, code = priority_encode(pattern)        print('输入:', pattern, '有效:', valid, '编码:', code)        if not valid:            continue        outputs = decode(code)        print('译码输出:', outputs)        print('七段码:', seven_seg_code(code))
目的:用 Python 复现 8 线-3 线优先编码器、3 线-8 线译码器以及七段码转换,直观展示“多路输入→编码→译码→显示”的完整链路。
  1. if not any(inputs):没有任何输入有效时直接判断无效,防止把全 0 误当成某一路输入。
  2. for idx in range(size - 1, -1, -1):从高序号往低序号找,天然实现“编号越大优先级越高”。
  3. format(idx, '03b')把优先级最高的输入编号格式化成 3 位二进制字符串,作为编码输出。
  4. outputs[addr] = 1译码器根据 3 位代码把对应的那根输出线置为 1,其余保持 0。
  5. SEVENSEG = {...}七段码表,把十进制数字映射成 7 位段控制信号。
  6. if __name__ == '__main__':让脚本既能被导入,也能直接运行演示。

常见误区

误区多个输入同时有效时,优先编码器应该编码最先到达的那个输入,就像医院排队取号一样。

正解优先编码器里的“优先”和到达时间无关,而是由电路设计者提前规定的静态序号。比如 74LS148 中 \(I_7\) 永远最高优先级,和它在时间上是否先到没有关系。就像急诊室规定“大出血优先”,而不是“先来后到”。这个序号在真值表里是固定死的。

为何常见:生活里“排队”往往讲究先到先得,初学者容易把时间顺序和硬件设计里的固定 priority 混淆。

误区3 线-8 线译码器,选中哪一路,哪一路输出就是 1,其它都是 0。

正解译码器有“高有效”和“低有效”两种约定。低有效译码器恰好相反:平时所有输出都是 1,只有被选中的那一路输出 0。很多存储芯片为了配合片选信号的负极性,专门使用低有效输出。看芯片手册时,先查输出端是否有小圆圈“气泡”。

为何常见:教材大多先讲正逻辑,容易让人形成“1=选中”的思维定式;实际电路里“0=选中”同样常见。

误区使能端是可选引脚,不接也能正常工作,甚至不需要管它。

正解CMOS 电路的输入引脚不能悬空,否则电位不确定,芯片可能随机使能或关闭,还会增加静态功耗。就像门禁总闸开关断了一根线,门可能一会儿开一会儿关。工程上必须把使能端接到确定的电源或地,哪怕暂时不用,也要接成永远使能的状态。

为何常见:仿真软件里引脚悬空仍能跑通,初学者就把仿真当真实,忽略了物理芯片的电气要求。

误区需要更多输出时,把两块译码器的相同输出线直接并在一起,就能得到更多信号。

正解普通逻辑门输出是推挽结构,两个输出直接并联会出现一个要拉高、一个要拉低的“打架”状态,轻则逻辑错误,重则烧毁芯片。正确做法是用使能端做片选,同一时刻只让一块译码器输出有效,另一块输出处于无效状态,或者加三态缓冲器隔离。

为何常见:初中物理里“并联电路”印象太深,大家容易忽略数字电路“强驱动力”冲突的后果。

面试题

Q1. 编码器在数字系统中的主要功能是什么?

单选题 · easy

  • A.把二进制代码展开成多路输出
  • B.把多路输入压缩成二进制代码← 正确答案
  • C.把模拟电压转换为数字量
  • D.把数字量转换为模拟电压

答案:B。编码器的核心是“多进少出”,就像前台把多种身份压缩成工号;译码器才是“少进多出”。A 是译码器,C 是 ADC,D 是 DAC。

Q2. 3线-8线译码器可以产生几个互斥输出?

单选题 · easy

  • A.3个
  • B.8个← 正确答案
  • C.16个
  • D.24个

答案:B。3 位输入共有 \(2^3=8\) 种组合,所以译码器有 8 个输出,并且任意时刻只有一个有效。

Q3. 优先编码器和普通编码器最大的差别是什么?

单选题 · mid

  • A.输入端数量更多
  • B.输出端数量更多
  • C.多输入有效时按优先级编码← 正确答案
  • D.不需要使用真值表

答案:C。普通编码器不允许同时多个输入有效;优先编码器则按固定优先级选择最高序号的输入。输入端或输出端数量不是本质区别。

Q4. 译码器使能端(Enable)的主要作用是?

单选题 · mid

  • A.提高系统的工作电压
  • B.控制译码器是否参与工作← 正确答案
  • C.决定输出高电平还是低电平
  • D.把输出线的数量增加一倍

答案:B。使能端像门禁总闸,决定整个芯片是工作还是休眠;它不改变输出数,也不决定电平极性。

Q5. 下列哪些方法能扩展译码器的译码位数?

多选题 · mid

  • A.多片译码器用使能端分片选通← 正确答案
  • B.将输出线直接并联增强电流
  • C.高位地址作为片选信号扩展← 正确答案
  • D.用触发器代替组合逻辑

答案:AC。用高位地址控制使能端,让不同译码器分时工作,就能扩展位宽。直接把输出线并联会造成信号冲突;触发器用于时序逻辑,不能替代译码器的组合逻辑。

Q6. 某系统地址总线16位,每片RAM需要12条地址线,若要利用所有16位地址,需要多少个片选信号?

单选题 · hard

  • A.4个
  • B.8个
  • C.16个← 正确答案
  • D.12个

答案:C。低位 12 条直接送片内寻址,高 4 条送译码器,\(2^4=16\) 个片选信号,刚好选 16 片 RAM。

Q7. 关于七段数码管与译码器,下列说法正确的是?

多选题 · hard

  • A.共阴极数码管高电平点亮对应段← 正确答案
  • B.共阳极数码管高电平点亮对应段
  • C.七段译码器输出7位段码信号← 正确答案
  • D.显示数字时所有段永远保持点亮

答案:AC。共阴极数码管公共端接地,高电平点亮;共阳极公共端接电源,需要低电平点亮。七段译码器输出 7 位段码,不同数字会有不同的段亮灭,D 明显错误。

Q8. 一个高电平有效的2线-4线译码器,当E=0时,各输出端应为?

单选题 · mid

  • A.全为0← 正确答案
  • B.全为1
  • C.保持之前的值
  • D.随机变化

答案:A。高电平有效的译码器,使能无效时输出必须被强制为无效状态 0,就像总闸关闭后所有门都关闭,而不是维持开门状态。

Q9. 组合逻辑电路工程调试中常遇到哪些问题?

多选题 · hard

  • A.信号竞争产生毛刺← 正确答案
  • B.门级传播延迟超时← 正确答案
  • C.寄存器数据无法写入
  • D.翻转功耗过高← 正确答案

答案:ABD。组合逻辑没有寄存器写入问题,C 属于时序电路范畴。毛刺、传播延迟和翻转功耗都是编码器、译码器等组合逻辑的真实工程挑战。

Q10. 用两片相同译码器级联扩展,使能端延迟为t1,输出延迟为t2,最高位地址到达时,经过使能选片再到输出的总延迟最接近?

单选题 · extreme

  • A.t1 + t2← 正确答案
  • B.t2
  • C.2 × t2
  • D.t1 + 2 × t2

答案:A。最高位地址要通过使能端进入译码器,付出 t1 的使能延迟;该片再完成内部译码输出,付出 t2 的输出延迟,总延迟约 t1 + t2。t2 忽略了使能路径,2t2 则多算了一级输出。