verilog中的阻塞与非阻塞

初学verilog的同学容易搞混淆阻塞与非阻塞赋值操作。要区分的话,其实也有办法。学过数字电路的都知道时序的概念,比寄存器的操作,把D端输入用clk打入寄存器,在clk时钟上升沿采样D值,只有在时钟上升沿的下一周期的上升沿,D值才会在输出端Q上输出出来。符合这个特征的就是非阻塞赋值:
always @ (posedge clk)
      if (!rst)
           dout <= 1'b0 ;
      else
          dout <= d   ;

阻塞赋值是立即被更新的,与非阻塞赋值有非常明显的差异。如果连续用阻塞赋值方式对一个变量赋值,那么最终它就等于最后赋值时的变量值。如下:

always @ (*)
      begin
            dout = 1'b0 ;
            dout = d   ;
      end

变量dout最后的值是d,dout初始赋值的0被后面所的赋值d覆盖(阻塞)而没有了。阻塞赋值的符号也是与非阻塞赋值不一样的“=”。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值