Menu
CoddyTech

Modulinstanziierung

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

Die Modulinstanziierung ist der Vorgang, eine Kopie zu erstellen eines Moduls innerhalb eines anderen Moduls. So baust du größere Entwürfe, indem du kleinere Komponenten miteinander verbindest.

Sobald du ein Modul definiert hast, kannst du es innerhalb eines anderen Moduls verwenden. Das nennt man Instanziierung. Jede Instanziierung erzeugt eine separate Instanz dieses Moduls. Stell es dir so vor, als würdest du mit einem Bauplan mehrere Kopien derselben Komponente erstellen.

Grundlegende Syntax

module_name instance_name (connections);
BestandteilBedeutung
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

Folgendes passiert in diesem Code:

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

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

Übergib für jeden Port ein Signal. Verilog akzeptiert auch weniger Signale oder sogar leere Klammern, aber jeder Port ohne Signal bleibt unverbunden und ist mit nichts in deinem Entwurf verbunden. Mehr Signale zu übergeben, als das Modul Ports hat, ist ein Fehler.

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 funktionieren unabhängig voneinander.

Was während der Instanziierung geschieht

  • Es wird eine Kopie der Hardware erstellt
  • Jede Instanz hat ihren eigenen Satz von Signalen
  • Instanzen laufen parallel (gleichzeitig)
  • Die Signale, die du übergibst, bestimmen, wie Instanzen mit dem Rest deines Entwurfs verbunden sind.

Regeln für die Instanziierung

RegelWarum
Der Instanzname muss eindeutig seinUm Kopien voneinander zu unterscheiden
Der Modulname muss existierenMuss an anderer Stelle definiert sein
Pro Port ein Signal übergebenEin Port ohne Signal bleibt unverbunden, und mehr Signale als Ports sind ein Fehler
Die Verbindungsreihenfolge muss der Portreihenfolge entsprechenDas erste Signal wird mit dem ersten Port verbunden usw.
challenge icon

Aufgabe

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

Aufgabe:

  1. Instanziiere or_gate mit dem Instanznamen or1.
  2. Übergib 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
  // Übergib die Signale in dieser 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