Documentazione Verilog
Guida di riferimento a Verilog concisa e ricca di esempi. Leggi il concetto, guarda il codice e poi mettilo in pratica in un percorso Coddy.
Inizia un percorso guidato di VerilogGetting Started
- Cos'è Verilog?Un'introduzione a Verilog in parole semplici: cos'è, a cosa serve, in cosa si differenzia da un normale linguaggio di programmazione e perché i progettisti digitali lo usano ancora dopo 40 anni.
- Hardware vs SoftwarePerché Verilog disorienta chi arriva dai linguaggi software: concorrenza per default, il tempo come concetto di prima classe e istruzioni che non vengono eseguite in ordine.
- Installare VerilogInstalla Icarus Verilog e GTKWave per compilare e simulare Verilog in locale. Oppure salta l'installazione e usa l'editor nel browser: per questa documentazione vanno bene entrambi.
- Il tuo primo moduloScrivi da zero il tuo primo modulo Verilog completo: dichiarazione, porte, un pezzo di logica combinatoria e un testbench che lo pilota. Eseguibile nel browser.
- CommentiCome scrivere commenti su una riga e su più righe in Verilog, più i pattern di documentazione che i progettisti digitali usano per mantenere leggibili i moduli man mano che crescono.
Data Types & Numbers
- Wire e regI due tipi di dato principali di Verilog, `wire` per le connessioni continue e `reg` per la memorizzazione procedurale, e la regola per scegliere ogni volta quello giusto.
- Vettori e arrayCome dichiarare segnali multi-bit con `[7:0]`, estrarne porzioni, combinarli, e la differenza tra un vettore packed e un array di memoria.
- ParametriCome usare `parameter` e `localparam` per definire costanti in fase di compilazione, parametrizzare larghezze e profondità e sovrascrivere i valori quando istanzi un modulo.
- Letterali numericiCome si scrivono le costanti in Verilog: con e senza dimensione, le basi `'b` `'h` `'d` `'o`, i numeri con segno, i trattini bassi per la leggibilità e le trappole in cui cade chi inizia.
- Valori X e ZI segnali di Verilog hanno quattro valori possibili, non due. Ecco cosa significano davvero `x` (sconosciuto) e `z` (alta impedenza) in simulazione e come fare il debug.
Operators
- OperatoriGli operatori fondamentali di Verilog (aritmetici, di confronto, logici e il condizionale `?:`) con le regole e le trappole legate a larghezze diverse e al segno.
- Bitwise e riduzioneGli operatori a livello di bit in Verilog: AND/OR/XOR bit a bit, le forme invertite e gli operatori di riduzione che comprimono un intero vettore in un solo bit.
- Concatenazione e replicazioneCome unire segnali con `{}` e copiare un pattern N volte con `{N{...}}`: gli operatori di Verilog indispensabili per costruire bus più larghi a partire da pezzi.
Modules & Structure
- Porte dei moduliCome dichiarare le porte di un modulo (input, output e inout), l'elenco delle porte in stile ANSI e quando un'uscita deve essere `wire` o `reg`.
- Istanziazione di moduliCome istanziare un modulo dentro un altro, la differenza tra collegamenti delle porte per nome e per posizione, e i pattern a istanze multiple che userai per costruire progetti reali.
- Assegnazione continuaCome funziona `assign`: la relazione sempre vera che descrive, cosa può e non può pilotare, e i pattern in cui dà il meglio rispetto al codice procedurale.
Procedural Blocks
- Blocco alwaysCome funzionano i blocchi `always`, la differenza tra `always @(*)` combinatorio e `always @(posedge clk)` sincronizzato dal clock, e le regole che decidono quale hardware produce ciascuno.
- Blocco initialIn cosa i blocchi `initial` differiscono da `always`, perché esistono solo in simulazione e i pattern comuni in cui si usano: stimoli, setup delle forme d'onda, intestazioni dei log.
- Blocking vs Non-blockingL'argomento che confonde di più chi inizia con Verilog. Cosa significano davvero `=` e `<=` dentro un blocco `always`, e la regola che evita la maggior parte delle race condition.
Control Flow
- If-ElseCome funziona `if`/`else` dentro un blocco `always`, la trappola del latch in cui cade chi inizia e l'hardware a priorità prodotto dalle catene di `else if`.
- Istruzione caseCome funziona `case` per una decodifica a più vie pulita, il `default` da non saltare mai e le differenze tra `case`, `casex` e `casez`.
- Cicli forIn cosa i cicli `for` di Verilog differiscono dai loro cugini software: il sintetizzatore li srotola in hardware parallelo invece di eseguirli iterazione per iterazione a runtime.
Sequential Logic & FSMs
- Logica sincronaCome costruire registri, contatori, shift register e pipeline con blocchi `always` sincronizzati dal clock: il pattern portante di ogni progetto digitale sincrono.
- Macchine a stati finitiCome scrivere una FSM in Verilog come fanno i professionisti: un registro di stato sincronizzato dal clock, un blocco combinatorio per lo stato successivo e una separazione netta, facile da leggere e da sintetizzare.
Testbenches & Simulation
- Basi dei testbenchCome scrivere un testbench in Verilog: generazione del clock, sequenza di reset, stimoli, osservazione e lo scheletro standard che guida ogni simulazione che eseguirai.
- Display e MonitorCome funzionano `$display`, `$write` e `$monitor`: gli specificatori di formato che userai, le differenze tra loro e quando ciascuno è lo strumento giusto.
- Dumpfile e VCDCome aggiungere a un testbench l'output delle forme d'onda VCD: `$dumpfile`, `$dumpvars`, la scelta dello scope e come visualizzare il file risultante in GTKWave o nell'editor del browser.
- Timescale e ritardiCome la direttiva `` `timescale `` fissa l'unità di `#delay`, le regole per combinare unità diverse tra file e come i ritardi interagiscono con la logica sincronizzata dal clock.