Menu
CoddyTech

Input- und Output-Ports

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

Eingangs- und Ausgangsports sind die Verbindungen, über die ein Modul mit der Außenwelt kommunizieren kann. Sie sind wie die Pins auf einem Chip. Ports bilden die Schnittstelle zwischen einem Modul und dem restlichen Design.

Jedes Modul hat:

  • Eingangsports: Signale, die in das Modul hineingehen
  • Ausgangsports: Signale, die aus dem Modul herausgehen

Eingangsports

Eingangsports empfangen Daten von außen. Sie können innerhalb des Moduls nicht geändert werden: Sie können nur gelesen werden.

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

Regeln für Eingänge:

  • Ihnen kann innerhalb des Moduls kein Wert zugewiesen werden
  • Sie können nicht als reg deklariert werden
  • Immer wire (standardmäßig)

Ausgangsports

Ausgangsports senden Daten nach außen. Sie können durch assign- oder always-Blöcke 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:

  • Kann wire (mit assign) oder reg (mit always) sein
  • Muss von etwas innerhalb des Moduls angesteuert werden

Syntax der Portdeklaration

Die Syntax der Portdeklaration ist die spezielle Art, Eingangs- und Ausgangsports in einem Modul zu schreiben. Sie teilt Verilog drei Dinge über jeden Port mit:

  1. Richtung: Ist es ein Eingang, Ausgang oder Ein-/Ausgang?
  2. Größe: Wie viele Bits breit ist es?
  3. Name: Wie heißt es?
module example (
  input [7:0] data_in,    // Eingangsvektor
  input clk,              // Einzelner Eingang
  input enable,           // Einzelner Eingang
  output reg [7:0] out,   // Ausgangsregister
  output busy             // Ausgangsleitung
);

Warum die Port-Richtung wichtig ist

Die Richtung teilt Verilog mit:

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

Die Verwendung der falschen Richtung führt zu Kompilierungsfehlern.

Codebeispiel

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 beschrieben werden (reg)
  output [3:0] diff     // Kann beschrieben 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 Portdeklarationen

Aufgabe:

  1. Füge einen 8-Bit-Eingang namens data_in hinzu
  2. Füge einen Ein-Bit-Eingang namens clk hinzu
  3. Füge einen 4-Bit-Ausgang namens result hinzu (verwende reg: wird im always-Block zugewiesen)
  4. Füge einen Ein-Bit-Ausgang namens 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

Übe selbstständig: Online-Verilog-Compiler