Menu

Cos'è Verilog? Guida per principianti al linguaggio di descrizione hardware

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.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Un linguaggio per descrivere circuiti

La maggior parte dei linguaggi che conosci (Python, JavaScript, Go) descrive una sequenza di istruzioni che una CPU deve eseguire. Verilog descrive un circuito. Scrivi quali wire esistono, quali registri esistono e come i segnali scorrono tra di loro. Un simulatore può poi riprodurre il comportamento del circuito, e uno strumento di sintesi può compilare lo stesso testo nelle porte e nei flip-flop di un chip reale.

Questa è la definizione in una riga. Le conseguenze richiedono più tempo per essere assimilate.

Quel frammento sembra un programmino: un module, un blocco initial, un task di sistema $display. Premi Esegui e vedrai hello from verilog. Dietro le quinte, però, il simulatore non sta eseguendo una funzione: finge che il tempo passi e fa avanzare il circuito passo dopo passo. Ecco perché vedrai $finish ovunque: qualcuno deve dire al simulatore di fermarsi.

Cosa significa davvero "descrizione hardware"

Una riga di C viene eseguita quando il program counter la raggiunge. Una riga di Verilog descrive un pezzo di circuito che esiste sempre. Considera:

assign y = a & b;

Non significa "calcola y una volta". Significa "esiste un wire y e in ogni istante è uguale ad a AND b". Se cambi a o b, y si adegua subito. Più istruzioni assign in un modulo non sono una sequenza: sono descrizioni parallele di parti diverse del circuito.

Questa è la caratteristica distintiva di Verilog e l'origine di ogni bug da principiante. Quasi tutto ciò che scrivi descrive cose che avvengono in parallelo, e i pochi costrutti che sembrano istruzioni ordinate (dentro i blocchi initial e always) lo sembrano solo perché il simulatore finge.

Cosa costruisci con Verilog

Troverai Verilog a ogni livello dello stack digitale:

  • Logica combinatoria. Sommatori, multiplexer, decoder, porzioni di ALU: qualsiasi cosa in cui l'uscita dipende solo dagli ingressi attuali.
  • Logica sequenziale. Contatori, shift register, macchine a stati finiti, qualsiasi cosa sincronizzata da un posedge clk.
  • Core di processore. Dalle CPU dei compiti universitari ai core RISC-V open source che finiscono nel silicio reale, l'RTL è di solito Verilog o SystemVerilog.
  • Progetti per FPGA. La logica caricata su una FPGA Xilinx o Intel (networking, elaborazione di immagini, controllo embedded) è scritta in larghissima parte in Verilog.
  • ASIC. I chip su misura dentro il tuo telefono, il tuo router, la tua auto: il design front-end è in HDL, e Verilog è una delle due scelte dominanti.

Per imparare non ti serve niente di questo hardware. Tutto ciò che trovi in queste guide gira in un simulatore nel browser.

Simulazione e sintesi

Ci sono due modi di "eseguire" Verilog, e non sono la stessa cosa:

  • La simulazione riproduce il comportamento del circuito via software. Il simulatore (Icarus Verilog, Verilator, ModelSim, strumenti commerciali) legge i tuoi moduli più un testbench, cioè il codice che pilota gli ingressi, e produce un output: log di testo, forme d'onda, report pass/fail.
  • La sintesi prende un sottoinsieme di Verilog e lo compila in una netlist di porte reali. Uno strumento del produttore (Vivado, Quartus, strumenti tipo design-compiler nelle grandi aziende) si occupa della mappatura. Il Verilog sintetizzato deve rispettare regole in più: i blocchi initial e le chiamate a $display non esistono nel silicio.

L'editor nel browser di queste pagine fa simulazione. È tutto ciò che ti serve finché non produci un chip vero o programmi una FPGA.

Verilog vs SystemVerilog

Se ti metti a cercare, troverai entrambi i nomi. SystemVerilog è un superset: mantiene ogni costrutto di Verilog e aggiunge funzionalità pensate soprattutto per la verifica (classi, test casuali con vincoli, asserzioni, interfacce, un sistema di tipi molto più ricco). Tutto ciò che impari qui è SystemVerilog valido. Nella pratica i due nomi si confondono; la maggior parte degli strumenti accetta entrambi e la maggior parte dei file termina comunque in .v. In queste guide diremo sempre "Verilog".

Verilog vs VHDL

