- 1 1. Cos’è Verilog? Panoramica e casi d’uso
- 2 2. Sintassi di base e concetti di Verilog
- 3 3. Caratteristiche Chiave di Verilog
- 4 4. Esempi Pratici di Progettazione con Verilog
- 5 5. Risorse e Strumenti per Imparare Verilog
- 6 6. FAQ sull’Apprendimento di Verilog
- 7 7. Passare al Passo Successivo con Verilog
1. Cos’è Verilog? Panoramica e casi d’uso
Definizione di base di Verilog
Verilog è uno dei linguaggi di descrizione hardware (HDL) utilizzati per progettare circuiti digitali. Mentre i linguaggi di programmazione software descrivono programmi per computer, Verilog è usato per descrivere il comportamento di circuiti e sistemi digitali. Utilizzando questo linguaggio, è possibile semplificare progetti di circuiti complessi ed eseguire in modo efficiente simulazioni e sintesi (conversione in un circuito fabbricabile).
Verilog è stato sviluppato nel 1984 e standardizzato dall’IEEE (Institute of Electrical and Electronics Engineers) nel 1995. Da allora è continuato a evolversi ed è ora ampiamente impiegato per la progettazione di FPGA (Field‑Programmable Gate Array) e ASIC (Application‑Specific Integrated Circuit).
Il ruolo di Verilog nella progettazione di circuiti digitali
La progettazione di circuiti digitali è il processo di costruzione di sistemi che elaborano informazioni usando segnali elettrici. Esempi includono processori e memorie all’interno di smartphone e computer. Verilog funge da strumento efficiente per progettare tali sistemi digitali.
In particolare, è utilizzato in scenari quali:
- Progettazione FPGA : le FPGA sono dispositivi altamente flessibili. Verilog consente agli ingegneri di definire liberamente la funzionalità della FPGA e di riprogrammare il dispositivo secondo necessità.
- Progettazione ASIC : gli ASIC sono circuiti integrati specializzati per applicazioni specifiche. Verilog permette la progettazione di IC personalizzati.
- Simulazione : i circuiti descritti in Verilog possono essere simulati in software per verificare il comportamento in anticipo, consentendo l’individuazione e la correzione precoce di errori di progetto.
Cosa imparerai in questo articolo
Questo articolo fornisce una spiegazione passo‑passo per i principianti che apprendono Verilog per la prima volta o per chi rivede i fondamenti. Gli argomenti includono:
- Sintassi di base e concetti fondamentali di Verilog
- Esempi pratici di progettazione e tecniche di debug
- Risorse utili e raccomandazioni di strumenti
I lettori target includono:
- Principianti che vogliono imparare Verilog o HDL
- Ingegneri che avviano la progettazione di FPGA o ASIC
- Designer o studenti che rivedono le conoscenze di base

