Un langage pour décrire des circuits
La plupart des langages que tu connais - Python, JavaScript, Go - décrivent une séquence d'instructions qu'un CPU doit exécuter. Verilog décrit un circuit. Tu écris quels wires existent, quels registres existent, et comment les signaux circulent entre eux. Un simulateur peut ensuite rejouer le comportement du circuit, et un outil de synthèse peut compiler le même texte en portes et flip-flops d'une vraie puce.
C'est la définition en une phrase. Les implications, elles, prennent plus de temps à digérer.
Ce snippet ressemble à un mini programme : un module, un bloc initial, une tâche système $display. Appuie sur Run et tu verras hello from verilog. Sous le capot, pourtant, le simulateur n'exécute pas une fonction - il fait semblant que le temps passe et avance le circuit pas à pas. C'est pour ça que tu verras $finish partout : il faut que quelqu'un dise au simulateur de s'arrêter.
Ce que « description de matériel » veut vraiment dire
Une ligne de C s'exécute quand le compteur de programme l'atteint. Une ligne de Verilog décrit une portion de circuit qui existe en permanence. Considère :
assign y = a & b;
Ça ne veut pas dire « calcule y une seule fois ». Ça veut dire « il existe un wire y, et à chaque instant il est égal à a AND b ». Change a ou b et y suit immédiatement. Plusieurs instructions assign dans un module ne sont pas une séquence - ce sont des descriptions parallèles de morceaux distincts du circuit.
C'est la caractéristique fondamentale de Verilog et la source de tous les bugs des débutants. La majorité de ce que tu écris décrit des choses qui se passent en concurrence, et les rares constructions qui ressemblent à des instructions ordonnées (à l'intérieur des blocs initial et always) n'en ont l'air que parce que le simulateur fait semblant.
Ce que tu construis avec Verilog
Tu verras Verilog utilisé à tous les niveaux de la pile numérique :
- Logique combinatoire. Additionneurs, multiplexeurs, décodeurs, tranches d'ALU - tout ce dont la sortie ne dépend que des entrées actuelles.
- Logique séquentielle. Compteurs, registres à décalage, machines à états finis, tout ce qui est cadencé par un
posedge clk. - Cœurs de processeur. Des CPU d'exercice dans les cours universitaires aux cœurs RISC-V open-source qui tournent dans du vrai silicium, le RTL est généralement en Verilog ou en SystemVerilog.
- Designs FPGA. La logique chargée dans un FPGA Xilinx ou Intel - réseau, traitement d'image, contrôle embarqué - est très majoritairement écrite en Verilog.
- ASICs. Les puces sur mesure de ton téléphone, de ton routeur, de ta voiture - le front-end est écrit en HDL, et Verilog est l'un des deux choix dominants.
Tu n'as besoin d'aucun de ces matériels pour apprendre. Tout ce que contient cette documentation tourne dans un simulateur basé sur le navigateur.
Simulation vs synthèse
Il y a deux façons de « lancer » du Verilog, et elles ne sont pas équivalentes :
- La simulation joue le comportement du circuit en logiciel. Le simulateur (Icarus Verilog, Verilator, ModelSim, outils commerciaux) lit tes modules plus un testbench - du code qui pilote les entrées - et produit des sorties : logs textuels, formes d'onde, rapports pass/fail.
- La synthèse prend un sous-ensemble de Verilog et le compile en une netlist de portes réelles. Un outil constructeur (Vivado, Quartus, les outils design-compiler des grandes boîtes) gère le mapping. Le Verilog synthétisé doit respecter des règles supplémentaires - les blocs
initialet les appels$displayn'existent pas dans le silicium.
L'éditeur en ligne sur ces pages fait de la simulation. C'est tout ce dont tu as besoin tant que tu ne fabriques pas une vraie puce ou que tu ne programmes pas un FPGA.
Verilog vs SystemVerilog
Si tu cherches un peu, tu verras les deux noms. SystemVerilog est un sur-ensemble - il conserve chaque construction Verilog et ajoute des fonctionnalités surtout orientées vérification (classes, tests aléatoires contraints, assertions, interfaces, un système de types bien plus riche). Tout ce que tu apprends ici est du SystemVerilog valide. Les deux noms se mélangent en pratique ; la plupart des outils acceptent les deux et la plupart des fichiers se terminent par .v quoi qu'il en soit. On dira « Verilog » tout au long de cette documentation.
Verilog vs VHDL
Les deux sont des langages de description de matériel. Les deux sont des standards IEEE. Les deux existent depuis les années 1980. Les différences :
- Syntaxe. Verilog descend de C - accolades, mots-clés concis, règles de types souples. VHDL descend d'Ada - plus verbeux, beaucoup plus strict sur les types.
- Géographie. Verilog domine dans la conception commerciale aux États-Unis. VHDL reste courant en Europe, dans la défense et dans les bases de code anciennes.
- Capacités. Ils sont à peu près équivalents en termes de ce qu'ils peuvent exprimer. Choisis selon ce que ton équipe utilise.
Si tu apprends le HDL pour la première fois, Verilog offre la rampe la plus douce - syntaxe plus petite, plus permissive, et la bibliothèque standard d'exemples en ligne est plus grosse.
Comment cette documentation lance Verilog
L'éditeur ci-dessous utilise Icarus Verilog (iverilog) sous le capot. Il compile ton source en un simulateur et l'exécute dans un sandbox. Pas de licence Vivado, pas d'installation Quartus, pas de carte FPGA requise. Tu écris un module plus un petit testbench, tu appuies sur Run, et tu vois la sortie et la forme d'onde.
C'est un compteur 4 bits complet plus un testbench. Le module counter est le design under test (DUT) ; le module test génère l'horloge, relâche le reset et affiche la valeur à chaque cycle. Lance-le et tu verras count monter de 0 à 15 puis revenir à 0. Ouvre l'onglet Waveform et tu verras la même chose sous forme de transitions de tension.
La suite
Tu as assez de contexte pour commencer à écrire des modules. Le prochain document - Matériel vs logiciel - passe un peu plus de temps sur le changement de modèle mental, parce que c'est le plus gros obstacle des nouveaux programmeurs Verilog. Ensuite, l'installation d'un simulateur local (optionnel - le navigateur suffit), l'écriture de ton premier module from scratch, et le reste du langage.
Avance à ton rythme. La syntaxe est réduite ; c'est le modèle mental qui fait le travail.
Questions fréquentes
Qu'est-ce que Verilog en termes simples ?
Verilog est un langage de description de matériel (HDL) utilisé pour décrire des circuits numériques sous forme de texte. Au lieu d'écrire des instructions qu'un CPU exécute, tu décris des wires, des registres, des portes logiques et la façon dont les signaux circulent entre eux. Un simulateur exécute ensuite la description pour que tu puisses vérifier le comportement, et un outil de synthèse peut transformer cette même description en layout réel d'une puce.
À quoi sert Verilog ?
Verilog sert à concevoir et vérifier du matériel numérique : CPUs, GPUs, switches réseau, contrôleurs de mémoire, blocs de traitement du signal, designs pour FPGA - tout ce qui est construit à partir de portes logiques et de flip-flops. Il fonctionne aussi en simulation pure pour enseigner la logique numérique et prototyper des designs avant qu'aucun silicium ne soit produit.
Verilog est-il un langage de programmation ?
Pas au sens habituel. Le code Verilog décrit la structure et le comportement du matériel - signaux, portes et stockage cadencé - plutôt qu'une séquence d'instructions CPU. Beaucoup de lignes que tu écris se produisent de manière concurrente sur la puce, pas l'une après l'autre. Ce changement mental est le plus grand obstacle quand on passe du logiciel à Verilog.
Quelle est la différence entre Verilog et SystemVerilog ?
SystemVerilog est un sur-ensemble de Verilog. Il conserve toute la syntaxe de Verilog et ajoute des fonctionnalités principalement orientées vérification : classes, stimulus aléatoires contraints, assertions, interfaces et types de données plus riches. Les outils qui acceptent SystemVerilog acceptent aussi Verilog classique. Pour la plupart du travail d'introduction, les deux paraissent identiques.
Quelle est la différence entre Verilog et VHDL ?
Verilog et VHDL sont tous deux des langages de description de matériel qui résolvent le même problème. La syntaxe de Verilog descend du C et est plus concise ; celle de VHDL descend d'Ada et est plus verbeuse et stricte sur les types. L'usage dans l'industrie varie selon les régions et les équipes - les deux sont bien vivants, les deux sont standardisés (IEEE 1364/1800 pour Verilog/SystemVerilog, IEEE 1076 pour VHDL).
Verilog est-il difficile à apprendre ?
La syntaxe est réduite - plus petite que celle de C++. Le plus dur, c'est de désapprendre les habitudes logicielles. En Verilog, la plupart des instructions décrivent des choses qui se passent en même temps, pas en séquence, et une assignation blocking au lieu de non-blocking au mauvais endroit peut faire que ton circuit ne fonctionne plus. Attends-toi à ce que la première semaine soit déroutante avant que ça ne fasse tilt.