В настоящее время, когда я пытаюсь условно сгенерировать a для l oop, я получаю ошибку компиляции, утверждающую, что я "Не могу вложить генерацию областей".
Пример того, что я пытаюсь сделать:
generate
if (x == 0) begin
for (genvar i = 0; i < 16; i++) begin
*some code here*
end
end
else begin
for (genvar k = 0; k < 16; k++) begin
*some code here*
end
endgenerate
Редактировать: Спасибо всем за ответы и помощь, но я обнаружил проблему. Спасибо, Грег, за то, что вы напомнили мне о невозможности использовать генерирование в другом генерировании.
Вот пример минимальной воспроизводимости, который вызывал у меня проблемы.
module test ();
parameter x = 1;
parameter y = 1;
if (y == 1) begin
generate
if (x == 1) begin
for (genvar i = 0; i < 16; i++) begin
test_inner test_inner1();
end
end
else begin
for (genvar k = 0; k < 16; k++) begin
test_inner test_inner2();
end
end
endgenerate
end
endmodule
Как вы видите, у меня был условный оператор вложен в другой условный оператор. Поскольку я не использовал ключевое слово generate во внешнем условном выражении, я не осознавал, что оно считается генерацией в другом генераторе.
Чтобы решить эту проблему, я переместил генерацию во внешнее условное выражение, как таковое:
module test ();
parameter x = 1;
parameter y = 1;
generate
if (y == 1) begin
if (x == 1) begin
for (genvar i = 0; i < 16; i++) begin
test_inner test_inner1();
end
end
else begin
for (genvar k = 0; k < 16; k++) begin
test_inner test_inner2();
end
end
end
endgenerate
endmodule