EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
同一个always中对同一个变量多次赋值的不同结果 ; l( ^: b' v8 V4 Y/ E) \
在同一个变量中,不要对同一个变量赋值,如果对同一变量多次赋值,那么它只执行最后一次赋值操作。
- Z( o8 O6 t4 Y" E2 b; ~1 Y, Zmodule test(clk,datain,dataout);+ H% N: ?, ?) ?9 R9 Q! Y
input clk;
, q2 @# c* \0 |+ ^input [2:0] datain; p2 @" X: M# Y* X! I4 [7 G" i" ~
output [2:0] dataout;% y0 V7 m! G. n. W, n
reg [2:0] dataout;
, ^! w4 V9 x( p s! ?$ S$ Walways@(posedge clk)% l7 k3 k7 B) J$ f/ R
begin 1 |1 Q1 p2 M1 p1 l3 |
dataout<=datain<<1;
9 ~& m/ {/ I( B' F0 Q: V dataout[0]<=1'b1;
' ]" _+ F/ c5 P3 Q: C3 t" W- c. aend: U7 r% ~3 L" v7 }0 F2 _8 y# [
endmodule
5 L6 T# L8 }7 }) m3 k上例中,对dataout[0]同时进行了两次赋值,当datain=3'b010时,输出结果dataout[2:0]=101,当然这是我们希望的结果。但再看下面的例子
# e# z- s& Z8 w( p' W( y9 Nmodule test(clk,datain,dataout);
8 q1 w" P: s* ?; Z. E9 Tinput clk;
$ U. W; N+ {( G$ N/ p8 [input [2:0] datain;5 T. l; K* f7 |+ }4 p
output [2:0] dataout;9 F2 a5 Q, K; P6 _
reg [2:0] dataout;
- w3 b# P/ r5 |/ U2 L: ?( Xalways@(posedge clk)
6 A" `1 a& n1 |4 P; N0 v' {begin+ x+ K- ?) o- |7 ?+ D" L) I
dataout[0]<=1'b1;& F% B9 s- N H! w/ {7 y( u: a5 u# e
dataout<=datain<<1;/ L9 p" l0 D }0 s- U
end
5 }3 q2 u1 A& q" q iendmodule
/ ~- y V" l6 @当datain=3'b010时,输出结果dataout[2:0]=100,这时不是我们希望的结果,它只执行了后者,就只执行了后面一个dataout[0]补零操作,所以,在同一程序中不要对同一变量赋值。
- _! i/ Y% U: u$ u/ h* H$ [
- T/ ~- i4 S0 J' Z0 B8 | |