在多个always模块中对同一变量赋值
https://www.docin.com/p-1996173921.html
在同一个变量中,不要对同一个变量赋值,如果对同一变量多次赋值,那么它只执行最后一次赋值操作。
module test(clk,datain,dataout);
input clk;
input [2:0] datain;
output [2:0] dataout;
reg [2:0] dataout;
always@(posedge clk)
begin
dataout<=datain<<1;
dataout[0]<=1'b1;
end
endmodule
上例中,对dataout[0]同时进行了两次赋值,当datain=3'b010时,输出结果dataout[2:0]=101,当然这是我们希望的结果。但再看下面的例子
module test(clk,datain,dataout);
input clk;
input [2:0] datain;
output [2:0] dataout;
reg [2:0] dataout;
always@(posedge clk)
begin
dataout[0]<=1'b1;
dataout<=datain<<1;
end
endmodule
当datain=3'b010时,输出结果dataout[2:0]=100,这时不是我们希望的结果,它只执行了后者,就只执行了后面一个dataout[0]补零操作,所以,在同一程序中不要对同一变量赋值。