Menu
Coddy logo textTech

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 grandes en connectant des composants plus petits 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 séparée de ce module. Pensez-y comme à l'utilisation d'un plan pour construire plusieurs copies du même composant.

Syntaxe de base

module_name instance_name (connections);
PartieSignification
module_nameNom du module à instancier
instance_nameNom unique pour cette copie
connectionsSignaux 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);
endmodule

Voici 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 transmettre 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);
endmodule

Chaque instance a son propre nom (gate1, gate2) et ses propres connexions. Elles fonctionnent de manière indépendante.

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 `signals` que vous transmettez déterminent la manière dont les instances se connectent au reste de votre conception

Rules for Instantiation

RuleWhy
Instance name must be uniqueTo distinguish between copies
Module name must existMust be defined elsewhere
Number of connections must match number of portsOtherwise Verilog doesn't know what connects where
Connection order must match port orderFirst signal connects to first port, etc.
challenge icon

Défi

Complétez le code en instanciant le module or_gate.

Ce qu'il faut faire :

  1. Instanciez or_gate avec le nom d'instance or1
  2. Passez 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: Instancier or_gate avec le nom or1
  // Passez les signaux dans l'ordre : input_a, input_b, output_y
  // N'utilisez pas la syntaxe .port(signal)
  

endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux