不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

在多个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]补零操作,所以,在同一程序中不要对同一变量赋值。

 

posted on 2021-08-31 16:20  皮皮祥  阅读(2235)  评论(0编辑  收藏  举报