Qu'est-ce qu'un langage de description de matériel ?

Définition

VHDL appartient à la famille des langages de description de matériel, en anglais HDL pour Hardware Description Languages.

Ici, le mot matériel désigne spécifiquement les circuits intégrés numériques.

Il existe également une variante de VHDL appelée VHDL-AMS (Analog and Mixed Signals). qui permet de décrire des circuits mixtes analogiques et numériques.

Dans les pages qui précèdent, nous avons utilisé différents types de représentation des circuits électroniques :

Ces représentations prenaient la forme de diagrammes, de tableaux, d’équations destinées à être lues par des humains.

Le rôle d’un langage de description de matériel est de permettre la modélisation de la structure et du comportement d’un circuit sous une forme rigoureuse qui sera exploitable par des outils de développement de circuits intégrés.

Les langages de description de matériel ressemblent à des langages de programmation

Pour représenter le comportement des circuits, les langages de description de matériel réutilisent des concepts et des constructions issus des langages de programmation. Par exemple, VHDL est inspiré du langage Ada pour tous les éléments permettant d’écrire des algorithmes : le système de types de données, les expressions mathématiques, les instructions conditionnelles, les boucles, les sous-programmes, etc.

Cette parenté avec les langages de programmation peut être source de confusion pour les débutants, qui peuvent être tentés d’appliquer les même techniques que lorsqu’ils développent du logiciel.

Les langages de description de matériel ne sont pas des langages de programmation

Dans un système informatique, on distingue :

Un langage de programmation permet donc à des informaticiens d’écrire du logiciel qui sera exécuté par un processeur. Au plus bas niveau, un programme est composé d’instructions qui s’exécutent l’une après l’autre dans l’ordre où elles sont rangées en mémoire.

Un langage de description de matériel permet à des électroniciens de réaliser des processeurs, des périphériques ou tout autre circuit numérique. Au plus bas niveau, un circuit est constitué de composants interconnectés qui fonctionnent en parallèle.

Pour cette raison, une description de matériel est constituée en premier lieu d’instructions concurrentes qui communiquent à travers des signaux. L’écriture d’algorithmes sous forme de séquences d’instructions est un cas particulier qui doit être isolé dans des processus.

Utilisations d’un langage de description de matériel

Les langages de description de matériel servent de point d’entrée à différents outils de conception électronique – en anglais, on utilise le terme EDA pour Electronic Design Automation.

Simulation

Un simulateur est un logiciel utilisé dans la mise au point d’une description de matériel. Son rôle est de simuler le fonctionnement d’un circuit auquel on présente un jeu de signaux d’entrée et d’enregistrer, ou d’afficher les chronogrammes des signaux.

La simulation est une activité incontournable pour détecter et corriger les bugs dans une description de matériel. Elle permet de vérifier le bon fonctionnement du circuit en mode boîte blanche avant sa réalisation. Cela a deux avantages :

VHDL, Verilog et SystemVerilog proposent une variété d’instructions permettant de décrire l’environnement du circuit à simuler et de créer des scénarios de test.

Le tableau ci-dessous propose quelques références d’outils de simulation :

Outil Auteur, éditeur Licence Langages
GHDL Tristan Gingold et contributeurs Libre (GPLv2) VHDL
Verilator Veripool Libre (LGPLv3) Verilog, SystemVerilog (synthétisable)
Icarus Verilog Stephen Williams Libre (GPLv2) Verilog, VHDL (partiellement)
Vivado Simulator Xilinx Commerciale VHDL, Verilog, SystemVerilog
Quartus Intel Commerciale VHDL, Verilog, SystemVerilog
Modelsim Mentor Commerciale VHDL, Verilog, SystemVerilog, SystemC

Parmi les outils libres, on citera également l’outil GTKWave, qui peut être utilisé conjointement avec GHDL, Verilator ou Icarus Verilog pour afficher des chronogrammes.

Vérification formelle

La simulation permet de vérifier le comportement d’une description pour les scénarios de fonctionnement que vous avez choisis de simuler. Malheureusement, certains bugs peuvent passer inaperçus jusqu’au moment où ils sont déclenchés sur le terrain par une situation non prévue dans nos scénarios.

Un outil de vérification formelle prend en entrée une description d’un circuit et un ensemble d’assertions, c’est-à-dire des propositions logiques qui doivent être toujours vraies. Votre description sera considérée comme correcte si l’outil parvient à établir la preuve qu’elle respecte les assertions. Si ce n’est pas le cas, l’outil pourra produire un contre-exemple, c’est-à-dire un scénario pour lequel au moins une assertion n’est pas vérifiée.

