Movatterモバイル変換


[0]ホーム

URL:


Ir al contenido
WikipediaLa enciclopedia libre
Buscar

VHDL

De Wikipedia, la enciclopedia libre

VHDL es unlenguaje de especificación definido por elIEEE (Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) utilizado para describir circuitos digitales y para laautomatización de diseño electrónico, a estos lenguajes se les suele llamalenguajes de descripción de hardware.

VHDL es acrónimo proveniente de la combinación de dos acrónimos:VHSIC (Very High Speed Integrated Circuit) yHDL (Hardware Description Language). Aunque puede ser usado de forma general para describir cualquier circuito digital se usa principalmente para programarPLD (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ónADA con el fin de simular circuitos eléctricos digitales. Posteriormente se desarrollaron herramientas de síntesis e implementación enhardware a partir de los archivos VHD.

Otros métodos para diseñar circuitos son la captura de esquemas (con herramientasCAD) 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 sonVerilog yABEL.

Formas de describir un circuito

[editar]

Dentro delVHDL 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 ocomportamental: 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 loslenguajes 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 dehardware.
  • Mixta: combinación de todas o algunas de las anteriores.

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

Secuencia de diseño

[editar]

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 ybottom-up. La metodologíatop-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íabottom-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 unhardware 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

[editar]

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 propioeditor 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 unnetlist 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

[editar]

VHDL fue diseñado con base a los principios de laprogramación estructurada. La idea es definir la interfaz de un módulo dehardware 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 ENTIDADVHDL 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.

ENTITYNombre_entidadISPORT(Nombredeseñal:modotipodeseñal;...Nombredeseñal:modotipodeseñal);ENDnombre_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 clavesENTITY,IS,PORT andEND, 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:
ModoDescripción
INEn este modo las señales solo entran en la entidad
OUTLas señales salen de la entidad
BUFFEREste modo se utiliza para las señales que además de salir de la entidad pueden usarse como entradas realimentadas
INOUTEste 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:
TIPOCaracterísticas
BITEn este tipo las señales solo toman los valores de "1" y "0"
BooleanaEn este tipo las señales solo toman los valores de True y False
Std_logicEn este tipo las señales toman 9 valores, entre ellos tenemos: "1", "0", "Z" (para el 3.er estado), "-" (para los opcionales).
IntegerEn este tipo las señales toman valores enteros. Los 1 y los 0 se escriben sin “
Bit_VectorEn este tipo los valores de las señales son una cadena de unos y ceros. Ejemplo: “1000”
Std_Logic_VectorEn este tipo los valores de las señales son una cadena de los nueve valores permisibles para el tipo std_logic.
CharacterContiene todos los caracteres ISO de 8 bits, donde los primeros 128 son los caracteres ASCII.

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

BitCharacterSeverity_levelBit_vectorIntegerStringBooleanRealtime

Operadores
TipoStd_logic
UUninitialized (Sin inicializar)
XForcing Unknown (Forzar valor desconocido)
0Forcing 0 (Forzar un cero)
1Forcing 1 (Forzar un uno)
ZHigh Impedance (Altaimpedancia)
WWeak Unknown (Valor débil desconocido)
LWeak 0 (Cero débil)
HWeak 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 laarchitecture 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.

ENTITYejemplo1ISPORT(a,b:INbit;F:OUTbit);ENDejemplo1;

Sintaxis para la definición de la arquitectura

[editar]

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):

ARCHITECTUREnombre_arquitecturaOFnombre_entidadISDeclaracióndetiposDeclaracióndeseñales.DeclaracióndeconstantesDeclaracióndecomponentesDefinicióndefuncionesDefinicióndeprocedimientosBEGINEnunciadoconcurrente...EnunciadoconcurrenteENDnombre_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-typeVariables 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

[editar]

En VHDL existen diferentes operadores entre los que tenemos:

OperadoresDefinidos en VHDL para los tipos:LógicosAND, OR, XOR, NOT, NAND, NOR, XNORBit y BooleanosDe relación =, /=, <, >, >=, <=Integer, Bit y Bit_VectorConcatenación&Bit, Bit_Vector y para las cadenasAritméticos+, -, *, /,Mod, Rem, Abs, **Integer*Mod: Módulo de la división.Rem: Resto de la divisiónAbs: 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.

ARCHITECTUREand_2entOFejemplo1ISBEGINF<=aANDb;ENDand_2ent;

Otra forma de escribir el mismo ejemplo anterior es:

ARCHITECTUREand_2entOFejemplo1ISBEGINF<=1WHENa=1ANDb=1ELSE0;ENDand_2ent;

Otra forma de escribir el mismo ejemplo anterior es:

ARCHITECTUREand_2entOFejemplo1ISBEGINF<=1WHENa=1ANDb=1ELSE0WHENa=0ANDb=0ELSE0WHENa=0ANDb=1ELSE0WHENa=1ANDb=0ELSE-;ENDand_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).

ENTITYejemp2_3IS--Solo se cambia el nombre de la entidadPORT(a,b:INbit;F:OUTbit);ENDejem2_3;ARCHITECTUREdos_entOFejem2_3ISBEGINf<=1WHENa/=bELSE0;ENDdos_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..... OTHERSWHEN..... 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.....

