Upload
marvin-roque
View
16
Download
1
Embed Size (px)
Citation preview
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.
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.
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.
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.
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
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;
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
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:
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.
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.