下面的以下代码生成此错误消息:
“ 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
组合逻辑程序块为什么会生成此错误?
并且可以始终合成带有@
事件的永远阻塞吗?
答案 0 :(得分:1)
always_comb
仅用于组合逻辑 。您使用的@
语句与组合无关。
从lrm 9.2.2.2.2起
always_comb中的语句不应包括阻塞,具有阻塞时间或事件控制或fork-join语句的语句。
在您的情况下,您始终需要使用通用用途。 always @*
可能会做到。
答案 1 :(得分:1)
该错误报告的消息具有误导性。 always_comb
块中不允许您使用 ANY 事件控件。它会自动为您创建事件敏感性列表。可能是将隐式事件控件与您添加到其中的控件组合在一起,然后生成错误。
除非您使用高级综合工具,否则您只能在基本always
块的开始处具有一个事件控制。