ENTITYBoole_4ISPORT(a,b:INBoolean;Y:OUTBolean);ENDBoole_4;ARCHITECTUREBoole4_aOFBoole_4ISBEGINY<=trueWHENa=falseandb=falseELSEFalse;ENDBole4_a;

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

ENTITYBoole_5ISPORT(a,b:INBoolean;Y:OUTBolean);ENDBoole_5;ARCHITECTUREBoole5_aOFBoole_5ISBEGINWITHaSELECTY<=falseWHENtrue,NotbWHENOTHERS;ENDBole5_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 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

[editar]

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:

PACKAGEnombre_paqueteISDeclaracióndetiposDeclaracióndeseñales.DeclaracióndeconstantesDeclaracióndecomponentesDefinicióndefuncionesDefinicióndeprocedimientosENDnombre_paquetePACKAGEBODYnombre_paqueteISDeclaracióndetiposDeclaracióndeconstantesDefinicióndefuncionesDefinicióndeprocedimientosENDnombre_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

COMPONENTnombre_componentePORT(Nombredeseñal:modotipodeseñal;...Nombredeseñal:modotipodeseñal);ENDCOMPONENT;

Extensión (Overload) de los operadores en VHDLLa 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 VHDLEn 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:

EntradasSalidaabcT00-00100011110011100

ENTITYTISPORT(a,b,c:INBIT;T:OUTBIT);ENDT;ARCHITECTURETOFTISBEGINT<=1WHENa=0ANDb=1ANDc=1ELSE1WHENa=1ANDb=0ANDc=0ELSE0;ENDT;

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

PACKAGETPKGISCOMPONENTT-- El nombre del componente tiene que ser igual a la entidad que se empaquetaPORT(a,b,c:INBIT;T:OUTBIT);ENDCOMPONENT;ENDTPKG;

Ejemplos de programas

[editar]

Para llevar a cabo un diseño enVHDL, 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: laentidad 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; laarquitectura, 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

[editar]

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

entityMUX2a1isport(a:instd_logic;b:instd_logic;sel:instd_logic;z:outstd_logic);endentityarchitecturedataflowofMUX2a1isbeginz<=awhensel='0'elseb;enddataflow;

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 entradasel.

entityMUX4a1isport(a:instd_logic;b:instd_logic;c:instd_logic;d:instd_logic;z:outstd_logic;sel:instd_logic_vector(1downto0));endentity;architecturedataflowofMUX4a1isbeginprocess(a,b,c,d,sel)begincaseseliswhen"00"=>z<=a;when"01"=>z<=b;when"10"=>z<=c;when"11"=>z<=d;endcase;endprocess;enddataflow;

Biestable

[editar]

A continuación se muestra el proceso que describe unbiestable 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.

entityBIESTisport(RST:instd_logic;-- Reset asincronoCLK:instd_logic;-- RelojD:instd_logic;-- Dato de entradaQ:outstd_logic);-- Salida (dato guardado en el biestable)endBIEST;architectureDofBIESTisbeginbiest_D:process(RST,CLK)beginifRST='1'then-- Reset asincronoQ<='0';elsifCLK'eventandCLK='1'then-- Condicion de reloj activo por flanco de subidaQ<=D;endif;endprocess;endD;

Contador

[editar]

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).

