进阶 #hardware

译码器与编码器

译码器(Decoder)将二进制码转换为独热码,编码器(Encoder)反向操作,它们是数字系统中信号转换的核心部件

什么是译码器?

你在 ATM 机上按数字键——机器怎么知道你按的是”确认”而不是”取消”或”退出”?每个键对应一个独特的电信号,机器需要用电路解析这个信号,判断哪个键被按下。

译码器(Decoder) 就是做这件事的电路:它把 N 位二进制输入转换成 $2^N$ 条输出线中的一条有效。就像你用手指数数——伸出 2 根手指表示”第 2 个”。

它在 RAM 中用于地址译码——将地址信号转换为选中某行存储单元的字线。

2-to-4 译码器

2 位输入,4 条输出线(每次只有一条输出为 1):

A₁A₀Y₃Y₂Y₁Y₀选中的输出
000001Y₀
010010Y₁
100100Y₂
111000Y₃
graph LR
    A0[A₀] --> NOT0[非门]
    A1[A₁] --> NOT1[非门]

    NOT0 --> AND0[与门]
    NOT1 --> AND0
    AND0 --> Y0[Y₀]

    A0 --> AND1[与门]
    NOT1 --> AND1
    AND1 --> Y1[Y₁]

    NOT0 --> AND2[与门]
    A1 --> AND2
    AND2 --> Y2[Y₂]

    A0 --> AND3[与门]
    A1 --> AND3
    AND3 --> Y3[Y₃]

核心结构:$2^N$ 个与门,每个与门检测一个特定的输入组合。输入用非门产生取反信号。

3-to-8 译码器

3 位输入,8 条输出。可以用两个 2-to-4 译码器级联构建:

       高位 A₂ = 0 → 使能上半部分 (Y₀~Y₃)
       高位 A₂ = 1 → 使能下半部分 (Y₄~Y₇)

七段数码管译码器

实际应用:将 4 位二进制数(0~9)转换为七段数码管的亮灭信号。

输入 0000 (0) → a,b,c,d,e,f 亮, g 灭 → 显示 "0"
输入 0001 (1) → b,c 亮 → 显示 "1"
输入 0010 (2) → a,b,d,e,g 亮 → 显示 "2"

7 个输出(a~g)各由一个组合逻辑电路控制,本质上是 4-to-7 的译码器。

什么是编码器?

编码器(Encoder) 是译码器的反向操作——$2^N$ 条输入线中有一条有效,输出其对应的 N 位二进制编码。

8-to-3 编码器

I₇I₆I₅I₄I₃I₂I₁I₀A₂A₁A₀
00000001000
00000010001
00000100010
10000000111

逻辑表达式:

  • $A_0 = I_1 + I_3 + I_5 + I_7$
  • $A_1 = I_2 + I_3 + I_6 + I_7$
  • $A_2 = I_4 + I_5 + I_6 + I_7$

优先编码器

优先编码器(Priority Encoder) 解决多输入同时有效的问题——只编码优先级最高的输入。

graph LR
    I7[I₇<br>最高优先级] --> OR7[或门阵列]
    I6[I₆] --> OR7
    I5[I₅] --> OR7
    I4[I₄] --> OR7
    I3[I₃] --> OR7
    I2[I₂] --> OR7
    I1[I₁] --> OR7
    I0[I₀<br>最低优先级] --> OR7
    OR7 --> A2[A₂ A₁ A₀<br>编码输出]
    OR7 --> V[有效标志<br>至少一个输入为 1]

例如 74HC148(8-to-3 优先编码器):

  • I₇ 优先级最高,I₀ 优先级最低
  • 当 I₇ = 1 时,输出 111(忽略其他输入)
  • 当 I₇ = 0, I₆ = 1 时,输出 110

实际应用

应用组件说明
内存地址译码译码器CPU 发出的地址信号选择对应的存储单元
键盘扫描优先编码器多键按下时只响应优先级最高的键
七段数码管译码器将二进制数转换为数码管显示信号
中断控制器优先编码器多个中断请求同时到达时选择优先级最高的
指令译码译码器CPU 中指令操作码的解析

小结

译码器和编码器是数字系统中”信号的翻译官”。译码器用于将地址或指令转换为控制信号,编码器用于将多个输入信号压缩为二进制编码。它们是构建 ALURAM 和 CPU 数据通路的关键基础部件。

接下来,我们将学习另一种重要的组合逻辑部件——多路选择器