fbpx
Wikipedia

VHDL

VHDL es un lenguaje de especificación definido por el IEEE (Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) utilizado para describir circuitos digitales y para la automatización de diseño electrónico . VHDL es acrónimo proveniente de la combinación de dos acrónimos: VHSIC (Very High Speed Integrated Circuit) y HDL (Hardware Description Language). Aunque puede ser usado de forma general para describir cualquier circuito digital se usa principalmente para programar PLD (Programable Logic Device - Dispositivo Lógico Programable), FPGA (Field Programmable Gate Array), ASIC y similares.

Originalmente, el lenguaje VHDL fue desarrollado por el departamento de defensa de los Estados Unidos a inicios de los años 80 basado en el lenguaje de programación ADA con el fin de simular circuitos eléctricos digitales. Posteriormente se desarrollaron herramientas de síntesis e implementación en hardware a partir de los archivos VHD.

Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero estos no son prácticos en diseños complejos. Otros lenguajes para el mismo propósito, pero con un nivel de abstracción superior son Verilog y ABEL.

Formas de describir un circuito

Dentro del VHDL hay varias formas con las que se puede diseñar el mismo circuito y es tarea del diseñador elegir la más apropiada.

  • Funcional o comportamental: Se describe la forma en que se comporta el circuito digital, se tiene en cuenta solo las características del circuito respecto al comportamiento de las entradas y las salidas. Esta es la forma que más se parece a los lenguajes de software ya que la descripción puede ser secuencial, además de combinar características concurrentes. Estas sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL. Los procesos son ejecutados en paralelo entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a otros componentes.
  • Flujo de datos: Se describen asignaciones concurrentes (en paralelo) de señales.
  • Estructural: Se describe el circuito con instancias de componentes. Estas instancias forman un diseño de jerarquía superior, al conectar los puertos de estas instancias con las señales internas del circuito, o con puertos del circuito de jerarquía superior. Es la recomendada cuando el diseño digital se vuelve complejo o está conformado por múltiples bloques de hardware.
  • Mixta: combinación de todas o algunas de las anteriores.

En VHDL también existen formas metódicas para el diseño de máquinas de estados, filtros digitales, bancos de pruebas etc.

Secuencia de diseño

