Verilog 总是在没有敏感列表的情况下阻塞

Verilog always block with no sensitivity list

没有敏感列表的always块是否会推断出组合逻辑,就像always_combalways @(*)一样?例如代码:

always begin
if (sig_a)begin
 @(posedge sig_b); // wait for a sig_b posedge event
 @(negedge sig_b); // then wait for a sig_b negedge event
 event_true=1;  
end

if (event_true)begin
  @((sig_c==1)&&(sig_a==0)); //wait for sig_a to deassert and sig_c assert event to be true
  yes =1;
 end
 else yes =0;

end

综合工具需要特定的模板编码风格来综合您的代码。大多数只允许在 always 块的开头进行单个显式事件控制。一些允许多个事件控制的高级综合工具只允许同一时钟边沿多次出现。

模拟工具没有这些限制,会尝试执行您可以编译的任何合法语法。顺便说一句,您的 @((sig_c==1)&&(sig_a==0)) 意味着等待表达式更改值,而不是等待它变为真。 wait(expr)构造意味着等待表达式变为真。

我在 Quartus 中试过了,综合后两者的实现是一样的。

always x = counter[0] + counter[1];

assign y = counter[0] + counter[1];

我不知道对此的支持有多普遍。