stringtranslate.com

VHDL

Fuente VHDL para un sumador firmado

VHDL ( VHSIC Hardware Description Language) es un lenguaje de descripción de hardware que puede modelar el comportamiento y la estructura de sistemas digitales en múltiples niveles de abstracción, que van desde el nivel del sistema hasta el de las puertas lógicas , para fines de entrada de diseño, documentación y verificación. El lenguaje fue desarrollado para el programa VHSIC militar de EE. UU. en la década de 1980 y ha sido estandarizado por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) como IEEE Std 1076 ; cuya última versión es IEEE Std 1076-2019 . Para modelar sistemas analógicos y de señal mixta , se ha desarrollado un HDL estandarizado por IEEE basado en VHDL llamado VHDL-AMS (oficialmente IEEE 1076.1).

Historia

En 1983, VHDL fue desarrollado originalmente por orden del Departamento de Defensa de los Estados Unidos con el fin de documentar el comportamiento de los ASIC que las empresas proveedoras estaban incluyendo en los equipos. La norma MIL-STD-454N [2] en el Requisito 64 en la sección 4.5.1 "Documentación de ASIC en VHDL" requiere explícitamente la documentación de los "Dispositivos Microelectrónicos" en VHDL.

La idea de poder simular los circuitos ASIC a partir de la información de esta documentación era tan atractiva que se desarrollaron simuladores lógicos que podían leer los archivos VHDL. El siguiente paso fue el desarrollo de herramientas de síntesis lógica que leen el VHDL y generan una definición de la implementación física del circuito.

Debido a que el Departamento de Defensa requiere que la mayor parte posible de la sintaxis se base en Ada, para evitar reinventar conceptos que ya se habían probado exhaustivamente en el desarrollo de Ada, [ cita requerida ] VHDL toma prestado mucho del lenguaje de programación Ada tanto en concepto como en sintaxis .

La versión inicial de VHDL, diseñada según el estándar IEEE 1076-1987, [3] incluía una amplia gama de tipos de datos, incluidos numéricos ( enteros y reales ), lógicos ( bits y booleanos ), de caracteres y de tiempo , además de matrices de bitllamadas bit_vectory de cadenas de caracterescharacter llamadas .

Sin embargo, un problema que no se resolvió en esta edición fue la "lógica multivalor", en la que también se consideran la intensidad de la señal (ninguna, débil o fuerte) y los valores desconocidos. Esto requirió el estándar IEEE 1164 , que definió los tipos de lógica de 9 valores: escalar std_logicy su versión vectorial std_logic_vector. Al ser un subtipo resuelto de su std_Ulogictipo padre, std_logiclas señales con tipo permiten una conducción múltiple para modelar estructuras de bus, por lo que la función de resolución conectada maneja las asignaciones conflictivas de manera adecuada.

La versión actualizada del IEEE 1076 , en 1993, hizo que la sintaxis fuera más consistente, permitió mayor flexibilidad en la denominación, extendió el charactertipo para permitir caracteres imprimibles ISO-8859-1 , agregó el xnoroperador, etc. [ especificar ]

Cambios menores en el estándar (2000 y 2002) agregaron la idea de tipos protegidos (similar al concepto de clase en C++ ) y eliminaron algunas restricciones de las reglas de mapeo de puertos.

Además del estándar IEEE 1164, se introdujeron varios estándares secundarios para ampliar la funcionalidad del lenguaje. El estándar IEEE 1076.2 agregó un mejor manejo de tipos de datos reales y complejos. El estándar IEEE 1076.3 introdujo tipos con y sin signo para facilitar las operaciones aritméticas en vectores. El estándar IEEE 1076.1 (conocido como VHDL-AMS ) proporcionó extensiones de diseño de circuitos analógicos y de señal mixta.

Algunos otros estándares apoyan un uso más amplio de VHDL, en particular VITAL (VHDL Initiative Towards ASIC Libraries) y las extensiones de diseño de circuitos de microondas .

En junio de 2006, el Comité Técnico VHDL de Accellera (delegado por IEEE para trabajar en la próxima actualización del estándar) aprobó el llamado Borrador 3.0 de VHDL-2006. Si bien mantiene la compatibilidad total con versiones anteriores, este estándar propuesto proporciona numerosas extensiones que facilitan la escritura y la gestión de código VHDL. Los cambios clave incluyen la incorporación de estándares secundarios (1164, 1076.2, 1076.3) en el estándar principal 1076, un conjunto extendido de operadores, una sintaxis más flexible de sentencias case y generate , la incorporación de VHPI (VHDL Procedural Interface) (interfaz para lenguajes C/C++) y un subconjunto de PSL ( Property Specification Language ). Estos cambios deberían mejorar la calidad del código VHDL sintetizable, hacer que los bancos de pruebas sean más flexibles y permitir un uso más amplio de VHDL para descripciones a nivel de sistema.

En febrero de 2008, Accellera aprobó VHDL 4.0, también conocido informalmente como VHDL 2008, que solucionaba más de 90 problemas descubiertos durante el período de prueba de la versión 3.0 e incluía tipos genéricos mejorados. En 2008, Accellera presentó VHDL 4.0 al IEEE para su votación para su inclusión en el estándar IEEE 1076-2008. El estándar VHDL IEEE 1076-2008 [4] se publicó en enero de 2009.

Normalización

El estándar IEEE 1076 define el lenguaje de descripción de hardware VHSIC o VHDL. Fue desarrollado originalmente bajo el contrato F33615-83-C-1003 de la Fuerza Aérea de los Estados Unidos otorgado en 1983 a un equipo de Intermetrics, Inc. como expertos en lenguaje y contratista principal, Texas Instruments como expertos en diseño de chips e IBM como expertos en diseño de sistemas informáticos. El lenguaje ha sufrido numerosas revisiones y tiene una variedad de subestándares asociados que lo amplían o extienden de maneras importantes.

1076 fue y sigue siendo un hito en el diseño de sistemas electrónicos. [5]

Revisiones

Diseño

VHDL se utiliza generalmente para escribir modelos de texto que describen un circuito lógico. Un programa de síntesis procesa un modelo de este tipo solo si forma parte del diseño lógico. Un programa de simulación se utiliza para probar el diseño lógico utilizando modelos de simulación para representar los circuitos lógicos que interactúan con el diseño. Esta colección de modelos de simulación se denomina comúnmente banco de pruebas .

Un simulador VHDL es típicamente un simulador controlado por eventos. [13] Esto significa que cada transacción se agrega a una cola de eventos durante un tiempo programado específico. Por ejemplo, si una asignación de señal debe ocurrir después de 1 nanosegundo, el evento se agrega a la cola durante un tiempo +1 ns. También se permite un retraso cero, pero aún debe programarse: para estos casos se utiliza el retraso delta , que representa un paso de tiempo infinitamente pequeño. La simulación alterna entre dos modos: ejecución de declaraciones, donde se evalúan las declaraciones activadas, y procesamiento de eventos, donde se procesan los eventos en la cola.

VHDL tiene construcciones para manejar el paralelismo inherente a los diseños de hardware, pero estas construcciones ( procesos ) difieren en sintaxis de las construcciones paralelas en Ada ( tareas ). Al igual que Ada, VHDL está fuertemente tipado y no distingue entre mayúsculas y minúsculas . Para representar directamente operaciones que son comunes en hardware, hay muchas características de VHDL que no se encuentran en Ada, como un conjunto extendido de operadores booleanos que incluyen nand y nor .

VHDL tiene capacidades de entrada y salida de archivos y se puede utilizar como un lenguaje de propósito general para el procesamiento de texto, pero los archivos son más comúnmente utilizados por un banco de pruebas de simulación para datos de estímulo o verificación. Hay algunos compiladores de VHDL que crean binarios ejecutables. En este caso, podría ser posible utilizar VHDL para escribir un banco de pruebas para verificar la funcionalidad del diseño utilizando archivos en la computadora host para definir estímulos, interactuar con el usuario y comparar los resultados con los esperados. Sin embargo, la mayoría de los diseñadores dejan esta tarea al simulador.

Es relativamente fácil para un desarrollador inexperto producir código que simule con éxito pero que no pueda sintetizarse en un dispositivo real o que sea demasiado grande para ser práctico. Un problema particular es la producción accidental de pestillos transparentes en lugar de flip-flops de tipo D como elementos de almacenamiento. [14]

Se puede diseñar hardware en un IDE VHDL (para implementación FPGA como Xilinx ISE, Altera Quartus, Synopsys Synplify o Mentor Graphics HDL Designer) para producir el esquema RTL del circuito deseado. Después de eso, el esquema generado se puede verificar utilizando un software de simulación que muestra las formas de onda de las entradas y salidas del circuito después de generar el banco de pruebas adecuado. Para generar un banco de pruebas adecuado para un circuito particular o código VHDL, las entradas deben definirse correctamente. Por ejemplo, para la entrada de reloj, se requiere un proceso de bucle o una declaración iterativa. [15]

