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);| 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.
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);
endmoduleOgni 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
| Regola | Perché |
|---|---|
| Il nome dell'istanza deve essere univoco | Per distinguere le copie |
| Il nome del modulo deve esistere | Deve essere definito altrove |
| Il numero di connessioni deve corrispondere al numero di porte | Altrimenti Verilog non sa cosa è collegato a cosa |
| L'ordine delle connessioni 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 di 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