Ports d’entrée et de sortie
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 31 sur 90.
Les ports d’entrée et de sortie sont les connexions qui permettent à un module de communiquer avec le monde extérieur. Ils sont comme les broches d’une puce. Les ports constituent l’interface entre un module et le reste de la conception.
Chaque module possède :
- Ports d’entrée : signaux qui entrent dans le module
- Ports de sortie : signaux qui sortent du module
Ports d’entrée
Les ports d’entrée reçoivent des données de l’extérieur. Ils ne peuvent pas être modifiés à l’intérieur du module : ils peuvent uniquement être lus.
input clk; // Entrée sur un seul bit
input [7:0] data; // Vecteur d’entrée sur 8 bits
input a, b; // Plusieurs entrées sur une même ligneRègles concernant les entrées :
- Aucune valeur ne peut leur être attribuée à l’intérieur du module
- Ne peuvent pas être déclarées comme
reg - Toujours
wire(par défaut)
Ports de sortie
Les ports de sortie envoient des données vers l’extérieur. Ils peuvent être pilotés par des blocs assign ou always.
output out; // Sortie sur un seul bit
output [3:0] result; // Sortie sur 4 bits
output reg busy; // La sortie peut être de type reg
output wire ready; // La sortie peut être de type wireRègles pour les sorties :
- Peut être
wire(avecassign) oureg(avecalways) - Doit être pilotée par quelque chose à l’intérieur du module
Syntaxe de déclaration des ports
La syntaxe de déclaration des ports est la façon précise d’écrire les ports d’entrée et de sortie dans un module. Elle indique à Verilog trois choses à propos de chaque port :
- Direction : s’agit-il d’une entrée, d’une sortie ou d’une entrée-sortie ?
- Taille : quelle est sa largeur en bits ?
- Nom : comment s’appelle-t-il ?
module example (
input [7:0] data_in, // Vecteur d’entrée
input clk, // Entrée unique
input enable, // Entrée unique
output reg [7:0] out, // Registre de sortie
output busy // Fil de sortie
);Pourquoi le sens des ports est important
Le sens indique à Verilog :
- Quels signaux le module peut lire (entrées)
- Quels signaux le module peut écrire (sorties)
- Quels types de connexions sont autorisés
Utiliser la mauvaise direction entraîne des erreurs de compilation.
Exemple de code
module port_demo (
input [3:0] a, // Lecture seule
input [3:0] b, // Lecture seule
output reg [3:0] sum, // Écriture possible (reg)
output [3:0] diff // Écriture possible (wire)
);
always @(*) begin
sum = a + b; // Écriture dans la sortie reg
end
assign diff = a - b; // Écriture dans la sortie wire
endmoduleDéfi
Complétez les déclarations des ports
À faire :
- Ajoutez une entrée de 8 bits appelée
data_in - Ajoutez une entrée d’un bit appelée
clk - Ajoutez une sortie de 4 bits appelée
result(utilisez reg : elle sera assignée dans un bloc always) - Ajoutez une sortie d’un bit appelée
valid(utilisez wire : elle sera assignée avec assign)
Essayez vous-même
module port_challenge (
// Tâche 1 : Ajoutez une entrée de 8 bits appelée data_in
// Tâche 2 : Ajoutez une entrée de 1 bit appelée clk
// Tâche 3 : Ajoutez une sortie de 4 bits appelée result (utilisez reg)
// Tâche 4 : Ajoutez une sortie de 1 bit appelée valid (utilisez wire)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une ALU2Types de données
Type wireType regEntiers et réelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne