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 (input et output) 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 :
- Des ports d'entrée — des signaux qui entrent dans le module
- Des ports de sortie — des signaux qui sortent du module
Ports Input
Les ports input reçoivent des données de l'extérieur. Ils ne peuvent pas être modifiés à l'intérieur du module—uniquement 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 input:
- Ne peuvent pas se voir attribuer une valeur à l'intérieur du
module - Ne peuvent pas être déclarées comme
reg - Sont
alwaysdeswire(par défaut)
Output Ports
Les ports de sortie (output ports) 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 :
- Peuvent être
wire(avecassign) oureg(avecalways) - Doivent être pilotées 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 spécifique dont vous écrivez les ports d'entrée et de sortie dans un module. Elle indique trois choses à Verilog concernant chaque port :
- Direction — s'agit-il d'une entrée, d'une sortie ou de inout ?
- Taille — combien de bits de largeur fait-elle ?
- Nom — comment s'appelle-t-il ?
module example (
input [7:0] data_in, // Vecteur d'entrée
input clk, // Entrée simple
input enable, // Entrée simple
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 (inputs)
- Quels signaux le module peut écrire (outputs)
- Quels types de connexions sont autorisés
Utiliser la 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 vers le reg de sortie
end
assign diff = a - b; // Écriture vers le wire de sortie
endmoduleDéfi
Complétez les déclarations de ports
Ce qu'il faut faire :
- Ajoutez une entrée 8-bit appelée
data_in - Ajoutez une entrée single-bit appelée
clk - Ajoutez une sortie 4-bit appelée
result(utilisezreg— sera assignée dans un blocalways) - Ajoutez une sortie single-bit appelée
valid(utilisezwire— sera assignée avecassign)
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 VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'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 RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états