guía 1 sdi 115 2013

10
Universidad de El Salvador Sistemas Digitales I Introducción a Lenguajes HDL I Universidad de El Salvador Facultad de Ingeniería y Arquitectura Guía 1: “Introducción a los Lenguajes HDL” Eddys Elías Lacayo López Juan Ramón Albiñana Alfaro [email protected] aa09120gnu@ yahoo.es RESUMEN: Esta guía pretende ser una introducción a los lenguajes HDL (Hardware Description Language), específicamente para trabajar con AHDL (Altera Hardware Description Language) de Altera y VHDL (Very high speed integrated circuit Hardware Description Language) del estándar IEEE (Institute of Electrical and Electronics Engineers) std 1076-1987, se explicará con mayor detalle VHDL, para minimizar el contenido de la guía, pero el estudiante puede trabajar en el lenguaje que prefiera, además usar el sistema operativo de su preferencia, para Windows existen muchos IDE´s (Integrated Development Environment o Ambiente de Trabajo Integrado) y compiladores como lo son Max Plus de Altera (este es el que se utilizará en la guía), Active HDL y muchos otros, estos software son pagados y por tanto se recomienda trabajar con software libre para lo cual se tiene GHDL para LINUX, y para visualizar resultados GTKWave. INTRODUCCIÓN: Los lenguajes HDL son muy variados están desde los Netlist como Ada (lenguaje de programación nombrado en honor a Ada Lovelace, conocida popularmente como la primera programadora computacional) (en este fue basado VHDL) hasta lenguajes tan potentes en los que muchas veces el circuito ya no se ve claramente y más bien es un lenguaje de programación, esto tiene sus grandes ventajas aunque también existen desventajas, la más notable desventaja es que a la hora de implementar el circuito no es fácil pasar del programa de descripción al Hardware que lo implementa, este proceso es conocido como síntesis. VENTAJAS DEL USO DE VHDL: VHDL permite diseñar, modelar, y comprobar un sistema desde un alto nivel de abstracción bajando hasta el nivel de definición estructural de puertas. Circuitos descritos utilizando VHDL, siguiendo unas guías para síntesis, pueden ser utilizados por herramientas de síntesis para crear implementaciones de diseños a nivel de puertas. Al estar basado en un estándar (IEEE Std 1076- 1987) los ingenieros de toda la industria de diseño pueden usar este lenguaje para minimizar errores de comunicación y problemas de compatibilidad.

Upload: marvin-roque

Post on 11-Dec-2014

14 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 1

Universidad de El Salvador

Facultad de Ingeniería y Arquitectura

Guía 1: “Introducción a los Lenguajes HDL”

Eddys Elías Lacayo López Juan Ramón Albiñana Alfaro

[email protected] aa09120gnu@ yahoo.es

RESUMEN: Esta guía pretende ser una

introducción a los lenguajes HDL (Hardware

Description Language), específicamente para

trabajar con AHDL (Altera Hardware Description

Language) de Altera y VHDL (Very high speed

integrated circuit Hardware Description Language)

del estándar IEEE (Institute of Electrical and

Electronics Engineers) std 1076-1987, se explicará

con mayor detalle VHDL, para minimizar el

contenido de la guía, pero el estudiante puede

trabajar en el lenguaje que prefiera, además usar el

sistema operativo de su preferencia, para Windows

existen muchos IDE´s (Integrated Development

Environment o Ambiente de Trabajo Integrado) y

compiladores como lo son Max Plus de Altera (este

es el que se utilizará en la guía), Active HDL y

muchos otros, estos software son pagados y por

tanto se recomienda trabajar con software libre

para lo cual se tiene GHDL para LINUX, y para

visualizar resultados GTKWave.

INTRODUCCIÓN: Los lenguajes HDL son muy

variados están desde los Netlist como Ada

(lenguaje de programación nombrado en honor a

Ada Lovelace, conocida popularmente como la

primera programadora computacional) (en este fue

basado VHDL) hasta lenguajes tan potentes en los

que muchas veces el circuito ya no se ve

claramente y más bien es un lenguaje de

programación, esto tiene sus grandes ventajas

aunque también existen desventajas, la más notable

desventaja es que a la hora de implementar el

circuito no es fácil pasar del programa de

descripción al Hardware que lo implementa, este

