- 1 1. Qu’est-ce que Verilog ? Vue d’ensemble et cas d’utilisation
- 2 2. Syntaxe de base et concepts de Verilog
- 3 3. Principales caractéristiques de Verilog
- 4 4. Exemples de conception pratiques avec Verilog
- 5 5. Ressources et outils pour apprendre le Verilog
- 6 6. FAQ sur l’apprentissage du Verilog
- 7 7. Passer à l’étape suivante avec le Verilog
1. Qu’est-ce que Verilog ? Vue d’ensemble et cas d’utilisation
Définition de base de Verilog
Verilog est l’un des langages de description matériel (HDL) utilisés pour concevoir des circuits numériques. Alors que les langages de programmation logicielle décrivent des programmes informatiques, Verilog sert à décrire le comportement des circuits et systèmes numériques. En utilisant ce langage, vous pouvez simplifier les conceptions de circuits complexes et réaliser efficacement la simulation et la synthèse (conversion en un circuit fabricable). Verilog a été développé en 1984 et standardisé par l’IEEE (Institute of Electrical and Electronics Engineers) en 1995. Depuis, il a continué d’évoluer et est aujourd’hui largement utilisé pour la conception de FPGA (Field-Programmable Gate Array) et d’ASIC (Application-Specific Integrated Circuit).
Le rôle de Verilog dans la conception de circuits numériques
La conception de circuits numériques est le processus de création de systèmes qui traitent l’information à l’aide de signaux électriques. Des exemples incluent les processeurs et la mémoire à l’intérieur des smartphones et des ordinateurs. Verilog sert d’outil efficace pour concevoir de tels systèmes numériques. Plus précisément, il est utilisé dans les scénarios suivants :
- Conception FPGA : Les FPGA sont des dispositifs très flexibles. Verilog permet aux ingénieurs de définir librement la fonctionnalité du FPGA et de reprogrammer le dispositif selon les besoins.
- Conception ASIC : Les ASIC sont des circuits intégrés spécialisés pour des applications spécifiques. Verilog permet la conception de circuits intégrés sur mesure.
- Simulation : Les circuits décrits en Verilog peuvent être simulés en logiciel afin de vérifier leur comportement à l’avance, permettant la détection précoce et la correction des erreurs de conception.
Ce que vous apprendrez dans cet article
Cet article fournit une explication étape par étape pour les débutants qui apprennent Verilog pour la première fois ou pour ceux qui révisent les fondamentaux. Les sujets incluent :
- Syntaxe de base et concepts fondamentaux de Verilog
- Exemples de conception pratiques et techniques de débogage
- Ressources utiles et recommandations d’outils
Les lecteurs cibles incluent :
- Débutants souhaitant apprendre Verilog ou HDL
- Ingénieurs débutant la conception FPGA ou ASIC
- Concepteurs ou étudiants révisant les connaissances de base

