Menu
Coddy logo textTech

Eingangs- und Ausgangs-Ports

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

Eingangs- und Ausgangsports sind die Verbindungen, die es einem Modul ermöglichen, mit der Außenwelt zu kommunizieren. Sie sind wie die Pins auf einem Chip. Ports sind die Schnittstelle zwischen einem Modul und dem Rest des Designs.

Jedes Module hat:

  • Eingangs-Ports — Signale, die in das Module hineingehen
  • Ausgangs-Ports — Signale, die aus dem Module herausgehen

Eingangsports (Input Ports)

Eingangsports (input) empfangen Daten von außerhalb. Sie können innerhalb des Moduls nicht geändert werden — sie können only gereaden werden.

input clk;        // Ein-Bit-Eingang
input [7:0] data; // 8-Bit-Eingangsvektor
input a, b;       // Mehrere Eingänge in einer Zeile

Regeln für Inputs:

  • Können innerhalb des Moduls keinen Wert zugewiesen bekommen
  • Können nicht als reg deklariert werden
  • Sind immer wire (standardmäßig)

Output Ports

Output ports senden Daten nach außen. Sie können von assign- oder always-Blöcken angesteuert werden.

output out;           // Ein-Bit-Ausgang
output [3:0] result;  // 4-Bit-Ausgang
output reg busy;      // Ausgang kann reg sein
output wire ready;    // Ausgang kann wire sein

Regeln für Ausgänge:

  • Können wire (mit assign) oder reg (mit always) sein
  • Müssen von etwas innerhalb des Moduls angesteuert werden

Port-Deklarationssyntax

Die Port-Deklarationssyntax ist die spezifische Art und Weise, wie Sie Eingangs- und Ausgangsports in einem Modul schreiben. Sie teilt Verilog drei Dinge über jeden Port mit:

  1. Richtung — ist es input, output oder inout?
  2. Größe — wie viele bit breit ist es?
  3. Name — wie wird es called?
module example (
  input [7:0] data_in,    // Eingangsvektor
  input clk,              // Einzelner Eingang
  input enable,           // Einzelner Eingang
  output reg [7:0] out,   // Ausgangs-reg
  output busy             // Ausgangs-wire
);

Warum die Portrichtung wichtig ist

Die Richtung sagt Verilog:

  • Welche Signale das Modul lesen kann (Eingänge)
  • Welche Signale das Modul schreiben kann (Ausgänge)
  • Welche Arten von Verbindungen erlaubt sind

Die Verwendung der falschen Richtung führt zu Kompilierungsfehlern.

Code-Beispiel

module port_demo (
  input [3:0] a,        // Kann nur gelesen werden
  input [3:0] b,        // Kann nur gelesen werden
  output reg [3:0] sum, // Kann geschrieben werden (reg)
  output [3:0] diff     // Kann geschrieben werden (wire)
);
  always @(*) begin
    sum = a + b;        // Schreiben in output reg
  end
  
  assign diff = a - b;   // Schreiben in output wire
endmodule
challenge icon

Aufgabe

Vervollständige die Port-Deklarationen

Was zu tun ist:

  1. Füge einen 8-bit-input called data_in hinzu
  2. Füge einen single-bit-input called clk hinzu
  3. Füge einen 4-bit-output called result hinzu (verwende reg — wird im always-Block zugewiesen)
  4. Füge einen single-bit-output called valid hinzu (verwende wire — wird mit assign zugewiesen)

Probier es selbst

module port_challenge (
  // Aufgabe 1: Füge einen 8-Bit-Eingang namens data_in hinzu
  
  
  // Aufgabe 2: Füge einen 1-Bit-Eingang namens clk hinzu
  
  
  // Aufgabe 3: Füge einen 4-Bit-Ausgang namens result hinzu (verwende reg)
  
  
  // Aufgabe 4: Füge einen 1-Bit-Ausgang namens valid hinzu (verwende wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
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