Menu
CoddyTech

Istanziazione di un modulo

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

L’istanza di un modulo è il processo di creare una copia di un modulo all’interno di un altro modulo. È così che puoi realizzare progetti più grandi collegando tra loro componenti più piccoli.

Una volta definito un modulo, puoi usarlo all’interno di un altro modulo. Questa operazione si chiama istanziazione. Ogni istanziazione crea un’istanza separata di quel modulo. Immagina di usare un progetto per costruire più copie dello stesso componente.

Sintassi di base

module_name instance_name (connections);
ParteSignificato
module_nameNome del modulo da istanziare
instance_nameNome univoco per questa copia
connectionsSegnali collegati alle porte del modulo

Esempio semplice

Passaggio 1: Definisci un modulo

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

Passaggio 2: Istanzialo in un altro modulo

module top (
  input x,
  input y,
  output z
);
  and_gate gate1 (x, y, z);
endmodule

Ecco cosa succede in questo codice:

  • and_gate: il nome del modulo che vogliamo usare (deve esistere da qualche parte)
  • gate1: un nome univoco che assegniamo a questa specifica istanza
  • (x, y, z): i segnali che colleghiamo alle porte del modulo (nello stesso ordine in cui compaiono nella definizione del modulo)

Il primo segnale x si collega alla prima porta a. Il secondo segnale y si collega alla seconda porta b. Il terzo segnale z si collega alla terza porta c.

Passa un segnale per ciascuna porta. Verilog accetta anche meno segnali, persino parentesi vuote, ma ogni porta senza un segnale rimane scollegata e non è collegata a nulla nel tuo progetto. Passare più segnali di quante siano le porte del modulo è un errore.

Istanze multiple

Puoi creare più copie dello stesso modulo:

module top;
  wire out1, out2;
  wire sig1, sig2, sig3, sig4;
  
  and_gate gate1 (sig1, sig2, out1);
  and_gate gate2 (sig3, sig4, out2);
endmodule

Ogni istanza ha un proprio nome (gate1, gate2) e i propri collegamenti. Funzionano in modo indipendente.

Cosa succede durante l’istanziazione

  • Viene creata una copia dell’hardware
  • Ogni istanza ha il proprio insieme di segnali
  • Le istanze funzionano in parallelo (simultaneamente)
  • I segnali che passi determinano il modo in cui le istanze si collegano al resto del tuo progetto

Regole di istanziazione

RegolaMotivo
Il nome dell'istanza deve essere univocoPer distinguere le copie
Il nome del modulo deve esistereDeve essere definito altrove
Passa un segnale per portaUna porta senza segnale rimane scollegata; un numero di segnali superiore a quello delle porte costituisce un errore
L'ordine dei collegamenti deve corrispondere all'ordine delle porteIl primo segnale si collega alla prima porta, ecc.
challenge icon

Sfida

Completa il codice istanziando il modulo or_gate.

Cosa fare:

  1. Istanzia or_gate con il nome dell'istanza or1
  2. Passa i segnali nell'ordine corretto: input_a, input_b, output_y

Provalo tu

module or_gate (
  input in1,
  input in2,
  output result
);
  assign result = in1 | in2;
endmodule

module top (
  input input_a,
  input input_b,
  output output_y
);
  
  // TODO: Istanzia or_gate con il nome or1
  // Passa i segnali nell'ordine: input_a, input_b, output_y
  // Non usare la sintassi .port(signal)
  

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