Sono entrambi linguaggi di descrizione hardware. Sono entrambi standard IEEE. Esistono entrambi dagli anni '80. Le differenze:

  • Sintassi. Verilog deriva dal C: parentesi graffe, parole chiave concise, regole sui tipi più permissive. VHDL deriva da Ada: più prolisso, molto più rigido sui tipi.
  • Geografia. Verilog domina nella progettazione commerciale negli Stati Uniti. VHDL è ancora diffuso in Europa, nel settore della difesa e nelle codebase più vecchie.
  • Capacità. Sono più o meno equivalenti in ciò che possono esprimere. Scegli in base a ciò che usa il tuo team.

Se stai imparando un HDL per la prima volta, Verilog ha la curva più dolce: sintassi più piccola, più permissiva, e online c'è una raccolta di esempi più ampia.

Come queste guide eseguono Verilog

L'editor qui sotto usa Icarus Verilog (iverilog) dietro le quinte. Compila il tuo sorgente in un simulatore e lo esegue in una sandbox. Non servono licenze Vivado, installazioni di Quartus o schede FPGA. Scrivi un modulo più un piccolo testbench, premi Esegui e vedi l'output e la forma d'onda.

Questo è un contatore a 4 bit completo più un testbench. Il modulo counter è il design sotto test (DUT); il modulo test fa oscillare il clock, rilascia il reset e stampa il valore a ogni ciclo. Eseguilo e vedrai count salire da 0 a 15 e poi ripartire. Apri la scheda Waveform e vedrai la stessa cosa sotto forma di transizioni di tensione.

Cosa viene dopo

Hai abbastanza contesto per iniziare a scrivere moduli. La prossima guida, Hardware e software, dedica un po' più di tempo al cambio di modello mentale, perché è il singolo inciampo più grande per chi inizia con Verilog. Poi vedremo come installare un simulatore locale (facoltativo, il browser va benissimo), come scrivere il tuo primo modulo da zero e il resto del linguaggio.

Procedi con calma. La sintassi è piccola; il vero lavoro è il modello mentale.

Domande frequenti

Cos'è Verilog in parole semplici?

Verilog è un linguaggio di descrizione hardware (HDL) che si usa per descrivere circuiti digitali sotto forma di testo. Invece di scrivere istruzioni che una CPU esegue, descrivi wire, registri, porte logiche e come i segnali scorrono tra di essi. Un simulatore esegue poi la descrizione, così puoi verificarne il comportamento, e uno strumento di sintesi può trasformare la stessa descrizione nel layout di un chip vero.

A cosa serve Verilog?

Verilog serve a progettare e verificare hardware digitale: CPU, GPU, switch di rete, controller di memoria, blocchi di elaborazione del segnale, progetti per FPGA, cioè qualsiasi cosa costruita con porte e flip-flop. Si usa anche in pura simulazione per insegnare la logica digitale e prototipare progetti prima di produrre il silicio.

Verilog è un linguaggio di programmazione?

Non nel senso comune. Il codice Verilog descrive la struttura e il comportamento dell'hardware (segnali, porte e memoria sincronizzata dal clock) invece di una sequenza di istruzioni per la CPU. Molte delle righe che scrivi avvengono in parallelo sul chip, non una dopo l'altra. Questo cambio di mentalità è l'ostacolo più grande quando si passa dal software a Verilog.

Qual è la differenza tra Verilog e SystemVerilog?

SystemVerilog è un superset di Verilog. Mantiene tutta la sintassi di Verilog e aggiunge funzionalità pensate soprattutto per la verifica: classi, stimoli casuali con vincoli, asserzioni, interfacce e tipi di dati più ricchi. Gli strumenti che accettano SystemVerilog accettano anche il Verilog classico. Per la maggior parte del lavoro introduttivo i due sembrano identici.

Qual è la differenza tra Verilog e VHDL?

Verilog e VHDL sono entrambi linguaggi di descrizione hardware che risolvono lo stesso problema. La sintassi di Verilog deriva dal C ed è più concisa; quella di VHDL deriva da Ada ed è più prolissa e rigida sui tipi. L'uso nel settore varia per regione e per team: sono vivi entrambi e sono entrambi standardizzati (IEEE 1364/1800 per Verilog/SystemVerilog, IEEE 1076 per VHDL).

Verilog è difficile da imparare?

La sintassi è ridotta, più piccola di quella del C++. La parte difficile è disimparare le abitudini del software. In Verilog la maggior parte delle istruzioni descrive cose che avvengono nello stesso momento, non in sequenza, e un'assegnazione blocking messa al posto di una non-blocking può decidere se il tuo circuito funziona o no. Aspettati che la prima settimana sia un po' disorientante prima che tutto torni.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA