I am trying to implement 4x1 multiplexer in Verilog. I want to connect enable (en) as a port which input '1'(high) can ON the MUX and '0'(low) turn OFF this multiplexer. Please suggest some modifications in my code. Thanks in Advance.

module mux_4_to_1( input d,c,b,a, //Inputs input s1,s0, //Select Lines input en, //enable output reg y //output ); always @ (*) begin case (s0 | s1) 2'b00 : y <= a; 2'b01 : y <= b; 2'b10 : y <= c; 2'b11 : y <= d; default : y <= 0; endcase end endmodule 

1 Answer

You want en to act as a global switch to turn on or off the mux, so it gets the highest priority.

always @ (*) begin if (en) begin case ({s0, s1}) // pay attention here 2'b00 : y = a; 2'b01 : y = b; 2'b10 : y = c; 2'b11 : y = d; default : y = 0; endcase end else begin y = 1'b0; // your question didn't specify the expected output when OFF end end 

Please notice I've changed case (s0 | s1) to case ({s0, s1}).
s0 | s1 returns a 1-bit wide result, while you need the concatenation of s0 and s1.

Also, I replaced all NBA <= by BA =.

And, the default branch actually couldn't happen in silicon because you've specified all possible combinations. But if you think it maybe helpful in simulation, you may leave it.

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.