Sunteți pe pagina 1din 14

Formas de describir un circuito

Dentro del VHDL hay varias formas con las que podemos disear el mismo circuito y es tarea del diseador elegir la ms apropiada.

Funcional: Describimos la forma en que se comporta el circuito. Esta es la forma que ms se parece a los lenguajes de software ya que la descripcin es secuencial. 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 seales y con las instancias a otros componentes. Flujo de datos: describe asignaciones concurrentes (en paralelo) de seales. Estructural: se describe el circuito con instancias de componentes. Estas instancias forman un diseo de jerarqua superior, al conectar los puertos de estas instancias con las seales internas del circuito, o con puertos del circuito de jerarqua superior. Mixta: combinacin de todas o algunas de las anteriores.

En VHDL tambin existen formas metdicas para el diseo de mquinas de estados, filtros digitales, bancos de pruebas etc.

Secuencia de diseo
El flujo de diseo de un sistema podra ser:

Divisin del diseo principal en mdulos separados. La modularidad es uno de los conceptos principales de todo diseo. Normalmente se diferencia entre dos metodologas de diseo: top-down y botton-up. La metodologa top-down consiste en que un diseo complejo se divide en diseos ms sencillos que se puedan disear (o describir) ms fcilmente. La metodologa botton-up consiste en construir un diseo complejo a partir de mdulos, ya diseados, ms simples. En la prctica, un diseo usa generalmente ambas metodologas. Entrada de diseos, pueden usarse diversos mtodos tal como se vio anteriormente. Simulacin 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 simulacin se comprueba que el cdigo VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende. Sntesis. En este paso se adapta el diseo 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 nmeros no constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables es que el VHDL es un lenguaje genrico para modelado de sistemas (no slo para diseo de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la sntesis se tiene en cuenta

la estructura interna del dispositivo, y se definen restricciones, como la asignacin de pines. El sintetizador optimiza las expresiones lgicas con objeto de que ocupen menor rea, o bien son eliminadas las expresiones lgicas que no son usadas por el circuito. Simulacin post-sntesis. En este tipo de simulacin se comprueba que el sintetizador ha realizado correctamente la sntesis del circuito, al transformar el cdigo HDL en bloques lgicos conectados entre s. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de sntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo. Ubicacin y enrutamiento. El proceso de ubicacin consiste en situar los bloques digitales obtenidos en la sntesis de forma ptima, de forma que aquellos bloques que se encuentran muy interconectados entre s se siten prximamente. El proceso de enrutamiento consiste en interconectar adecuadamente los bloques entre s, intentando minimizar retardos de propagacin para maximizar la frecuencia mxima de funcionamiento del dispositivo. Anotacin final. Una vez ha sido completado el proceso de ubicacin y enrutamiento, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulacin temporal (tambin llamada simulacin postlayout). Estos retardos son anotados en un fichero SDF (Standard Delay Format) que asocia a cada bloque o interconexin un retardo mnimo/tpico/mximo. Simulacin temporal. A pesar de la simulacin anterior puede que el diseo no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulacin se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos. Programacin en el dispositivo. Se implementa el diseo en el dispositivo final y se comprueba el resultado.

Procedimiento de diseo
El primer paso del diseo consiste en la construccin del diagrama en bloque del sistema. En diseos complejos como en software los programas son generalmente jerrquicos y VHDL ofrece un buen marco de trabajo para definir los mdulos que integran el sistema y sus interfaces, dejando los detalles para pasos posteriores. El segundo paso es la elaboracin del cdigo en VHDL para cada mdulo, 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. Despus de que se ha escrito algn cdigo se hace necesario compilarlo. El compilador de VHDL analiza este cdigo y determina los errores de sintaxis y chequea la compatibilidad entre mdulos. Crea toda la informacin necesaria para la simulacin. El prximo paso es la simulacin, la cual le permite establecer los estmulos a cada mdulo y observar su respuesta. El VHDL da la posibilidad de crear bancos de prueba que automticamente aplica entradas y compara las salidas con las respuestas deseadas. La simulacin es un paso dentro del proceso de verificacin. El propsito de la simulacin es verificar que el circuito trabaja como se desea, es decir es ms 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 diseo es mejor que al final, en donde hay que repetir entonces una gran cantidad de pasos del diseo. Hay dos dimensiones a verificar:

Su comportamiento funcional, en donde se estudia su comportamiento lgico independiente de consideraciones de tiempo, como las demoras en las compuertas. Su verificacin 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).