2. Syntaxe de base et concepts de Verilog
Syntaxe et structure de Verilog
Définition et utilisation des modules
En Verilog, l’unité la plus fondamentale est le « module ». Les modules représentent des composants de circuit et contiennent les descriptions des entrées, sorties et structures internes. Voici un exemple de module simple :
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
Ce code effectue une opération AND sur deux entrées (a et b) et renvoie le résultat à y. Le module est défini à l’aide du mot-clé module et se termine par endmodule.
Choix des types de données (wire vs. reg)
Verilog utilise deux types de données principaux :
- wire : Représente un fil physique. Utilisé pour connecter des signaux.
- reg : Représente un registre. Utilisé pour stocker des valeurs en fonction d’événements d’horloge.
Exemple :
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
Ici, y doit conserver une valeur, donc le type reg est utilisé à l’intérieur d’un bloc always.
Structures de contrôle (if, case) et notes de simulation
Utilisation des instructions if
Verilog utilise if pour le branchement conditionnel :
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
Utilisation des instructions case
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
Concepts essentiels pour les débutants
Assignations bloquantes vs. non-bloquantes
Verilog propose deux types d’assignation :
- Bloquante (
=) : S’exécute séquentiellement. - Non-bloquante (
<=) : S’exécute de manière concurrente.
Exemple :
always @(posedge clk) begin
a = b; // blocking
c <= d; // non-blocking
end
Penser en parallèle
Verilog prend en charge l’exécution parallèle :
always @(posedge clk) begin
a <= b + 1;
end
always @(posedge clk) begin
c <= d - 1;
end
Différence entre simulation et synthèse
- Simulation : Vérifier le comportement dans un logiciel.
- Synthèse : Convertir le design en matériel.
Certaines constructions comme initial ne sont valables que pour la simulation.
3. Principales caractéristiques de Verilog
Points forts et comparaison avec d’autres HDL
Points forts de Verilog
- Syntaxe simple
- Verilog ressemble à C, ce qui le rend facile à apprendre pour les programmeurs.
- Ses éléments fondamentaux — modules, types de données, opérateurs — sont intuitifs.
- Support étendu
- Standard dans les outils FPGA/ASIC comme Vivado et ModelSim.
- Large communauté d’apprentissage et nombreuses ressources.
- Méthodologies de conception flexibles
- Prend en charge la conception RTL et plus encore.
Comparaison de Verilog, VHDL et 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 |
- Différence avec VHDL : VHDL met l’accent sur une syntaxe stricte, tandis que Verilog privilégie l’expression concise.
- Différence avec SystemVerilog : SystemVerilog ajoute des fonctionnalités orientées objet et des capacités de vérification avancées.
Cas d’utilisation pratiques de Verilog
Le rôle de Verilog dans la conception FPGA
Les FPGA sont des circuits intégrés programmables qui permettent une configuration matérielle flexible. Verilog rend possible la conception efficace de logique numérique complexe. Les rôles clés incluent :
- Prototypage
- Utilisé pour vérifier le comportement du circuit tôt dans le développement du produit.
- Prototypage rapide avec une adaptation facile aux changements de spécifications.
- Vérification comportementale
- La simulation avec Verilog aide à identifier les problèmes de conception tôt.
- Des outils comme ModelSim permettent aux ingénieurs de créer des bancs de test et d’observer le comportement du système.
Flux de base de la simulation de circuit
Les étapes générales de la simulation basée sur Verilog sont :
- Décrire le circuit
- Implémenter le circuit cible en Verilog.
- Créer un banc de test
- Les bancs de test définissent l’environnement de vérification du comportement du circuit.
- Exemple :
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
- Exécuter la simulation
- Exécuter le banc de test dans un simulateur et vérifier le comportement attendu.
- Analyser les résultats
- Examiner les formes d’onde et identifier les problèmes de conception.

4. Exemples de conception pratiques avec Verilog
Apprendre à travers des exemples de code Verilog
Exemple de conception de compteur (avec explication du code)
Les compteurs sont des composants fondamentaux en conception numérique. Voici un compteur simple qui s’incrémente en fonction d’un signal d’horloge :
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
Explication :
clkcontrôle le timing.rstinitialise le compteur.- Le compteur augmente de 0 à 15 de manière synchrone avec l’horloge.
Exemple de FSM (Machine à états finis) et applications
FSMs sont utilisés pour concevoir des circuits avec plusieurs états. Voici un exemple simple avec trois états :
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
Explication :
- Les états sont définis à l’aide de
localparam. casegère les transitions en fonction dein.- Cette structure peut être appliquée aux contrôleurs ou aux circuits de génération de signaux.
Conception d’un additionneur simple (convivial pour les débutants)
Un additionneur de base à 2 bits :
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
Explication :
- Utilise
assignpour la logique combinatoire. - La sortie sur 3 bits prend en compte le report.
- C’est un bloc de construction fondamental pour la logique arithmétique.
Problèmes courants et solutions
Erreurs typiques (simulation et synthèse)
- Erreurs de simulation
- Symptôme : Le signal devient indéfini (
x). - Cause : Initialisation manquante ou connexions de module incorrectes.
- Solution : Définir des valeurs initiales ou initialiser via un banc de test.
- Erreurs de synthèse
- Symptôme : Utilisation de constructions non synthétisables (par ex.,
initial). - Cause : Inclusion de code uniquement destiné à la simulation.
- Solution : Utiliser des structures synthétisables (comme
always).
Utiliser efficacement les outils de débogage
La conception en Verilog nécessite un débogage robuste. Les outils courants incluent :
- Simulateurs (par ex., ModelSim)
- Inspecter le comportement des signaux et vérifier le timing via les affichages d’ondes.
- Visionneurs d’ondes
- Analyser visuellement les signaux d’entrée/sortie pour identifier les problèmes de conception.
- Messages de débogage
- Utiliser
$displaypour afficher les valeurs pendant la simulation :initial begin $display("Initial state: %b", state); end

