Verilog: Pase un vector como puerto a un módulo.
Pregunta
Tengo dos módulos
- contador: la salida es un vector llamado error_count.
- LCD: Módulo para mostrar el código en una pantalla LCD.La entrada incluye reloj y error_count.
Siguiendo el fragmento del código es el más relevante y se adjunta a continuación:
-
Módulo de nivel superior:
counter counter1 (..., error_count); lcd lcd1 (..., error_count);
-
Módulo de contador:
module counter (..., error_count); ... output reg [31:0] error_count = 0; ... //Update counter every clock cycle endmodule
-
Módulo LCD:
module lcd (..., error_count); ... input [31:0] error_count; ... //error_count used to display on LCD endmodule
¿Qué está mal con este código?La pantalla simplemente imprime 0 como la salida.¿Hay algo malo con la forma en que estoy pasando el vector?
Información adicional: Estoy usando el kit de inicio Xilinx Spartan 3e para probar este código.El código LCD está bien y lo he probado con contador local (que fue Reg [31: 0]).
-
Solución
Debe declarar el cable de 32 bits dentro del módulo de nivel superior para conectar los dos puertos.
wire [31:0] error_count;
Si deja esto, se declara una red implícita que es solo un cable de 1 bits y no conectará los vectores correctamente.
Este error es un clásico Verilog Gotcha.La presentación aquí tiene una buena explicación de este y otros:
http://www.sutherland-hdl.com/papers/2006-snug-boston_standard_gotchas_presentation.pdf