新浪博客

Verilog语言一些基本注意点 阻塞赋值和非阻塞赋值

2017-10-19 11:25阅读:
在always语句块中,verilog语言支持两种类型的赋值:阻塞赋值和非阻塞赋值。阻塞赋值使用“=”语句;非阻塞赋值使用“<=”语句。注意,千万不要将这两种赋值方法与assign赋值语句混淆起来,assign赋值语句根本不允许出现在always语句块中。
位于begin/end块内的多条阻塞赋值语句是串行执行的,这一点同标准的程序设计语言是相同的。但是多条非阻塞赋值语句却是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行完成之前开始执行。这正是硬件电路的特点,因为实际的逻辑门电路都是独立运转的,而不是等到其他门电路运转结束之后自己才开始运转。

以下是使用阻塞和非阻塞赋值应遵循的一些基本原则,这些原则有利于防止竞态(race condition)的发生。
1)当用always块来描述组合逻辑(combinational logic)时,应当使用阻塞赋值。
(2)对于时序逻辑(sequential logic)的描述和建模,应当使用非阻塞赋值。
(3)在同一个always模块中,最好不要混合使用阻塞赋值和非阻塞赋值,对同一变量
既进行阻塞赋值,又进行非阻塞赋值,在综合时会出错。所以always中要么全部使用非
阻塞赋值,要么把阻塞赋值和非阻塞赋值分在不同的always中书写。
(4)尽量不要再在多个不同的always块中对同一变量赋值。
(5)使用$strobe显示使用非阻塞赋值的变量。

结论:
阻塞式赋值用于组合逻辑建模;
非阻塞式赋值用于时序逻辑建模。

我的更多文章

下载客户端阅读体验更佳

APP专享