Menu
Coddy logo textTech

Module Instantiation

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 33 von 90.

Die Instanziierung eines Moduls ist der Prozess des Erstellens einer Kopie eines Moduls innerhalb eines anderen Moduls. So erstellst du größere Designs, indem du kleinere Komponenten miteinander verbindest.

Sobald du ein Modul definiert hast, kannst du es innerhalb eines anderen Moduls verwenden. Dies wird als Instanziierung bezeichnet. Jede Instanziierung erstellt eine separate Instanz dieses Moduls. Stell es dir so vor, als würdest du einen Bauplan verwenden, um mehrere Kopien derselben Komponente zu erstellen.

Grundlegende Syntax

module_name instance_name (connections);
TeilBedeutung
module_nameName des zu instanziierenden Moduls
instance_nameEindeutiger Name für diese Kopie
connectionsSignale, die mit den Ports des Moduls verbunden sind

Einfaches Beispiel

Schritt 1: Ein Modul definieren

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

Schritt 2: Instanziiere es in einem anderen Modul

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

Das passiert in diesem Code:

  • and_gate: der Name des module, das wir verwenden möchten (muss irgendwo existieren)
  • gate1: ein eindeutiger Name, den wir dieser spezifischen Instanz geben
  • (x, y, z): die Signale, die wir mit den Ports des module verbinden (in derselben Reihenfolge, in der sie in der Definition des module erscheinen)

Das erste Signal x wird mit dem ersten Port a verbunden. Das zweite Signal y wird mit dem zweiten Port b verbunden. Das dritte Signal z wird mit dem dritten Port c verbunden.

Du musst Signale an das Modul übergeben. Die Klammern dürfen nicht leer sein. Die Anzahl der Signale muss mit der Anzahl der Ports übereinstimmen.

Mehrere Instanzen

Du kannst mehrere Kopien desselben Moduls erstellen:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

Jede Instanz hat ihren eigenen Namen (gate1, gate2) und ihre eigenen Verbindungen. Sie arbeiten unabhängig voneinander.

Was während der Instanziierung geschieht

  • Eine Kopie der Hardware wird erstellt
  • Jede Instanz verfügt über ihren eigenen Satz von signals
  • Instanzen laufen parallel (gleichzeitig)
  • Die Signale, die du übergibst, bestimmen, wie Instanzen mit dem Rest deines Designs verbunden werden

Regeln für die Instanziierung

RegelWarum
Der Instanzname muss eindeutig seinUm zwischen Kopien zu unterscheiden
Der Modulname muss existierenEr muss an anderer Stelle definiert sein
Die Anzahl der connections muss mit der Anzahl der ports übereinstimmenAndernfalls weiß Verilog nicht, was womit verbunden ist
Die connections-Reihenfolge muss mit der port-Reihenfolge übereinstimmenDas erste signal wird mit dem ersten port verbunden usw.
challenge icon

Aufgabe

Vervollständige den Code, indem du das or_gate-Modul instanziierst.

Was zu tun ist:

  1. Instanziiere or_gate mit dem Instanznamen or1
  2. Übergebe die Signale in der richtigen Reihenfolge: input_a, input_b, output_y

Probier es selbst

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: Instanziiere or_gate mit dem Namen or1
  // Übergebe die Signale in der Reihenfolge: input_a, input_b, output_y
  // Verwende nicht die .port(signal)-Syntax
  

endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler