Estoy tratando de obtener un módulo para pasar la verificación de sintaxis en ISE 12.4, y me da un error que no entiendo. En primer lugar un fragmento de código:Verilog generate/genvar en un bloque siempre
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
Cuando intento una comprobación de sintaxis, me sale el siguiente mensaje de error:
ERROR:HDLCompiler:731 - "test.v" Line 46: Procedural assignment to a non-register <c> is not permitted.
Realmente no entiendo por qué se queja. "c" no es un cable, es un genvar. Este debería ser el equivalente de la sintaxis completamente legal:
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
Por favor, no hay comentarios acerca de cómo sería más fácil que escribir esto sin generar. Este es un ejemplo reducido de una pieza de código mucho más compleja que implica múltiples ifs y asignaciones no bloqueantes a "temp". Además, no me digas que hay versiones más nuevas de ISE, ya lo sé. OTOH, si sabe está arreglado en una versión posterior de ISE, por favor dígame qué versión sabe que funciona.
Gracias por la rápida respuesta. Temía que fuera algo como esto. Parte del problema es que quiero generar una secuencia de sentencias if o selectores de casos con el ciclo for, que no se puede hacer en bloques siempre separados. – user1684538
¿Hay alguna manera de generar todo el código en un solo bloque siempre, o genvar simplemente no es capaz de hacer eso? – user2569332