En el nivel superior de un módulo, tengo el siguiente bloque:
genvar i;
generate
for (i = 0; i < DEPTH; i++) begin
fifo_element #(WIDTH) element (.clk(clk),
.d_in(e_qd[i]),
.d_in_strobe(e_in_strobe[i]),
.q(e_qd[i+1]),
.q_ready(e_qready[i]),
.in_strobe_chain(e_in_strobe[i+1]),
.q_out_strobe(e_out_strobe[i+1]),
.out_strobe_chain(e_out_strobe[i]),
.prev_used(i == 0 ? 1'b0 : e_used [i-1]),
.next_used(i == DEPTH-1 ? 1'b1 : e_used [i+1]),
.used(e_used[i]));
end // for (i = 0; i < DEPTH; i++)
endgenerate
Cuando intento compilar esto con icarus verilog (v10.1, usando la opción de línea de comando -g2009
) obtengo los siguientes errores:
fifo.v:84: syntax error
fifo.v:96: error: invalid module item.
fifo.v:97: syntax error
Estos errores corresponden a la línea que contiene for
, la última línea de la instanciación element
y la línea que contiene el end
que corresponde al begin
del bloque for
. Si elimino los marcadores begin
y end
aparentemente innecesarios, el tercer error desaparece, pero los otros dos permanecen.
¿Qué pasa con mi código? ¿O es esto un problema con Icarus Verilog? (Una pequeña investigación sugiere que si bien las versiones anteriores no eran compatibles con generate
blocks en absoluto, han recibido soporte durante algún tiempo, por lo que lo que estoy tratando de hacer aquí debería funcionar)