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 le mappage de ports par nom, où vous étiquetez explicitement chaque connexion à l'aide de .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 se basant sur l'ordre (ORDER) dans lequel ils apparaissent dans la définition du module. Vous réalisez simplement une List des signaux entre parenthèses, et Verilog les associe un par un.
Syntax:
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;
endmoduleInstantiation 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 compte
Avec le typage de port 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'order, les connexions vont vers les wrong ports. Cela peut être difficile à déboguer car le code semble correct au premier coup d'œil.
Port Mapping By Name vs By Order
| Fonctionnalité | By Name | By Order |
|---|---|---|
| Syntaxe | .port(signal) | signal1, signal2 |
| L'ordre compte ? | Non | Oui |
| Auto-documenté ? | Oui | Non |
| Risque d'erreurs | Faible | Élevé |
| Recommandé pour | La plupart des designs | Cas simples uniquement |
Quand utiliser le mappage de ports par ordre
Le mappage de ports par ordre est acceptable lorsque :
- Le module possède très peu de ports (2-3)
- L'ordre des ports est évident et peu susceptible de changer
- Vous écrivez des bancs de test rapides
Pour la plupart des conceptions, le mappage de port par nom est préférable car il 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
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 register avec le nom reg1 en utilisant le mapping ORDER
// 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