Un punto final es que cuando un modelo VHDL se traduce a las "puertas y cables" que se asignan a un dispositivo lógico programable como un CPLD o FPGA , entonces es el hardware real el que se configura, en lugar del código VHDL que se "ejecuta" como si estuviera en alguna forma de chip procesador.

Ventajas

La principal ventaja de VHDL, cuando se utiliza para el diseño de sistemas, es que permite describir (modelar) y verificar (simular) el comportamiento del sistema requerido antes de que las herramientas de síntesis traduzcan el diseño en hardware real (puertas y cables).

Otra ventaja es que VHDL permite la descripción de un sistema concurrente . VHDL es un lenguaje de flujo de datos en el que cada instrucción se considera para su ejecución simultánea, a diferencia de los lenguajes de computación procedimental como BASIC, C y código ensamblador, donde una secuencia de instrucciones se ejecuta secuencialmente, una instrucción a la vez.

Un proyecto VHDL es multipropósito. Al crearse una sola vez, un bloque de cálculo se puede utilizar en muchos otros proyectos. Sin embargo, se pueden ajustar muchos parámetros de formación y funcionamiento del bloque (parámetros de capacidad, tamaño de memoria, base de elementos, composición del bloque y estructura de interconexión).

Un proyecto VHDL es portable. Al estar creado para una base de elementos, un proyecto de dispositivo informático puede ser portado a otra base de elementos, por ejemplo VLSI con varias tecnologías.

Una gran ventaja de VHDL en comparación con el Verilog original es que VHDL tiene un sistema de tipos completo . Los diseñadores pueden usar el sistema de tipos para escribir código mucho más estructurado (especialmente al declarar tipos de registros ). [16]

Ejemplos de diseño

En VHDL, un diseño consta como mínimo de una entidad que describe la interfaz y una arquitectura que contiene la implementación real. Además, la mayoría de los diseños importan módulos de biblioteca. Algunos diseños también contienen múltiples arquitecturas y configuraciones .

Una puerta AND simple en VHDL se vería así:

-- (este es un comentario VHDL) /* este es un comentario de bloque ( VHDL - 2008 ) */ -- importar std_logic de la biblioteca IEEE library IEEE ; usar IEEE.std_logic_1164. all ;        -- esta es la entidad entidad ANDGATE es puerto ( I1 : en std_logic ; I2 : en std_logic ; O : fuera std_logic ) ; fin entidad ANDGATE ;                   -- esta es la arquitectura arquitectura RTL de ANDGATE es begin O <= I1 y I2 ; end arquitectura RTL ;           

(Tenga en cuenta que RTLsignifica diseño de nivel de transferencia de registros ). Si bien el ejemplo anterior puede parecer extenso para los principiantes de HDL, muchas partes son opcionales o deben escribirse solo una vez. Generalmente, las funciones simples como esta son parte de un módulo de comportamiento más grande, en lugar de tener un módulo separado para algo tan simple. Además, el uso de elementos como el std_logictipo puede parecer al principio una exageración. Uno podría usar fácilmente el tipo incorporado bity evitar la importación de la biblioteca al principio. Sin embargo, usar una forma de lógica de muchos valores , específicamente lógica de 9 valores ( U, X, 0, 1, Z, W, , H, L, -), en lugar de bits simples (0,1) ofrece una herramienta de simulación y depuración muy poderosa para el diseñador que actualmente no existe en ningún otro HDL.

En los ejemplos que siguen, verá que el código VHDL se puede escribir de forma muy compacta. Sin embargo, los diseñadores más experimentados suelen evitar estas formas compactas y utilizan un estilo de codificación más detallado para facilitar la lectura y el mantenimiento.

Construcciones sintetizables y plantillas VHDL

El VHDL se utiliza con frecuencia para dos objetivos diferentes: simulación de diseños electrónicos y síntesis de dichos diseños. La síntesis es un proceso en el que se compila un VHDL y se lo convierte en una tecnología de implementación, como un FPGA o un ASIC.