Despus de la verificacin se est listo para entrar en la fase final del diseo. La naturaleza y herramientas en esta fase dependen de la tecnologa, pero hay tres pasos bsicos. El primero es la sntesis, que convierte la descripcin en VHDL en un conjunto de componentes que pueden ser realizados en la tecnologa 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 cmo estas compuertas son interconectadas. El diseador puede ayudar a la herramienta de sntesis especificando requerimientos a la tecnologa empleada, como el mximo nmero de niveles lgicos 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 dibujaran las compuertas y se definira como conectarlas. En el ltimo paso se realiza la verificacin temporal, ya que a esta altura es que se pueden calcular los elementos parsitos, 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 atrs (o peor).

Estructura de programa
VHDL fue diseado en base a los principios de la programacin estructurada. La idea es definir la interfaz de un mdulo de hardware mientras deja invisible sus detalles internos. La entidad (ENTITY) en VHDL es simplemente la declaracin de las entradas y salidas de un mdulo mientras que la arquitectura (ARCHITECTURE) es la descripcin detallada de la estructura interna del mdulo o de su comportamiento. En la siguiente figura se ilustra el concepto anterior. Muchos diseadores 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 diseo jerrquico, la arquitectura de la entidad de ms 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 dems. 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 continuacin se muestra un programa muy simple en VHDL de una compuerta de 2 entradas. Como otros programas, VHDL ignora los espacios y saltos de lneas. Los comentarios se escriben con 2 guiones (--) y terminan al final de la lnea. 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 maysculas o minsculas, en el ejemplo que sigue las utilizaremos en maysculas y negrita para identificarlas.
ENTITY Nombre_entidad IS PORT ( Nombre de seal: modo tipo de seal; . . . Nombre de seal: modo tipo de seal ) ; END nombre_entidad ;

Adems de darle nombre a la entidad el propsito de la declaracin es definir sus seales (o ports) de interfaz externa en su declaracin de ports. Adems 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 seal; es una lista de uno o ms identificadores separados por una coma y seleccionados por el usuario para identificar las seales externas de la interfaz. MODO es una de las 4 siguientes palabras reservadas para indicar la direccin de la seal:

Modo Descripcin IN En este modo las seales solo entran en la entidad OUT Las seales salen de la entidad Este modo se utiliza para las seales que adems de salir de la entidad pueden BUFFER usarse como entradas realimentadas Este modo se utiliza para seales bidireccionales. Se emplea en salida con tres INOUT estados. Se puede asignar como sustituto de los tres modos anteriores, pero no se aconseja pues dificulta la comprensin del programa.

Cuando se omite el modo de una seal en la declaracin de la entidad se sobreentiende que es de entrada.

Tipo de seal; en VHDL, hay varios tipos de seales predefinidas por el lenguaje, tales como: TIPO Caractersticas En este tipo las seales solo toman los valores de "1" y "0" En este tipo las seales solo toman los valores de True y False En este tipo las seales toman 9 valores, entre ellos tenemos: "1", "0", "Z" (para el 3er estado), "-" (para los opcionales). En este tipo las seales toman valores enteros. Los 1 y los 0 se escriben sin

BIT Booleana Std_logic Integer

En este tipo los valores de las seales son una cadena de unos y ceros. Ejemplo: 1000 En este tipo los valores de las seales son una cadena de los nueve Std_Logic_Vector valores permisibles para el tipo std_logic. Contiene todos los caracteres ISO de 8 bits, donde los primeros 128 son Character los caracteres ASCII. Bit_Vector

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 Operadore s Tipo U X 0 1 Z W L H -

Std_logic Uninitialized Forcing Unknown Forcing 0 Forcing 1 High Impedance Weak Unknown Weak 0 Weak 1 Dont care

Este tipo es parte del paquete IEEE 1164 Adems el usuario puede definir otros tipos de seales, lo que resulta muy conveniente en algunos casos, como en el diseo de mquinas de estados. El lenguaje VHDL concede mxima importancia a los tipos de seales, no se admite realizar una asignacin mezclando tipos diferentes. Un PORT de una entidad y sus modos y tipos pueden ser vistos por otros mdulos que la utilicen. La operacin interna de la entidad est definida en la architecture cuya sintaxis general se muestra a continuacin. Ejemplo, escriba la declaracin de la entidad para un circuito digital con dos entradas a y b y una salida F segn se muestra en la siguiente figura.
ENTITY ejemplo1 IS PORT ( a, b : IN bit; F : OUT END ejemplo1 ;

bit );

Sintaxis para la definicin de la arquitectura

La sintaxis para la declaracin de la arquitectura es la siguiente (aparecen en mayscula las palabras reservadas del lenguaje VHDL, pero esto no es necesario):
ARCHITECTURE nombre_arquitectura OF nombre_entidad IS Declaracin de tipos Declaracin de seales. Declaracin de constantes Declaracin de componentes Definicin de funciones Definicin 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 diseo que se est realizando. No obstante la declaracin de seales se utiliza mucho, pues contribuye entre otras cosas a la claridad del diseo. Nombre_entidad es el nombre de su entidad. Nombre_arquitectura es el nombre dado por el usuario a la arquitectura. Las seales externas de la arquitectura son las declaradas en el port de la entidad, no obstante una arquitectura puede contener seales 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 ms usual es comenzar por la declaracin de las seales. Signal signal-name : signal-type Variables en VHDL son similares a las seales excepto que ellas no tienen significado fsico en el circuito. En el ejemplo anterior no se puso declaracin de variables, ellas son usadas en funciones, procedimientos y procesos. Todas las seales, variables y constantes en VHDL tienen asociadas un tipo, este especifica el conjunto de valores que el objeto puede tomar. Tambin 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: Lgicos AND, OR, XOR, NOT, NAND, NOR, XNOR Bit y Booleanos De relacin =, /=, <, >, >=, <= Integer, Bit y Bit_Vector Concatenacin & Bit, Bit_Vector y para las cadenas Aritmticos +, -, *, /, Mod, Rem, Abs, ** Integer* Mod: Modulo de la divisin. Rem: Resto de la divisin Abs: valor absoluto.
o

exponentiation.

