Menu
Coddy logo textTech

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 arrivano al 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: possono solo essere lette.

input clk;        // Ingresso a bit singolo
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
  • 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 bit singolo
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 gli output:

  • Può essere wire (con assign) oppure reg (con always)
  • Deve essere pilotato 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 di output in un modulo. Indica a Verilog tre cose su ciascuna 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             // Filo 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 connessioni 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 nell'output reg
  end
  
  assign diff = a - b;   // Scrittura nell'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 1 bit chiamato clk
  3. Aggiungi un'uscita a 4 bit chiamata result (usa reg: verrà assegnata nel blocco always)
  4. Aggiungi un'uscita a 1 bit chiamata valid (usa wire: verrà assegnata con assign)

Provalo tu

module port_challenge (
  // Tarea 1: Añade una entrada de 8 bits llamada data_in
  
  
  // Tarea 2: Añade una entrada de un solo bit llamada clk
  
  
  // Tarea 3: Añade una salida de 4 bits llamada result (usa reg)
  
  
  // Tarea 4: Añade una salida de un solo bit llamada 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