No todas las construcciones en VHDL son adecuadas para la síntesis. Por ejemplo, la mayoría de las construcciones que tratan explícitamente con el tiempo, como wait for 10 ns;no son sintetizables a pesar de ser válidas para la simulación. Si bien las diferentes herramientas de síntesis tienen diferentes capacidades, existe un subconjunto sintetizable común de VHDL que define qué construcciones y modismos del lenguaje se asignan a hardware común para muchas herramientas de síntesis. IEEE 1076.6 define un subconjunto del lenguaje que se considera el subconjunto oficial de síntesis. En general, se considera una "práctica recomendada" escribir código muy idiomático para síntesis, ya que los resultados pueden ser incorrectos o subóptimos para construcciones no estándar.

Plantilla MUX

El multiplexor , o 'MUX' como se lo suele llamar, es una construcción simple muy común en el diseño de hardware. El ejemplo siguiente demuestra un MUX simple de dos a uno, con entradas Ay B, selector Sy salida X. Tenga en cuenta que existen muchas otras formas de expresar el mismo MUX en VHDL. [17]

X <= A cuando S = '1' de lo contrario B ;        

Un ejemplo más complejo de un MUX con 4x3 entradas y un selector de 2 bits:

biblioteca IEEE ; utiliza IEEE.std_logic_1164. all ; entidad mux4 es puerto ( a1 : en std_logic_vector ( 2 downto 0 ); a2 : en std_logic_vector ( 2 downto 0 ); a3 : en std_logic_vector ( 2 downto 0 ) ; a4 : en std_logic_vector ( 2 downto 0 ); sel : en std_logic_vector ( 1 downto 0 ); b : fuera std_logic_vector ( 2 downto 0 ) ); fin mux4 ; arquitectura rtl de mux4 es -- parte declarativa: vacío comienzo p_mux : proceso ( a1 , a2 , a3 , a4 , sel ) comienzo caso sel es cuando "00" => b <= a1 ; cuando "01" => b <= a2 ; cuando "10" => b <= a3 ; cuando otros => b <= a4 ; fin del caso ; fin del proceso p_mux ; fin de rtl ;                                                                                         

Plantilla de pestillo

Un latch transparente es básicamente un bit de memoria que se actualiza cuando se activa una señal de habilitación. Nuevamente, existen muchas otras formas de expresar esto en VHDL.

-- plantilla de pestillo 1: Q <= D cuando Habilitar = '1' de lo contrario Q ;        -- plantilla de pestillo 2: proceso ( todos ) comienzan Q <= D cuando ( Habilitar ); fin del proceso ;     

Chanclas tipo D

El flip-flop tipo D muestrea una señal entrante en el borde ascendente (o descendente) de un reloj. Este ejemplo tiene un reinicio activo alto asíncrono y muestrea en el borde ascendente del reloj.

DFF : el proceso ( todos ) es comenzar si RST entonces Q <= '0' ; sino si borde_ascendente ( CLK ) entonces Q <= D ; fin si ; fin del proceso DFF ;                   

Otra forma común de escribir un comportamiento activado por flancos en VHDL es con el atributo de señal 'evento'. Se debe escribir un solo apóstrofo entre el nombre de la señal y el nombre del atributo.

DFF : el proceso ( RST , CLK ) es comenzar si RST entonces Q <= '0' ; si no, CLK 'evento y CLK = '1' entonces Q <= D ; fin si ; fin del proceso DFF ;                        

VHDL también se presta para frases breves como

DFF : Q <= '0' cuando RST = '1' de lo contrario D cuando borde ascendente ( clk );            

o

DFF : el proceso ( todos ) es comenzar si borde_ascendente ( CLK ) entonces Q <= D ; fin si ; si RST entonces Q <= '0' ; fin si ; fin del proceso DFF ;                      

o:

Biblioteca IEEE ; USE IEEE.Std_logic_1164. todos ;  entidad RisingEdge_DFlipFlop_SyncReset es puerto ( Q : salida std_logic ; Clk : entrada std_logic ; sync_reset : entrada std_logic ; D : entrada std_logic ); fin RisingEdge_DFlipFlop_SyncReset ;                         arquitectura Comportamiento de RisingEdge_DFlipFlop_SyncReset es comenzar proceso ( Clk ) comenzar si ( rising_edge ( Clk )) entonces si ( sync_reset = '1' ) entonces Q <= '0' ; de lo contrario Q <= D ; fin si ; fin si ; fin proceso ; fin Comportamiento ;                                

Lo cual puede ser útil si no se deben restablecer todas las señales (registros) controlados por este proceso.

Ejemplo: un contador

