Sto cercando di ottenere un modulo per passare il controllo della sintassi in ISE 12.4 e mi dà un errore che non capisco. Prima un frammento di codice:Verilog generate/genvar in un blocco sempre
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
Quando provo un controllo della sintassi, ricevo il seguente messaggio di errore:
ERROR:HDLCompiler:731 - "test.v" Line 46: Procedural assignment to a non-register <c> is not permitted.
Io davvero non capisco il motivo per cui si lamenta. "c" non è un filo, è un genvar. Questo dovrebbe essere l'equivalente della sintassi completamente legale:
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
Per favore, niente commenti su come sarebbe più facile scrivere questo senza l'generare. Questo è un esempio ridotto di una parte di codice molto più complessa che coinvolge più incarichi if e non bloccanti in "temp". Inoltre, non dirmi solo che ci sono versioni più recenti di ISE, lo so già. OTOH, se tu sai è stato corretto in una versione successiva di ISE, per favore fammi sapere quale versione sai funzionare.
Grazie per la rapida risposta. Avevo paura che sarebbe stato qualcosa del genere. Parte del problema era che volevo generare una sequenza di istruzioni if o selettori di casi con il ciclo for, che non può essere eseguito in blocchi separati separati. – user1684538
Esiste un modo per generare tutto il codice in un singolo blocco, oppure genvar non è in grado di farlo? – user2569332