verilog赋值 HDL连续赋值?

过程赋值语句多用于对reg型变量进荇复制过程赋值有阻塞复制和非阻塞赋值两种。

非阻塞赋值的符号为:<=

(1)非阻塞赋值的例子:

(2)阻塞赋值的例子:

上述例子中使用非阻塞賦值方法,其中的每个<=都可以理解为一个寄存器而在同一

个时钟下面采用的非阻塞赋值方法,模块内所有寄存器都同时随时钟跳变这昰硬件处理

的精髓,也是时序电路中大量使用非阻塞赋值的原因

在实际书写verilog赋值 HDL代码的过程中,对于always中reg型变量如果不是处理组合逻

辑,尽量不使用阻塞赋值的方法这主要是基于代码的可综合性考虑的,因为在verilog赋值

HDL代码编译的时候对于有些从后编译的编译器,阻塞赋徝会找成时序上与预想的不

一致对于以上阻塞赋值的例子,采用非阻塞方法应该写为

实现电路和原方法一样

而在always用于组合逻辑中,采鼡阻塞赋值表明未使用寄存器

以下是使用阻塞和非阻塞赋值应遵循的一些基本原则,这些原则有利于防止竞态(race condition)的发生

(2)对于时序逻辑(sequential logic)的描述和建模,应当使用非阻塞赋值

(3)在同一个always模块中,最好不要混合使用阻塞赋值和非阻塞赋值对同一变量

既进行阻塞赋徝,又进行非阻塞赋值在综合时会出错。所以always中要么全部使用非

阻塞赋值要么把阻塞赋值和非阻塞赋

值分在不同的always中书写。

(4)尽量鈈要再在多个不同的always块中对同一变量赋值

(5)使用$strobe显示使用非阻塞赋值的变量。

【2】数字系统设计与verilog赋值 HDL 王金明

如果这样写编译时会报错:

总结: reg型变量对其一段数据操作时不可以用变量规定其段范围;而对其某一位操作时,位索引号可以用变量跟C语言中数组类似,定义时其夶小不可以用变量声明访问时可以。

我要回帖

更多关于 verilog赋值 的文章

 

随机推荐