Instanciation de module
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 33 sur 90.
L'instanciation de module est le processus de création d'une copie d'un module à l'intérieur d'un autre module. C'est ainsi que vous construisez des conceptions plus vastes en connectant de plus petits composants entre eux.
Une fois que vous avez défini un module, vous pouvez l'utiliser à l'intérieur d'un autre module. C'est ce qu'on appelle l'instanciation. Chaque instanciation crée une instance distincte de ce module. Considérez cela comme l'utilisation d'un plan pour construire plusieurs copies du même composant.
Syntaxe de base
module_name instance_name (connections);| Partie | Signification |
|---|---|
module_name | Nom du module à instancier |
instance_name | Nom unique pour cette copie |
connections | Signaux connectés aux ports du module |
Exemple simple
Étape 1 : Définir un module
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleÉtape 2 : Instanciez-le dans un autre module
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleVoici ce qui se passe dans ce code :
and_gate— le nom du module que nous voulons utiliser (doit exister quelque part)gate1— un nom unique que nous donnons à cette instance spécifique(x, y, z)— les signaux que nous connectons aux ports du module (dans le même ordre qu'ils apparaissent dans la définition du module)
Le premier signal x se connecte au premier port a. Le deuxième signal y se connecte au deuxième port b. Le troisième signal z se connecte au troisième port c.
Vous devez passer des signaux au module. Les parenthèses ne peuvent pas être vides. Le nombre de signaux doit correspondre au nombre de ports.
Instances multiples
Vous pouvez créer plusieurs copies du même module :
module top;
wire out1, out2;
wire sig1, sig2, sig3, sig4;
and_gate gate1 (sig1, sig2, out1);
and_gate gate2 (sig3, sig4, out2);
endmoduleChaque instance a son propre nom (gate1, gate2) et ses propres connexions. Elles fonctionnent indépendamment.
Ce qui se passe pendant l'instanciation
- Une copie du matériel est créée
- Chaque instance possède son propre ensemble de signaux
- Les instances s'exécutent en parallèle (simultanément)
- Les signaux que vous transmettez déterminent la manière dont les instances se connectent au reste de votre conception
Règles d'instanciation
| Règle | Pourquoi |
|---|---|
| Le nom de l'instance doit être unique | Pour distinguer les copies |
| Le nom du module doit exister | Doit être défini ailleurs |
| Le nombre de connexions doit correspondre au nombre de ports | Sinon, Verilog ne sait pas quoi connecter où |
| L'ordre des connexions doit correspondre à l'ordre des ports | Le premier signal se connecte au premier port, etc. |
Défi
Complétez le code en instanciant le module or_gate.
Ce qu'il faut faire :
- Instanciez
or_gateavec le nom d'instanceor1 - Passez les signaux dans le bon ordre :
input_a,input_b,output_y
Aide-mémoire
L'instanciation de module crée une copie d'un module à l'intérieur d'un autre module :
module_name instance_name (connections);Exemple :
module and_gate (input a, input b, output c);
assign c = a & b;
endmodule
module top (input x, input y, output z);
and_gate gate1 (x, y, z); // x→a, y→b, z→c
endmoduleRègles :
- Le nom de l'instance doit être unique
- Le nombre de connexions doit correspondre au nombre de ports
- L'ordre des connexions doit correspondre à l'ordre de définition des ports
- Plusieurs instances s'exécutent en parallèle, chacune avec ses propres signaux
Essayez vous-même
module or_gate (
input in1,
input in2,
output result
);
assign result = in1 | in2;
endmodule
module top (
input input_a,
input input_b,
output output_y
);
// TODO: Instancier or_gate avec le nom or1
// Passer les signaux dans l'ordre : input_a, input_b, output_y
// 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