大话Verilog-Verilog入门(五)

文章来至我的公众号:https://mp.weixin.qq.com/s/VsDbCKuXZ1dgHSMKKUoKSA
笔者E林

这里聊聊赋值语句和块语句

非阻塞赋值和阻塞赋值

在Verilog中赋值语句分为两种,一种是非阻塞赋值,另一种则是阻塞赋值

1、 非阻塞赋值
b<=a;
用这样的赋值得等块结束后,b才会等于a,而不会马上赋值。
即等该模块的语句全部执行完后才会将a的值赋予b,就像你玩回合制游戏一样,这一回合中,中间过程无论多艰辛,你都是得等到这一回合打完后才能得到经验和金钱一样的道理。
而且这个是时序逻辑模块最常用的赋值方式,避免了竞争冒险状态。

2、 阻塞赋值
b=a;
用这样的赋值方式,即马上赋值,先执行完这行语句后在执行下一行的语句。这个就不同于回合制游戏了,他像即时战略类中的红警一样,你打死一个怪就算一个怪,马上得到了结果,就像对面说好了几个兵力一样。

块语句:

顾名思义,块语句即一整块的东西,也即是我们大话Verilog-Verilog入门(一)聊到的小箱子。
讲到块不免讲到块名了,不然后续你怎么去辨别这个块究竟是哪个块呢。
只需要将块名加到我们下面所讲的关键字(begin或则fork)后面即可。

块语句有两种:begin——end;fork——join;
begin-end是顺序块
即,一条一条的执行,从上到下,当然不与上面的是否为非阻塞赋值方式不矛盾。
执行完当前语句,不代表马上能赋值。
因此我们也知道了begin-end快语句的执行时间为所有语句执行时间的总和。

fork——join则是并行块
即块里面的语句同时进行执行
由于并行块的特性,因此在很多时候,并不能与begin-end顺序块搞混,因此会出现很多不确定性,这个也是你看到的代码大多是begin-end,而不是fork-join的原因。
但是有时候fork-join用的好,确实是有意想不到的效果的(很多时候在测试模块中用到并行块)。
fork-join块的执行时间为,所有语句执行时间最长的那条为该块的执行时间。

  • 30
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值