El lenguaje de descripción de hardware ( HDL de lenguaje de descripción de hardware ) es un lenguaje informático especializado que se utiliza para describir la estructura y el comportamiento de los circuitos electrónicos , con mayor frecuencia circuitos lógicos digitales.
Los lenguajes de descripción de hardware son aparentemente similares a los lenguajes de programación como C o Pascal , los programas escritos en ellos también consisten en expresiones, operadores, estructuras de control. La diferencia más importante entre los lenguajes de programación convencionales y los lenguajes HDL es la inclusión explícita del concepto de tiempo en los lenguajes de descripción de hardware.
Los lenguajes de descripción de hardware son una parte esencial de CAD , especialmente para circuitos complejos como ASIC , microprocesadores y dispositivos lógicos programables .
Los principales lenguajes de descripción de hardware en la práctica son Verilog y VHDL ; también hay varias docenas de idiomas alternativos.
El primer HDL moderno, Verilog , fue creado por Gateway Design Automation en 1985 para describir VLSI. En 1987, se desarrolló VHDL ( VHSIC HDL) [1] sobre la base del lenguaje Ada por orden del Departamento de Defensa de EE. UU .
Inicialmente, tanto Verilog como VHDL se usaron para documentar y modelar soluciones de circuitos implementadas en una forma diferente (por ejemplo, como circuitos). El modelado con HDL ha permitido a los ingenieros trabajar a un nivel más alto de abstracción que el modelado a nivel de circuito y, por lo tanto, facilita el modelado de diseños con miles de transistores o más.
La introducción de la síntesis de circuitos lógicos de HDL lo ha convertido en el lenguaje principal para crear circuitos digitales. Los sistemas CAD de síntesis compilan archivos fuente (escritos en un subconjunto de HDL llamado RTL - nivel de transferencia de registro en inglés - nivel de transferencia de registro ) en una descripción de circuito en forma de listas de enlaces ( netlist , especificando las conexiones de válvulas y transistores ) . El código RTL requiere práctica y cumplimiento de una serie de reglas por parte del diseñador. En comparación con el diseño de circuitos tradicional, la creación de RTL sintetizados es menos laboriosa, pero a menudo conduce a circuitos algo más grandes y menos productivos.
En pocos años, VHDL y Verilog se convirtieron en los principales lenguajes HDL en la industria de la microelectrónica, y los primeros lenguajes cayeron gradualmente en desuso. Sin embargo, tanto VHDL como Verilog tienen limitaciones similares: no son adecuados para simulación analógica o mixta digital-analógica, no tienen construcciones de lenguaje para describir estructuras lógicas generadas recursivamente; en este sentido, se están creando varios HDL especializados, con el objetivo de eliminar estas limitaciones de los dos idiomas principales. Los lenguajes alternativos generalmente se crean sobre la base de lenguajes de programación de propósito general, por ejemplo, SystemC se desarrolló sobre la base de C ++ , JHDL sobre la base de Java y Bluespec , HHDL , Hydra , Lava se desarrollaron sobre la base de Haskell .
En las décadas transcurridas desde su creación, ambos idiomas principales se han modificado y mejorado significativamente. La última versión del lenguaje Verilog, estandarizado como IEEE 1800-2005 SystemVerilog , tiene muchas características nuevas (clases, variables aleatorias, propiedades y operadores de control) para satisfacer las crecientes necesidades de pruebas aleatorias , diseño jerárquico y reutilización de código. El último estándar VHDL se publicó en 2002.
La descripción de los equipos sobre VHDL y Verilog se puede realizar a nivel de flujos de datos ( dataflow ), comportamiento ( behavioural ), estructuras ( estructurales ). Un ejemplo de una descripción de flujos de datos en VHDL (una descripción de la entidad "not1", que tiene 1 puerto de entrada de 1 bit y 1 puerto de salida de 1 bit; esta entidad niega el valor de entrada):
biblioteca iEEE ; utilice iEEE.STD_LOGIC_1164. TODOS ; utilice iEEE.STD_NUMERIC_STD. TODOS ; entidad not1 es puerto ( a : en STD_LOGIC ; b : fuera de STD_logic ); fin not1 ; el comportamiento de la arquitectura de not1 es begin b <= not a ; acabar con el comportamiento ;