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 ressemblent aux 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 arrivent 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 seulement être lus.
input clk; // Entrée monobit
input [7:0] data; // Vecteur d'entrée 8 bits
input a, b; // Plusieurs entrées sur une ligneRègles pour les entrées :
- Impossible de leur attribuer une valeur à l’intérieur du module
- Impossible de les déclarer 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 monobit
output [3:0] result; // Sortie 4 bits
output reg busy; // La sortie peut être reg
output wire ready; // La sortie peut être wireRègles pour les sorties :
- Peut être un
wire(avecassign) ou unreg(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 manière spécifique dont vous écrivez 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 : de combien de bits est-elle large ?
- Nom : comment s’appelle-t-elle ?
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, // Sortie reg
output busy // Sortie wire
);Pourquoi la direction des ports est importante
La direction 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 une mauvaise direction provoque des erreurs de compilation.
Exemple de code
module port_demo (
input [3:0] a, // Peut seulement lire
input [3:0] b, // Peut seulement lire
output reg [3:0] sum, // Peut écrire (reg)
output [3:0] diff // Peut écrire (wire)
);
always @(*) begin
sum = a + b; // Écriture dans l'output reg
end
assign diff = a - b; // Écriture dans l'output 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 seul bit appelée
clk - Ajoutez une sortie de 4 bits appelée
result(utilisez reg : elle sera affectée dans un bloc always) - Ajoutez une sortie d’un seul bit appelée
valid(utilisez wire : elle sera affectée avec assign)
Essayez vous-même
module port_challenge (
// Tâche 1 : Ajoutez une entrée 8 bits appelée data_in
// Tâche 2 : Ajoutez une entrée d'un bit appelée clk
// Tâche 3 : Ajoutez une sortie 4 bits appelée result (utilisez reg)
// Tâche 4 : Ajoutez une sortie d'un 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