在 Verilog 中,阻塞赋值、非阻塞赋值和连续赋值是用于赋值操作的不同语法。它们之间的区别主要在于赋值时机和对后续代码执行的影响。
阻塞赋值
阻塞赋值使用等号 = 进行赋值,它的作用是在当前时钟周期内立即更新目标变量的值,然后继续执行下一条语句。因为它会阻塞后续语句的执行,所以称为阻塞赋值。阻塞赋值通常用于顺序逻辑电路中,例如在 always 块中使用。
下面是阻塞赋值的一个例子:
always @(posedge clk)
a = b;
在上面的代码中,当时钟上升沿到来时,将 b 的值赋给 a,然后继续执行下一条语句。
非阻塞赋值
非阻塞赋值使用 <= 进行赋值,它的作用是在当前时钟周期内不立即更新目标变量的值,而是在下一个时钟周期生效。因此,它不会阻塞后续语句的执行,称为非阻塞赋值。在组合逻辑电路中,通常使用非阻塞赋值。
下面是非阻塞赋值的一个例子:
always @*
y <= a&b;
在上面的代码中,将 a 和 b 的与运算结果赋给 y,这个赋值是非阻塞的,即在当前时钟周期内不会立即生效,而是在下一个时钟周期生效。
连续赋值
连续赋值通常用于模块实例化中,它的作用是

最低0.47元/天 解锁文章
2971

被折叠的 条评论
为什么被折叠?



