概要: 多路复用器使用 位选择码,从 路数据输入中选择一路。对于 4 选 1 MUX,。把常量接到数据输入端,MUX 就能实现一张真值表;实际 FPGA 的 LUT 则把存储的配置状态与特定于体系结构的选择电路结合起来。
多路复用器用于选择处理器的操作数来源、互连中的响应,以及可编程逻辑中的配置后信号。模拟开关与视频开关解决的是相关路由问题,但其电气行为超出了单比特数字 MUX 的范围。本文将讲解其布尔基础、门级构造、级联方法和函数生成功能。
什么是多路复用器?
多路复用器是一种组合电路,它从若干数据输入中选择一路,并将其转发到一条输出线。选择操作由另一组选择线控制,这组信号编码出与目标输入对应的二进制地址。
对于输入数量为 2 的幂且全部使用的 MUX:
条选择线可以从 路数据输入中选择一路。
一条选择线可寻址两路输入,两条可寻址四路,三条可寻址八路。输入数不是 2 的幂时,可以保留部分选择码不用,或为其定义默认路径;许多实际器件还包含使能或选通端。

4 选 1 多路复用器:两条选择线在四路输入之间作出选择,被选中的输入出现在输出端。
2 选 1 MUX:最简单的数据选择器
2 选 1 MUX 是最基本的构件。它有两个数据输入(、)、一条选择线()和一个输出()。
| 选择信号() | 输出() |
|---|---|
| 0 | |
| 1 |
它的布尔表达式十分直接。设计要求是: 时使 通过, 时使 通过:
一种规范的基本逻辑门实现需要:
- 一个 NOT 门产生
- 两个 AND 门:一个计算 ,另一个计算
- 一个 OR 门把两个 AND 输出合并为最终结果

由 AND、OR 和 NOT 门构成的 2 选 1 MUX。S=0 时 通过;S=1 时 通过。
4 选 1 MUX:布尔表达式与门级设计
4 选 1 MUX 有四个数据输入( 至 )以及两条选择线(、)。选择线形成一个两位二进制地址,决定哪路输入到达输出。
| 输出() | ||
|---|---|---|
| 0 | 0 | |
| 0 | 1 | |
| 1 | 0 | |
| 1 | 1 |
表中的每一行都对应一个乘积项,其中选择线只“启用”一路数据输入。4 选 1 MUX 的完整布尔表达式为:
这个表达式准确说明了所需硬件:
- 两个 NOT 门,产生 和
- 四个三输入 AND 门,各自用相应的选择组合控制一路数据输入
- 一个四输入 OR 门,合并全部四个 AND 输出
直接按布尔式绘制的电路包含两个反相、四个乘积项和一次 OR 归约。所谓“七个门”是假定任意三输入和四输入门都各算作一个门;实体标准单元库或 FPGA 可能采用不同方式映射该函数。

带函数表与扩展规律的 4 选 1 MUX。 条选择线可以从 路输入中选择一路。
在 DigiSim.io 上搭建 4 选 1 MUX
按以下步骤使用分立逻辑门搭建 4 选 1 MUX:
- 放置选择线。 将两个 INPUT_SWITCH 元件拖到画布上,分别标记为 和 。
- 生成反相信号。 放置两个 NOT 门,把 和 分别连接到其中一个,得到 与 。
- 放置数据输入。 添加四个 INPUT_SWITCH 元件,分别标记为 、、 和 。
- 构建 AND 阵列。 放置四个三输入 AND 门:
- AND-0:输入为 、 和
- AND-1:输入为 、 和
- AND-2:输入为 、 和
- AND-3:输入为 、 和
- 合并结果。 放置一个 OR 门,并把四个 AND 输出全部接入。OR 输出就是最终输出 。
- 添加可视化。 把 连接到 OUTPUT_LIGHT。
切换选择开关,即可把不同数据输入路由到输出。在稳定且有效的选择状态下,只有选中的乘积项被启用,其数据值决定 Y。
级联 MUX:用 4 选 1 单元构建 8 选 1
多路复用器的一项重要特性,是可以通过级联处理更多输入。不必从头设计 8 选 1 MUX,只需用较小单元组合即可。
8 选 1 MUX 需要三条选择线(、、)和八路数据输入( 至 )。可以用两个 4 选 1 MUX 和一个 2 选 1 MUX 按如下方式构建:
- 第一级(两个 4 选 1 MUX):
- MUX-A 处理 –,以 和 作为选择线。
- MUX-B 处理 –,同样以 和 作为选择线。
- 第二级(一个 2 选 1 MUX):
- MUX-A 的输出连接到最后一级 MUX 的 。
- MUX-B 的输出连接到最后一级 MUX 的 。
- 作为最后一级 MUX 的选择线。
当 时,最后一级 MUX 传递 MUX-A 的结果(输入 –);当 时,则传递 MUX-B 的结果(输入 –)。较低位选择线 和 决定所选分组中哪一路输入最终到达输出。
这种分层方法可以扩展到任意规模。16 选 1 MUX 可以由两个 8 选 1 MUX 加一个 2 选 1 MUX 构成,也可以让四个 4 选 1 MUX 接入第二级 4 选 1 MUX。

