Error de sintaxis verilog de Icarus en un bloque de generación

2

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)

    
pregunta Jules

2 respuestas

2

Tal vez necesites i = i +1 en lugar de i ++. Aparte de eso, no veo nada obviamente malo.

    
respondido por el alex.forencich
0

Mi opinión es que necesita habilitar explícitamente las funciones de verilog 2001. No sé qué es icarus, pero todas las herramientas comerciales que he usado requieren un interruptor para habilitar v2k o 2001 o como se llame la herramienta.

    
respondido por el Matt

Lea otras preguntas en las etiquetas