Mappage de ports par ordre
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 35 sur 90.
Dans la leçon précédente, vous avez appris ce qu'est le mappage de ports par nom, où vous étiquetez explicitement chaque connexion en utilisant .port(signal). Nous allons maintenant aborder la méthode alternative : le mappage de ports par ordre.
Il connecte les signaux aux ports d'un module en fonction de l'ordre dans lequel ils apparaissent dans la définition du module. Il vous suffit de lister les signaux entre parenthèses, et Verilog les fait correspondre un par un.
Syntaxe :
module_name instance_name (signal1, signal2, signal3);Le premier signal se connecte au premier port, le deuxième au deuxième port, et ainsi de suite.
Exemple
Définition du module :
module or_gate (
input in1, // Premier port
input in2, // Deuxième port
output result // Troisième port
);
assign result = in1 | in2;
endmoduleInstanciation avec mappage de ports par ordre :
or_gate or1 (input_a, input_b, output_y);Ceci connecte :
- Premier signal
input_a→ premier portin1 - Deuxième signal
input_b→ deuxième portin2 - Troisième signal
output_y→ troisième portresult
L'ordre est important
Avec le mappage de ports par ordre, la séquence est critique :
// Ordre correct
or_gate or1 (input_a, input_b, output_y);
// Mauvais ordre - signaux connectés aux mauvais ports !
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);Si vous mélangez l'ordre, les connexions aboutissent aux mauvais ports. Cela peut être difficile à déboguer car le code semble correct au premier coup d'œil.
Mappage de ports par nom vs par ordre
| Caractéristique | Par nom | Par ordre |
|---|---|---|
| Syntaxe | .port(signal) | signal1, signal2 |
| L'ordre importe-t-il ? | Non | Oui |
| Auto-documenté ? | Oui | Non |
| Risque d'erreurs | Faible | Élevé |
| Recommandé pour | La plupart des conceptions | Cas simples uniquement |
Quand utiliser le mappage de ports par ordre
Le mappage de ports par ordre est acceptable quand :
- Le module a très peu de ports (2-3)
- L'ordre des ports est évident et peu susceptible de changer
- Vous écrivez des bancs d'essai rapides
Pour la plupart des conceptions, le mappage de ports par nom est préférable car c'est plus clair et moins sujet aux erreurs.
Défi
Complétez l'instanciation en listant les signaux dans le bon ordre en utilisant le mappage de ports par ordre.
Ce qu'il faut faire :
Ports du module (dans cet ordre) :
input en(activation)input [7:0] d(entrée de données)output [7:0] q(sortie de données)
Signaux à connecter :
enable_signal→ connecter àendata_input→ connecter àddata_output→ connecter àq
Aide-mémoire
Le mappage de ports par ordre connecte les signaux en fonction de leur position correspondant à l'ordre de définition des ports du module :
module_name instance_name (signal1, signal2, signal3);Exemple avec un module or_gate (ports : in1, in2, result) :
or_gate or1 (input_a, input_b, output_y);L'ordre est critique — l'inversion de signaux provoque des connexions erronées qui sont difficiles à déboguer.
| Caractéristique | Par nom | Par ordre |
|---|---|---|
| Syntaxe | .port(signal) | signal1, signal2 |
| L'ordre compte ? | Non | Oui |
| Risque d'erreurs | Faible | Élevé |
| Recommandé pour | La plupart des conceptions | Ports simples/peu nombreux uniquement |
Essayez vous-même
module register (
input en,
input [7:0] d,
output [7:0] q
);
assign q = en ? d : q;
endmodule
module top (
input enable_signal,
input [7:0] data_input,
output [7:0] data_output
);
// TODO: Instancier le registre nommé reg1 en utilisant le mappage par ORDRE
// Lister les signaux dans le bon ordre : enable_signal, data_input, data_output
// Ne pas utiliser la syntaxe .port(signal)
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