proceso es conocido como síntesis.

VENTAJAS DEL USO DE VHDL:

VHDL permite diseñar, modelar, y comprobar

un sistema desde un alto nivel de abstracción

bajando hasta el nivel de definición estructural

de puertas.

Circuitos descritos utilizando VHDL, siguiendo

unas guías para síntesis, pueden ser utilizados

por herramientas de síntesis para crear

implementaciones de diseños a nivel de puertas.

Al estar basado en un estándar (IEEE Std 1076-

1987) los ingenieros de toda la industria de

diseño pueden usar este lenguaje para minimizar

errores de comunicación y problemas de

compatibilidad.

Page 2: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 2

Modularidad: VHDL permite dividir o

descomponer un diseño hardware y su

descripción VHDL en unidades más pequeñas.

Instalación de las herramientas de

programación y Simulación VHDL:

Para Windows: Descargar un IDE, uno muy

bueno se encuentra en www.altera.com, instalarlo

al igual que se instalan todos los programas en

Windows.

Para Linux: Descargar dos archivos GHDL y

GTKWave, hay diferentes versiones para cada

sistema operativo, se utilizará Ubuntu, una forma

muy sencilla de instalarlos es desde el synaptic

pero en esta ocasión se hará con los comandos apt-

get o dpkg, abra una consola y escriba:

apt-get install ghdl

Si en cambio, los instaladores se encuentran en una

carpeta, se debe utilizar el comando

dpkg –i *.deb

Que instalará todos los archivos que estén en la

carpeta actual.

Para escribir el código se puede utilizar cualquier

editor de texto plano como Vi, Vim, Geany, Gedit,

etc.

Creación del primer programa:

En Windows: Se utilizará el software de Altera.

1.0. Cree nuevo proyecto file -> Name… como

se muestra en la imagen 1 (flecha 1), se le dará

el nombre de comp_and como se muestra en la

imagen 2.

2.0. Luego seleccione la opción “nuevo

archivo” como lo indica la flecha 2 en la

imagen 1.

Imagen 1

Imagen 2

3.0. Aparecerá una nueva ventana, seleccione

Text Editor File como se muestra en la imagen

Imagen 3.

4.0. Luego aparecerá una ventana donde podrá

editar texto, guárdela con el mismo nombre del

proyecto, en este caso comp_and.

Page 3: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 3

5.0. Escriba el siguiente código en el editor y

guárdelo.

6.0. Luego compile el código, la opción Max +

Plus II -> compiler se muestra en la imagen 4,

aparecerá una ventana, vaya a la opción

Processing ->Funtional SNF Stractor, esto se

muestra en la imagen 5 y por último en la

ventana que apareció presione Start y luego ok.

Imagen 4.

Imagen 5.

Imagen 6.

7.0. Para ver si funciona correctamente se hará

una simulación, para esto vaya al menú Max +

Plus II -> Wave Form Editor, como se muestra

en la imagen 7, aparecerá otra imagen solo

pulse ok.

Page 4: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 4

Imagen 7

8.0. Guarde el editor de forma de onda con el

nombre de comp_and.scf.

9.0. Luego vaya al menú Node -> Enter Nodes

from SNF, como se muestra en la imagen 8.

Imagen 8.

10.0. Agregue las señales como se muestra en la

imagen 9, presionando List y la flecha que

indica hacia la derecha.

Imagen 9.

11.0. Luego se hacen los ajustes de el archivo de

simulación File -> End Time.., coloque 2.0 us

como se muestra en la imagen 10, luego en el

menú Options -> Grid size, dele un valor de

100 ns como se muestra en la imagen 11, por

último seleccione el menú view -> Fit in

windows, con eso ya está configurada la

ventana.

Imagen 10.

Imagen 11.

12.0. Con los Botones del lado izquierdo se

modifican las señales de entrada (solo se

pueden modificar las entradas) de forma que

queden como se muestra en la imagen 12.

Page 5: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 5

Imagen 12.

13.0. Luego vaya al menú Max Plus II ->

Simulator, en la ventana que aparece presione

start, luego ok, el resultado y todo lo anterior se

muestra en la imagen 12.

Como se puede observar la salida obedece el

comportamiento de una compuerta and, esto se

muestra con mayor detalle en la imagen 13.

