3.wire类型和reg类型的区别与联系

在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的实例化。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值