Короткий ответ: вам, вероятно, следует удалить ключевое слово assign
.
Ключевое слово assign
имеет два разных значения в зависимости от контекста, который вы не показываете.
При использовании наНа верхнем уровне модуля ключевое слово assign
является постоянным процессом, чувствительным к изменениям RHS, и назначает его на провод LHS.Оператор assign
имеет эквивалентную функциональность для блока always
ниже
module mod;
...
assign Awire = B + C;
always @(B or C) begin
Areg = B + C;
end
endmodule
При использовании внутри процедурного процесса это временный процесс, который назначает переменную LHS каждый раз, когда изменяется RHS.Два блока always
ниже имеют одинаковую функциональность
module top;
...
always @(sel)
begin
if (sel)
assign Areg = B;
else
assign Areg = C;
end
always @(sel or B or C) // @*
begin
if (sel)
Areg = B;
else
Areg = C;
end
endmodule
К сожалению, почти все инструменты синтеза требуют написания кода с полным списком чувствительности, как в последнем блоке всегда.Таким образом, это исключает возможность использования assign
внутри процедурного блока.