es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

iverilog no compila declaraciones de múltiples puertos con múltiples bits escritos en una línea.

Estoy tratando de compilar un código Verilog con un banco de pruebas utilizando la última versión estable de iverilog 11.0, aquí tienes un ejemplo:

iverilog -o example example.v tb_example.v
// example.v

module example(
    input [1:0] input1, [1:0] input2, // aquí está el problema
    output [1:0] output1
    );

// ...

endmodule
// tb_example.v

module tb_example(

);

reg [1:0] input1;
reg [1:0] input2;
wire [1:0] output1;

example uut(input1, input2, output1);

// ...

endmodule

Aunque no hay problema para compilarlo en vivado, el código de arriba no se puede compilar con iverilog y muestra este error de sintaxis:

example.v:2: syntax error
example.v:1: Errors in port declarations.

Cuando cambié la línea de declaración de entrada en example.v a esto:

input [1:0] input1, input2, // aún en una línea pero se eliminó la declaración del segundo bit

o a esto:

input [1:0] input1, 
input [1:0] input2, // en líneas separadas

No hay problema y se puede compilar con iverilog sin errores.

Entonces, si se solucionó el problema, ¿por qué estoy preguntando esto? Porque en primer lugar, no entiendo cómo esto puede compilar en vivado y no en iverilog, y en segundo lugar, necesito controlar múltiples archivos escritos de esta manera (escritos con múltiples puertos con múltiples bits en una sola línea) con bancos de pruebas y es difícil cambiar todos ellos. Entonces, ¿me estoy perdiendo algo o iverilog no lo admite?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error ocurre porque la declaración de entrada en example.v es incorrecta. La sintaxis correcta es declarar cada entrada por separado, de la siguiente manera:

    module example(
        input [1:0] input1, 
        input [1:0] input2, 
        output [1:0] output1
        );
    
    // ...
    
    endmodule
    

    Si bien Vivado puede compilar este código sin errores, no es una sintaxis válida de Verilog y iverilog está informando correctamente un error.

    Para controlar varios archivos escritos de esta manera con testbenches, se recomienda actualizar el código para seguir la sintaxis correcta. Puede llevar un poco de trabajo, pero ahorrará tiempo y evitará errores de sintaxis en el futuro.

    En resumen, iverilog no admite la sintaxis de declaración de entrada incorrecta utilizada en el ejemplo, y se recomienda actualizar el código para seguir la sintaxis correcta para una mejor compatibilidad entre diferentes herramientas.

Comments are closed.