# Lenguaje de descripción de hardware

Un lenguaje de descripción de hardware (HDL, hardware description language) es un lenguaje de modelado especializado que se utiliza para definir la estructura, diseño y operación de circuitos electrónicos, y más comúnmente, de circuitos electrónicos digitales, como el convertidor analógico-digital o cualquier antena satelital. Así, los lenguajes de descripción de hardware hacen posible una descripción formal de un circuito electrónico, y posibilitan su análisis automático y su simulación.
Los lenguajes de descripción de hardware se parecen mucho a otros lenguajes de programación de ordenadores tales como el C o Java: básicamente consisten en una descripción textual con expresiones, declaraciones y estructuras de control. Sin embargo, una importante diferencia entre los HDL y otros lenguajes de programación está en que el HDL incluye explícitamente la noción de tiempo.

## Orígenes

Debido a la creciente complejidad de los circuitos electrónicos digitales desde la década de 1970, los diseñadores de circuitos necesitaban descripciones de alto nivel de la lógica digital que no estuviesen atadas a una determinada tecnología electrónica, tales como la CMOS o la BJT. Así, los HDL fueron creados para hacer posible el diseño de circuitos con un alto nivel de abstracción, y con la posibilidad de incluir en los modelos características propias de los circuitos electrónicos, tales como los flujos de datos y su variación en el tiempo.

## Estructura de los HDL

Los HDL utilizan expresiones estándar basadas en texto que reflejan la estructura de los circuitos electrónicos, si se viera dentro de una tarjeta, se podrían observar más de un millón de compuertas a disposición del programador. Al igual que los lenguajes de programación concurrentes, la sintaxis y semántica de los HDL incluyen notaciones específicas para la concurrencia. Sin embargo, al contrario de lo que ocurre con la mayoría de los lenguajes de programación, los HDL incluyen también una notación específica para el tiempo, debido a que este es una característica fundamental en los circuitos electrónicos reales. Los lenguajes cuyo único propósito es expresar la conectividad entre una jerarquía de bloques son más bien clasificados como "lenguajes de listas de conexiones" (o lenguajes "netlist"), tales como los que se usan en los programas de diseño asistido por ordenador (CAD). Los HDL son algo más rico que estos lenguajes de listas de conexiones, ya que no sólo permiten definir la estructura de un circuito, sino también su comportamiento.
Así, los HDL pueden ser usados para escribir especificaciones "ejecutables" de hardware. Es decir, un programa escrito en HDL hace posible que el diseñador de hardware pueda modelar y simular un componente electrónico antes de que este sea construido físicamente. Es esta posibilidad de "ejecución" de componentes lo que hace que a veces los HDL se vean como lenguajes de programación convencionales, cuando en realidad se debería clasificarlos más precisamente como lenguajes de modelado.
En la práctica existen distintos tipos de simuladores capaces de trabajar tanto con eventos discretos (digitales) como continuos (analógicos), existiendo lenguajes HDL específicos para cada caso.
Pero desde el punto de vista práctico, una gran ventaja de los HDL está en que, utilizando un programa llamado "sintetizador" es posible inferir, a partir de la expresión textual del programa, el conjunto de operaciones lógicas y el circuito equivalente necesarios para realizar la función del programa. Esto permite saltar desde el ámbito de la simulación software al de la implementación real del hardware sobre circuitos lógicos reales tales como los ASIC o las FPGA.

## Lenguajes

* VHDL
* Verilog
* ABEL HDL
* Otros lenguajes HDL propietarios