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

[复制链接]
 楼主| fangzr 发表于 2016-6-30 17:37 | 显示全部楼层 |阅读模式
之前看书上说,wire不能直接赋值,是什么意思呢?
比如:
  1. ’define C 321
  2. ......
  3. wire[3:0] a='C;
复制代码

这种表达式有误吗
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 @ (*)

多谢高手,请问:
  1. module test;
  2.   reg[7:0] a;
  3.   a<=8'b1001_0010;
  4. 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
habc987 发表于 2016-7-12 22:42 来自手机 | 显示全部楼层
没错,楼上正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部