Почему verilog «Always_comb блок содержит только один элемент управления событиями» ошибка отмечена на всегда процедурный блок с несколькими "@" - PullRequest
0 голосов
/ 16 ноября 2018

следующий код генерирует это сообщение об ошибке:

"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 голосов
/ 16 ноября 2018

Сообщение об этой ошибке вводит в заблуждение.Вам не разрешено ЛЮБОЙ контроль событий в блоке always_comb.Он автоматически создает список чувствительности к событиям.Возможно, он комбинирует неявный контроль событий с теми, которые вы добавили к нему, а затем генерирует ошибку.

Если вы не используете инструмент синтеза высокого уровня, вы можете иметь только один элемент управления событиями в начале базового блока always.

0 голосов
/ 16 ноября 2018

always_comb для комбинационной логики только . используемые вами операторы @ не имеют ничего общего с комбинационными.

от lrm 9.2.2.2.2

Заявления в Always_comb не должны включать в себя те, которые блокируют, имеют блокировку синхронизации или элементы управления событиями, или операторы fork-join.

В вашем случае вам всегда нужно использовать общее назначение. always @*, вероятно, подойдет.

...