`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输入即可 、、、、