带三条选择线的 8 选 1 MUX。它可以由两个 4 选 1 MUX 和一个 2 选 1 MUX 构成。
把 MUX 用作通用函数发生器
只要把 n 个变量连接到选择线,并依照真值表把数据输入接到常量,一个 选 1 MUX 就能实现 n 变量的任意布尔函数。MUX 本身就是逻辑电路,因此这是一种结构化实现,并不意味着可以“免费”获得逻辑。
例如,考虑三变量函数 。使用 8 选 1 MUX 时:
- 把 、、 分别连接到选择线 、、。
- 真值表每一行的选择组合都会寻址一路数据输入。如果该行 ,就把对应数据输入接 1;如果 ,则接 0。
这样,MUX 输出便会复现真值表。FPGA 查找表采用存储的配置位与选择电路,对外提供同样的能力:实现任何不超过 LUT 输入数量的函数。其内部结构与专用级联资源则因器件系列而异。
也可以把一个输入变量接到数据线而非选择线,从而使用较小的 MUX。例如,三变量函数可以由 4 选 1 MUX 实现:只把 和 连接到选择线,再根据需要将各数据输入连接到 0、1、 或 。
实例:实现多数函数
三输入多数函数在两个或更多输入为 1 时输出 1,其真值表如下:
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
使用 8 选 1 MUX: 把 、、 连接到 、、。按照 F 列,把数据输入 到 分别连接为:、、、、、、、。除了 MUX 与常量源,不再需要外部数据函数逻辑门。
使用 4 选 1 MUX(简化形式): 把 和 连接到 与 ,按 对真值表行分组:
- : 与 时 都为 0。连接 。
- : 时 , 时 。连接 。
- : 时 , 时 。连接 。
- : 与 时 都为 1。连接 。
这样就用更小的 MUX 实现了同一函数,其中 直接连接到两路数据输入。
传播延迟与时序注意事项
与所有实体组合电路一样,MUX 存在传播延迟。在直接的积之和电路图中,选择信号的变化可能依次经过反相器、乘积项与 OR 归约:
这只是基于拓扑的估算。实际延迟还包括单元选择、输入转换速率、负载、布线、电压、温度,以及所选路径是从数据输入还是选择输入开始。级联选择会增加逻辑级数,但物理上很宽的单级表达式也可能因扇入与布线而变慢。应使用目标器件的时序分析,而不能假设某种拓扑一定比另一种快一倍。
如果新旧数据输入不同,而且内部路径稳定下来的时间不一致,选择信号切换还可能产生短暂的输出脉冲。当结果跨越同步边界时应对其寄存,在规定时间内保持选择信号稳定,并避免把未经限定的 MUX 输出用作时钟或异步写选通。功能仿真可以验证选择逻辑,却未必能模拟实体冒险或延迟。
选 1 MUX 的通用布尔表达式
MUX 的布尔表达式可以推广到任意规模。对于具有选择线 和数据输入 的 选 1 MUX:
其中 是选择变量的第 个最小项。每个最小项都是全部选择变量的乘积;根据 的二进制表示,各变量以原变量或反变量形式出现。例如,在 8 选 1 MUX 中,(二进制 101)对应的最小项是 。
这个形式清楚表明,MUX 就是最小项之和标准形式的硬件实现。每个布尔函数都有唯一的最小项之和表达式,而把数据输入连接到相应常量,MUX 就能直接实现它。
使能输入
许多商用 MUX IC 包含使能或选通引脚,且常为低电平有效。禁用时的行为取决于具体器件:输出可能被强制为低、强制为高,或在另一类器件中进入高阻态。对于一个抽象的高电平有效使能 E,并规定禁用时强制 Y 为低:
使能可以简化级联和控制信号限定,但并非每种 MUX 层次结构都需要使能。推挽式 MUX 输出不能误当成三态总线驱动器。
在 DigiSim.io 上搭建级联 MUX 时,可以在最终 OR 输出与使能开关之间添加一个 AND 门,以模拟使能功能。
现实类比:电视输入选择器
例如,四个视频源(游戏机、有线电视盒、蓝光播放器与流媒体设备)需要共享一台电视。MUX 相当于输入选择器:遥控器按钮对应选择线,决定哪个信号源连接到屏幕输出。四个信号源可以持续产生视频数据,但只有被选中的一路经 MUX 送至显示器。

