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);| Parte | Significato |
|---|---|
module_name | Nome del modulo da istanziare |
instance_name | Nome univoco per questa copia |
connections | Segnali 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;
endmodulePassaggio 2: Istanzialo in un altro modulo
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleEcco 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);
endmoduleOgni 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
| Regola | Motivo |
|---|---|
| Il nome dell'istanza deve essere univoco | Per distinguere le copie |
| Il nome del modulo deve esistere | Deve essere definito altrove |
| Passa un segnale per porta | Una 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 porte | Il primo segnale si collega alla prima porta, ecc. |
Sfida
Completa il codice istanziando il modulo or_gate.
Cosa fare:
- Istanzia
or_gatecon il nome dell'istanzaor1 - 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)
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online