The multiplexor is now implemented using a case statement. This is a lot easier to understand, there are four assignments, each is made explicitly.
module multiplexor4_1 (out, in1, in2, in3, in4, cntrl1, cntrl2);
output out;
input in1, in2, in3, in4, cntrl1, cntrl2;
reg out;
always @(in1 or in2 or in3 or in4 or cntrl1 or cntrl2)
case ({cntrl1, cntrl2})
2'b00 : out = in1;
2'b01 : out = in2;
2'b10 : out = in3;
2'b11 : out = in4;
default : $display("Please check control bits");
endcase
endmodule
module multiplexor4_1 (out, in1, in2, in3, in4, cntrl1, cntrl2);
output out;
input in1, in2, in3, in4, cntrl1, cntrl2;
reg out;
always @(in1 or in2 or in3 or in4 or cntrl1 or cntrl2)
case ({cntrl2, cntrl1})
2'b00 : out = in1;
2'b01 : out = in2;
2'b10 : out = in3;
2'b11 : out = in4;
default : $display("Please check control bits");
endcase
endmodule
Note the difference in procedural and continuous assignments, here the control signals are tested and out is assigned a value accordingly.