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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM