Engineering">
Nothing Special   »   [go: up one dir, main page]

Lab 6 Digital 2 01112021

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 21

UNIVERSIDAD TECNICA DE ORURO

FACULTAD NACIONAL DE INGENIERIA


CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

LABORATORIO 6

VHDL
1. Objetivo.- Introducir al alumno en el desarrollo y programación del
lenguaje VHDL
2. Marco Teórico.- '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.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

 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.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

 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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

 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
Este modo se utiliza para las señales que además de salir de la entidad pueden
BUFFER
usarse como entradas realimentadas
Este modo se utiliza para señales bidireccionales. Se emplea en salida con
INOUT 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
En este tipo las señales toman 9 valores, entre ellos tenemos: "1",
Std_logic
"0", "Z" (para el 3.er estado), "-" (para los opcionales).
En este tipo las señales toman valores enteros. Los 1 y los 0 se
Integer
escriben sin “
En este tipo los valores de las señales son una cadena de unos y
Bit_Vector
ceros. Ejemplo: “1000”
En este tipo los valores de las señales 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
Character
son los caracteres ASCII.

Ejemplo: “1-0Z” -231 + 1 231 - 1 Integer -2 147 483 647 2 147 483 647
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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


UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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.


o 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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

‘-‘;
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 Booleana y asignaciones condicionales de la forma
WHEN... ELSE.....

ENTITY Boole_4 IS
PORT ( a, b: IN Boolean;
Y: OUT Boolean);
END Boole_4;

ARCHITECTURE Boole4_a OF Boole_4 IS


BEGIN
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

Y <= true WHEN a = false and b = false ELSE


False;
END Boole4_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 Boolean);
END Boole_5;

ARCHITECTURE Boole5_a OF Boole_5 IS


BEGIN
WITH a SELECT
Y <= false WHEN true,
Not b WHEN OTHERS;
END Boole5_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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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;
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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;
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

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.

PRACTICA EN LABORATORIO

Descargue el mejor software, que se acomode a su plataforma de Windows y


ejecute los anteriores ejercicios, en una hoja describir con puntabola color verde,
los comentarios por cada línea de programación.
UNIVERSIDAD TECNICA DE ORURO
FACULTAD NACIONAL DE INGENIERIA
CARRERA: INGENIERIA ELECTRICA ELECTRONICA
LABORATORIO DE ELECTRONICA DIGITAL II (ELT 3722)
_____________________________________________________________________________

También podría gustarte