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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
同一个always中对同一个变量多次赋值的不同结果
$ r  k1 L$ i5 m' o) v  e( [9 u
在同一个变量中,不要对同一个变量赋值,如果对同一变量多次赋值,那么它只执行最后一次赋值操作。
( Y" G/ s/ C2 qmodule test(clk,datain,dataout);
+ T" B" Y; s+ r+ F% U. d# winput clk;% F' T; f. d* }8 p$ _
input [2:0] datain;! k# T% v. a( v  U4 h
output [2:0] dataout;8 S, @4 Z# b$ L0 G& ^: i2 d
reg [2:0] dataout;5 V) [6 I! A# c8 F( m. r  n
always@(posedge clk)
8 }- `' J+ P* {) g- l. rbegin   
" ]2 V* \5 G/ O3 h( e- A- _3 [0 E    dataout<=datain<<1;: H5 \- J' n" [: P  Q7 l4 j
    dataout[0]<=1'b1;: ~, W- |, N% j/ q6 ~
end) b4 _- k5 u, X' n( u
endmodule* ]  Z* b' ^9 q- r, ~5 N% r
上例中,对dataout[0]同时进行了两次赋值,当datain=3'b010时,输出结果dataout[2:0]=101,当然这是我们希望的结果。但再看下面的例子+ n6 k: M# g: a3 s0 `5 X
module test(clk,datain,dataout);
0 O% Q' c. P1 l; i* ^input clk;
5 L, F8 L- ]; C, `5 f6 S; v+ qinput [2:0] datain;
, l/ u2 w  n' |7 z, ^, Boutput [2:0] dataout;& W( R) c( g) [" u0 [8 J
reg [2:0] dataout;
6 k+ [1 F3 S( J, A5 l' N6 k' Lalways@(posedge clk): G. u4 b: A/ y
begin) F0 L5 ~, ]! h5 e" A; N
    dataout[0]<=1'b1;
2 ^% X- @9 r3 R4 A3 v    dataout<=datain<<1;0 g3 z: u5 ]3 j* Y" {$ @
end. s! L3 K! j1 j- I  ?
endmodule
3 c' O% `7 C+ g2 Q  @当datain=3'b010时,输出结果dataout[2:0]=100,这时不是我们希望的结果,它只执行了后者,就只执行了后面一个dataout[0]补零操作,所以,在同一程序中不要对同一变量赋值。
1 {3 F! d( e- y5 t9 [0 ^5 w5 A
) V5 j8 D7 E9 g% n3 G8 {

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 18:13 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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