module test(a,b,c,d,s0,s1,y);
input a,b,c,d;
input s0,s1;
output y;
reg y;
always@*
begin
case({s1,s0})
2'b00:y<=a;
2'b01:y<=b;
2'b10:y<=c;
2'b11:y<=d;
endcase
end
endmodule
//////////////////////////////////////////////////////////////
module test(a,b,c,d,s0,s1,y);
input a,b,c,d,s0,s1;
output y;
wire [1:0] sel;
wire at,bt,ct,dt;
assign sel={s1,s0};
assign at=(sel==2'b00);
assign bt=(sel==2'b01);
assign ct=(sel==2'b10);
assign dt=(sel==2'b11);
assigny=(a&at)|(b&bt)|(c&ct)|(d&dt);
endmodule
/////////////////////////////////////////////////////
module test(a,b,c,d,s0,s1,y);
input a,b,c,d,s0,s1;
outputy;
wire at=s0?a:b;
wire bt=s0?c:d;
wire y=s1?at:bt;
endmodule
////////////////////////////////////////////////////////////
module test(a,b,c,d,s0,s1,y);
inputa,b,c,d,s0,s1;
output y;
reg [1:0] sel;
reg y;
always@*
begin
sel={s1,s0};
if (sel==0)y=a;
else if(sel==1) y=b;
elseif(sel==2) y=c;
elsey=d;
end
endmodule
//////////////////////////////////////////////////////////////////
实际上上述程序中的阻塞赋值与非阻塞赋值是可以互换的,且功能不变,电路不变。但是,在一般情况下,事情并非如此,即在不少情况下,不同的赋值方式将导致不同的电路结构和逻辑功能。尚在摸索之中。还有就是在同一个过程块中不能对同一变量进行不同方式的赋值,也不要在多个always过程块中对同一变量赋值,因为always块也是并行的。 |