Я надеюсь, что кто-то может объяснить, как правильно реализовать задержки на входе для комбинационной функции в SystemVerilog. Почему нормально реализовывать временные задержки, используя # (1) в блоке Always, а не в Always_comb? Приведенный ниже код дает эту ошибку ...
Заявления в Always_comb не должны включать в себя те, которые блокируют, имеют блокировку синхронизации или элементы управления событиями,> или операторы forkjoin.
module compare( input logic [3:0] a,
input logic [3:0] b,
output logic eq );
always_comb
if (a != b)
#(1) eq = 1'b0;
else
#(1) eq = 1'b1;
endmodule
Изменение Always_comb всегда избавляет от ошибки и реализует задержки. Но как бы вы смоделировали задержку распространения и сохранили Always_comb? Я попытался реализовать указанный блок в этом модуле, добавив ...
specify
(a => eq) = (1);
(b => eq) = (1);
endspecify
... и это осуществит задержку времени ... но только если я изменю тип a и b из logi c к проводу. Есть ли способ реализовать задержку, сохранить always_comb и сохранить a и b как logi c? Что делает Always_comb таким особенным? Я только начинаю изучать SystemVerilog, поэтому любая оценка будет принята с благодарностью.