El siguiente ejemplo es un contador ascendente con reinicio asincrónico, carga paralela y ancho configurable. Demuestra el uso del tipo 'unsigned', las conversiones de tipos entre 'unsigned' y 'std_logic_vector' y los genéricos de VHDL . Los genéricos son muy similares a los argumentos o plantillas en otros lenguajes de programación tradicionales como C++. El ejemplo está en lenguaje VHDL 2008.

biblioteca IEEE ; utilice IEEE.std_logic_1164. all ; utilice IEEE.numeric_std. all ; -- para el tipo sin signo    entidad COUNTER es genérica ( ANCHO : en natural := 32 ); puerto ( RST : en std_logic ; CLK : en std_logic ; LOAD : en std_logic ; DATA : en std_logic_vector ( ANCHO - 1 hasta 0 ); Q : fuera std_logic_vector ( ANCHO - 1 hasta 0 )); fin entidad COUNTER ;                                      La arquitectura RTL de COUNTER es    comenzar proceso ( todos ) es comenzar si RST entonces Q <= ( otros => '0' ); elsif borde_ascendente ( CLK ) entonces si CARGAR = '1' entonces Q <= DATOS ; de lo contrario Q <= std_logic_vector ( unsigned ( Q ) + 1 ); fin si ; fin si ; fin proceso ;                               arquitectura final RTL ;  

Los contadores más complejos pueden agregar instrucciones if/then/else dentro de ellos rising_edge(CLK) elsifpara agregar otras funciones, como habilitar conteos, detener o dar vuelta en algún valor de conteo, generar señales de salida como señales de conteo terminales, etc. Se debe tener cuidado con el orden y anidamiento de dichos controles si se usan juntos, para producir las prioridades deseadas y minimizar la cantidad de niveles lógicos necesarios.

Construcciones que solo son de simulación

Un gran subconjunto de VHDL no se puede traducir al hardware. Este subconjunto se conoce como el subconjunto no sintetizable o el subconjunto de solo simulación de VHDL y solo se puede utilizar para la creación de prototipos, la simulación y la depuración. Por ejemplo, el siguiente código generará un reloj con una frecuencia de 50 MHz. Se puede utilizar, por ejemplo, para controlar una entrada de reloj en un diseño durante la simulación. Sin embargo, es una construcción de solo simulación y no se puede implementar en hardware. En el hardware real, el reloj se genera externamente; se puede reducir internamente mediante la lógica del usuario o hardware dedicado.

proceso comienza CLK <= ' 1' ; espera 10 NS ; CLK < = '0' ; espera 10 NS ; fin proceso ;               

Las construcciones que solo permiten la simulación se pueden utilizar para crear formas de onda complejas en muy poco tiempo. Dichas formas de onda se pueden utilizar, por ejemplo, como vectores de prueba para un diseño complejo o como prototipo de alguna lógica de sintetizador que se implementará en el futuro.

proceso comienza espera hasta que START = '1' ; -- espera hasta que START sea alto para i en un bucle de 1 a 10 -- luego espera unos pocos períodos de reloj... espera hasta el borde ascendente ( CLK ); fin del bucle ;                     para i en bucle 1 a 10 - escribe los números del 1 al 10 en DATA, 1 cada ciclo DATA <= to_unsigned ( i , 8 ); espera hasta el flanco ascendente ( CLK ); fin del bucle ;                 -- esperar hasta que cambie la salida esperar en RESULTADO ; -- ahora generar ACK para el período de reloj ACK <= '1' ; esperar hasta borde ascendente ( CLK ); ACK <= '0' ;               -- y así sucesivamente... fin del proceso ; 

Características de VHDL-2008

Alias ​​jerárquicos

biblioteca ieee ; utiliza ieee.std_logic_1164. todo ;  entidad bfm es entidad final ; arquitectura beh de bfm es señal en : std_logic ; begin -- inserta implementación aquí fin arquitectura ;             // ------------------------------------------ biblioteca ieee ; utiliza ieee.std_logic_1164. all ;  La entidad test1 es la entidad final ; la arquitectura beh de test1 es el comienzo         ibfm : entidad work . bfm ; -- El alias del proceso del banco de pruebas probe_en es << signal . test1 . ibfm . en : std_logic >> ; begin probe_en <= '1' ; esperar 100 ns ; probe_en <= '0' ; esperar 100 ns ; probe_en < = '1' ; esperar 100 ns ; std.env . stop ( 0 ); fin del proceso ; fin de la arquitectura ;                                     

Bibliotecas estándar

También conocidos como paquetes estándar.

