3.2 译码器、多路选择器与 ALU
第 3.1 节把逻辑门组合成了更大的真值表规则。真实处理器会反复使用其中几类特别有用的组合。本节从零建立三个部件:
- 译码器(decoder)启用一个目标;
- 多路选择器(multiplexer,简称 MUX)选择一个来源;
- 算术逻辑单元(Arithmetic Logic Unit,简称 ALU)计算多种候选运算,并输出被选中的结果。
译码器把二进制编码变成一条选择线
译码器读取 位输入编码,最多可以区分 个输出。二译四译码器读取地址位 A1A0,控制 Y0 到 Y3。
使能输入 EN 为 1 时,恰好只有一个输出有效。这种形式叫作独热(one-hot)输出。
| EN | A1A0 | Y0 | Y1 | Y2 | Y3 |
|---|---|---|---|---|---|
| 0 | 任意 | 0 | 0 | 0 | 0 |
| 1 | 00 | 1 | 0 | 0 | 0 |
| 1 | 01 | 0 | 1 | 0 | 0 |
| 1 | 10 | 0 | 0 | 1 | 0 |
| 1 | 11 | 0 | 0 | 0 | 1 |
“任意”表示 EN=0 时地址取什么值都不影响输出。使能信号让更大的系统能够整体开启或关闭译码器。
正在绘制图表…
后续章节会用地址译码电路选择存储芯片和输入输出设备。
实验 1——把请求送往指定外设
把外设编号翻译为两位地址,控制 EN,并观察四条独热输出线。
正在加载交互实验...
检查理解
正在加载概念检查...
正在加载本节练习...
多路选择器选择一个输入来源
多路选择器有多个数据输入,但只有一个输出。选择位决定哪一路输入在逻辑上连接到输出。
对于四选一多路选择器:
| S1S0 | 输出 Y |
|---|---|
| 00 | D0 |
| 01 | D1 |
| 10 | D2 |
| 11 | D3 |
多路选择器不会把四路输入合并起来,它只转发其中一路。当 S1S0=00 时,即使 D2 改变,Y 也不会改变,因为当前选择的是 D0。
正在绘制图表…
ALU 计算候选运算
算术逻辑单元是一种执行算术和按位逻辑运算的组合电路。一个简单的 4 位 ALU 可以支持:
| 选择位 | 运算 | A=1010、B=1100 时的结果 |
|---|---|---|
| 00 | AND | 1000 |
| 01 | OR | 1110 |
| 10 | XOR | 0110 |
| 11 | ADD | 0110,并产生进位 1 |
不同运算模块可以并行产生候选结果,再由选择位控制的多路选择器,把其中一个候选结果送到 ALU 输出。
ALU 还可以产生状态信号,例如:
- 进位标志(Carry Flag,CF): 加法产生了超出固定位宽的比特;
- 零标志(Zero Flag,ZF): 结果的每一位都是 0。
第 2 章已经说明了定长加法为什么会回绕。后续章节会把这些标志连接到 8086 指令和条件分支。
实验 2——配置一个微型 ALU 数据通路
设置 4 位操作数和选择信号,比较所有候选运算,再把目标结果送到输出,同时观察 CF 与 ZF。
正在加载交互实验...
检查理解
正在加载概念检查...
正在加载本节练习...
区分三个部件
| 部件 | 主要问题 | 数据方向 |
|---|---|---|
| 译码器 | 应该启用哪个目标? | 一组编码 → 多条输出线中的一条 |
| 多路选择器 | 哪个来源应该到达输出? | 多个输入中的一个 → 一个输出 |
| ALU | 应该执行哪种变换? | 操作数 → 被选择的算术或逻辑结果 |
三个部件都属于组合逻辑:当前输入决定当前输出。处理器还需要在输入改变后继续保存数值的硬件,这就要引入状态和反馈。下一节从锁存器与触发器开始。