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, пожалуйста, дайте мне знать, какая версия, которую вы знаете, работает.

Ответы на вопрос(6)

Ваш ответ на вопрос