Imagen 13.

Explicación del código.

Líneas 1, 7, 12: El compilador ignora todo

lo que sigue después de dos guiones “--” se

le conoce como comentario, es muy buena

práctica comentar los código, para que

otros lo puedan entender.

Líneas 2 y 6: En primer lugar, sea el tipo de

descripción que sea, hay que definir el

símbolo o entidad del circuito. En efecto, lo

primero es definir las entradas y salidas del

circuito, es decir, la caja negra que lo

define. Se le llama entidad se declara con la

palabra clave ENTITY nombre_asignado se

finaliza este bloque con la palabra clave

END nombre_asignado.

Línea 3: En esta se define el puerto

“PORT()” que son las entradas y salidas

que tendrá, en este caso dos entradas a y b,

y una salida y.

Líneas 4 y 5: El lenguaje VHDL tiene

varios tipos de variables un tipo es “BIT”,

estas líneas declaran a las variables “a” y

“b” como entradas tipo BIT “IN/OUT BIT”

y “y” como salida del mismo tipo.

Líneas 8 y 11: Se declara la arquitectura

designándole un nombre como sigue,

“ARCHITECTURE nombre_arch” luego le

sigue la palabra clave “OF

Page 6: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 6

nombre_asignado” (nombre_asignado es el

nombre que se le dio a la entidad), esto

quiere decir que la arquitectura pertenece a

la entidad dada. Se finaliza la arquitectura

con la palabra clave “END nombre_arch”

Línea 9: Después de la línea 9 “BEGIN” y

antes de la 11 “END” se declaran las

operaciones a realizar, estas operaciones se

ejecutan de manera concurrente, esto quiere

decir que no importa el orden en que se

coloquen las instrucciones, en este caso

solo hay una “y <= a AND b”, la entrada

“a” y “b” se operan con la instrucción

“AND”, el resultado se le asigna a la salida

“y”, con el operador “<=”. También se

puede ingresar en esta línea procesos

secuenciales, ó sea operaciones que se

ejecutan una después de la otra con la

palabra clave “PROCESS”.

Nota: las palabras clave se han escrito con

mayúsculas para diferenciarlas, pero esto

no es una regla.

En Linux: Una vez instalados los dos programas

mencionados anteriormente, la creación de

programas VHDL se resume a trabajar en el editor

de texto de su preferencia. Para ejemplificar esto a

continuación se muestra el mismo programa creado

para Windows con el cual se ejemplificará el

método para comprobar, compilar, ejecutar y

simular los resultados utilizando un editor de texto

y principalmente la consola de Linux, así como

también el GTKWave para ver resultados. Se

comenzará escribiendo el código:

ENTITY comp_and IS PORT( a,b :IN BIT; y :OUT BIT); END comp_and; ARCHITECTURE arch_and OF comp_and IS

BEGIN y <= a AND b; END arch_and;

Luego se guarda con el nombre de comp_and.vhd.

El código es exactamente igual al que se utilizó en

Windows por lo tanto la explicación es la misma

expuesta en la sección anterior.

A continuación se escribirá el testbench, el cual es

un archivo en el cual funciona como generador de

estímulos, es decir, en el se definirán las señales de

entrada necesarias para conseguir la tabla de

verdad del circuito y saber si éste funciona

correctamente. El código es el siguiente:

ENTITY tb_comp_and IS END tb_comp_and; ARCHITECTURE arch_and OF tb_comp_and IS COMPONENT comp_and IS PORT( a,b :IN BIT; y :OUT BIT); END COMPONENT comp_and; SIGNAL ent1:bit:='0'; SIGNAL ent2:bit:='0'; SIGNAL sal:bit; BEGIN ckt1:comp_and PORT MAP (

a => ent1, b => ent2, y => sal ); PROCESS BEGIN WAIT FOR 20 ns; ent1 <= '1'; WAIT FOR 20 ns; ent1 <= '0'; ent2 <= '1'; WAIT FOR 20 ns;

Page 7: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 7

ent1 <= '1'; WAIT FOR 20 ns; ent1 <= '0'; ent2 <= '0'; END PROCESS; END ARCHITECTURE arch_and;

Este código será guardado con el nombre de

tb_comp_and.vhd.

Explicación del código testbench.

Como se explicó en el código anterior la

