打印
[verilog]

求大神指点一个wire型变量小疑惑

[复制链接]
1583|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fangzr|  楼主 | 2016-6-30 17:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
waiter| | 2016-7-1 07:49 | 只看该作者
“不能直接赋值”,是指不能在always中赋值。比如下面的写法肯定是错误的:
    wire a;
    always @ (*)
        a = `C;

你这种  wire [3:0] a='C; 的写法,叫做声明变量时赋初值,是可以的。

使用特权

评论回复
板凳
fangzr|  楼主 | 2016-7-2 15:46 | 只看该作者
waiter 发表于 2016-7-1 07:49
“不能直接赋值”,是指不能在always中赋值。比如下面的写法肯定是错误的:
    wire a;
    always @ (*)

多谢高手,请问:
module test;
  reg[7:0] a;
  a<=8'b1001_0010;
endmodule

那这种描述应该是不合法的吧

使用特权

评论回复
地板
waiter| | 2016-7-3 20:54 | 只看该作者
当然是不对的。

定义个变量a为reg后,要在 always 语句块中进行赋值(或者也可以在 initial 中赋值)。
修改为如下就可以:
module test;
  reg[7:0] a;

always @ (*)
      a=8'b1001_0010;

endmodule


或者:
修改为如下就可以:
module test;
  reg[7:0] a;

initial begin
      // 其他语句:
      a=8'b1001_0010;
      // 其他语句:
end
endmodule

使用特权

评论回复
5
habc987| | 2016-7-12 22:42 | 只看该作者
没错,楼上正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