El flujo de diseño de un sistema podría ser:

  • División del diseño principal en módulos separados. La modularidad es uno de los conceptos principales de todo diseño. Normalmente se diferencia entre dos metodologías de diseño: top-down y bottom-up. La metodología top-down consiste en que un diseño complejo se divide en diseños más sencillos que se puedan diseñar (o describir) más fácilmente. La metodología bottom-up consiste en construir un diseño complejo a partir de módulos, ya diseñados, más simples. En la práctica, un diseño usa generalmente ambas metodologías.
  • Entrada de diseños, pueden usarse diversos métodos tal como se vio anteriormente.
  • Simulación funcional, es decir, comprobaremos que lo escrito en el punto anterior realmente funciona como queremos, si no lo hace tendremos que modificarlo. En este tipo de simulación se comprueba que el código VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende.
  • Síntesis. En este paso se adapta el diseño anterior (que sabemos que funciona) a un hardware en concreto, ya sea una FPGA o un ASIC. Hay sentencias del lenguaje que no son sintetizables, como por ejemplo divisiones o exponenciaciones con números no constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables es que el VHDL es un lenguaje genérico para modelado de sistemas (no sólo para diseño de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la síntesis se tiene en cuenta la estructura interna del dispositivo, y se definen restricciones, como la asignación de pines. El sintetizador optimiza las expresiones lógicas con objeto de que ocupen menor área, o bien son eliminadas las expresiones lógicas que no son usadas por el circuito.
  • Simulación post-síntesis. En este tipo de simulación se comprueba que el sintetizador ha realizado correctamente la síntesis del circuito, al transformar el código HDL en bloques lógicos conectados entre sí. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de síntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo.
  • Ubicación y enrutamiento. El proceso de ubicación consiste en situar los bloques digitales obtenidos en la síntesis de forma óptima, de forma que aquellos bloques que se encuentran muy interconectados entre sí se sitúen próximamente. El proceso de enrutamiento consiste en interconectar adecuadamente los bloques entre sí, intentando minimizar retardos de propagación para maximizar la frecuencia máxima de funcionamiento del dispositivo.
  • Anotación final. Una vez ha sido completado el proceso de ubicación y enrutamiento, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulación temporal (también llamada simulación post-layout). Estos retardos son anotados en un fichero SDF (Standard Delay Format) que asocia a cada bloque o interconexión un retardo mínimo/típico/máximo.
  • Simulación temporal. A pesar de la simulación anterior puede que el diseño no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulación se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos.
  • Programación en el dispositivo. Se implementa el diseño en el dispositivo final y se comprueba el resultado.

Procedimiento de diseño

El primer paso del diseño consiste en la construcción del diagrama en bloque del sistema. En diseños complejos como en software los programas son generalmente jerárquicos y VHDL ofrece un buen marco de trabajo para definir los módulos que integran el sistema y sus interfaces, dejando los detalles para pasos posteriores.

El segundo paso es la elaboración del código en VHDL para cada módulo, para sus interfaces y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se puede utilizar cualquier editor para esta tarea, aunque el entorno de los programas de VHDL incluye su propio editor de texto. Después de que se ha escrito algún código se hace necesario compilarlo. El compilador de VHDL analiza este código y determina los errores de sintaxis y chequea la compatibilidad entre módulos. Crea toda la información necesaria para la simulación. El próximo paso es la simulación, la cual le permite establecer los estímulos a cada módulo y observar su respuesta. El VHDL da la posibilidad de crear bancos de prueba que automáticamente aplica entradas y compara las salidas con las respuestas deseadas. La simulación es un paso dentro del proceso de verificación. El propósito de la simulación es verificar que el circuito trabaja como se desea, es decir es más que comparar entradas y salidas. En proyectos complejos se hace necesario invertir un gran tiempo en generar pruebas que permitan evaluar el circuito en un amplio rango de operaciones de trabajo. Encontrar errores en este paso del diseño es mejor que al final, en donde hay que repetir entonces una gran cantidad de pasos del diseño. Hay dos dimensiones a verificar:

  • Su comportamiento funcional, en donde se estudia su comportamiento lógico independiente de consideraciones de tiempo, como las demoras en las compuertas.
  • Su verificación en el tiempo, en donde se incluyen las demoras de las compuertas y otras consideraciones de tiempo, como los tiempos de establecimiento (set-up time) y los tiempos de mantenimiento (hold time).

Después de la verificación se está listo para entrar en la fase final del diseño. La naturaleza y herramientas en esta fase dependen de la tecnología, pero hay tres pasos básicos. El primero es la síntesis, que convierte la descripción en VHDL en un conjunto de componentes que pueden ser realizados en la tecnología seleccionada. Por ejemplo, con PLD se generan las ecuaciones en suma de productos. En ASIC genera una lista de compuertas y un netlist que especifica cómo estas compuertas son interconectadas. El diseñador puede ayudar a la herramienta de síntesis especificando requerimientos a la tecnología empleada, como el máximo número de niveles lógicos o la capacidad de salida que se requiere. En el siguiente paso de ajuste (fiting) los componentes se ajustan a la capacidad del dispositivo que se utiliza. Para PLD esto significa que acopla las ecuaciones obtenidas con los elementos AND – OR que dispone el circuito. Para el caso de ASIC se dibujarían las compuertas y se definiría como conectarlas. En el último paso se realiza la verificación temporal, ya que a esta altura es que se pueden calcular los elementos parásitos, como las capacidades de las conexiones. Como en cualquier otro proceso creativo, puede ser que ocasionalmente se avance dos pasos hacia delante y uno hacia atrás (o peor).

Estructura de programa

VHDL fue diseñado con base a los principios de la programación estructurada. La idea es definir la interfaz de un módulo de hardware mientras deja invisible sus detalles internos. La entidad (ENTITY) en VHDL es simplemente la declaración de las entradas y salidas de un módulo mientras que la arquitectura (ARCHITECTURE) es la descripción detallada de la estructura interna del módulo o de su comportamiento. En la siguiente figura se ilustra el concepto anterior. Muchos diseñadores conciben la Entity como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro (architecture). Esto forma la base de un sistema de diseño jerárquico, la arquitectura de la entidad de más nivel (top level) puede usar otras entidades, dejando invisible los detalles de la arquitectura de la identidad de menos nivel. En la figura las entidades B, E y F no utilizan otras entidades. Mientras que la entidad A utiliza todas las demás. A la pareja entidad-arquitectura se la llama modelo. En un fichero texto VHDL la entidad y la arquitectura se escriben separadas, por ejemplo a continuación se muestra un programa muy simple en VHDL de una compuerta de 2 entradas. Como otros programas, VHDL ignora los espacios y saltos de líneas. Los comentarios se escriben con 2 guiones (--) y terminan al final de la línea. En la figura siguiente se muestra la estructura de un modelo en VHDL. SINTAXIS PARA LA DECLARACIÓN DE LA ENTIDAD VHDL define muchos caracteres especiales llamados “palabras reservadas”. Aunque las palabras reservadas no son sensibles a las mayúsculas o minúsculas, en el ejemplo que sigue las utilizaremos en mayúsculas y negrita para identificarlas.

ENTITY Nombre_entidad IS PORT ( Nombre de señal: modo tipo de señal;  . . .  Nombre de señal: modo tipo de señal ) ; END nombre_entidad ; 

Además de darle nombre a la entidad el propósito de la declaración es definir sus señales (o ports) de interfaz externa en su declaración de ports. Además de las palabras reservadas o claves ENTITY, IS, PORT and END, una ENTITY tiene los siguientes elementos.

  • Nombre_entidad; es un identificador seleccionado por el usuario para seleccionar la entidad.
  • Nombre de señal; es una lista de uno o más identificadores separados por una coma y seleccionados por el usuario para identificar las señales externas de la interfaz.
  • MODO es una de las 4 siguientes palabras reservadas para indicar la dirección de la señal:
Modo Descripción
IN En este modo las señales solo entran en la entidad
OUT Las señales salen de la entidad
BUFFER Este modo se utiliza para las señales que además de salir de la entidad pueden usarse como entradas realimentadas
INOUT Este modo se utiliza para señales bidireccionales. Se emplea en salida con tres estados. Se puede asignar como sustituto de los tres modos anteriores, pero no se aconseja pues dificulta la comprensión del programa.

Cuando se omite el modo de una señal en la declaración de la entidad se sobreentiende que es de entrada.

  • Tipo de señal; en VHDL, hay varios tipos de señales predefinidas por el lenguaje, tales como:
TIPO Características
BIT En este tipo las señales solo toman los valores de "1" y "0"
Booleana En este tipo las señales solo toman los valores de True y False
Std_logic En este tipo las señales toman 9 valores, entre ellos tenemos: "1", "0", "Z" (para el 3.er estado), "-" (para los opcionales).
Integer En este tipo las señales toman valores enteros. Los 1 y los 0 se escriben sin “
Bit_Vector En este tipo los valores de las señales son una cadena de unos y ceros. Ejemplo: “1000”
Std_Logic_Vector En este tipo los valores de las señales son una cadena de los nueve valores permisibles para el tipo std_logic.
Character Contiene todos los caracteres ISO de 8 bits, donde los primeros 128 son los caracteres ASCII.

Ejemplo: “1-0Z” -231 + 1 231 - 1 Integer -2 147 483 647 2 147 483 647

Bit Character Severity_level Bit_vector Integer String Boolean Real time

Operadores
Tipo Std_logic
U Uninitialized (Sin inicializar)
X Forcing Unknown (Forzar valor desconocido)
0 Forcing 0 (Forzar un cero)
1 Forcing 1 (Forzar un uno)
Z High Impedance (Alta impedancia)
W Weak Unknown (Valor débil desconocido)
L Weak 0 (Cero débil)
H Weak 1 (uno débil)
- Don’t care (Cualquier valor)

Este tipo es parte del paquete IEEE 1164

Además el usuario puede definir otros tipos de señales, lo que resulta muy conveniente en algunos casos, como en el diseño de máquinas de estados. El lenguaje VHDL concede máxima importancia a los tipos de señales, no se admite realizar una asignación mezclando tipos diferentes. Un PORT de una entidad y sus modos y tipos pueden ser vistos por otros módulos que la utilicen. La operación interna de la entidad está definida en la architecture cuya sintaxis general se muestra a continuación.

Ejemplo, escriba la declaración de la entidad para un circuito digital con dos entradas a y b y una salida F según se muestra en la siguiente figura.

ENTITY ejemplo1 IS PORT ( a, b : IN bit;  F : OUT bit ); END ejemplo1 ; 

Sintaxis para la definición de la arquitectura

La sintaxis para la declaración de la arquitectura es la siguiente (aparecen en mayúscula las palabras reservadas del lenguaje VHDL, pero esto no es necesario):

ARCHITECTURE nombre_arquitectura OF nombre_entidad IS Declaración de tipos Declaración de señales. Declaración de constantes Declaración de componentes Definición de funciones Definición de procedimientos BEGIN Enunciado concurrente . . . Enunciado concurrente END nombre_arquitectura; 

Las declaraciones y definiciones que preceden al BEGIN, pueden estar presentes todas, algunas o ninguna. Esto depende del tipo de diseño que se esté realizando. No obstante la declaración de señales se utiliza mucho, pues contribuye entre otras cosas a la claridad del diseño.

Nombre_entidad es el nombre de su entidad. Nombre_arquitectura es el nombre dado por el usuario a la arquitectura. Las señales externas de la arquitectura son las declaradas en el port de la entidad, no obstante una arquitectura puede contener señales y otras declaraciones que solo existen localmente en esa arquitectura. Declaraciones comunes a varias entidades pueden ser puestas en un “paquete” separado utilizado por todas las entidades. Las declaraciones en la arquitectura pueden aparecer en diferente orden, pero lo más usual es comenzar por la declaración de las señales. Signal signal-name: signal-type Variables en VHDL son similares a las señales excepto que ellas no tienen significado físico en el circuito. En el ejemplo anterior no se puso declaración de variables, ellas son usadas en funciones, procedimientos y procesos. Todas las señales, variables y constantes en VHDL tienen asociadas un tipo, este especifica el conjunto de valores que el objeto puede tomar. También hay un conjunto de operadores tales como add, and etc, asociados con un tipo dado.

Operadores en VHDL

En VHDL existen diferentes operadores entre los que tenemos:

Operadores Definidos en VHDL para los tipos: Lógicos AND, OR, XOR, NOT, NAND, NOR, XNOR Bit y Booleanos De relación =, /=, <, >, >=, <= Integer, Bit y Bit_Vector Concatenación & Bit, Bit_Vector y para las cadenas Aritméticos +, -, *, /, Mod, Rem, Abs, ** Integer* Mod: Módulo de la división. Rem: Resto de la división Abs: valor absoluto.

    • exponentiation.

El WARP solo soporta multiplicar y dividir por 2. Ejemplo: Escriba la definición de arquitectura para la entidad del ejemplo anterior.

ARCHITECTURE and_2ent OF ejemplo1 IS BEGIN F <= a AND b; END and_2ent; 

Otra forma de escribir el mismo ejemplo anterior es:

ARCHITECTURE and_2ent OF ejemplo1 IS BEGIN F <= 1 WHEN a=1 AND b=1 ELSE 0; END and_2ent; 

Otra forma de escribir el mismo ejemplo anterior es:

ARCHITECTURE and_2ent OF ejemplo1 IS BEGIN F <= 1 WHEN a=1 AND b=1 ELSE 0 WHEN a=0 AND b=0 ELSE 0 WHEN a=0 AND b=1 ELSE 0 WHEN a=1 AND b=0 ELSE -; END and_2ent; 

Ejemplo; Realice el programa en VHDL de un circuito con dos entradas y una salida f. La entidad es la misma anterior, pero supongamos que la función que realiza el circuito es tal que la salida será 0 solo si las entradas son iguales (operación XOR).

ENTITY ejemp2_3 IS --Solo se cambia el nombre de la entidad PORT ( a, b: IN bit;  F: OUT bit); END ejem2_3; ARCHITECTURE dos_ent OF ejem2_3 IS BEGIN f <= 1 WHEN a /= b ELSE 0 ; END dos_ent; 

En VHDL lo que se escribe después de – es un comentario.

Asignaciones condicionales en VHDL. En VHDL hay varias asignaciones que se realizan en forma condicionada. Analizaremos dos de ellas. WITH...... SELECT.... WHEN..... OTHERS WHEN..... ELSE

Ejemplo: Escriba en VHDL un fichero para obtener una compuerta NOR de dos entradas. Utilice señales tipo Boleana y asignaciones condicionales de la forma WHEN... ELSE.....

ENTITY Boole_4 IS PORT ( a, b: IN Boolean;  Y: OUT Bolean); END Boole_4; ARCHITECTURE Boole4_a OF Boole_4 IS BEGIN Y <= true WHEN a = false and b = false ELSE  False; END Bole4_a; 

Ejemplo: repita el diseño anterior, pero utilice asignaciones condicionales de la forma WITH.. SELECT.. WHEN.. OTHERS

ENTITY Boole_5 IS PORT ( a, b: IN Boolean;  Y: OUT Bolean); END Boole_5; ARCHITECTURE Boole5_a OF Boole_5 IS BEGIN WITH a SELECT Y <= false WHEN true, Not b WHEN OTHERS; END Bole5_a; 

Sintaxis para el trabajo con vectores. Los vectores se describen como: a(3), a(2), a(1), a(0), siempre comenzando por 0.Cuando un vector se declara en orden descendente utilizando la palabra clave DOWNTO por ejemplo (3 DOWNTO 0), debemos interpretar que el MSB es a(3) y el LSB es a(0). Si se declara (0 to 3), entonces el LSB es a(3) y el MSB es a(0).

Bibliotecas

Una biblioteca en VHDL es un lugar en donde se guarda la información relacionada con un diseño determinado. Al comienzo de cada diseño el compilador crea automáticamente una biblioteca llamada WORK con este objetivo. Además de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseño. Un ejemplo de biblioteca general es la llamada Library IEEE, que contiene definiciones estándar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa, por eso es muy común que en la primera línea de un diseño en VHDL aparezca escrito "Library IEEE", de esta forma dicha biblioteca se hace visible para el diseño.

Paquetes

En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en los diferentes diseños que invoquen su utilización. Un paquete muy utilizado es el paquete estándar IEEE_STD_LOGIC_1164.ALL; La utilización de un paquete en un diseño se realiza invocando su empleo mediante la cláusula USE y el nombre del paquete. Por ejemplo USE IEEE_STD_LOGIC_1164.ALL;

La terminación ALL, permite utilizar todas las definiciones y objetos que contiene dicho paquete. Además del estándar, existen otros paquetes de utilización general y también los diseñadores que trabajan con VHDL pueden definir sus propios paquetes, lo que les permite reutilizar diseños realizados anteriormente como parte de nuevos diseños.

Sintaxis para la definición de paquetes.

La sintaxis para la definición de un paquete es la siguiente:

PACKAGE nombre_paquete IS Declaración de tipos Declaración de señales. Declaración de constantes Declaración de componentes Definición de funciones Definición de procedimientos END nombre_paquete PACKAGE BODY nombre_paquete IS Declaración de tipos Declaración de constantes Definición de funciones Definición de procedimientos END nombre_paquete 

Esta última parte que aparece entre los dos END, la relacionada con el cuerpo del paquete puede o no existir y en el caso de existir las declaraciones y definiciones contenidos en la misma son locales, visibles solo dentro del paquete, mientras que las declaraciones y definiciones contenidas en la primera parte del paquete son visibles para todos los diseños que los utilicen.

Sintaxis para la declaración de una componente en VHDL

COMPONENT nombre_componente PORT ( Nombre de señal: modo tipo de señal;  ...  Nombre de señal: modo tipo de señal); END COMPONENT; 

Extensión (Overload) de los operadores en VHDL La validez de los operadores dados anteriormente se ha extendido a otros tipos para los que no estaban originalmente definidos. Por ejemplo el paquete estándar IEEE.Std_Logic_1164 define la extensión de los operadores lógicos para los tipos std_logic y Std_logic_Vector. Sin embargo la extensión de los operadores de relación y aritméticos para los tipos std_logic y std_logic_vector no están definidos en el paquete estándar sino en otro paquete llamado Work_Std_arith. DISEÑO JERARQUICO EN VHDL En VHDL un diseño puede utilizar componentes que son a su vez otros circuitos o sistemas más sencillos previamente diseñados. Esto constituye una gran ventaja pues facilita el trabajo en equipo y la distribución de tareas entre distintos grupos de diseñadores. A medida que se sube hacia el nivel de jerarquía máxima la arquitectura se hace más general mientras que en los niveles inferiores el grado de detalles es mayor. En la siguiente figura se muestra un esquema que ilustra los diferentes niveles jerárquicos. Diseñe un CLC con tres entradas a, b y c y una salida T, que realice la función mostrada en la tabla siguiente:

Entradas Salida a b c T 0 0 - 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0

ENTITY T IS PORT (a,b,c: IN BIT;   T: OUT BIT); END T; ARCHITECTURE T OF T IS BEGIN T <= 1 WHEN a = 0 AND b = 1 AND c = 1 ELSE 1 WHEN a = 1 AND b = 0 AND c = 0 ELSE 0; END T; 

Ahora lo empaquetamos para poder utilizarlo en otro diseño:

PACKAGE TPKG IS COMPONENT T -- El nombre del componente tiene que ser igual a la entidad que se empaqueta PORT (a,b,c: IN BIT;  T: OUT BIT); END COMPONENT; END TPKG; 

Ejemplos de programas

Para llevar a cabo un diseño en VHDL, se recomienda hacer uso de las librerías genéricas de la IEEE, para garantizar la flexibilidad del diseño a cualquier herramienta de compilación y síntesis, además en el diseño se tienen dos partes principales: la entidad es como una caja negra en la que se definen entradas y salidas pero no se tiene acceso al interior, y es lo que usa cuanto se reutiliza un diseño dentro de otro; la arquitectura, que es donde se describe el diseño de la forma que se ha visto antes. Otros elementos del lenguaje son las librerías, paquetes, funciones...

Multiplexor

Este ejemplo simula un multiplexor de dos entradas. Es un ejemplo sencillo que muestra como describir un elemento a partir de su funcionamiento.

 entity MUX2a1 is port( a: in std_logic;  b: in std_logic;  sel: in std_logic;  z: out std_logic); end entity architecture dataflow of MUX2a1 is begin  z <= a when sel='0' else b; end dataflow; 

Un ejemplo algo más complejo es el de un multiplexor de cuatro entradas. Este ejemplo trabaja con vectores para controlar la entrada activa a través de la entrada sel.

 entity MUX4a1 is port( a: in std_logic;  b: in std_logic;  c: in std_logic;  d: in std_logic;  z: out std_logic;  sel: in std_logic_vector(1 downto 0)); end entity; architecture dataflow of MUX4a1 is begin process(a,b,c,d,sel) begin  case sel is  when "00" => z <= a;  when "01" => z <= b;  when "10" => z <= c;  when "11" => z <= d;  end case; end process; end dataflow; 

Biestable

A continuación se muestra el proceso que describe un biestable D activado por el flanco de subida del reloj (CLK). Este biestable tiene una señal de reset asíncrona (RST). El dato D se guarda en el biestable hasta el siguiente flanco de subida del reloj.

 entity BIEST is port(RST: in std_logic;   -- Reset asincrono CLK: in std_logic;   -- Reloj D: in std_logic;   -- Dato de entrada Q: out std_logic);  -- Salida (dato guardado en el biestable) end BIEST; architecture D of BIEST is begin biest_D : process(RST, CLK) begin if RST = '1' then   -- Reset asincrono Q <= '0'; elsif CLK'event and CLK = '1' then  -- Condicion de reloj activo por flanco de subida Q <= D; end if; end process; end D; 

Contador

Este es un ejemplo de un sistema que contará pulsos de un reloj digital (CLK) hasta llegar a 1000 y entonces volverá a empezar. La inicialización se consigue con un reset (RST).

 library IEEE;    -- bibliotecas use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CONTADOR is port(RST: in std_logic; CLK: in std_logic;   -- entradas salida: inout std_logic_vector(9 downto 0)); -- salidas end entity; architecture contador of contador is signal aux: std_logic_vector(9 downto 0);  -- señal auxiliar begin process (CLK,RST)   -- programación secuencial begin if RST='1' then   -- reset -> inicialización  aux<=(others=>'0');  elsif(clk'event and clk='1') then  -- flanco de reloj ascendente if(salida="1111101000") then  -- máxima cuenta aux<=(others=>'0');  -- vuelvo a comenzar else aux<=aux+1;  -- cuento uno más end if; end if;   end process; salida<=aux;    -- saco la salida end contador; 

Después de compilar este programa habría que indicar a la herramienta encargada del diseño las restricciones oportunas para asignar las señales de entrada y salida a las patillas del chip donde se programará o bien usar este diseño dentro de otro.

Corrección Hamming

Ejemplo del código corrector de errores Hamming implementado en VHDL.

 library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity hamcorr is port(  DU: in STD_LOGIC_VECTOR(1 to 7);  DC: out STD_LOGIC_VECTOR( 1 to 7);  NOERROR: out STD_LOGIC ); end hamcorr; architecture hamcorr of hamcorr is function syndrome (D:STD_LOGIC_VECTOR)  return STD_LOGIC_VECTOR is  variable SYN: STD_LOGIC_VECTOR (2 downto 0);  begin  SYN(0):= D(1) xor D(3) xor D(5) xor D(7);  SYN(1):= D(2) xor D(3) xor D(6) xor D(7);  SYN(2):= D(4) xor D(5) xor D(6) xor D(7);  return(SYN); end syndrome; begin  process(DU)  variable i : INTEGER; begin  DC<=DU;  i:=CONV_INTEGER(syndrome(DU));  if i=0 then NOERROR <='1';  else NOERROR <='0'; DC(i) <=not DU(i); end if;  end process; end hamcorr; 

Con este código obtenemos la corrección de los errores de una palabra mediante Hamming.

Hola Mundo

El VHDL permite descripciones que no son sintetizables, es decir, que no se pueden implementar directamente en un circuito electrónico digital. Este tipo de descripciones son útiles en simulación. Un ejemplo de este tipo de descripciones son las que incluyen mensajes que notifican al diseñador si se ha cumplido alguna condición durante la simulación.

El código siguiente mostraría el mensaje "hola mundo" durante la simulación:

 use std.textio.all;   -- bibliotecas entity hola is end entity hola; architecture Wiki of hola is constant mensaje: string := "hola mundo"; -- el mensaje begin process is    -- proceso -> secuencial variable L: line; begin write(L, mensaje); writeline(output, L);   -- escribe todo lo anterior wait; end process; end architecture Wiki; 

Es importante señalar que esta descripción no es sintetizable en un circuito electrónico digital, y que la descripción equivalente en VHDL al programa Hola Mundo sería encender un led.

Herramientas

  • Warp
  • Altera
  • Xilinx
  • ActiveVHDL
  • GHDL (GNU)
  • Max+Plus II
  • Quartus II
  • ModelSim/ISE
  • Otros programas están incluyendo en sus últimas versiones la capacidad de programar FPGA usando sus propios lenguajes, pero también incluyen módulos en VHDL, por ejemplo Protel DXP, Labview o Matlab.

Véase también

Enlaces externos

  •   Wikilibros alberga un libro o manual sobre VHDL.
  • Diseño de circuitos digitales con VHDL
  • Diseño de sistemas digitales con VHDL

Códigos de programa

  • vhdl.org
  • Xess
  • Diapositivas para enseñanza de VHDL

Fabricantes de FPGA y de herramientas

  • Actel ahora Microsemi
  • Altera - Max Plus II, Quartus II
  • Atmel
  • Cypress
  • Lattice
  • QuickLogic
  • Xilinx - ISE, Modelsim

Fabricantes de herramientas

  • Aldec-ActiveVHDL
  • GHDL
  • IEEE
  • IEEE estándar 1164
  • Mentor Graphics. Herramientas de síntesis física, simulación y otras relacionadas con diseño microelectrónico, sistemas embebidos, diseño de PCB, etc.
  •   Datos: Q209455
  •   Multimedia: VHDL

vhdl, lenguaje, especificación, definido, ieee, institute, electrical, electronics, engineers, ansi, ieee, 1076, 1993, utilizado, para, describir, circuitos, digitales, para, automatización, diseño, electrónico, acrónimo, proveniente, combinación, acrónimos, v. VHDL es un lenguaje de especificacion definido por el IEEE Institute of Electrical and Electronics Engineers ANSI IEEE 1076 1993 utilizado para describir circuitos digitales y para la automatizacion de diseno electronico VHDL es acronimo proveniente de la combinacion de dos acronimos VHSIC Very High Speed Integrated Circuit y HDL Hardware Description Language Aunque puede ser usado de forma general para describir cualquier circuito digital se usa principalmente para programar PLD Programable Logic Device Dispositivo Logico Programable FPGA Field Programmable Gate Array ASIC y similares Originalmente el lenguaje VHDL fue desarrollado por el departamento de defensa de los Estados Unidos a inicios de los anos 80 basado en el lenguaje de programacion ADA con el fin de simular circuitos electricos digitales Posteriormente se desarrollaron herramientas de sintesis e implementacion en hardware a partir de los archivos VHD Otros metodos para disenar circuitos son la captura de esquemas con herramientas CAD y los diagramas de bloques pero estos no son practicos en disenos complejos Otros lenguajes para el mismo proposito pero con un nivel de abstraccion superior son Verilog y ABEL Indice 1 Formas de describir un circuito 2 Secuencia de diseno 3 Procedimiento de diseno 4 Estructura de programa 4 1 Sintaxis para la definicion de la arquitectura 4 2 Operadores en VHDL 4 3 Bibliotecas 4 4 Paquetes 5 Ejemplos de programas 5 1 Multiplexor 5 2 Biestable 5 3 Contador 5 3 1 Correccion Hamming 5 4 Hola Mundo 6 Herramientas 7 Vease tambien 8 Enlaces externos 8 1 Codigos de programa 8 2 Fabricantes de FPGA y de herramientas 8 3 Fabricantes de herramientasFormas de describir un circuito EditarDentro del VHDL hay varias formas con las que se puede disenar el mismo circuito y es tarea del disenador elegir la mas apropiada Funcional o comportamental Se describe la forma en que se comporta el circuito digital se tiene en cuenta solo las caracteristicas del circuito respecto al comportamiento de las entradas y las salidas Esta es la forma que mas se parece a los lenguajes de software ya que la descripcion puede ser secuencial ademas de combinar caracteristicas concurrentes Estas sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL Los procesos son ejecutados en paralelo entre si y en paralelo con asignaciones concurrentes de senales y con las instancias a otros componentes Flujo de datos Se describen asignaciones concurrentes en paralelo de senales Estructural Se describe el circuito con instancias de componentes Estas instancias forman un diseno de jerarquia superior al conectar los puertos de estas instancias con las senales internas del circuito o con puertos del circuito de jerarquia superior Es la recomendada cuando el diseno digital se vuelve complejo o esta conformado por multiples bloques de hardware Mixta combinacion de todas o algunas de las anteriores En VHDL tambien existen formas metodicas para el diseno de maquinas de estados filtros digitales bancos de pruebas etc Secuencia de diseno EditarEl flujo de diseno de un sistema podria ser Division del diseno principal en modulos separados La modularidad es uno de los conceptos principales de todo diseno Normalmente se diferencia entre dos metodologias de diseno top down y bottom up La metodologia top down consiste en que un diseno complejo se divide en disenos mas sencillos que se puedan disenar o describir mas facilmente La metodologia bottom up consiste en construir un diseno complejo a partir de modulos ya disenados mas simples En la practica un diseno usa generalmente ambas metodologias Entrada de disenos pueden usarse diversos metodos tal como se vio anteriormente Simulacion funcional es decir comprobaremos que lo escrito en el punto anterior realmente funciona como queremos si no lo hace tendremos que modificarlo En este tipo de simulacion se comprueba que el codigo VHDL o Verilog u otro tipo de lenguaje HDL ejecuta correctamente lo que se pretende Sintesis En este paso se adapta el diseno anterior que sabemos que funciona a un hardware en concreto ya sea una FPGA o un ASIC Hay sentencias del lenguaje que no son sintetizables como por ejemplo divisiones o exponenciaciones con numeros no constantes El hecho de que no todas las expresiones en VHDL sean sintetizables es que el VHDL es un lenguaje generico para modelado de sistemas no solo para diseno de circuitos digitales por lo que hay expresiones que no pueden ser transformadas a circuitos digitales Durante la sintesis se tiene en cuenta la estructura interna del dispositivo y se definen restricciones como la asignacion de pines El sintetizador optimiza las expresiones logicas con objeto de que ocupen menor area o bien son eliminadas las expresiones logicas que no son usadas por el circuito Simulacion post sintesis En este tipo de simulacion se comprueba que el sintetizador ha realizado correctamente la sintesis del circuito al transformar el codigo HDL en bloques logicos conectados entre si Este paso es necesario ya que a veces los sintetizadores producen resultados de sintesis incorrectos o bien realiza simplificaciones del circuito al optimizarlo Ubicacion y enrutamiento El proceso de ubicacion consiste en situar los bloques digitales obtenidos en la sintesis de forma optima de forma que aquellos bloques que se encuentran muy interconectados entre si se situen proximamente El proceso de enrutamiento consiste en interconectar adecuadamente los bloques entre si intentando minimizar retardos de propagacion para maximizar la frecuencia maxima de funcionamiento del dispositivo Anotacion final Una vez ha sido completado el proceso de ubicacion y enrutamiento se extraen los retardos de los bloques y sus interconexiones con objeto de poder realizar una simulacion temporal tambien llamada simulacion post layout Estos retardos son anotados en un fichero SDF Standard Delay Format que asocia a cada bloque o interconexion un retardo minimo tipico maximo Simulacion temporal A pesar de la simulacion anterior puede que el diseno no funcione cuando se programa una de las causas puede ser por los retardos internos del chip Con esta simulacion se puede comprobar y si hay errores se tiene que volver a uno de los anteriores pasos Programacion en el dispositivo Se implementa el diseno en el dispositivo final y se comprueba el resultado Procedimiento de diseno EditarEl primer paso del diseno consiste en la construccion del diagrama en bloque del sistema En disenos complejos como en software los programas son generalmente jerarquicos y VHDL ofrece un buen marco de trabajo para definir los modulos que integran el sistema y sus interfaces dejando los detalles para pasos posteriores El segundo paso es la elaboracion del codigo en VHDL para cada modulo para sus interfaces y sus detalles internos Como el VHDL es un lenguaje basado en texto se puede utilizar cualquier editor para esta tarea aunque el entorno de los programas de VHDL incluye su propio editor de texto Despues de que se ha escrito algun codigo se hace necesario compilarlo El compilador de VHDL analiza este codigo y determina los errores de sintaxis y chequea la compatibilidad entre modulos Crea toda la informacion necesaria para la simulacion El proximo paso es la simulacion la cual le permite establecer los estimulos a cada modulo y observar su respuesta El VHDL da la posibilidad de crear bancos de prueba que automaticamente aplica entradas y compara las salidas con las respuestas deseadas La simulacion es un paso dentro del proceso de verificacion El proposito de la simulacion es verificar que el circuito trabaja como se desea es decir es mas que comparar entradas y salidas En proyectos complejos se hace necesario invertir un gran tiempo en generar pruebas que permitan evaluar el circuito en un amplio rango de operaciones de trabajo Encontrar errores en este paso del diseno es mejor que al final en donde hay que repetir entonces una gran cantidad de pasos del diseno Hay dos dimensiones a verificar Su comportamiento funcional en donde se estudia su comportamiento logico independiente de consideraciones de tiempo como las demoras en las compuertas Su verificacion en el tiempo en donde se incluyen las demoras de las compuertas y otras consideraciones de tiempo como los tiempos de establecimiento set up time y los tiempos de mantenimiento hold time Despues de la verificacion se esta listo para entrar en la fase final del diseno La naturaleza y herramientas en esta fase dependen de la tecnologia pero hay tres pasos basicos El primero es la sintesis que convierte la descripcion en VHDL en un conjunto de componentes que pueden ser realizados en la tecnologia seleccionada Por ejemplo con PLD se generan las ecuaciones en suma de productos En ASIC genera una lista de compuertas y un netlist que especifica como estas compuertas son interconectadas El disenador puede ayudar a la herramienta de sintesis especificando requerimientos a la tecnologia empleada como el maximo numero de niveles logicos o la capacidad de salida que se requiere En el siguiente paso de ajuste fiting los componentes se ajustan a la capacidad del dispositivo que se utiliza Para PLD esto significa que acopla las ecuaciones obtenidas con los elementos AND OR que dispone el circuito Para el caso de ASIC se dibujarian las compuertas y se definiria como conectarlas En el ultimo paso se realiza la verificacion temporal ya que a esta altura es que se pueden calcular los elementos parasitos como las capacidades de las conexiones Como en cualquier otro proceso creativo puede ser que ocasionalmente se avance dos pasos hacia delante y uno hacia atras o peor Estructura de programa EditarVHDL fue disenado con base a los principios de la programacion estructurada La idea es definir la interfaz de un modulo de hardware mientras deja invisible sus detalles internos La entidad ENTITY en VHDL es simplemente la declaracion de las entradas y salidas de un modulo mientras que la arquitectura ARCHITECTURE es la descripcion detallada de la estructura interna del modulo o de su comportamiento En la siguiente figura se ilustra el concepto anterior Muchos disenadores conciben la Entity como una funda de la arquitectura dejando invisible los detalles de lo que hay dentro architecture Esto forma la base de un sistema de diseno jerarquico la arquitectura de la entidad de mas nivel top level puede usar otras entidades dejando invisible los detalles de la arquitectura de la identidad de menos nivel En la figura las entidades B E y F no utilizan otras entidades Mientras que la entidad A utiliza todas las demas A la pareja entidad arquitectura se la llama modelo En un fichero texto VHDL la entidad y la arquitectura se escriben separadas por ejemplo a continuacion se muestra un programa muy simple en VHDL de una compuerta de 2 entradas Como otros programas VHDL ignora los espacios y saltos de lineas Los comentarios se escriben con 2 guiones y terminan al final de la linea En la figura siguiente se muestra la estructura de un modelo en VHDL SINTAXIS PARA LA DECLARACIoN DE LA ENTIDAD VHDL define muchos caracteres especiales llamados palabras reservadas Aunque las palabras reservadas no son sensibles a las mayusculas o minusculas en el ejemplo que sigue las utilizaremos en mayusculas y negrita para identificarlas ENTITY Nombre entidad IS PORT Nombre de senal modo tipo de senal Nombre de senal modo tipo de senal END nombre entidad Ademas de darle nombre a la entidad el proposito de la declaracion es definir sus senales o ports de interfaz externa en su declaracion de ports Ademas de las palabras reservadas o claves ENTITY IS PORT and END una ENTITY tiene los siguientes elementos Nombre entidad es un identificador seleccionado por el usuario para seleccionar la entidad Nombre de senal es una lista de uno o mas identificadores separados por una coma y seleccionados por el usuario para identificar las senales externas de la interfaz MODO es una de las 4 siguientes palabras reservadas para indicar la direccion de la senal Modo DescripcionIN En este modo las senales solo entran en la entidadOUT Las senales salen de la entidadBUFFER Este modo se utiliza para las senales que ademas de salir de la entidad pueden usarse como entradas realimentadasINOUT Este modo se utiliza para senales bidireccionales Se emplea en salida con tres estados Se puede asignar como sustituto de los tres modos anteriores pero no se aconseja pues dificulta la comprension del programa Cuando se omite el modo de una senal en la declaracion de la entidad se sobreentiende que es de entrada Tipo de senal en VHDL hay varios tipos de senales predefinidas por el lenguaje tales como TIPO CaracteristicasBIT En este tipo las senales solo toman los valores de 1 y 0 Booleana En este tipo las senales solo toman los valores de True y FalseStd logic En este tipo las senales toman 9 valores entre ellos tenemos 1 0 Z para el 3 er estado para los opcionales Integer En este tipo las senales toman valores enteros Los 1 y los 0 se escriben sin Bit Vector En este tipo los valores de las senales son una cadena de unos y ceros Ejemplo 1000 Std Logic Vector En este tipo los valores de las senales son una cadena de los nueve valores permisibles para el tipo std logic Character Contiene todos los caracteres ISO de 8 bits donde los primeros 128 son los caracteres ASCII Ejemplo 1 0Z 231 1 231 1 Integer 2 147 483 647 2 147 483 647Bit Character Severity level Bit vector Integer String Boolean Real time OperadoresTipo Std logicU Uninitialized Sin inicializar X Forcing Unknown Forzar valor desconocido 0 Forcing 0 Forzar un cero 1 Forcing 1 Forzar un uno Z High Impedance Alta impedancia W Weak Unknown Valor debil desconocido L Weak 0 Cero debil H Weak 1 uno debil Don t care Cualquier valor Este tipo es parte del paquete IEEE 1164Ademas el usuario puede definir otros tipos de senales lo que resulta muy conveniente en algunos casos como en el diseno de maquinas de estados El lenguaje VHDL concede maxima importancia a los tipos de senales no se admite realizar una asignacion mezclando tipos diferentes Un PORT de una entidad y sus modos y tipos pueden ser vistos por otros modulos que la utilicen La operacion interna de la entidad esta definida en la architecture cuya sintaxis general se muestra a continuacion Ejemplo escriba la declaracion de la entidad para un circuito digital con dos entradas a y b y una salida F segun se muestra en la siguiente figura ENTITY ejemplo1 IS PORT a b IN bit F OUT bit END ejemplo1 Sintaxis para la definicion de la arquitectura Editar La sintaxis para la declaracion de la arquitectura es la siguiente aparecen en mayuscula las palabras reservadas del lenguaje VHDL pero esto no es necesario ARCHITECTURE nombre arquitectura OF nombre entidad IS Declaracion de tipos Declaracion de senales Declaracion de constantes Declaracion de componentes Definicion de funciones Definicion de procedimientos BEGIN Enunciado concurrente Enunciado concurrente END nombre arquitectura Las declaraciones y definiciones que preceden al BEGIN pueden estar presentes todas algunas o ninguna Esto depende del tipo de diseno que se este realizando No obstante la declaracion de senales se utiliza mucho pues contribuye entre otras cosas a la claridad del diseno Nombre entidad es el nombre de su entidad Nombre arquitectura es el nombre dado por el usuario a la arquitectura Las senales externas de la arquitectura son las declaradas en el port de la entidad no obstante una arquitectura puede contener senales y otras declaraciones que solo existen localmente en esa arquitectura Declaraciones comunes a varias entidades pueden ser puestas en un paquete separado utilizado por todas las entidades Las declaraciones en la arquitectura pueden aparecer en diferente orden pero lo mas usual es comenzar por la declaracion de las senales Signal signal name signal type Variables en VHDL son similares a las senales excepto que ellas no tienen significado fisico en el circuito En el ejemplo anterior no se puso declaracion de variables ellas son usadas en funciones procedimientos y procesos Todas las senales variables y constantes en VHDL tienen asociadas un tipo este especifica el conjunto de valores que el objeto puede tomar Tambien hay un conjunto de operadores tales como add and etc asociados con un tipo dado Operadores en VHDL Editar En VHDL existen diferentes operadores entre los que tenemos Operadores Definidos en VHDL para los tipos Logicos AND OR XOR NOT NAND NOR XNOR Bit y Booleanos De relacion lt gt gt lt Integer Bit y Bit Vector Concatenacion amp Bit Bit Vector y para las cadenas Aritmeticos Mod Rem Abs Integer Mod Modulo de la division Rem Resto de la division Abs valor absoluto exponentiation El WARP solo soporta multiplicar y dividir por 2 Ejemplo Escriba la definicion de arquitectura para la entidad del ejemplo anterior ARCHITECTURE and 2ent OF ejemplo1 IS BEGIN F lt a AND b END and 2ent Otra forma de escribir el mismo ejemplo anterior es ARCHITECTURE and 2ent OF ejemplo1 IS BEGIN F lt 1 WHEN a 1 AND b 1 ELSE 0 END and 2ent Otra forma de escribir el mismo ejemplo anterior es ARCHITECTURE and 2ent OF ejemplo1 IS BEGIN F lt 1 WHEN a 1 AND b 1 ELSE 0 WHEN a 0 AND b 0 ELSE 0 WHEN a 0 AND b 1 ELSE 0 WHEN a 1 AND b 0 ELSE END and 2ent Ejemplo Realice el programa en VHDL de un circuito con dos entradas y una salida f La entidad es la misma anterior pero supongamos que la funcion que realiza el circuito es tal que la salida sera 0 solo si las entradas son iguales operacion XOR ENTITY ejemp2 3 IS Solo se cambia el nombre de la entidad PORT a b IN bit F OUT bit END ejem2 3 ARCHITECTURE dos ent OF ejem2 3 IS BEGIN f lt 1 WHEN a b ELSE 0 END dos ent En VHDL lo que se escribe despues de es un comentario Asignaciones condicionales en VHDL En VHDL hay varias asignaciones que se realizan en forma condicionada Analizaremos dos de ellas WITH SELECT WHEN OTHERS WHEN ELSEEjemplo Escriba en VHDL un fichero para obtener una compuerta NOR de dos entradas Utilice senales tipo Boleana y asignaciones condicionales de la forma WHEN ELSE ENTITY Boole 4 IS PORT a b IN Boolean Y OUT Bolean END Boole 4 ARCHITECTURE Boole4 a OF Boole 4 IS BEGIN Y lt true WHEN a false and b false ELSE False END Bole4 a Ejemplo repita el diseno anterior pero utilice asignaciones condicionales de la forma WITH SELECT WHEN OTHERS ENTITY Boole 5 IS PORT a b IN Boolean Y OUT Bolean END Boole 5 ARCHITECTURE Boole5 a OF Boole 5 IS BEGIN WITH a SELECT Y lt false WHEN true Not b WHEN OTHERS END Bole5 a Sintaxis para el trabajo con vectores Los vectores se describen como a 3 a 2 a 1 a 0 siempre comenzando por 0 Cuando un vector se declara en orden descendente utilizando la palabra clave DOWNTO por ejemplo 3 DOWNTO 0 debemos interpretar que el MSB es a 3 y el LSB es a 0 Si se declara 0 to 3 entonces el LSB es a 3 y el MSB es a 0 Bibliotecas Editar Una biblioteca en VHDL es un lugar en donde se guarda la informacion relacionada con un diseno determinado Al comienzo de cada diseno el compilador crea automaticamente una biblioteca llamada WORK con este objetivo Ademas de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseno Un ejemplo de biblioteca general es la llamada Library IEEE que contiene definiciones estandar para VHDL Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa por eso es muy comun que en la primera linea de un diseno en VHDL aparezca escrito Library IEEE de esta forma dicha biblioteca se hace visible para el diseno Paquetes Editar En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en los diferentes disenos que invoquen su utilizacion Un paquete muy utilizado es el paquete estandar IEEE STD LOGIC 1164 ALL La utilizacion de un paquete en un diseno se realiza invocando su empleo mediante la clausula USE y el nombre del paquete Por ejemplo USE IEEE STD LOGIC 1164 ALL La terminacion ALL permite utilizar todas las definiciones y objetos que contiene dicho paquete Ademas del estandar existen otros paquetes de utilizacion general y tambien los disenadores que trabajan con VHDL pueden definir sus propios paquetes lo que les permite reutilizar disenos realizados anteriormente como parte de nuevos disenos Sintaxis para la definicion de paquetes La sintaxis para la definicion de un paquete es la siguiente PACKAGE nombre paquete IS Declaracion de tipos Declaracion de senales Declaracion de constantes Declaracion de componentes Definicion de funciones Definicion de procedimientos END nombre paquete PACKAGE BODY nombre paquete IS Declaracion de tipos Declaracion de constantes Definicion de funciones Definicion de procedimientos END nombre paquete Esta ultima parte que aparece entre los dos END la relacionada con el cuerpo del paquete puede o no existir y en el caso de existir las declaraciones y definiciones contenidos en la misma son locales visibles solo dentro del paquete mientras que las declaraciones y definiciones contenidas en la primera parte del paquete son visibles para todos los disenos que los utilicen Sintaxis para la declaracion de una componente en VHDL COMPONENT nombre componente PORT Nombre de senal modo tipo de senal Nombre de senal modo tipo de senal END COMPONENT Extension Overload de los operadores en VHDL La validez de los operadores dados anteriormente se ha extendido a otros tipos para los que no estaban originalmente definidos Por ejemplo el paquete estandar IEEE Std Logic 1164 define la extension de los operadores logicos para los tipos std logic y Std logic Vector Sin embargo la extension de los operadores de relacion y aritmeticos para los tipos std logic y std logic vector no estan definidos en el paquete estandar sino en otro paquete llamado Work Std arith DISENO JERARQUICO EN VHDL En VHDL un diseno puede utilizar componentes que son a su vez otros circuitos o sistemas mas sencillos previamente disenados Esto constituye una gran ventaja pues facilita el trabajo en equipo y la distribucion de tareas entre distintos grupos de disenadores A medida que se sube hacia el nivel de jerarquia maxima la arquitectura se hace mas general mientras que en los niveles inferiores el grado de detalles es mayor En la siguiente figura se muestra un esquema que ilustra los diferentes niveles jerarquicos Disene un CLC con tres entradas a b y c y una salida T que realice la funcion mostrada en la tabla siguiente Entradas Salida a b c T 0 0 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 ENTITY T IS PORT a b c IN BIT T OUT BIT END T ARCHITECTURE T OF T IS BEGIN T lt 1 WHEN a 0 AND b 1 AND c 1 ELSE 1 WHEN a 1 AND b 0 AND c 0 ELSE 0 END T Ahora lo empaquetamos para poder utilizarlo en otro diseno PACKAGE TPKG IS COMPONENT T El nombre del componente tiene que ser igual a la entidad que se empaqueta PORT a b c IN BIT T OUT BIT END COMPONENT END TPKG Ejemplos de programas EditarPara llevar a cabo un diseno en VHDL se recomienda hacer uso de las librerias genericas de la IEEE para garantizar la flexibilidad del diseno a cualquier herramienta de compilacion y sintesis ademas en el diseno se tienen dos partes principales la entidad es como una caja negra en la que se definen entradas y salidas pero no se tiene acceso al interior y es lo que usa cuanto se reutiliza un diseno dentro de otro la arquitectura que es donde se describe el diseno de la forma que se ha visto antes Otros elementos del lenguaje son las librerias paquetes funciones Multiplexor Editar Este ejemplo simula un multiplexor de dos entradas Es un ejemplo sencillo que muestra como describir un elemento a partir de su funcionamiento entity MUX2a1 is port a in std logic b in std logic sel in std logic z out std logic end entity architecture dataflow of MUX2a1 is begin z lt a when sel 0 else b end dataflow Un ejemplo algo mas complejo es el de un multiplexor de cuatro entradas Este ejemplo trabaja con vectores para controlar la entrada activa a traves de la entrada sel entity MUX4a1 is port a in std logic b in std logic c in std logic d in std logic z out std logic sel in std logic vector 1 downto 0 end entity architecture dataflow of MUX4a1 is begin process a b c d sel begin case sel is when 00 gt z lt a when 01 gt z lt b when 10 gt z lt c when 11 gt z lt d end case end process end dataflow Biestable Editar A continuacion se muestra el proceso que describe un biestable D activado por el flanco de subida del reloj CLK Este biestable tiene una senal de reset asincrona RST El dato D se guarda en el biestable hasta el siguiente flanco de subida del reloj entity BIEST is port RST in std logic Reset asincrono CLK in std logic Reloj D in std logic Dato de entrada Q out std logic Salida dato guardado en el biestable end BIEST architecture D of BIEST is begin biest D process RST CLK begin if RST 1 then Reset asincrono Q lt 0 elsif CLK event and CLK 1 then Condicion de reloj activo por flanco de subida Q lt D end if end process end D Contador Editar Este es un ejemplo de un sistema que contara pulsos de un reloj digital CLK hasta llegar a 1000 y entonces volvera a empezar La inicializacion se consigue con un reset RST library IEEE bibliotecas use ieee std logic 1164 all use ieee std logic unsigned all entity CONTADOR is port RST in std logic CLK in std logic entradas salida inout std logic vector 9 downto 0 salidas end entity architecture contador of contador is signal aux std logic vector 9 downto 0 senal auxiliar begin process CLK RST programacion secuencial begin if RST 1 then reset gt inicializacion aux lt others gt 0 elsif clk event and clk 1 then flanco de reloj ascendente if salida 1111101000 then maxima cuenta aux lt others gt 0 vuelvo a comenzar else aux lt aux 1 cuento uno mas end if end if end process salida lt aux saco la salida end contador Despues de compilar este programa habria que indicar a la herramienta encargada del diseno las restricciones oportunas para asignar las senales de entrada y salida a las patillas del chip donde se programara o bien usar este diseno dentro de otro Correccion Hamming Editar Ejemplo del codigo corrector de errores Hamming implementado en VHDL library IEEE use IEEE std logic 1164 all use IEEE std logic unsigned all entity hamcorr is port DU in STD LOGIC VECTOR 1 to 7 DC out STD LOGIC VECTOR 1 to 7 NOERROR out STD LOGIC end hamcorr architecture hamcorr of hamcorr is function syndrome D STD LOGIC VECTOR return STD LOGIC VECTOR is variable SYN STD LOGIC VECTOR 2 downto 0 begin SYN 0 D 1 xor D 3 xor D 5 xor D 7 SYN 1 D 2 xor D 3 xor D 6 xor D 7 SYN 2 D 4 xor D 5 xor D 6 xor D 7 return SYN end syndrome begin process DU variable i INTEGER begin DC lt DU i CONV INTEGER syndrome DU if i 0 then NOERROR lt 1 else NOERROR lt 0 DC i lt not DU i end if end process end hamcorr Con este codigo obtenemos la correccion de los errores de una palabra mediante Hamming Hola Mundo Editar El VHDL permite descripciones que no son sintetizables es decir que no se pueden implementar directamente en un circuito electronico digital Este tipo de descripciones son utiles en simulacion Un ejemplo de este tipo de descripciones son las que incluyen mensajes que notifican al disenador si se ha cumplido alguna condicion durante la simulacion El codigo siguiente mostraria el mensaje hola mundo durante la simulacion use std textio all bibliotecas entity hola is end entity hola architecture Wiki of hola is constant mensaje string hola mundo el mensaje begin process is proceso gt secuencial variable L line begin write L mensaje writeline output L escribe todo lo anterior wait end process end architecture Wiki Es importante senalar que esta descripcion no es sintetizable en un circuito electronico digital y que la descripcion equivalente en VHDL al programa Hola Mundo seria encender un led Herramientas EditarWarp Altera Xilinx ActiveVHDL GHDL GNU Max Plus II Quartus II ModelSim ISE Otros programas estan incluyendo en sus ultimas versiones la capacidad de programar FPGA usando sus propios lenguajes pero tambien incluyen modulos en VHDL por ejemplo Protel DXP Labview o Matlab Vease tambien EditarElectronica Hardware Lenguaje de programacion Lenguajes de programacion Very Large Scale Integration VLSI Enlaces externos Editar Wikilibros alberga un libro o manual sobre VHDL Diseno de circuitos digitales con VHDL Diseno de sistemas digitales con VHDLCodigos de programa Editar Open Cores vhdl org Xess Diapositivas para ensenanza de VHDLFabricantes de FPGA y de herramientas Editar Actel ahora Microsemi Altera Max Plus II Quartus II Atmel Cypress Lattice QuickLogic Xilinx ISE ModelsimFabricantes de herramientas Editar Aldec ActiveVHDL GHDL IEEE IEEE estandar 1164 Sintaxis de la revision del 93 Synplicity Herramientas de sintesis fisica y verificacion de diseno Mentor Graphics Herramientas de sintesis fisica simulacion y otras relacionadas con diseno microelectronico sistemas embebidos diseno de PCB etc Datos Q209455 Multimedia VHDLObtenido de https es wikipedia org w index php title VHDL amp oldid 135782980, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos