数字逻辑

多路复用器(multiplexer, mux)

想象一个铁路调车场,好几条轨道都通向同一条出站线。扳道员一拉操纵杆,恰好有一条进站轨道被接通到那条出站线上,其余的全被晾在一边。多路复用器就是硅片里的这位扳道员:它有好几个数据输入、一个输出,外加一个单独的选择输入,它的任务就是挑出哪一路数据输入被送到输出上。改变选择值,你就能瞬间把另一路输入改接到同一根输出线上。

更确切地说,多路复用器(几乎总是简称为 mux)是一种组合逻辑构件:在常见的 2 的幂形式下,它有 2ⁿ 个数据输入、n 条选择线和一个输出。这 n 个选择位组成一个二进制地址——用两个选择位你就能点名第 0、1、2 或 3 路输入,mux 会把你寻址到的那一路直接驱动到输出上。(不是 2 的幂的宽度,比如 3 选 1 的 mux,也再普通不过,只不过会空出几个没用上的地址。)因为这个选择只取决于当前的输入——它没有记忆——所以信号一穿过它内部的门,mux 就稳定给出答案。它内部不过是一小撮 AND、OR、NOT 逻辑门搭成的,但你几乎从不那样画它;“mux”才是你用来思考的那个单元。

mux 是数字设计中最基本的选择原语,一旦你开始留意,就会发现它无处不在。每当硬件要问“用这个值还是那个值?”——选哪个寄存器去喂给算术单元、把众多结果之一引回 CPU 的输出,或是实现你在 Verilog 里写的 `if`/`case` 选择——综合工具几乎肯定会搭一个 mux 来完成。它的镜像是解复用器(demultiplexer),后者接收一个输入,把它分发到众多去向之一。

// 2-to-1 mux: sel picks between a and b
assign y = sel ? a : b;

一个 2 选 1 多路复用器——当 sel 为 1 时,输出 y 跟随 a,否则跟随 b。

这个名字源自电话时代的多路复用(multiplexing)做法——让许多信号共用一条昂贵的线路。到了数字逻辑里,这个词收窄成专指这种“多选一”的构件,而工程师们习惯性地把它念作“mux”,以至于完整的词很少被读出口。

又称
muxdata selectorselector多路复用器多工器数据选择器資料選擇器