Le tableau ci-dessous propose quelques références d’outils de vérification formelle pour la description de matériel :

Outil Auteur, éditeur Licence Langages
SymbiYosys YosysHQ Libre (ISC) Verilog, VHDL (partiellement)
Questa Mentor Commerciale VHDL, Verilog, SystemVerilog, SystemC

Synthèse, placement-routage

La synthèse logique consiste à transformer la description d’un circuit en une interconnexion optimisée de composants logiques. Selon la nature du circuit à réaliser, ces composants peuvent être :

Le placement-routage consiste à organiser les composants sur la surface du circuit et à tracer les interconnexions entre ces composants.

VHDL a été initialement créé pour permettre la documentation et la simulation des circuits électroniques. Pour cette raison, le langage autorise des descriptions de haut niveau, très abstraites, qui peuvent servir de point de départ à une conception manuelle du circuit, mais pour lesquelles la synthèse automatique n’est pas toujours réalisable.

En pratique, les outils de synthèse acceptent seulement un sous-ensemble des langages de description de matériel.

Une description est dite synthétisable si elle respecte des règles d’écriture qui permettent d’associer les éléments de la description avec des structures de circuits logiques identifiables (opérations arithmétiques et logiques, multiplexeurs, registres, compteurs, machines à états).

Une description synthétisable est exprimée en termes de transferts de registres – on parle de description RTL pour Register Transfer Level. Elle sera typiquement organisée de manière à identifier des registres qui mémorisent des données sur des fronts d’un signal d’horloge, et des fonctions combinatoires qui font des calculs entre les fronts d’horloge, conformément à ce schéma :

Anatomie d'un circuit synchrone

Le tableau ci-dessous propose quelques références d’outils de synthèse :

Outil Auteur, éditeur Licence Langages Cibles
Yosys YosysHQ Libre (ISC) Verilog, VHDL (partiellement) ASIC, FPGA
Design Compiler Synopsys Commerciale VHDL, Verilog, SystemVerilog ASIC
Vivado Xilinx Commerciale VHDL, Verilog, SystemVerilog FPGA
Quartus Intel Commerciale VHDL, Verilog, SystemVerilog FPGA

VHDL et ses concurrents

VHDL

Les initiales VHDL signifient VHSIC Hardware Description Language, où VHSIC désigne le programme de recherche et développement Very High Speed Integrated Circuit initié par le gouvernement des USA en 1980. Ce programme a permis des avancées dans tous les domaines du développement et de la fabrication de circuits intégrés : matériaux, procédés de lithographie, boîtiers, tests, outils de conception, et langages de description.

VHDL est inspiré par le langage de programmation Ada, également conçu en réponse à un appel à proposition du Department of Defense des USA à la fin des années 1970. Comme Ada, VHDL repose sur un système de types de données strict qui vise à détecter très tôt certaines erreurs dans la manipulation des données, mais qui peut parfois sembler trop contraignant.

Depuis les années 1980, VHDL a fait l’objet de nombreuses améliorations. On désigne généralement les versions du langage de la manière suivante :

Verilog et SystemVerilog

Le langage Verilog a été créé entre 1983 et 1984 dans une entreprise appelée Automated Integrated Design Systems, qui sera renommée Gateway Design Automation avant d’être rachetée par Cadence. Comme VHDL, il s’agissait à l’origine d’un langage destiné à modéliser et simuler des circuits logiques. L’utilisation de Verilog pour la synthèse logique est apparue ultérieurement.

Verilog est un langage moins riche, et de plus bas niveau, que VHDL. Sa syntaxe plus légère et ses types de données plus permissifs le rendent plus facile à aborder, mais peuvent aussi rendre les descriptions moins lisibles et les erreurs plus difficiles à détecter.

Le langage SystemVerilog est une extension de Verilog proposée au début des années 2000. Comparé à Verilog, SystemVerilog apporte de nombreuses améliorations :

Langages dérivés de langages de programmation

Il s’agit ici de langages de programmation dont l’usage a été détourné pour permettre la description de matériel.

Langage Repose sur
Chisel Scala
Migen Python
MyHDL Python
PyMTL Python
SpinalHDL Scala
SystemC C++

Parmi eux SystemC est un standard IEEE, comme VHDL et Verilog. Il figure parmi les langages supportés par les outils de développement commerciaux.

Les descriptions de matériel en Python et Scala doivent d’abord être converties en VHDL ou en Verilog avant d’être synthétisées.

Dans la suite de ce document, vous allez vous familiariser avec le langage VHDL.

Ce langage étant très riche et complexe, nous n’en présentons qu’une partie en nous limitant aux éléments nécessaires à un débutant pour écrire des descriptions synthétisables.