Verilog多路分支语句
case语句
少说废话、看代码吧->>
module mux4to1(
input [1:0] sel,
input [1:0] p0,
input [1:0] p1,
input [1:0] p2,
input [1:0] p3,
output [1:0] sout
);
reg [1:0] sout_t;
always @(*)
case(sel)
2'b00:begin
sout_t = p0;
end
2'b01: sout_t = p1;
2'b10: sout_t = p2;
default: sout_t p3;
endcase
assign sout=sout_t;
endmodule
case语句中的条件选项表达式也可以是x或者z
但是case中的x和z一般是不可综合的
case (sel)
2'b00: sout_t = p0;
2'b01: sout_t = p1;
2'b10: sout_t = p2;
2'b11: sout_t = p3;
2'bx0,2'bx1,2'bxz,2'bxx,2'b1x,2'bzx;
sout_t = 2'bxx;
2'bz0,2'bz1,2'bzz,2'b0z,2'b1z;
sout_t = 2'bzz;
default: $display("Unexpected input conytol!!!");
endcase
casex/casez 语句
casex用x表示无关值,casez用问号?表示无关值。
二者实现功能完全一致,语法与case完全一致
module mux4to1(
input [3:0] sel,
input [1:0] p0,
input [1:0] p1,
input [1:0] p2,
input [1:0] p3,
output [1:0] sout
);
reg [1:0] sout_t;
always @(*)
case(sel)
4'b???1: sout_t =p0;
4'b??1?: sout_t = p1;
4'b?1??: sout_t = p2;
4'b1???: sout_t =p3;
default: sout_t = 2'b
endcase
assign sout=sout_t;
endmodule