Verilog :Passer un vecteur comme port à un module
Question
J'ai deux modules
- comptoir:La sortie est un vecteur appelé error_count.
- écran LCD :Module pour afficher le code sur un écran LCD.L’entrée inclut l’horloge et error_count.
L'extrait suivant du code est le plus pertinent et est joint ci-dessous :
Module de niveau supérieur :
counter counter1 (..., error_count); lcd lcd1 (..., error_count);
module compteur :
module counter (..., error_count); ... output reg [31:0] error_count = 0; ... //Update counter every clock cycle endmodule
Module LCD :
module lcd (..., error_count); ... input [31:0] error_count; ... //error_count used to display on LCD endmodule
Quel est le problème avec ce code ?L'écran affiche simplement 0 comme sortie.Y a-t-il quelque chose qui ne va pas dans la façon dont je transmets le vecteur ?
Information additionnelle:J'utilise le kit de démarrage Xilinx Spartan 3E pour tester ce code.Le code LCD fonctionne bien et je l'ai testé avec un compteur local (qui était reg[31:0]).
La solution
Vous devez déclarer un fil 32 bits dans le module de niveau supérieur pour connecter les deux ports.
wire [31:0] error_count;
Si vous omettez cela, un réseau implicite est déclaré qui n'est qu'un fil de 1 bit et ne connectera pas correctement les vecteurs.
Cette erreur est un piège classique de Verilog.La présentation ici a une bonne explication de celle-ci et d'autres :
http://www.sutherland-hdl.com/papers/2006-SNUG-Boston_standard_gotchas_presentation.pdf