Verilog始终会阻塞,没有敏感度列表

时间:2018-11-18 14:54:04

标签: verilog system-verilog hdl

没有敏感性列表的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

2 个答案:

答案 0 :(得分:3)

综合工具需要特定的模板编码样式来综合您的代码。大多数只允许在always块的开始处使用单个显式事件控制。某些确实允许多个事件控制的高级综合工具仅允许多次出现相同的时钟沿。

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

答案 1 :(得分:-1)

我在 Quartus 中尝试过,在综合之后,这两种方法都得到了相同的实现。

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

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

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