verilog 关于阻塞与非阻塞赋值同时使用时的问题

2024-12-03 18:05:26
推荐回答(3个)
回答(1):

其实时序逻辑中,信号有一定的保持时间。使用非阻塞赋值的时候,<=右边的信号变化,也不会马上对左边的信号造成影响,而是要等到一个周期之后。而组合逻辑中使用阻塞赋值,右边的信号变化,会立即对左边的信号造成影响。
阻塞赋值更像是顺序执行,而非阻塞赋值更符合并行执行。
比如always块中有:
y = a ;
y = y + b;
那么这两句和y = a + b;效果是一样的。就是说阻塞赋值中,a的值要赋值给y以后,才会执行下一条y+b, 而非阻塞赋值就不是这样,前一句和后一句同时执行,不会影响下一句。

PS:研究阻塞赋值和非阻塞赋值,有意义,可以多去搜搜文章。但这样研究代码,确实没意义。这段语句综合都过不了,一个always块中不允许同时出现阻塞赋值与非阻塞赋值

回答(2):

恕我直言,你这样的研究没什么意义,这种非正规的代码写法可能会出现很多你意想不到的问题,即使仿真通过了,这也没有实际应用价值。always语句中一般不能有非阻塞赋值语句,除非他描述的是组合逻辑电路,VerilogHDL是硬件描述语言,代码的简洁是次要的,主要是代码对应的电路要简洁(用的元件最少,占的面积最小等)。
此外,在各家设计公司里,这样的代码是绝对不允许出现的,而是要有严格的代码规范。
希望我的回答对你能有帮助!

回答(3):

dfdg