简析

先对四选一MUX的表达式化简:

Y=S1(S0D0+S0D1)+S1(S0D2+S0D3)=S1 S0D0+S1 S0D1+S1S0D2+S1S0D3Y=\overline{S_1}(\overline{S_0}D_0+S_0D_1)+S_1(\overline{S_0}D_2+S_0D_3)=\overline{S_1}\ \overline{S_0}D_0+\overline{S_1}\ S_0D_1+S_1 \overline{S_0}D_2+S_1S_0D_3

然后将题目要求实现的表达式化为标准形式:

L=AB+AC+BC=ABC+ABC+AB C+ABCL=AB+A\overline{C}+BC=ABC+AB\overline{C}+A\overline{B}\ \overline{C}+\overline{A}BC

将两个式子对应起来,比如用AA对应S0S_0BB对应S1S_1CC对应DD。这样AB CA\overline{B}\ \overline{C}对应S1 S0D1\overline{S_1}\ S_0D_1ABC\overline{A}BC对应S1S0D2S_1 \overline{S_0}D_2。而ABC+ABC=ABABC+AB\overline{C}=AB,所以可以令D3=1D_3=1得到。最后令D0=0D_0=0去掉YY中剩下的项S1 S0D0\overline{S_1}\ \overline{S_0}D_0

代码

按照上述分析将对应的线连接起来即可。

`timescale 1ns/1ns
module data_sel(
   input             S0     ,
   input             S1     ,
   input             D0     ,
   input             D1     ,
   input             D2     ,
   input             D3     ,
   
   output wire        Y    
);

assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
     
endmodule

module sel_exp(
   input             A     ,
   input             B     ,
   input             C     ,
   
   output wire       L            
);
    data_sel mySel(.S0(A), .S1(B), .D0(0), .D1(~C), .D2(C), .D3(1), .Y(L));
endmodule

用MUX实现门电路

整理了一些相关资料。

非门NOT

Y=SY=\overline{S}

与门AND

Y=ABY=AB

或门OR

Y=A+BY=A+B

异或门XOR

Y=AB=AB+ABY=A\oplus B=A\overline{B}+\overline{A} B

同或门XNOR

Y=AB=AB+A BY=A\odot B=AB+\overline{A}\ \overline{B}