为什么在带有多个“ @”的始终过程块上标记verilog“ always_comb块仅包含一个事件控件”错误

时间:2018-11-16 11:46:34

标签: verilog system-verilog hdl

下面的以下代码生成此错误消息:

  

“ verilog always_comb施加了限制,即它只能包含一个事件控件,而不能包含阻塞定时控件”

always_comb 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 :(得分:1)

always_comb仅用于组合逻辑 。您使用的@语句与组合无关。

从lrm 9.2.2.2.2起

  

always_comb中的语句不应包括阻塞,具有阻塞时间或事件控制或fork-join语句的语句。

在您的情况下,您始终需要使用通用用途。 always @*可能会做到。

答案 1 :(得分:1)

该错误报告的消息具有误导性。 always_comb块中不允许您使用 ANY 事件控件。它会自动为您创建事件敏感性列表。可能是将隐式事件控件与您添加到其中的控件组合在一起,然后生成错误。

除非您使用高级综合工具,否则您只能在基本always块的开始处具有一个事件控制。