El WARP solo soporta multiplicar y dividir por 2. Ejemplo: Escriba la definicin 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 funcin que realiza el circuito es tal que la salida ser 0 solo si las entradas son iguales (operacin 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 despus 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 seales 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 diseo 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 informacin relacionada con un diseo determinado. Al comienzo de cada diseo el compilador crea automticamente una biblioteca llamada WORK con este objetivo. Adems de esta biblioteca particular existen otras bibliotecas de tipo general que contienen un conjunto de definiciones que pueden utilizarse en cualquier diseo. Un ejemplo de biblioteca general es la llamada Library IEEE, que contiene definiciones estndar para VHDL. Para utilizar una biblioteca general es necesario escribir su nombre al inicio del programa, por eso es muy comn que en la primera lnea de un diseo en VHDL aparezca escrito "Library IEEE", de sta forma dicha biblioteca se hace visible para el diseo. Paquetes En los paquetes se guardan definiciones de tipos y objetos que pueden ser utilizados en los diferentes diseos que invoquen su utilizacin. Un paquete muy utilizado es el paquete estndar IEEE_STD_LOGIC_1164.ALL; La utilizacin de un paquete en un diseo se

realiza invocando su empleo mediante la clusula USE y el nombre del paquete. Por ejemplo USE IEEE_STD_LOGIC_1164.ALL; La terminacin ALL, permite utilizar todas las definiciones y objetos que contiene dicho paquete. Adems del estndar, existen otros paquetes de utilizacin general y tambin los diseadores que trabajan con VHDL pueden definir sus propios paquetes, lo que les permite reutilizar diseos realizados anteriormente como parte de nuevos diseos. Sintaxis para la definicin de paquetes. La sintaxis para la definicin de un paquete es la siguiente:
PACKAGE nombre_paquete IS Declaracin de tipos Declaracin de seales. Declaracin de constantes Declaracin de componentes Definicin de funciones Definicin de procedimientos END nombre_paquete PACKAGE BODY nombre_paquete IS Declaracin de tipos Declaracin de constantes Definicin de funciones Definicin 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 diseos que los utilicen. Sintaxis para la declaracin de una componente en VHDL
COMPONENT nombre_componente PORT ( Nombre de seal: modo tipo de seal; ... Nombre de seal: modo tipo de seal); END COMPONENT;

Extensin (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 estndar IEEE.Std_Logic_1164 define la extensin de los operadores lgicos para los tipos std_logic y Std_logic_Vector. Sin embargo la extensin de los operadores de relacin y aritmticos para los tipos std_logic y std_logic_vector no estn definidos en el paquete standard sino en otro paquete llamado Work_Std_arith. DISEO JERARQUICO EN VHDL En VHDL un diseo puede utilizar componentes que son a su vez otros circuitos o sistemas ms sencillos previamente diseados. Esto

constituye una gran ventaja pues facilita el trabajo en equipo y la distribucin de tareas entre distintos grupos de diseadores. A medida que se sube hacia el nivel de jerarqua mxima la arquitectura se hace ms 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 jerrquicos. Disee un CLC con tres entradas a, b y c y una salida T, que realice la funcin 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 diseo:


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
En un diseo en VHDL tenemos 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 diseo dentro de otro; la arquitectura, que es donde se describe el diseo de la forma que se ha visto antes. Otros elementos del lenguaje son las libreras, 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 ms complejo es el de un multiplexor de cuatro entradas. Este ejemplo trabaja con vectores para controlar la entrada activa a travs 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 continuacin se muestra el proceso que describe un biestable D activado por el flanco de subida del reloj (CLK). Este biestable tiene una seal de reset asncrona (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; CLK: in std_logic; D: in std_logic; Q: out std_logic); guardado en el biestable) end BIEST; architecture D of BIEST is begin biest_D : process(RST, CLK) begin if RST = '1' then Q <= '0'; elsif CLK'event and CLK = '1' then reloj activo por flanco de subida Q <= D; end if; ----Reset asincrono Reloj Dato de entrada Salida (dato

-- Reset asincrono -- Condicion de

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 inicializacin se consigue con un reset (RST).
library IEEE; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity CONTADOR is port(RST: in std_logic; CLK: in std_logic; salida: inout std_logic_vector(9 downto 0)); end entity; architecture contador of contador is signal aux: std_logic_vector(9 downto 0); auxiliar begin process (CLK,RST) programacin secuencial begin if RST='1' then inicializacin aux<=(others=>'0'); elsif(clk'event and clk='1') then reloj ascendente if(salida="1111101000") then cuenta aux<=(others=>'0'); comenzar else aux<=aux+1; ms end if; end if; salida<=aux; salida end process; end contador; -- bibliotecas

-- entradas -- salidas

-- seal --- reset -> -- flanco de -- mxima -- vuelvo a -- cuento uno

-- saco la

Despus de compilar este programa habra que indicar a la herramienta encargada del diseo las restricciones oportunas para asignar las seales de entrada y salida a las patillas del chip donde se programar o bien usar este diseo dentro de otro. Correccin Hamming Ejemplo del cdigo 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 cdigo obtenemos la correccin 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 electrnico digital. Este tipo de descripciones son tiles en simulacin. Un ejemplo de este tipo de descripciones son las que incluyen mensajes que notifican al diseador si se ha cumplido alguna condicin durante la simulacin. El cdigo siguiente mostrara el mensaje "hola mundo" durante la simulacin:
use std.textio.all; entity hola is end entity hola; architecture Wiki of hola is constant mensaje: string := "hola mundo"; begin -- el mensaje -- bibliotecas

process is secuencial variable L: line; begin write(L, mensaje); writeline(output, L); anterior wait; end process; end architecture Wiki;

-- proceso ->

-- escribe todo lo

Es importante sealar que esta descripcin no es sintetizable en un circuito electrnico digital, y que la descripcin equivalente en VHDL al programa Hola Mundo sera encender un led.

S-ar putea să vă placă și