5. Ressources et outils pour apprendre le Verilog
Ressources d’apprentissage recommandées
Livres et tutoriels pour débutants
Pour les nouveaux arrivants, des matériaux d’apprentissage fiables sont essentiels. Les options recommandées incluent :
- Livres
- « Introduction to Digital Design with HDL »
- Explique les concepts de base du Verilog et du VHDL.
- « Verilog HDL : A Guide to Digital Design and Synthesis »
- Un livre complet en anglais couvrant les fondamentaux jusqu’à la conception avancée.
- « Digital Design and Verilog HDL Fundamentals »
- Adapté aux débutants et aux apprenants intermédiaires, avec un fort accent sur la conception basée sur Verilog.
- Tutoriels en ligne
- YouTube
- Tutoriels gratuits disponibles en anglais et en japonais.
- Permet aux apprenants de suivre avec du code réel.
- Sites web
- EDA Playground : Un environnement basé sur le navigateur pour exécuter du Verilog.
- ASIC World : Propose des tutoriels allant de la syntaxe aux exemples de conception pratiques.
Cours vidéo et apprentissage pratique
- Udemy
- Des cours comme « Verilog for Beginners » et « Learn FPGA Design » offrent un contenu structuré.
- Coursera
- Des cours universitaires axés sur la conception matérielle.
Outils qui soutiennent le développement
Outils de modélisation (ModelSim, Vivado)
- ModelSim
- Un outil de simulation Verilog de premier plan.
- Fonctionnalités :
- Interface conviviale.
- Visionneur d’ondes intuitif pour le débogage.
- Vivado
- Suite de conception FPGA de Xilinx.
Fonctionnalités :
- Support intégré du RTL à l’implémentation.
- Connexion transparente avec les cartes FPGA Xilinx.
Choisir et installer les outils de synthèse
- Quartus Prime
- Suite de développement FPGA d’Intel, avec des éditions gratuites disponibles.
- ISE Design Suite
- Utilisé pour les anciens dispositifs FPGA Xilinx.
6. FAQ sur l’apprentissage du Verilog
Comment les débutants devraient-ils commencer à apprendre le Verilog ?
Question : Je viens de commencer à apprendre le Verilog. Quelle est la meilleure façon de débuter ?
Réponse :
- Commencer par les fondamentaux
- Concevez des circuits simples tels que des portes AND/OR. Comprendre la syntaxe de base et la structure des modules est essentiel.
- Utiliser des outils de simulation
- Des outils comme ModelSim ou Vivado permettent de vérifier votre code. Exécuter des simulations approfondit votre compréhension.
- Utiliser des ressources fiables
- Consultez des livres et des tutoriels en ligne pour bâtir une base solide (voir la Section 5 pour les recommandations).
- Réaliser de petits projets
- Après avoir assimilé les bases, essayez de créer de petits projets comme des compteurs 4 bits ou des FSM simples.
Dois‑je choisir VHDL ou Verilog ?
Question : Quel langage devrais‑je apprendre — VHDL ou Verilog ? Quand chaque langage doit‑il être utilisé ?
Réponse :
- Quand choisir Verilog
- La syntaxe simple du Verilog le rend convivial pour les débutants, surtout pour ceux qui ont de l’expérience en C.
- Largement utilisé pour le prototypage et le développement FPGA.
- Quand choisir VHDL
- Idéal pour les systèmes critiques nécessitant une validation stricte du design.
- Le typage fort réduit les risques d’erreurs de conception.
- Critères de sélection
- Facilité d’apprentissage : le Verilog est généralement plus simple pour les débutants.
- Exigences du projet : suivez le langage utilisé dans l’environnement de conception.
- Support des outils : la plupart des outils supportent les deux, mais le choix dépend du FPGA/ASIC cible.
Erreurs courantes que les débutants doivent éviter
Question : Quelles erreurs les débutants commettent‑ils le plus souvent en apprenant le Verilog, et comment les éviter ?
Réponse :
- Absence d’initialisation
- Les signaux peuvent apparaître comme
x(indéfini) pendant la simulation. - Solution : Initialisez toujours les signaux ou définissez des valeurs dans votre banc de test.
initial begin signal = 0; // initialize signal end
- Confusion entre assignations bloquantes et non‑bloquantes
- Utiliser à tort
=(bloquant) et<=(non‑bloquant) peut engendrer un comportement inattendu. - Solution : Utilisez les assignations non‑bloquantes dans les blocs
alwayssynchronisés à l’horloge.
- Mélange de code synthétisable et de code uniquement simulation
- Inclure des constructions réservées à la simulation (par ex.
initial) dans une logique synthétisable provoque des erreurs. - Solution : Séparez la logique synthétisable des blocs réservés à la simulation.
- Mauvaise compréhension de l’exécution parallèle
- Le Verilog décrit le comportement matériel parallèle, pas une logique séquentielle logicielle.
- Solution : Comprenez que chaque bloc
alwayss’exécute indépendamment.

