`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
reg [1:0] mux_out_reg;
//always@(sel, d0, d1, d2, d3) begin
always@(*) begin
case(sel)
2'b00 : mux_out_reg = d3;
2'b01 : mux_out_reg = d2;
2'b10 : mux_out_reg = d1;
default : mux_out_reg = d0;
endcase
end
assign mux_out = mux_out_reg;
//*************code***********//
endmodule
【注】
- case语句必须always块中,由于没有时钟,所以always块中的敏感变量就是*,也就是说always块中的所有变量都会触发always块的执行;
- begin…end中被赋值的变量必须使用reg类型;
- 使用三木运算符就不需要用到begin…end,因而也不需要声明reg类型的中间变量,直接使用assign赋值即可
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
reg [1:0] mux_out_reg;
always@(*) begin
if(sel == 2'b00)
mux_out_reg = d3;
else if(sel == 2'b01)
mux_out_reg = d2;
else if(sel == 2'b10)
mux_out_reg = d1;
else if(sel == 2'b11)
mux_out_reg = d0;
end
assign mux_out = mux_out_reg;
//*************code***********//
endmodule
`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
assign mux_out = (sel == 2'b00)?d3:(sel == 2'b01)?d2:(sel == 2'b10)?d1:d0;
//*************code***********//
endmodule