Upload
javiier-umana
View
39
Download
14
Embed Size (px)
DESCRIPTION
tarea sdu
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”
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.
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.
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
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.
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.
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
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
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.
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.
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.
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.