Verilog generuje / genvar w stałym bloku
Próbuję uzyskać moduł, który przejdzie sprawdzanie składni w ISE 12.4, i daje mi błąd, którego nie rozumiem. Najpierw fragment kodu:
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
Gdy próbuję sprawdzić składnię, otrzymuję następujący komunikat o błędzie:
BŁĄD: HDLCompiler: 731 - „test.v” Wiersz 46: Przypisanie procedur do nierejestrowanego <c> jest niedozwolone.
Naprawdę nie rozumiem, dlaczego narzeka. „c” nie jest przewodem, to genvar. Powinno to być odpowiednikiem całkowicie legalnej składni:
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
Proszę, nie komentuj tego, jak łatwiej byłoby napisać to bez generowania. Jest to zredukowany przykład znacznie bardziej złożonego fragmentu kodu obejmującego wiele przypisań if i nieblokujących do „temp”. Ponadto, nie tylko powiedz mi, że są nowsze wersje ISE, już to wiem. OTOH, jeśli tywiedzieć jest naprawiony w nowszej wersji ISE, daj mi znać, którą wersję znasz.