Menu
Coddy logo textTech

Port Mapping By Name

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

In der vorherigen Lektion hast du gelernt, wie man ein Modul instanziiert, indem man Signale in derselben Reihenfolge übergibt, in der die Ports in der Moduldefinition erscheinen. Das funktioniert, hat aber ein Problem: die Reihenfolge ist entscheidend.

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

Das Problem mit der Positionszuordnung

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);  // Richtig
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 wird.

Lösung: Port-Zuordnung nach Namen

Die Port-Zuordnung nach Namen verwendet den Portnamen, um Verbindungen herzustellen. Die Reihenfolge spielt keine Rolle, da jede Verbindung ausdrücklich gekennzeichnet ist.

Syntax:

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

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

Beispiel

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

Dies besagt ausdrücklich:

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

Die Reihenfolge spielt keine Rolle

Bei der Portzuordnung nach Namen kannst du 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 machen genau dasselbe, weil jede Verbindung beschriftet ist.

challenge icon

Aufgabe

Vervollständige die Instanziierung, indem du die fehlenden Portverbindungen mithilfe von Portzuordnung nach Namen hinzufügst.

Aufgabe:

  1. Verbinde den Port clk mit dem Signal clock_signal
  2. Verbinde den Port data_in mit dem Signal input_data
  3. Verbinde 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 .port(signal)-Syntax 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

Übe selbstständig: Online-Verilog-Compiler