palabra clave ENTITY define la caja negra que

contiene el circuito.

ARCHITECTURE define las acciones que

realizará el testbench.

COMPONENT relaciona el testbench con las

variables y las acciones del circuito en sí, el

cual ha sido guardado con el nombre de

arch_and y como se puede observar dentro de

COMPONENT se definen nuevamente las

entradas y salidas del circuito utilizando la

función PORT.

SIGNAL se utiliza para definir las señales que

se utilizarán para estimular el circuito, también

se les da valores iniciales a las señales de

entrada, como se puede observar, en este caso

se le da valor inicial de 0 lógico a las señales de

entrada.

BEGIN es una palabra clave que se utiliza

dentro del bloque ARCHITECTURE para

indicar el inicio de la descripción de la

arquitectura.

ckt1:comp_and define la iniciación del

componente que relaciona el testbench con el

circuito creado.

PORT MAP define en bloque que une las

señales que se utilizarán durante la simulación

a las variables de entrada y salida del circuito.

PROCESS contiene el bloque de señalización,

en este bloque como se puede ver se utilizan las

palabras clave WAIT FOR de modo que los

cambios de 0 a 1 lógico en las señales de

entrada nombradas ent1 y ent2 son controlados

definiendo el tiempo que debe esperar cada

variable antes de hacer el siguiente cambio.

Finalmente END PROCESS y END

ARCHITECTURE definen el final de los

bloques de proceso y arquitectura.

Siguiendo la estructura básica del ejemplo anterior

es posible definir y simular circuitos con muchas

entradas y salidas y con diferentes niveles de

complejidad.

Luego de haber guardado ambos archivos en una

carpeta se puede proceder a su compilación y

ejecución en la consola, este proceso se muestra

paso a paso en la figura 14:

En la primera línea por medio del comando ls se

puede ver que en la carpeta solo están los dos

archivos creados, se procede a utilizar el siguiente

comando para realizar un análisis en ambos los

códigos:

ghdl –a comp_and.hdl tb_comp_and.hdl

Si hay algún error, este será mostrado luego de la

ejecución de los comandos anteriores. Ahora se

Page 8: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 8

utilizará el comando ls y se verá hay 3 archivos

más.

Luego se creará el ejecutable con el siguiente

comando:

ghdl –e tb_comp_and

Es importante notar que para crear el ejecutable se

utiliza solo el nombre de tb_comp_and sin su

extensión. Si utiliza una vez más el comando ls

verá que se ha creado el archivo tb_div (letras

color verde). Para ejecutarlo se utilizará la

siguiente línea de comando:

./tb_comp_and --vcd=tb_comp_and.vcd -–stop-

time=100ns

Como se puede observar al ejecutar el programa se

definen como parámetros el nombre del archivo en

el cual se guardarán los resultados de la ejecución

del programa:

--vcd=tb_comp_and.vcd

Así como también el tiempo de ejecución, en este

caso es de 100ns:

-–stop-time=100ns

Nótese la importancia de que el tiempo de

ejecución sea suficiente para que todas las

combinaciones definidas en las señales de entrada

se ejecuten, si se duplica el tiempo de ejecución,

las indicaciones se repetirán una vez más de modo

que si se amplía el tiempo de ejecución de forma

considerada o se disminuye el tiempo que debe

durar cada cambio de variable se pueden obtener

señales periódicas.

Si se utiliza el comando ls se verá que un archivo

nuevo ha sido creado como resultado de la

ejecución del programa. Para ver e interpretar estos

resultados se utilizará el gtkwave por medio del

siguiente comando:

gtkwave tb_comp_and.vcd

Y como resultado el gtkwave se abrirá, se deberán

seleccionar las entradas y salidas que se desean ver

y, es importante mencionar que para ver

correctamente los resultados es necesario utilizar

los botones de zoom in o zoom out. Se puede

apreciar el resultado en la figura 15:

Page 9: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 9

ASIGNACIÓN

1. Realizar el código VHDL para las

compuertas: AND, NAND, OR, NOR,

EXOR, EXNOR y NOT, simular en TINA y

VHDL.

1.1 Explicar paso a paso como es el proceso de

instalación de VHDL y TINA.

1.2 Realizar el código VHDL para el ejemplo 2.35

del libro.