2. Sintassi di base e concetti di Verilog
Sintassi e struttura di Verilog
Definizione e utilizzo dei moduli
In Verilog, l’unità più fondamentale è il “modulo”. I moduli rappresentano componenti del circuito e contengono le descrizioni di ingressi, uscite e strutture interne. Di seguito è riportato un esempio di modulo semplice:
module AND_gate (
input wire a, // input a
input wire b, // input b
output wire y // output y
);
assign y = a & b; // AND operation
endmodule
Questo codice esegue un’operazione AND su due ingressi (a e b) e invia il risultato a y. Il modulo è definito usando la parola chiave module e termina con endmodule.
Scelta dei tipi di dato (wire vs. reg)
Verilog utilizza due tipi di dato principali:
- wire : rappresenta un filo fisico. Usato per collegare segnali.
- reg : rappresenta un registro. Usato per memorizzare valori in base a eventi di clock.
Esempio:
module Example (
input wire clk, // clock input
input wire rst, // reset input
input wire a, // input a
output reg y // output y
);
always @(posedge clk or posedge rst) begin
if (rst)
y <= 0; // output = 0 on reset
else
y <= a; // assign input a to output y on clock edge
end
endmodule
Qui, y deve mantenere un valore, quindi si utilizza il tipo reg all’interno di un blocco always.
Strutture di controllo (if, case) e note sulla simulazione
Utilizzo delle istruzioni if
Verilog usa if per il branching condizionale:
always @(posedge clk) begin
if (a == 1'b1)
y <= 1'b0; // set y = 0 when a is 1
else
y <= 1'b1; // otherwise set y = 1
end
Utilizzo delle istruzioni case
Per condizioni a più rami:
always @(state) begin
case (state)
2'b00: y = 1'b0;
2'b01: y = 1'b1;
2'b10: y = 1'b0;
2'b11: y = 1'b1;
default: y = 1'bx; // unknown state
endcase
end
Concetti Essenziali per Principianti
Assegnazioni Blocking vs. Non-Blocking
Verilog offre due tipi di assegnazione:
- Blocking (
=) : Viene eseguito in sequenza. - Non-blocking (
<=) : Viene eseguito in modo concorrente.
Esempio:
always @(posedge clk) begin
a = b; // blocking
c <= d; // non-blocking
end
Pensare in Parallelo
Verilog supporta l’esecuzione parallela:
always @(posedge clk) begin
a <= b + 1;
end
always @(posedge clk) begin
c <= d - 1;
end
Differenza tra Simulazione e Sintesi
- Simulazione : Verifica il comportamento in software.
- Sintesi : Converte il progetto in hardware.
Alcuni costrutti come initial sono solo per la simulazione.
3. Caratteristiche Chiave di Verilog
Punti di Forza e Confronto con Altri HDL
Punti di Forza di Verilog
- Sintassi semplice
- Verilog assomiglia a C, rendendolo facile da apprendere per i programmatori.
- I suoi elementi fondamentali—moduli, tipi di dato, operatori—sono intuitivi.
- Ampio supporto
- Standard negli strumenti FPGA/ASIC come Vivado e ModelSim.
- Ampie comunità di apprendimento e risorse.
- Metodologie di progettazione flessibili
- Supporta la progettazione RTL e altro.
Confronto tra Verilog, VHDL e SystemVerilog
| Language | Features | Use Cases |
|---|---|---|
| Verilog | Simplified syntax, low learning cost. Widely used for FPGA/ASIC. | Rapid prototyping, FPGA design |
| VHDL | Strict grammar, supports robust and precise designs. | Mission-critical systems |
| SystemVerilog | Enhanced version of Verilog. Supports advanced testbenches and class-based design. | Advanced verification and system design |
- Differenza con VHDL : VHDL enfatizza una sintassi rigorosa, mentre Verilog privilegia l’espressione concisa.
- Differenza con SystemVerilog : SystemVerilog aggiunge funzionalità orientate agli oggetti e capacità avanzate di verifica.
Casi d’Uso Pratici di Verilog
Il Ruolo di Verilog nella Progettazione FPGA
Le FPGA sono circuiti integrati programmabili che consentono una configurazione hardware flessibile. Verilog rende possibile progettare logica digitale complessa in modo efficiente. I ruoli chiave includono:
- Prototipazione
- Utilizzato per verificare il comportamento del circuito nelle prime fasi dello sviluppo del prodotto.
- Prototipazione rapida con facile adattamento alle modifiche delle specifiche.
- Verifica Comportamentale
- La simulazione con Verilog aiuta a identificare i problemi di progetto in anticipo.
- Strumenti come ModelSim consentono agli ingegneri di creare testbench e osservare il comportamento del sistema.
Flusso Base della Simulazione del Circuito
I passaggi generali per la simulazione basata su Verilog sono:
- Descrivere il circuito
- Implementare il circuito target usando Verilog.
- Creare un testbench
- I testbench definiscono l’ambiente per verificare il comportamento del circuito.
- Esempio:
module Testbench; reg a, b; wire y; // Instantiate the module under test AND_gate uut ( .a(a), .b(b), .y(y) ); initial begin // Apply test patterns a = 0; b = 0; #10; a = 0; b = 1; #10; a = 1; b = 0; #10; a = 1; b = 1; #10; end endmodule
- Eseguire la simulazione
- Eseguire il testbench in un simulatore e verificare il comportamento atteso.
- Analizzare i risultati
- Esaminare le forme d’onda e identificare i problemi di progetto.

4. Esempi Pratici di Progettazione con Verilog
Apprendere Attraverso Codice Verilog di Esempio
Esempio di Progetto di Contatore (con Spiegazione del Codice)
I contatori sono componenti fondamentali nella progettazione digitale. Ecco un semplice contatore che incrementa in base a un segnale di clock:
module Counter (
input wire clk, // clock input
input wire rst, // reset input
output reg [3:0] count // 4-bit counter output
);
always @(posedge clk or posedge rst) begin
if (rst)
count <= 4'b0000; // reset counter to 0
else
count <= count + 1; // increment on rising edge
end
endmodule
Spiegazione:
clkcontrolla il timing.rstinizializza il contatore.- Il contatore aumenta da 0 a 15 in modo sincrono con il clock.
Esempio di FSM (Macchina a Stati Finite) e Applicazioni
Le FSM sono utilizzate per progettare circuiti con più stati. Di seguito è riportato un semplice esempio con tre stati:
module FSM (
input wire clk, // clock input
input wire rst, // reset input
input wire in, // trigger input
output reg [1:0] state // current state
);
// State definitions
localparam STATE0 = 2'b00,
STATE1 = 2'b01,
STATE2 = 2'b10;
always @(posedge clk or posedge rst) begin
if (rst)
state <= STATE0; // initial state
else begin
case (state)
STATE0: state <= (in) ? STATE1 : STATE0;
STATE1: state <= (in) ? STATE2 : STATE0;
STATE2: state <= (in) ? STATE0 : STATE1;
default: state <= STATE0;
endcase
end
end
endmodule
Spiegazione:
- Gli stati sono definiti usando
localparam. casegestisce le transizioni in base ain.- Questa struttura può essere applicata a controller o circuiti di generazione di segnali.
Progettazione di un Addizionatore Semplice (Per Principianti)
Un semplice addizionatore a 2 bit:
module Adder (
input wire [1:0] a, // 2-bit input a
input wire [1:0] b, // 2-bit input b
output wire [2:0] sum // 3-bit output to handle carry
);
assign sum = a + b; // addition
endmodule
Spiegazione:
- Utilizza
assignper la logica combinatoria. - L’uscita a 3 bit considera il riporto.
- Questo è un blocco di base fondamentale per la logica aritmetica.
Problemi Comuni e Soluzioni
Errori Tipici (Simulazione & Sintesi)
- Errori di Simulazione
- Sintomo: Il segnale diventa indefinito (
x). - Causa: Inizializzazione mancante o connessioni del modulo errate.
- Soluzione: Definire valori iniziali o inizializzare tramite un testbench.
- Errori di Sintesi
- Sintomo: Uso di costrutti non sintetizzabili (ad es.,
initial). - Causa: Inclusione di codice solo per simulazione.
- Soluzione: Utilizzare strutture sintetizzabili (come
always).
Utilizzare Efficacemente gli Strumenti di Debug
La progettazione in Verilog richiede un debug robusto. Gli strumenti comuni includono:
- Simulatori (es., ModelSim)
- Ispeziona il comportamento del segnale e verifica il timing tramite visualizzazioni di forme d’onda.
- Visualizzatori di Forme d’Onda
- Analizza visivamente i segnali di ingresso/uscita per identificare problemi di progetto.
- Messaggi di Debug
- Usa
$displayper stampare i valori durante la simulazione:initial begin $display("Initial state: %b", state); end

5. Risorse e Strumenti per Imparare Verilog
Risorse di Apprendimento Consigliate
Libri e Tutorial per Principianti
Per i nuovi arrivati, materiali di apprendimento affidabili sono essenziali. Le opzioni consigliate includono:
- Libri
“Introduction to Digital Design with HDL”
- Spiega i concetti base sia di Verilog che di VHDL.
“Verilog HDL: A Guide to Digital Design and Synthesis”
Un libro completo in lingua inglese che copre i fondamenti fino al design avanzato.
“Digital Design and Verilog HDL Fundamentals”
Adatto a principianti e apprendisti intermedi, con un forte focus sul design basato su Verilog.
- Tutorial Online
YouTube
- Tutorial gratuiti disponibili sia in inglese che in giapponese.
- Permette agli studenti di seguire con codice reale.
Siti Web
EDA Playground : Un ambiente basato su browser per eseguire Verilog.
- ASIC World : Offre tutorial dalla sintassi a esempi di design pratici.
Corsi Video e Apprendimento Pratico
- Udemy
- Corsi come “Verilog for Beginners” e “Learn FPGA Design” forniscono contenuti strutturati.
- Coursera
- Corsi a livello universitario focalizzati sul design hardware.
Strumenti che Supportano lo Sviluppo
Strumenti di Modellazione (ModelSim, Vivado)
- ModelSim
- Uno strumento leader per la simulazione Verilog.
Caratteristiche:
- Interfaccia user-friendly.
- Visualizzatore di forme d’onda intuitivo per il debug.
- Vivado
- Suite di design FPGA di Xilinx.
Caratteristiche:
- Supporto integrato da RTL all’implementazione.
- Connessione senza soluzione di continuità con le schede FPGA Xilinx.
Scelta e Installazione degli Strumenti di Sintesi
- Quartus Prime
- Suite di sviluppo FPGA di Intel, con edizioni gratuite disponibili.
- ISE Design Suite
- Utilizzato per dispositivi FPGA Xilinx più vecchi.
6. FAQ sull’Apprendimento di Verilog
Come Dovrebbero Iniziare i Principianti a Imparare Verilog?
Domanda: Ho appena iniziato a imparare Verilog. Qual è il modo migliore per cominciare?
Risposta:
- Iniziare con le basi
- Inizia progettando circuiti semplici come porte AND/OR. Comprendere la sintassi di base e la struttura dei moduli è essenziale.
- Utilizzare gli strumenti di simulazione
- Strumenti come ModelSim o Vivado aiutano a verificare il tuo codice. Eseguire simulazioni approfondisce la comprensione.
- Usare risorse affidabili
- Consulta libri e tutorial online per costruire una solida base (vedi Sezione 5 per le raccomandazioni).
- Provare piccoli progetti
- Dopo aver appreso le basi, prova a costruire piccoli progetti come contatori a 4 bit o FSM semplici.
Dovrei Scegliere VHDL o Verilog?
Domanda: Quale linguaggio dovrei imparare—VHDL o Verilog? Quando dovrebbe essere usato ciascuno?
Risposta:
- Quando scegliere Verilog
- La sintassi semplice di Verilog lo rende adatto ai principianti, soprattutto per chi ha esperienza di programmazione in C.
- Ampiamente usato per prototipazione e sviluppo FPGA.
- Quando scegliere VHDL
- Ideale per sistemi mission-critical che richiedono una rigorosa validazione del progetto.
- Il forte controllo dei tipi riduce la probabilità di errori di progetto.
- Criteri di selezione
- Facilità di apprendimento : Verilog è tipicamente più facile per i principianti.
- Requisiti del progetto : Segui il linguaggio usato nell’ambiente di progettazione.
- Supporto degli strumenti : La maggior parte degli strumenti supporta entrambi, ma la scelta dipende dall’FPGA/ASIC di destinazione.
Errori Comuni che i Principianti Dovrebbero Evitare
Domanda: Quali errori commettono comunemente i principianti quando imparano Verilog, e come possono evitarli?
Risposta:
- Mancanza di inizializzazione
- I segnali possono apparire come
x(non definito) durante la simulazione. - Soluzione: Inizializza sempre i segnali o imposta i valori nel tuo testbench.
initial begin signal = 0; // initialize signal end
- Confondere le assegnazioni blocking e non-blocking
- L’uso improprio di
=(blocking) e<=(non-blocking) può causare comportamenti inattesi. - Soluzione: Usa assegnazioni non-blocking nei blocchi
alwayssincronizzati.
- Mescolare codice sintetizzabile e solo per simulazione
- Includere costrutti solo per simulazione (es.
initial) nella logica sintetizzabile causa errori. - Soluzione: Separa la logica sintetizzabile dai blocchi solo per simulazione.
- Fraintendere l’esecuzione parallela
- Verilog descrive il comportamento hardware parallelo, non la logica software sequenziale.
- Soluzione: Comprendi che ogni blocco
alwaysviene eseguito indipendentemente.

7. Passare al Passo Successivo con Verilog
Revisione del Tuo Progresso nell’Apprendimento di Verilog
Checklist di Revisione
- Comprensione della sintassi di base : Assicurati di poter descrivere moduli, tipi di dati e strutture di controllo.
- Esperienza pratica di progettazione : Contatori, FSM e progetti simili dovrebbero risultare familiari.
- Uso degli strumenti : Dovresti essere in grado di simulare e fare debug con ModelSim o Vivado.
Preparazione per il Passo Successivo
- Se comprendi le basi, sei pronto a passare a argomenti più avanzati.
- Usa i passaggi seguenti per ampliare le tue competenze tecniche.
Avanzare verso la Progettazione FPGA
Imparare i Fondamentali FPGA
FPGA (Field-Programmable Gate Array) è una delle piattaforme più pratiche per applicare le competenze Verilog.
- Preparare una scheda di sviluppo FPGA
- Schede consigliate per principianti: Basys 3, Nexys A7 (Digilent)
- Motivo: Forte supporto della community e facile integrazione con Vivado.
- Iniziare con progetti semplici
- Inizia con lampeggio di LED o circuiti controllati da interruttori.
- Impara la divisione del clock e la logica di controllo di base.
- Passare a sistemi più complessi
- Progetta controller multi‑FSM, interfacce di memoria e sistemi integrati.
Passare a SystemVerilog
Perché imparare SystemVerilog?
- SystemVerilog estende Verilog con funzionalità avanzate di verifica e programmazione orientata agli oggetti.
- Utile per costruire testbench sofisticati e sistemi su larga scala.
Argomenti chiave da studiare
- Testbench basati su classi
- Consente test randomizzati e analisi di copertura.
- Utilizzo delle interfacce
- Semplifica la comunicazione tra i moduli.
- Strutture di controllo estese
- Impara funzionalità come
uniqueepriorityper migliorare la sicurezza del progetto.
Lavorare su progetti reali
Partecipa a progetti open‑source
- Progettazioni di processori RISC‑V
- Moduli DSP (Digital Signal Processing) semplici
Avvia i tuoi progetti
- Crea progetti originali basati sui tuoi interessi.
- Esempi: orologi digitali, processori audio, circuiti di filtraggio del segnale.
Prossimi passi consigliati per l’apprendimento
Acquisisci competenze avanzate di progettazione
- Progettazione di pipeline
- Impara i fondamenti utilizzati nei processori ad alte prestazioni.
- Comprensione dei domini di clock
- Padroneggia le tecniche per gestire i segnali attraverso più domini di clock.
- Progettazione a basso consumo
- Applica metodi di progettazione a basso consumo per applicazioni reali.


