Verilog генерирует / genvar в блоке всегда
Я пытаюсь заставить модуль пройти проверку синтаксиса в ISE 12.4, и это дает мне ошибку, которую я не понимаю. Сначала фрагмент кода:
parameter ROWBITS = 4;
reg [ROWBITS-1:0] temp;
genvar c;
generate
always @(posedge sysclk) begin
for (c = 0; c < ROWBITS; c = c + 1) begin: test
temp[c] <= 1'b0;
end
end
endgenerate
Когда я пытаюсь проверить синтаксис, я получаю следующее сообщение об ошибке:
ERROR:HDLCompiler:731 - "test.v" Line 46: Procedural assignment to a non-register <c> is not permitted.
Я действительно не понимаю, почему он жалуется. & Quot; с & Quot; это не провод, это генвар. Это должно быть эквивалентом полностью легального синтаксиса:
reg [3:0] temp;
always @(posedge sysclk) begin
temp[0] <= 1'b0;
temp[1] <= 1'b0;
temp[2] <= 1'b0;
temp[3] <= 1'b0;
end
Пожалуйста, никаких комментариев о том, как было бы легче написать это без генерации. Это сокращенный пример гораздо более сложного фрагмента кода, включающего множество if и неблокирующих назначений для «temp». Кроме того, не говорите мне, что есть более новые версии ISE, я уже знаю это. ОТО, если тыknow это исправлено в более поздней версии ISE, пожалуйста, дайте мне знать, какая версия, которую вы знаете, работает.