Menu
Coddy logo textTech

Istanziazione di un modulo

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

L'istanziazione di un modulo è il processo di creazione di una copia di un modulo all'interno di un altro modulo. È così che realizzi progetti più grandi collegando insieme componenti più piccoli.

Una volta definito un modulo, puoi usarlo all'interno di un altro modulo. Questo si chiama istanziazione. Ogni istanziazione crea un'istanza separata di quel modulo. Pensalo come 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.

Devi passare i segnali al modulo. Le parentesi non possono essere vuote. Il numero di segnali deve corrispondere al numero di porte.

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 il 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 vengono eseguite in parallelo (simultaneamente)
  • I segnali che passi determinano come le istanze si collegano al resto del tuo progetto

Regole per l'istanziazione

RegolaPerché
Il nome dell'istanza deve essere univocoPer distinguere le copie
Il nome del modulo deve esistereDeve essere definito altrove
Il numero di connessioni deve corrispondere al numero di porteAltrimenti Verilog non sa cosa è collegato a cosa
L'ordine delle connessioni 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 di 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