Menu
CoddyTech

Porte di input e output

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 31 di 90.

Le porte di input e output sono le connessioni che permettono a un modulo di comunicare con il mondo esterno. Sono come i pin di un chip. Le porte sono l’interfaccia tra un modulo e il resto del progetto.

Ogni modulo ha:

  • Porte di ingresso: segnali che entrano nel modulo
  • Porte di uscita: segnali che escono dal modulo

Porte di ingresso

Le porte di ingresso ricevono dati dall'esterno. Non possono essere modificate all'interno del modulo: si possono solo leggere.

input clk;        // Ingresso a un solo bit
input [7:0] data; // Vettore di ingresso a 8 bit
input a, b;       // Più ingressi su una sola riga

Regole per gli input:

  • Non è possibile assegnare un valore all'interno del modulo
  • Non è possibile dichiararli come reg
  • Sono sempre wire (per impostazione predefinita)

Porte di uscita

Le porte di uscita inviano dati all'esterno. Possono essere pilotate da blocchi assign o always.

output out;           // Uscita a un solo bit
output [3:0] result;  // Uscita a 4 bit
output reg busy;      // L'uscita può essere reg
output wire ready;    // L'uscita può essere wire

Regole per le uscite:

  • Può essere wire (con assign) oppure reg (con always)
  • Deve essere pilotata da qualcosa all'interno del modulo

Sintassi della dichiarazione delle porte

La sintassi della dichiarazione delle porte è il modo specifico in cui si scrivono le porte di input e output in un modulo. Indica a Verilog tre cose su ogni porta:

  1. Direzione: è input, output o inout?
  2. Dimensione: quanti bit è largo?
  3. Nome: come si chiama?
module example (
  input [7:0] data_in,    // Vettore di ingresso
  input clk,              // Ingresso singolo
  input enable,           // Ingresso singolo
  output reg [7:0] out,   // Registro di uscita
  output busy             // Segnale di uscita
);

Perché la direzione delle porte è importante

La direzione indica a Verilog:

  • Quali segnali il modulo può leggere (ingressi)
  • Quali segnali il modulo può scrivere (uscite)
  • Quali tipi di collegamenti sono consentiti

Usare la direzione sbagliata causa errori di compilazione.

Esempio di codice

module port_demo (
  input [3:0] a,        // Si può solo leggere
  input [3:0] b,        // Si può solo leggere
  output reg [3:0] sum, // Si può scrivere (reg)
  output [3:0] diff     // Si può scrivere (wire)
);
  always @(*) begin
    sum = a + b;        // Scrittura sull'output reg
  end
  
  assign diff = a - b;   // Scrittura sull'output wire
endmodule
challenge icon

Sfida

Completa le dichiarazioni delle porte

Cosa fare:

  1. Aggiungi un ingresso a 8 bit chiamato data_in
  2. Aggiungi un ingresso a un bit chiamato clk
  3. Aggiungi un’uscita a 4 bit chiamata result (usa reg: verrà assegnata nel blocco always)
  4. Aggiungi un’uscita a un bit chiamata valid (usa wire: verrà assegnata con assign)

Provalo tu

module port_challenge (
  // Compito 1: Aggiungi un ingresso a 8 bit chiamato data_in
  
  
  // Compito 2: Aggiungi un ingresso a un bit chiamato clk
  
  
  // Compito 3: Aggiungi un'uscita a 4 bit chiamata result (usa reg)
  
  
  // Compito 4: Aggiungi un'uscita a un bit chiamata valid (usa wire)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online