大话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块的执行时间为,所有语句执行时间最长的那条为该块的执行时间。

猜你喜欢

转载自blog.csdn.net/weixin_42124889/article/details/81269855