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]補零操作,所以,在同一程序中不要對同一變量賦值。