Menu
Coddy logo textTech

Port-Mapping nach Name

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

In der vorherigen Lektion haben Sie gelernt, wie Sie ein Modul instanziieren, indem Sie Signale in der gleichen Reihenfolge übergeben, wie die Ports in der Moduldefinition erscheinen. Das funktioniert, hat aber ein Problem: Die Reihenfolge ist wichtig.

Wenn Sie versehentlich die Reihenfolge vertauschen, werden Signale mit den falschen Ports verbunden. Das kann schwer zu debuggen sein.

Das Problem mit der Zuordnung nach Reihenfolge (Order Mapping)

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

// Reihenfolge-Zuordnung - Reihenfolge MUSS übereinstimmen
or_gate or1 (input_a, input_b, output_y);  // Korrekt
or_gate or1 (input_b, input_a, output_y);  // Falsch! Vertauschte Eingänge

Die zweite Zeile verbindet input_b mit in1 und input_a mit in2 — ein subtiler Fehler, der leicht übersehen werden kann.

Lösung: Port-Mapping nach Name

Port-Mapping nach Name verwendet den port_name, um Verbindungen herzustellen. Die Reihenfolge spielt keine Rolle, da jede Verbindung explizit gekennzeichnet ist.

Syntax:

module_name instance_name (
  .port_name(signal),
  .port_name(signal)
);

Der Punkt . vor dem Port-Namen zeigt an, dass wir sich auf einen Port innerhalb des Moduls beziehen. Das Signal in den Klammern ist das, was wir damit verbinden.

Beispiel

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

Dies besagt explizit:

  • Port in1 erhält das Signal input_a
  • Port in2 erhält das Signal input_b
  • Port result erhält das Signal output_y

Reihenfolge spielt keine Rolle

Beim Port-Mapping nach Namen können Sie die Verbindungen in beliebiger Reihenfolge schreiben:

// Alle drei sind IDENTISCH

or_gate or1 (
  .in1(input_a),
  .in2(input_b),
  .result(output_y)
);

or_gate or1 (
  .result(output_y),
  .in1(input_a),
  .in2(input_b)
);

or_gate or1 (
  .in2(input_b),
  .result(output_y),
  .in1(input_a)
);

Alle bewirken exakt dasselbe, da jede Verbindung beschriftet ist.

challenge icon

Aufgabe

Vervollständigen Sie die Instanziierung, indem Sie die fehlenden Port-Verbindungen mittels port mapping by name hinzufügen.

Was zu tun ist:

  1. Verbinden Sie den Port clk mit dem Signal clock_signal
  2. Verbinden Sie den Port data_in mit dem Signal input_data
  3. Verbinden Sie den Port data_out mit dem Signal output_data

Probier es selbst

module register (
  input clk,
  input [7:0] data_in,
  output reg [7:0] data_out
);
  always @(posedge clk) begin
    data_out <= data_in;
  end
endmodule

module top (
  input clock_signal,
  input [7:0] input_data,
  output [7:0] output_data
);
  
  register reg1 (
    // TODO: Port-Zuordnungen mit der Syntax .port(signal) hinzufügen
  );
  
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