Instantiation d’un module
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 33 sur 90.
L’instanciation d’un module est le processus qui consiste à créer une copie d’un module à l’intérieur d’un autre module. C’est ainsi que vous construisez des conceptions plus grandes en reliant de petits composants entre eux.
Une fois que tu as défini un module, tu peux l’utiliser dans un autre module. C’est ce qu’on appelle l’instanciation. Chaque instanciation crée une instance distincte de ce module. Imagine que tu utilises un plan pour construire plusieurs exemplaires du même composant.
Syntaxe de base
module_name instance_name (connections);| Élément | 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 (il doit exister quelque part)gate1: un nom unique que nous donnons à cette instance précise(x, y, z): les signaux que nous connectons aux ports du module (dans le même ordre que celui de leur apparition dans la définition du module)
Le premier signal x est connecté au premier port a. Le deuxième signal y est connecté au deuxième port b. Le troisième signal z est connecté au troisième port c.
Fournis un signal pour chaque port. Verilog accepte aussi moins de signaux, voire des parenthèses vides, mais chaque port sans signal reste alors non connecté et n'est relié à rien dans ta conception. Fournir plus de signaux que le module n'a de ports est une erreur.
Instances multiples
Tu peux 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 lors de 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 tu transmets déterminent la façon dont les instances se connectent au reste de ta 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 | Il doit être défini ailleurs |
| Transmettez un signal par port | Un port sans signal reste non connecté, et un nombre de signaux supérieur au nombre de ports constitue une erreur |
| L’ordre des connexions doit correspondre à l’ordre des ports | Le premier signal se connecte au premier port, etc. |
Défi
Complète le code en instanciant le module or_gate.
À faire :
- Instancie
or_gateavec le nom d’instanceor1 - Passe les signaux dans le bon ordre :
input_a,input_b,output_y
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: Instanciez or_gate sous le nom or1
// Passez les signaux dans cet ordre : input_a, input_b, output_y
// N’utilisez pas 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 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