EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
同一个always中对同一个变量多次赋值的不同结果 9 |- E$ y+ Z9 P' }+ ]
在同一个变量中,不要对同一个变量赋值,如果对同一变量多次赋值,那么它只执行最后一次赋值操作。- u# _- h+ u, k" U$ @/ q
module test(clk,datain,dataout);9 y" Y( r/ ` Y4 F& N
input clk;
; X0 ~7 q$ U/ f8 j H1 C. w) B. sinput [2:0] datain;
6 ], q0 s( C4 Noutput [2:0] dataout;
6 Z% ~+ u/ e- \8 d7 rreg [2:0] dataout;- @' B4 G: x. P8 ~: }
always@(posedge clk)0 _) J+ h9 V/ q/ n7 U9 |
begin
/ Y, C) x" k8 ?8 k dataout<=datain<<1;/ k' j# W! x l4 @) r
dataout[0]<=1'b1;
) l* T7 o; b3 B/ Z yend
9 V) j7 n: u. {) Uendmodule
! \7 j9 f% l! m u上例中,对dataout[0]同时进行了两次赋值,当datain=3'b010时,输出结果dataout[2:0]=101,当然这是我们希望的结果。但再看下面的例子
4 O0 @9 {1 z0 W2 mmodule test(clk,datain,dataout);
+ D; P8 v! e9 d( ]5 Q C0 vinput clk;+ O5 x1 C$ q6 h9 ?3 e; j; z
input [2:0] datain;
' N( X$ d# @ \0 D8 j( q' ~output [2:0] dataout;
$ G a& U# _. O/ n2 C; w0 |+ C( Dreg [2:0] dataout;
8 j0 M' p5 I+ r% }$ Oalways@(posedge clk)" R9 F7 H" g+ J* ?$ q, k$ F" q
begin2 x) Y' w% E! {* V2 `! {
dataout[0]<=1'b1;! O! L) l1 ]& C( N
dataout<=datain<<1;
) M3 B: H, u3 g% v/ l0 ~3 yend8 L# Z3 B, k" j* |9 J
endmodule: D1 T @% H9 k
当datain=3'b010时,输出结果dataout[2:0]=100,这时不是我们希望的结果,它只执行了后者,就只执行了后面一个dataout[0]补零操作,所以,在同一程序中不要对同一变量赋值。- K% r9 j% y/ F5 i: Y
, q4 r* x* x# L7 K |