找回密码
 注册
关于网站域名变更的通知
查看: 379|回复: 1
打印 上一主题 下一主题

同一个always中对同一个变量多次赋值的不同结果

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-29 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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  y
end
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 y
end8 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

该用户从未签到

2#
发表于 2019-5-29 18:05 | 只看该作者
有机会试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 14:38 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表