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

2020-02-04 10:24发布

之前看书上说,wire不能直接赋值,是什么意思呢?
比如:
  1. ’define C 321
  2. ......
  3. wire[3:0] a='C;
复制代码
这种表达式有误吗
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
waiter
1楼-- · 2020-02-04 11:46
“不能直接赋值”,是指不能在always中赋值。比如下面的写法肯定是错误的:
    wire a;
    always @ (*)
        a = `C;

你这种  wire [3:0] a='C; 的写法,叫做声明变量时赋初值,是可以的。
fangzr
2楼-- · 2020-02-04 13:15
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
3楼-- · 2020-02-04 15:43
当然是不对的。

定义个变量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
4楼-- · 2020-02-04 17:25
 精彩回答 2  元偷偷看……

一周热门 更多>