赞
踩
在Verilog中,wire和reg是两种不同的信号类型。先不涉及太多直奔主题,怎么用?
如果不加位宽,则都默认表示1bit类型的数据举例:
- //reg 类型
-
-
- reg a;//1bit数据
- reg b;//1bit数据
-
-
-
- //wire类型
-
- wire a;//1bit数据
- wire b;//1bit数据
如果加了位宽,则表示相应位宽的数据,以2bit举例
-
- reg [1:0] a;//2bit数据
-
-
-
- wire [1:0] a;//2bit数据
reg 和wire的写代码的时候使用范围,那个地方该用wire,哪个地方改用reg?
- 重点1
- //在always语句块和initial语句块中(过程赋值语句)(还有function和task这里没有举例),左边必须使用reg类型的变量
-
- reg a;
-
- reg [1:0] b;
-
-
- always@(------)begin
-
- a = --------------;//a 必须使用reg类型
- b = --------------;//b和a 一样
-
-
- end
-
- initial begin
-
- a = --------------;//a 必须使用reg类型
- b = --------------;//b和a 一样
-
- end
-
-
- 重点2
- //在所有的assign语句(连续性赋值语句)中必须使用wire类型
-
-
- wire c;
- wire [1:0] d;
-
- assign c = --------;//c必须得是wire类型
- assign d = --------;//d和c一样
初学者先学会上面如何使用;
下面具体讲二者区别与联系;
联系:wire 和 reg类型都是4值逻辑,也就是除了表示0和1外,还表示x(不定态,就是未知状态)还有高阻态z,wire默认值为z,reg默认值为x,; 不像,bit ,byte, int ,只有0和1两种,且默认值为0.
区别:wire表示一根物理的导线,不能存储结构,主要起到连接作用,只负责传递驱动级的输出;比如assign m = n & q; n &q 得到的值立刻返回给m,表达式计算的结果立刻给左边m
reg表示存储单元,用于存储数据,wire类型不能存储数据,只能用来传递。reg类类型在没有输入的时候可以保持原来的值不变,在时钟沿到来或者异步信号改变等条件触发时可以改变内部状态。reg虽然是寄存器类型,但是也可以被综合工具综合为组合逻辑
always () begin
c = d & m;//此时c必须时reg类型,d和m既可以时wire类型也可以时reg类型
end
注:在实例化DUT时候,对于输入的wire类型要用reg类型去驱动,输出的reg类型要用wire类型去采样,具体看上一章,module的实例化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。