Paquete de normas IEEE

El paquete estándar IEEE incluye lo siguiente: [18]

Simuladores VHDL

Comercial:

Otro:

Véase también

Referencias

  1. ^ David R. Coelho (30 de junio de 1989). The VHDL Handbook. Springer Science & Business Media. ISBN 978-0-7923-9031-2.
  2. ^ Departamento de Defensa (1992). Norma militar, Requisitos generales estándar para equipos electrónicos . Consultado el 15 de noviembre de 2017 .
  3. ^ ab 1076-1987 – Manual de referencia del lenguaje VHDL estándar IEEE . 1988. doi :10.1109/IEEESTD.1988.122645. ISBN 0-7381-4324-3.
  4. ^ 1076-2008 – Manual de referencia del lenguaje VHDL estándar IEEE . 2009. doi :10.1109/IEEESTD.2009.4772740. ISBN 978-0-7381-6854-8.
  5. ^ Grupo de trabajo IEEE P1076 Grupo de análisis y estandarización de VHDL (VASG)
  6. ^ 1076-1993 – Manual de referencia del lenguaje VHDL estándar IEEE . 1994. doi :10.1109/IEEESTD.1994.121433. ISBN 0-7381-0986-X.
  7. ^ 1076-2000 – Manual de referencia del lenguaje VHDL estándar IEEE . 2000. doi :10.1109/IEEESTD.2000.92297. ISBN 0-7381-1948-2.
  8. ^ 1076-2002 – Manual de referencia del lenguaje VHDL estándar IEEE . 2002. doi :10.1109/IEEESTD.2002.93614. ISBN 0-7381-3247-0.
  9. ^ IEC 61691-1-1 Primera edición 2004-10; IEEE 1076 — Lenguajes de comportamiento IEC/IEEE – Parte 1-1: Manual de referencia del lenguaje VHDL (Adopción de la norma IEEE 1076-2002) . 2004. doi :10.1109/IEEESTD.2004.95752. ISBN 2-8318-7691-5.
  10. ^ 1076c-2007 – Manual de referencia del lenguaje VHDL estándar IEEE, enmienda 1: Interfaz de aplicación del lenguaje procedimental . 2007. doi :10.1109/IEEESTD.2007.4299594. ISBN 978-0-7381-5523-4.
  11. ^ 61691-1-1-2011 — Lenguajes de comportamiento – Parte 1-1: Manual de referencia del lenguaje VHDL . 2011. doi :10.1109/IEEESTD.2011.5967868. ISBN 978-0-7381-6605-6.
  12. ^ "IEEE 1076.6-2004 - Estándar IEEE para síntesis de nivel de transferencia de registro (RTL) VHDL".
  13. ^ "ELEC3017 - Simulación" (PDF) . Universidad de Southampton. Archivado (PDF) desde el original el 23 de febrero de 2017 . Consultado el 23 de febrero de 2017 .
  14. ^ "¿Por qué debería importarme el uso de cierres transparentes?". Doulos . Consultado el 22 de diciembre de 2012 .
  15. ^ "Generación del reloj". Doulos . Consultado el 22 de diciembre de 2012 .
  16. ^ Jiri Gaisler. "Un método de diseño VHDL estructurado" (PDF) . Archivado (PDF) desde el original el 10 de octubre de 2022. Consultado el 15 de noviembre de 2017 .
  17. ^ "Operadores lógicos VHDL y asignaciones de señales para lógica combinatoria". FPGAtutorial . 16 de mayo de 2020 . Consultado el 23 de agosto de 2020 .
  18. ^ Chiusano, Silvia (5 de abril de 2011). "Tipos de datos y operadores VHDL disponibles en los paquetes estándar IEEE" (PDF) . Universidad Politécnica de Turín . Archivado (PDF) desde el original el 10 de octubre de 2022.
  19. ^ "VCS: la solución de simulación de mayor rendimiento de la industria". synopsis.com .
  20. ^ "Derechos de autor | Licencias". Documentación de GHDL -- Documentación de GHDL 0.36-dev . readthedocs.io.
  21. ^ Gasson, Nick (5 de noviembre de 2011). "Cómo escribir un compilador VHDL".
  22. ^ Gasson, Nick (22 de julio de 2023). «NVC - Compilador y simulador de VHDL» . Consultado el 23 de julio de 2023 .
  23. ^ "freehdl: By Thread". Archivado desde el original el 10 de febrero de 2002.
Notas

Lectura adicional

Enlaces externos