Verilog vs VHDL : les différences entre les deux HDL

Verilog et VHDL sont les deux principaux langages de description matérielle (HDL) utilisés pour décrire des circuits numériques en vue de la simulation et de la synthèse. Verilog a une syntaxe concise, proche du C, et est plus facile à aborder. VHDL est verbeux et fortement typé, ce qui permet de détecter davantage d'erreurs tôt. Tous deux peuvent décrire les mêmes circuits, et le choix dépend généralement du secteur, de l'entreprise et du code existant.

CritèreVerilog (et SystemVerilog)VHDL
OrigineCréé dans les années 1980 chez Gateway Design Automation et normalisé sous IEEE 1364Développé pour le département de la Défense des États-Unis et normalisé sous IEEE 1076 en 1987
Style de syntaxeConcis et proche du CVerbeux et proche de l'Ada
TypageFaiblement typé : les conversions implicites sont faciles mais peuvent masquer des erreursFortement typé : des conversions explicites sont nécessaires, les erreurs sont donc détectées à la compilation
Sensibilité à la casseSensible à la casseInsensible à la casse
Courbe d'apprentissagePlus facile pour débuterPlus raide, mais plus sûr une fois maîtrisé
Fonctions de vérificationVerilog seul est limité ; SystemVerilog ajoute les classes, les tests aléatoires contraints, les assertions et l'UVMVHDL-2008 plus des bibliothèques comme OSVVM et UVVM
Abstractions du langageMoins nombreuses : modules et paramètresPlus riches : packages, generics, records et types énumérés
Support des outilsPris en charge par tous les grands simulateurs et outils de synthèsePris en charge par tous les grands simulateurs et outils de synthèse, et la simulation multilangage est possible
Utilisateurs typiquesConception d'ASIC et de SoC, en particulier aux États-Unis et en AsieEurope, aéronautique et défense, et de nombreux projets FPGA

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Verilog / SystemVerilog
Un bon choix par défaut pour la conception et la vérification de puces, car les outils et bibliothèques de l'industrie sont construits autour de SystemVerilog.
VHDL
Un bon choix lorsque le typage strict et la maintenabilité à long terme comptent, comme dans les projets critiques pour la sécurité et de défense.
En pratique
Il faut souvent savoir lire les deux. Les concepts (modules ou entités, signaux concurrents, processus cadencés) sont les mêmes.

Questions fréquentes

Lequel est le plus facile à apprendre, Verilog ou VHDL ?

Verilog, car sa syntaxe est concise et proche du C. VHDL est plus verbeux et fortement typé, ce qui est plus difficile au début mais permet de détecter davantage d'erreurs à la compilation.

Lequel est le plus utilisé dans l'industrie ?

SystemVerilog domine la conception et la vérification d'ASIC et de SoC, en particulier aux États-Unis et en Asie. VHDL est courant en Europe, dans l'aéronautique et la défense, et dans de nombreux projets FPGA.

Peut-on mélanger Verilog et VHDL dans un même projet ?

Oui. Les grands simulateurs et outils de synthèse prennent en charge les designs multilangages : un module écrit dans un langage peut être utilisé dans l'autre.

Qu'est-ce que SystemVerilog ?

SystemVerilog est une extension de Verilog qui ajoute les classes, les tests aléatoires contraints, les assertions et la méthodologie UVM, ce qui en fait le standard de la vérification de puces.

Vérifier vos connaissances

Quelle est la grande différence entre une description en HDL comme Verilog et un programme logiciel en C ou autre ?

  1. AUne description HDL représente des circuits fonctionnant simultanément en parallèle
  2. BUne description HDL est une suite d'instructions exécutées ligne par ligne de haut en bas
  3. CEn HDL, les variables et les branchements conditionnels sont inutilisables
Afficher la réponse et l'explication

Réponse : A. Une description HDL représente des circuits fonctionnant simultanément en parallèle

Le HDL ressemble à un programme, mais ce qu'on écrit devient, par synthèse logique, un circuit de portes et de bascules. Toutes les parties d'un circuit fonctionnant en permanence simultanément, plusieurs instructions assign ou blocs always agissent en parallèle, indépendamment de leur ordre d'écriture. Raisonner comme en logiciel (« une fois ce traitement terminé, le suivant ») ne donne pas le circuit voulu ; il est essentiel d'écrire en imaginant le circuit produit.

Quel est l'objectif de l'utilisation de module en Verilog ?

  1. ADéfinir un composant de circuit doté de ports d'entrée et de sortie, réutilisable au sein d'autres modules
  2. BSuspendre temporairement l'exécution du programme
  3. CAfficher à l'écran les résultats de simulation
Afficher la réponse et l'explication

Réponse : A. Définir un composant de circuit doté de ports d'entrée et de sortie, réutilisable au sein d'autres modules

Le module est l'unité définissant un ensemble de circuit doté de ports d'entrée et de sortie ; il représente un additionneur, un compteur ou un CPU entier. Un module défini peut être utilisé autant de fois que voulu comme composant dans un autre module (instanciation), et l'on assemble de grands circuits en reliant les ports par des fils. Comme on dispose et câble des composants sur une carte, on construit des circuits de façon hiérarchique.

Quelle est la différence entre les types wire et reg en Verilog ?

  1. Areg devient toujours une bascule et wire toujours un circuit combinatoire
  2. Bwire représente une connexion pilotée par une instruction assign ou analogue, reg un signal affecté dans un bloc always, mais reg ne devient pas forcément une bascule
  3. Cwire sert à stocker des nombres, reg des caractères
Afficher la réponse et l'explication

Réponse : B. wire représente une connexion pilotée par une instruction assign ou analogue, reg un signal affecté dans un bloc always, mais reg ne devient pas forcément une bascule

En Verilog, la règle est de déclarer wire les signaux pilotés par une instruction assign ou une sortie de module, et reg les signaux affectés dans un bloc always. reg semble abréger « registre », mais une affectation dans always @(*) donne un circuit combinatoire, pas une bascule. C'est l'écriture, mise à jour ou non sur un front d'horloge, qui détermine s'il s'agit d'une bascule. En SystemVerilog, les deux peuvent s'écrire avec le type logic.

  1. Quel est le comportement de l'affectation non bloquante (<=) en Verilog ?
  2. Quel langage de description matérielle est principalement utilisé en conception RTL ?
  3. Dans la vérification en SystemVerilog, quelle méthodologie standard sert à construire des environnements de test (bancs de test) facilement réutilisables ?

Questions d'entraînement sur HDL et vérification

Termes clés expliqués

Verilog
Langage de description matérielle très utilisé pour la conception et la vérification de circuits numériques. Les circuits sont décrits par modules (module) et le comportement par assign ou always.
SystemVerilog
Langage qui étend Verilog. Il offre des fonctions de conception comme le type logic, always_ff et always_comb, et des fonctions de vérification comme les classes, la randomisation sous contraintes et les assertions.
Langage de description matérielle
Langage permettant de décrire textuellement la structure et le comportement de circuits numériques. Abrégé HDL. Verilog, SystemVerilog et VHDL en sont des exemples ; la synthèse logique les convertit en circuits.
RTL (niveau transfert de registres)
Niveau d'abstraction de conception qui décrit le circuit par les transferts et traitements de données entre registres. Écrit en Verilog ou VHDL, il sert d'entrée à la synthèse logique.

Comparatifs associés