11
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” Francisco Cruz Juárez Sasi Ramírez 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 (se necesita licencia) existen muchos IDE´s (Integrated Development Environment o Ambiente de Trabajo Integrado) y compiladores como lo son Max Plus de Altera, Active HDL y muchos otros. Con software libre 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 y 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 (Diseño). 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 compuertas. 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. Modularidad: VHDL permite dividir o descomponer un diseño hardware y su descripción en unidades más pequeñas.

Tarea-1-SDI-115-2015

Embed Size (px)

DESCRIPTION

tarea sdu

Citation preview

Page 1: Tarea-1-SDI-115-2015

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”

Francisco Cruz Juárez Sasi Ramírez

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

(se necesita licencia) existen muchos IDE´s

(Integrated Development Environment o Ambiente

de Trabajo Integrado) y compiladores como lo son

Max Plus de Altera, Active HDL y muchos otros.

Con software libre 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 y 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 (Diseño).

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

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.

Modularidad: VHDL permite dividir o

descomponer un diseño hardware y su

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

Page 2: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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 los archivos GHDL y

GTKWave, hay diferentes versiones para cada

sistema operativo, en la guía se usa 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

Se instalarán 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: Si 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. Es

importante que la extensión del archivo sea

.vhd.

Page 3: Tarea-1-SDI-115-2015

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.

Imagen 7

Page 4: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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

4indows, 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.

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.

Page 5: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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.

En la imagen se muestra el resultado del código

ingresado, que corresponde a una compuerta AND.

Explicación del código.

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

lo que sigue después de dos guiones

medios“--”, pues lo que sigue son

comentarios. Es una muy buena práctica de

programación comentar siempre los

códigos, para que otros los 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 y 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

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 y 10: 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, es decir

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.

Page 6: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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 que funciona como generador de

estímulos, es decir, en él 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; 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

Page 7: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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:

Imagen 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

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

Page 8: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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

Imagen 15.

Pueden compararse los resultados que se obtienen

con el software de Windows, que son

prácticamente los mismos. Cabe mencionar que

pueden utilizarse otros software a elección del

estudiante que trabajen con lenguajes VHDL. En la

guía se explica el uso de un programa para

Windows y uno para Linux (Ubuntu) para

facilidad. Se recomienda trabajar con los software

descritos en la guía.

Page 9: Tarea-1-SDI-115-2015

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

1.1 Explicar paso a paso como es el proceso de

instalación del software VHDL usado.

1.2 Realizar el código VHDL para el problema que

se le plantea: Un circuito lógico tiene cuatro

entradas A, B, C y D. Determine las ecuaciones

lógicas para el circuito, si la salida será alta

solo cuando un número impar de entradas sean

altas. Trace un diagrama de circuito con las

compuertas que desee

1.3 Una alarma contra robos esa diseñada de modo

que percibe cuatro líneas de señal de entrada.

La línea A es del interruptor secreto de control,

la línea B es del sensor de presión bajo una caja

fuerte en un gabinete cerrado, la línea C es de

un reloj alimentado por baterías y la línea D

está conectada a un interruptor en la puerta

cerrada del gabinete. Las siguientes

condiciones producen un voltaje de 1 lógico en

cada línea.

A: El interruptor de control está cerrado.

B: La caja está en su posición normal en el

gabinete.

C: El reloj marca entre las 1000 y las 1400

horas.

D: la puerta del gabinete está cerrada.

Escriba en código VHDL la expresión que

active la alarma cuando la caja se mueve y el

interruptor de control está cerrado, o cuando el

gabinete se abre después de las horas hábiles, o

el gabinete está abierto con el interruptor de

control abierto. Trace un Diagrama de circuito.

1.4 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 y si encuentra un

obstáculo, gira a uno de los costados,

esquivándolo. 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.

Page 10: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

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, empezará

a retroceder. De lo contrario girará 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.

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?

3. Acerca de la tarea:

3.1 Un reporte impreso 70%

3.1.1 Contenido del reporte

Portada. 5%

Objetivos (General y específicos). 5%

Introducción (máx. 1 página). 5%

Marco teórico (máx. 5 páginas). 5%

Obtención del software de simulación VHDL

(dirección de descarga) y pasos de instalación.

10%

Desarrollo de los circuitos:

o Descripción de los pasos seguidos para

la solución. 10%

o Código VHDL. 10%

o Gráficos obtenidos para cada circuito (3

a 5 imágenes por circuito). 10%

o Observaciones. 5 %

Respuesta a las preguntas de investigación.

10%

Conclusiones (máx. 1 página). 20%

Bibliografía. 5%

3.2 Un CD 30%

3.2.1 Contenido del CD.

Software utilizado. 20%

Reporte en formato PDF y WORD. 15%

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

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

40%

Imágenes de los resultados. 25%

NOTA: El reporte se entregara en un sobre manila

rotulado con los nombres y carnet, dentro deberá ir

el CD rotulado de la misma forma y el nombre del

CD tendrá los carnet. El contenido del CD deberá

ir ordenado, con carpetas individuales para cada

ítem mencionado ejemplo: IMÁGENES,

CIRCUITO1, etc.

Page 11: Tarea-1-SDI-115-2015

Universidad de El Salvador Sistemas Digitales I

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

Fecha de entrega:

24 Marzo de 2015.

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

calificará en base 9, después de ese día la base de

calificación bajará 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

Análisis y diseño de circuitos lógicos

digitales, Víctor Nelson, 1ª Ed.