verilog中的阻塞赋值与非阻塞赋值详解

网上看到的觉得不错分享下

组合逻辑的always模块中使用阻塞赋值;
时序逻辑的always模块中使用非阻塞赋值;
可以这样理解,组合中计算马上赋值,时序逻辑中上升沿计算,下降沿赋值
关键是组合逻辑中是实时变化的,而时序逻辑中一个cycle才变化一次
比如:
always @(a or b)
begin
    c = a + b;
end
always @(posedge clk)
begin
    if(rst)
      c <= 0;
   else
     c <= a + b;
end
在组合逻辑的always block中,a和b的变化都会引起c值的变化;
而时序逻辑中c至少会维持一个clock cycle,也就是说如果a和b的变化导致c变化的时间是在下一个clock的上升沿,而不会让c立刻改变

你可能感兴趣的:(verilog中的阻塞赋值与非阻塞赋值详解)