# Langage de description de matériel

Un langage de description de matériel, ou du matériel (ou HDL pour hardware description language en anglais) est un langage permettant la description d'un circuit électronique au niveau des transferts de registres (RTL). Celui-ci peut décrire les fonctions réalisées par le circuit (description comportementale) ou les portes logiques utilisées par le circuit (description structurelle). C'est un type de langage utilisé pour développer des processeurs sur FPGA (type de circuit logique programmable) ou ASIC (circuit figé). Le développement de ce dernier passe par des phases de développement sur circuit programmable, mais le circuit programmable est également souvent utilisé tel quel dans différentes applications allant du domaine industriel, de recherche, au domaine de l'amateur.

## Principes

À la différence d'un langage de programmation logiciel, la syntaxe et la sémantique d'un HDL incluent des notations explicites pour exprimer le temps et le parallélisme qui sont les attributs principaux du matériel.
Un synthétiseur logique permet de transformer un circuit décrit dans un langage de description de matériel en une netlist.

## Outils d'aide au développement
### Langages de très haut niveau

Des langages de plus haut niveau tels que Chisel, Migen ou Silice permettent un développement plus rapide, avec un code source plus concis, des applications, elles sont transpilées en HDL avant la synthétisation du circuit.

### Développement graphique

Différents environnements de développements, possèdent des outils, tels que Icestudio, permettant de concevoir le circuit logique graphiquement et d'en extraire le code dans un HDL$^,$

### Simulation et débogage

Le langage de vérification de matériel (HVL) est un outil complémentaire permettant de valider et simuler le circuit créé à l'aide du langage de description.
Il est possible d'observer le fonctionnement d'un circuit électronique modélisé dans un langage de description grâce à des extensions de vérification, à la simulation et à des données d'historique (anglais : log) d'exécution. Des extensions de simulation au langage, tels que SystemVerilog permettent de faire des tests unitaires, SystemC permet de simuler plus finement le comportement du circuit, en appelant des fonctionnalités du système d'exploitation du développeur. Des outils tels que Icarus Verilog ou Verilator permettent d'exécuter la simulation sur ordinateur. GTKWave permet l'analyse de l'historique des signaux et états.

## Langages de description de matériel

Langages de description purement numérique, de différents degrés d'abstraction.
* Advanced Boolean Expression Language (ABEL) orienté bas niveau ;
* AHDL (Altera HDL) langage propriétaire essentiellement structurel proche d'ABEL ;
* Chisel, langage basé sur Scala, et convertible en Verilog ;
* Migen, ainsi que Amaranth HDL (auparavant nMigen et HDPython, langages écrits et utilisant le langage Python ;
* OpenCL, langage destiné à l'analyse numérique, il est également utilisé pour le développement de circuits électroniques ;
* RHDL, HDL en langage Ruby ;
* Silice, un langage de haut niveau, exposant l'utilisation des cycles d'horloge, et convertible en Verilog ;
* SystemC utilisant le C++ et qui permet de modéliser les interactions logiciel/matériel, pour la simulation ;
* Verilog mélange description structurelle et algorithmique ;
* VHDL légèrement plus abstrait que Verilog qui est inspiré de ADA.
Les langages mixtes, qui sont souvent des extensions des précédents. Ils permettent la modélisation des systèmes à l'aide d'équations différentielles.
* Verilog-AMS ;
* VHDL-AMS ;
* Modelica langage de modélisation généraliste orienté objet.