Altifigence Academy

15 / 63 · 概念

从真值表到 MUX 与 Shannon 展开

从选择逻辑推导公式,用 MUX 分解任意逻辑函数。

从选择规则推导表达式

若要求 sel=0 时输出 a、sel=1 时输出 b,就将每个输入与对应选择条件相与,再用 OR 合并。

y=s‾a+sby=\overline s a+s b

代入 s=0s=0 只剩 a,代入 s=1s=1 只剩 b。a 与 b 相同时,改变 sel 不改变输出,因此寻找选择信号错误时,必须包含两数据输入不同的情况。

蓝色路径表示所选输入。把 a、b 设为不同值后切换 sel。如果两者相同,仅凭输出就难以区分选择线是否接错。

由选择信号改变的数据路径

y = sel ? b : a

MUX 是分解逻辑函数的通用方法

对于任意布尔函数 F,将 s 分别固定为 0、1 所得子函数记为 F0,F1F_0,F_1。

F=s‾F0+sF1F=\overline s F_0+sF_1

这就是 Shannon 展开。利用 s ? F1 : F0,可将任意函数分为两部分。例如在 F=a⊕bF=a\oplus b 中,以 a 为选择信号,则 F0=bF_0=b、F1=b‾F_1=\overline b,因此可用 MUX多路选择器 根据选择信号,把多个输入之一连接到输出的组合电路。必须规定选择位与输入编号的对应关系。与反相取反 将 0 变为 1、1 变为 0 的 NOT 运算。表达式上方的横线表示对其覆盖的整个表达式应用 NOT。了解更多构造 XOR。

4-to-1 选择与优先级

用两个选择位从四个输入中选择一个,可由两级 2-to-1 MUX 构成。相比之下,if (req0) ... else if (req1) ... 在多个请求同时为 1 时优先选择前面的请求。地址选择与优先级选择解决的是不同问题,不能混为一谈。

SystemVerilog
assign y = sel[1] ? (sel[0] ? d3 : d2)
                 : (sel[0] ? d1 : d0);

理想平衡树中,若输入数为 2m2^m,则选择路径为 m 级。物理延迟不仅取决于级数,还受输入到达时间、负载和布线影响。函数分解提供实现候选,并不是保证最优延迟的证明。

自己试试

将 F=ab+a‾cF=a b+\overline a c 表示成以 a 为选择信号的 MUX。两个数据输入分别是什么?

阅读解释

a=0a=0 时 F0=cF_0=c,a=1a=1 时 F1=bF_1=b,因此为 assign f = a ? b : c;。先计算子函数,避免交换选择值 0 和 1 对应的数据输入。

你的选择适用于此浏览器,可随时在页脚更改。