If的表达:
module mux4to1(input [1:0]d0,d1,d2,d3,input s1,s0,output [1:0] out);
reg [1:0] out_t ;
always @(*) begin
if ({s1,s0} == 2'b00)
out_t = d0 ;
else if ({s1,s0} == 2'b01)
out_t = d1 ;
else if ({s1,s0} == 2'b10)
out_t = d2 ;
else
out_t = d3 ;
end
assign out = out_t ;
endmodule
Case的表达:
module mux4to1(input [1:0]d0,d1,d2,d3,input s1,s0,output [1:0] out);
reg [1:0] out_t ;
always @(*) begin
case({s1,s0})
2'b00:out_t=d0;
2'b01:out_t=d1;
2'b10:out_t=d2;
2'b11:out_t=d3;
default:out_t=0;
endcase
end
assign out = out_t ;
endmodule
testbench:
`timescale 1ns/1ns
module testbench;
wire out_t;
reg [1:0]d0_t,d1_t,d2_t,d3_t;
reg s0_t,s1_t;
mux4to1 u_mux4to1(
.out(out_t),
.d0(d0_t),
.d1(d1_t),
.d2(d2_t),
.d3(d3_t),
.s0(s0_t),
.s1(s1_t)
);
initial
begin
d0_t=2'b00;
d1_t=2'b00;
d2_t=2'b00;
d3_t=2'b00;
s1_t=2'b00;
s0_t=2'b00;
end
always #10 {s1_t,s0_t} ={s1_t,s0_t}+1'b1;
always #10 {d0_t,d1_t,d2_t,d3_t}={d0_t,d1_t,d2_t,d3_t}+1'b1;
always begin
#100;
if ($time >= 1000) $finish ;
end
initial begin
$dumpfile("out.vcd");
$dumpvars(0, testbench);
end
endmodule
结果:
Case表达的结果:
If表达的结果: