Verilog赋值语句

在Verilog HDL语言中,信号有两种赋值方式:

第一种是非阻塞赋值方式,Non_Blocking,a<=b

非阻塞赋值符“<=”与小于等于符看起来是一样的,但是其意义是完全不同的,小于等于符是关系运算符,用来比较大小,如b<=a,而非阻塞赋值符是用于赋值操作。

在语句块中,上面语句所赋的变量值不能立即就为下面的语句所用。

块结束后才能完成这次赋值操作,而所赋的变量值是上一次赋值得到的。

在编写可综合的时序模块时,这是最常用的赋值方法。

第二种是阻塞赋值方式,blocking,a=b

赋值语句执行完后,块才结束。

b的值在赋值语句执行完后立刻就改变的。

在时序逻辑中使用时,可能会产生意想不到结果。

非阻塞赋值方式和阻塞赋值方式的区别常给设计人员带来问题,主要是对“always”块内的reg型信号的赋值方式不易把握。

截止到目前为止,“always”模块内的reg型信号都是采用下面的赋值方式:a<=b。

这种赋值方式并不是马上执行的,“always”块内的下一条语句执行后,b并不等于a,而是保持原来的值,“always”块结束后,才进行赋值。

对于阻塞赋值方式,b=a,这种赋值方式是马上执行的,也就是说执行下一条语句时,b已等于a。

尽管这种方式看起来很直观,但是可能引起麻烦。

你可能感兴趣的:(Verilog,学习,其他)