7. Passer à l’étape suivante avec le Verilog
Revoir votre progression d’apprentissage du Verilog
Liste de vérification
- Compréhension de la syntaxe de base : assurez‑vous de pouvoir décrire des modules, des types de données et des structures de contrôle.
- Expérience pratique en conception : les compteurs, les FSM et des conceptions similaires doivent vous être familiers.
- Utilisation des outils : vous devez être capable de simuler et de déboguer avec ModelSim ou Vivado.
Préparer l’étape suivante
- Si vous maîtrisez les bases, vous êtes prêt à aborder des sujets plus avancés.
- Utilisez les étapes ci‑dessous pour élargir vos compétences techniques.
Passer à la conception FPGA
Apprendre les fondamentaux du FPGA
Le FPGA (Field‑Programmable Gate Array) est l’une des plateformes les plus pratiques pour appliquer les compétences en Verilog.
- Préparer une carte de développement FPGA
- Cartes recommandées pour les débutants : Basys 3, Nexys A7 (Digilent)
- Raison : Forte communauté de soutien et intégration facile avec Vivado.
- Commencer par des projets simples
- Commencez par faire clignoter des LED ou des circuits contrôlés par des interrupteurs.
- Apprenez la division d’horloge et la logique de contrôle de base.
- Passer à des systèmes plus complexes
- Concevoir des contrôleurs multi‑FSM, des interfaces mémoire et des systèmes intégrés.
Passer à SystemVerilog
Pourquoi apprendre SystemVerilog ?
- SystemVerilog étend Verilog avec des fonctionnalités avancées de vérification et orientées objet.
- Utile pour créer des bancs de test sophistiqués et des systèmes à grande échelle.
Sujets clés à étudier
- Bancs de test basés sur les classes
- Permet les tests aléatoires et l’analyse de couverture.
- Utilisation des interfaces
- Simplifie la communication entre les modules.
- Structures de contrôle étendues
- Apprenez des fonctionnalités telles que
uniqueetprioritypour améliorer la sécurité du design.
Travailler sur des projets réels
Rejoindre des projets open source
- Conceptions de processeurs RISC‑V
- Modules DSP (traitement numérique du signal) simples
Lancez vos propres projets
- Créez des conceptions originales selon vos intérêts.
- Exemples : horloges numériques, processeurs audio, circuits de filtrage de signaux.
Étapes d’apprentissage recommandées
Acquérir des compétences avancées en conception
- Conception de pipeline
- Apprenez les fondamentaux utilisés dans les processeurs haute performance.
- Comprendre les domaines d’horloge
- Maîtrisez les techniques de gestion des signaux à travers plusieurs domaines d’horloge.
- Conception basse consommation
- Appliquez des méthodes de conception à faible consommation d’énergie pour des applications réelles.


