`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            
);

// enum A B group  , make s1=a s0=b ;
// when a=0,b=0 , L = 0 
// when a=0,b=1 , L = C
// when a=1,b=0 , L = ~C
// when a=1,b=1 , L = 1



wire D0,D1,D2,D3;

assign D0 = 0;
assign D1 = C ; 
assign D2 = ~C ; 
assign D3 = 1 ; 

data_sel mux_inst (
        .S0(B), .S1(A),  // 注意:S1是高位A,S0是低位B
        .D0(D0), .D1(D1), .D2(D2), .D3(D3),
        .Y(L)
    );






endmodule

多路选择器中的Dx 并不限制为某个变量,完全可以是逻辑表达式的结果 , 我们设计电路的自由度远远高于端口框图 , 一旦意识到这一点 , 就可以将多路MUX当做差镖旗 , 将任意复杂逻辑表达式转化为结构化查找 。 LUT

然后将对应的D输入即可 、、、、