把电视输入选择器理解为 MUX:选择线决定哪个输入源出现在电视上。
多路分配器(DEMUX)
MUX 的相反电路是多路分配器(DEMUX)。MUX 从多路输入中选择一路送往单一输出;DEMUX 则接收单一输入,并根据选择线将其路由到多个输出中的一路。
1 线至 4 线 DEMUX 的布尔表达式为:
由此可见,DEMUX 在结构上等同于带使能输入的译码器。当数据输入 充当使能时,选择线上的“地址”决定哪一路输出接收该信号。

1 线至 4 线 DEMUX:根据两条选择线,把一路输入路由到四路输出中的一路。
多路复用器的应用
多路复用器出现在数字系统设计的每一个层级。下面列出最重要的应用,并说明 MUX 为何不可或缺。
CPU 寄存器文件
在由分立触发器组成的小型寄存器组中,每个异步读端口都可以建模为由寄存器索引选择的字宽 MUX。一个包含八个 8 位寄存器的教学寄存器组,每个读端口需要八组并行的 8 选 1 单比特选择。实体 ASIC 与 FPGA 寄存器文件也可能采用存储器宏、译码字线、位线、专用 RAM 资源或分布式逻辑。MUX 模型描述对外可见的选择行为,并不规定唯一的晶体管拓扑。
ALU 输入选择
ALU 的操作数并不总来自寄存器。有时,操作数是指令中嵌入的立即数,或从存储器读取的数值。在每个 ALU 输入前放置 MUX,控制单元就能选择操作数来源:寄存器文件输出、立即数或存储器数据寄存器。每个 ALU 输入端只需这样一个 MUX,CPU 就能复用同一套 ALU 硬件执行寄存器—寄存器、寄存器—立即数以及存储器—寄存器指令。
存储器地址译码与总线仲裁
当多个目标都可能返回数据时,MUX 可以选择与已译码请求对应的响应。当多个主设备争用同一资源时,仲裁器决定所有权,路由 MUX 则转发被选中主设备的地址、数据和控制信号。MUX 本身不实现公平策略,也不处理请求/授权握手;它只依照仲裁结果路由信号。
FPGA 查找表
FPGA 中常见的逻辑原语是查找表(LUT)。配置状态保存真值表的数值,逻辑输入则选择其中适用的一项。因此,从功能上看,一个 k 输入 LUT 就像由 k 个输入选择的 项真值表。实际 FPGA 系列具有特定于体系结构的 LUT 电路、分裂模式、专用级联多路复用器与布线,所以“一个 64 选 1 MUX”是有用的功能模型,而不是所有器件通用的物理原理图。
实践验证
可在 DigiSim.io 编辑器中搭建以下电路,以验证上述原理:
- 用两个 AND 门、一个 OR 门和一个 NOT 门搭建 2 选 1 MUX。 验证全部四种输入组合。
- 按照上面的布尔表达式扩展成 4 选 1 MUX。 遍历各个稳定选择组合并探测输出。
- 级联两个 4 选 1 MUX 和一个 2 选 1 MUX,构建 8 选 1 MUX。 验证八路输入都能被单独寻址。
- 使用 MUX 实现一个布尔函数。 从真值表中任选一个三变量函数,把各数据输入硬连接后编程到 8 选 1 MUX 中。
- 搭建 DEMUX 反向执行路由: 把一个信号送往四路输出中的一路。
接下来可以学习译码器与编码器(DEMUX 在结构上的近亲),在取指—译码—执行周期中查看 MUX 如何为 ALU 提供输入,或打开 AND 门元件参考——它是每个 MUX 的主要构件。