1.2 Realizar el código VHDL para el problema

2.35 del final del capítulo.

1.3 Circuito 3: “Un automóvil a prueba de

choques”.

Descripción: Se trata de un automóvil con tres

sensores, uno al frente y dos a los costados, al

arrancar se dirige hacia adelante, al encontrar un

obstáculo gira, a uno de los costados, esquivando el

obstáculo. La posición de los sensores se muestra

en la siguiente figura.

Para girar a los lados, se hace que las llantas giren

en distintas direcciones, por ejemplo para girar a la

izquierda, las llantas “X” rotaran hacia atrás

mientras las llantas “Y” hacia adelante, para hacer

que el par de llantas “X” giren hacia adelante se

deberá poner en una variable de control llamada

“X” el bit 0, para que giren hacia atrás X=1, igual

para el par de llantas “Y”, con su respectiva

variable de control “Y”, la lógica de control de las

llantas es la siguiente.

X Y Descripción

0 0 Hacia adelante

0 1 Hacia la derecha

1 0 Hacia la izquierda

1 1 Hacia atrás

Si los tres sensores A, B y C están en “1”, es decir,

detecta obstáculo en las tres direcciones, empezara

a retroceder, de lo contrario girara en la dirección

que esté libre de obstáculos, si existe la posibilidad

de girar hacia la derecha o hacia la izquierda se

girará a la derecha.

1.3.1 Encontrar la tabla de verdad que representa la

lógica de control.

1.3.2. Implementar el circuito con código VHDL.

1.3.3. Obtener graficas de simulación, en las que se

muestren las entradas (A, B y C) y las salidas (X y

Y), con todas las posibilidades de entrada.

2. Preguntas de Investigación.

2.1 Uso y sintaxis de las instrucciones IF… THEN.

2.2 Uso y sintaxis de la instrucciones CASE…

WHEN.

Page 10: Guía 1 SDI 115 2013

Universidad de El Salvador Sistemas Digitales I

Introducción a Lenguajes HDL Ing. Salvador German Página 10

2.3 Uso de las instrucciones anteriores para

implementar el código VHDL directamente desde

las tablas de verdad.

2.4 Tipos de datos de entrada y salida que soporta

VHDL.

2.5 ¿Cómo se crean arreglos en VHDL?

2.6 ¿Cómo declarar un componente en VHDL?

Mostrar un ejemplo.

2.7 ¿Cuáles son los operadores en VHDL?

2.8 Explique con sus palabras la función del

circuito 1 y 2, ¿en qué aplicación se imagina usted

que podría utilizarlos?

3. Acerca de la tarea:

3.1 Un reporte impreso

3.1.1 Contenido del reporte

Portada

Objetivos

Introducción

Marco teórico

Obtención del software de simulación VHDL

Dirección de descarga

Pasos para la instalación

Desarrollo de los circuitos

Descripción de los pasos seguidos para la

solución

Código VHDL

Gráficos obtenidos para cada circuito

Observaciones

Conclusiones

Respuesta a las preguntas e investigación.

Bibliografía

3.2 Un CD

3.2.1 Contenido del CD.

Software utilizado

Reporte en formato PDF y WORD

Códigos utilizados (*.vhd) y todos los que

genera el proceso de compilación y ejecución.

Imágenes de los resultados.

NOTA: El contenido del CD deberá ir ordenado,

con carpetas individuales para cada ítem

mencionado ejemplo: IMÁGENES, CIRCUITO1,

etc.

Fecha de entrega:

Viernes 05 de abril de 2013, primer viernes

después de Semana Santa.

Hora máxima 10:00 am, después de las 10 se

calificara en base 9, después del viernes la base de

calificación bajara 2 puntos por día de atraso.

Bibliografía:

VHDL Lenguaje para descripción y

modelado de circuitos, Fernando Pardo

Carpio, Universidad de Valencia 1997.

DIGLENSY SAC Primera Empresa del

Perú Dedicada al Desarrollo Electrónico,

tutorial VHDL, http://www.diglensy.com/

Simulando VHDL con herramientas GNU:

GHDL+GTKWAVE, Roberto Aragón.

http://www.iearobotics.com/personal/juan/p

ublicaciones/art6/html/ghdl.html

Cualquier consulta puede también utilizar los

correos en el título de la práctica.