libraryIEEE;-- bibliotecasuseieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityCONTADORisport(RST:instd_logic;CLK:instd_logic;-- entradassalida:inoutstd_logic_vector(9downto0));-- salidasendentity;architecturecontadorofcontadorissignalaux:std_logic_vector(9downto0);-- señal auxiliarbeginprocess(CLK,RST)-- programación secuencialbeginifRST='1'then-- reset -> inicializaciónaux<=(others=>'0');elsif(clk'eventandclk='1')then-- flanco de reloj ascendenteif(salida="1111101000")then-- máxima cuentaaux<=(others=>'0');-- vuelvo a comenzarelseaux<=aux+1;-- cuento uno másendif;endif;endprocess;salida<=aux;-- saco la salidaendcontador;

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

Corrección Hamming

[editar]

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

libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entityhamcorrisport(DU:inSTD_LOGIC_VECTOR(1to7);DC:outSTD_LOGIC_VECTOR(1to7);NOERROR:outSTD_LOGIC);endhamcorr;architecturehamcorrofhamcorrisfunctionsyndrome(D:STD_LOGIC_VECTOR)returnSTD_LOGIC_VECTORisvariableSYN:STD_LOGIC_VECTOR(2downto0);beginSYN(0):=D(1)xorD(3)xorD(5)xorD(7);SYN(1):=D(2)xorD(3)xorD(6)xorD(7);SYN(2):=D(4)xorD(5)xorD(6)xorD(7);return(SYN);endsyndrome;beginprocess(DU)variablei:INTEGER;beginDC<=DU;i:=CONV_INTEGER(syndrome(DU));ifi=0thenNOERROR<='1';elseNOERROR<='0';DC(i)<=notDU(i);endif;endprocess;endhamcorr;

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

Control por PWM para un servomotor

[editar]

Con el código siguiente, se muestra como controlar un servomotor comercial SG90 para una rotación de 0° a 180°.

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYservomotorISPORT(clk,pi,pf:INSTD_LOGIC;control:OUTSTD_LOGIC);ENDENTITY;ARCHITECTUREarqOFservomotorISSIGNALclkl:STD_LOGIC;SIGNALcontador:INTEGERRANGE0TO2500:=0;SIGNALvalor:INTEGERRANGE0TO200;SIGNALconteo:INTEGERRANGE0TO200;SIGNALduty:INTEGERRANGE0TO200:=15;BEGINPROCESS(clk)BEGINIF(RISING_EDGE(clk))THENIF(contador=2500)THENcontador<=0;clkl<=NOTclkl;ELSEcontador<=contador+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(clkl,pi,pf,valor)BEGINIF(RISING_EDGE(clkl))THENIF(pi='1')THEN-- valor para modular posición inicialvalor<=5;ELSIF(pf='1')THENvalor<=24;-- valor para modular posición finalENDIF;ENDIF;duty<=valor;ENDPROCESS;PROCESS(clkl)BEGINIF(RISING_EDGE(clkl))THENIF(conteo<=duty)THENcontrol<='1';ELSEcontrol<='0';ENDIF;IF(conteo=200)THENconteo<=0;ELSEconteo<=conteo+1;ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTURE;

Emulación de ROM

[editar]

Con el siguiente código funciona para emular una ROM que gurda los datos correspondientes a caracteres para desplegar el mensajehola en un display de 7 segmentos.

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYRomISPORT(bus_dir:INSTD_LOGIC_VECTOR(1DOWNTO0);cs:INSTD_LOGIC;bus_datos:OUTSTD_LOGIC_VECTOR(6DONWTO0));ENDENTITY;ARCHITECTUREarqOFRomISCONSTANTlh:STD_LOGIC_VECTOR(6DOWNTO0):="0001001";CONSTANTl0:STD_LOGIC_VECTOR(6DOWNTO0):="1000000";CONSTANTlL:STD_LOGIC_VECTOR(6DOWNTO0):="1000111";CONSTANTla:STD_LOGIC_VECTOR(6DONWTO0):="0001000";TYPEmemoriaISARRAY(3DOWNTO0)OFSTD_LOGIC_VECTOR(6DOWNTO0);CONSTANTmem_rom:memoria:=(la,ll,l0,lh);SIGNALdato:STD_LOGIC_VECTOR(6DONWTO0);BEGINprom:PROCESS(bus_dir)BEGINdato<=mem_rom(conv_integer(bus_dir));ENDPROCESSprom;pbufPROCESS(dato,cs)BEGINIF(cs='1')THENbus_datos<=dato;ELSEbus_datos<=(OTHERS=>'Z');ENDIF;ENDPROCESSpbuf;ENDARCHITECTURE;

Emulación RAM

[editar]

El código siguiente muestra la lógica utilizada para crear una RAM de 3 datos cada uno de 3 bits.

libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entityRamisport(AddrWr:instd_logic_vector(1downto0);AddrRd:instd_logic_vector(1downto0);clkWr:instd_logic;clkRd:instd_logic;WrEN:instd_logic;dataIn:instd_logic_vector(2downto0);dataOut:outstd_logic_vector(2downto0);ledcarga:outstd_logic:='0');endentity;architecturearqofRamistypematrixisarray(0to3)ofstd_logic_vector(2downto0);signalmemory:matrix;signaldataInBuf:std_logic_vector(2downto0);signalAddressWrite:std_logic_vector(1downto0);signalAddressRead:std_logic_vector(1downto0);begin--Acceso de escrituraprocess(clkWr)beginif(clkWr'eventandclkWr='1'andWrEn='1')thendataInBuf<=dataIn;AddressWrite<=AddrWr;memory(to_integer(unsigned(AddressWrite)))<=dataInbuf;ledcarga<='1';endif;endprocess;process(clkRd)beginif(clkRd'eventandclkRd='1')thenAddressRead<=AddrRd;dataOut<=memory(to_integer(unsigned(AddressRead)));endif;endprocess;endarchitecture;

Hola Mundo

[editar]

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:

usestd.textio.all;-- bibliotecasentityholaisendentityhola;architectureWikiofholaisconstantmensaje:string:="hola mundo";-- el mensajebeginprocessis-- proceso -> secuencialvariableL:line;beginwrite(L,mensaje);writeline(output,L);-- escribe todo lo anteriorwait;endprocess;endarchitectureWiki;

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 programaHola Mundo sería encender un led.

Herramientas

[editar]
  • 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 oMatlab.

Véase también

[editar]

Enlaces externos

[editar]

Códigos de programa

[editar]

Fabricantes de FPGA y de herramientas

[editar]

Fabricantes de herramientas

[editar]
Control de autoridades

Obtenido de «https://es.wikipedia.org/w/index.php?title=VHDL&oldid=159880143»
Categorías:
Categoría oculta:

[8]ページ先頭

©2009-2025 Movatter.jp