Menu
Coddy logo textTech

Input And Output Ports

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

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

Jedes module hat:

  • Input ports: Signale, die in das module hineinkommen
  • Output ports: Signale, die aus dem module herausgehen

Input-Ports

Input-Ports empfangen Daten von außerhalb. Sie können innerhalb des Moduls nicht geändert werden: nur gelesen.

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:

  • Kann innerhalb des module kein Wert zugewiesen werden
  • Kann 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 gesteuert werden

Syntax für Portdeklarationen

Die Syntax für Portdeklarationen ist die spezifische Schreibweise für input- und output-Ports in einem module. Sie teilt Verilog drei Dinge über jeden Port mit:

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

Warum die Port-Richtung wichtig ist

Die Richtung teilt Verilog Folgendes mit:

  • Welche Signale das Modul read kann (inputs)
  • Welche Signale das Modul write kann (outputs)
  • Welche Arten von Verbindungen zulässig sind

Die Verwendung der falschen Richtung verursacht Kompilierungsfehler.

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 schreiben (reg)
  output [3:0] diff     // Kann schreiben (wire)
);
  always @(*) begin
    sum = a + b;        // Schreiben in output reg
  end
  
  assign diff = a - b;   // Schreiben in output wire
endmodule
challenge icon

Aufgabe

Portdeklarationen vervollständigen

Was zu tun ist:

  1. Add einen 8-Bit-input namens data_in hinzu
  2. Add einen single-Bit-input namens clk hinzu
  3. Add einen 4-Bit-output namens result hinzu (reg verwenden: wird im always-Block zugewiesen)
  4. Add einen single-Bit-output namens valid hinzu (wire verwenden: 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