对比两种写法,以及其RTL
写法1
bash
module zaza(
input clk ,
input rst ,
output [7:0] a ,
output reg [1:0] b
);
always @(posedge clk or posedge rst)begin
if(rst)begin
b<=2'd0;
end
else if(a>'d6)begin
b<=2'd1;
end
else if(a>'d200)begin
b<=2'd2;
end
else begin
b<=2'd0;
end
end
endmodule

bash
因此,如果几个条件不互斥,RTL是这样处理的,其实是有优先级的。
第一个if满足后,立马就出第一个条件满足后的结果。
其实是if 有优先级的。
写法2
bash
module zaza(
input clk ,
input rst ,
output [7:0] a ,
output reg [1:0] b
);
always @(posedge clk or posedge rst)begin
if(rst)begin
b<=2'd0;
end
else begin
if(a>'d6)begin
b<=2'd1;
end
else begin
if(a>'d200)begin
b<=2'd2;
end
else begin
b<=2'd0;
end
end
end
end
endmodule

综上
综上,两种写法,综合出的电路是一样的。
其他阅读推荐: