Reporte Práctica 1
-
Upload
sergio-flores -
Category
Documents
-
view
57 -
download
2
Transcript of Reporte Práctica 1
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 1
Universidad Politécnica de Victoria
Maestría en Ingeniería
Tarea 1
Reporte de Práctica
Profesor: Dr. Marco Aurelio Nuño Maganda
Materia:
Procesadores Digitales
Alumno: Sergio Isauro Flores Vázquez
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 2
Introducción
En este reporte de practica se podrá leer la descripción detallada de todo el proceso que se
siguió para llevar a cabo la práctica 1 que consto de dos ejercicios del libro “Digital Design
with CPLD Applications & VHDL”. Estos ejercicios se describirán a continuación.
Para el desarrollo de la práctica se tuvo que recurrir a las técnicas tanto de construcción como
de simplificación de circuitos lógicos digitales ya que, por ejemplo, en cada uno de los
ejercicios se nos dio una tabla de verdad a partir de la cual se escribió su función booleana.
Una vez obtenida la función booleana se redujo por medio de Mapas de Karnaugh y esta
reducción se comprobó mediante algebra booleana.
También se tuvieron que construir estos circuitos utilizando lenguaje VHDL, para esto se
utilizo un software proporcionado por el profesor llamada Aldec Active-HDL versión 8.1.
A continuación se mostrara a detalle cada uno de los problemas desarrollados en la práctica.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 3
Desarrollo de la Práctica
Problema 3.29 (Capitulo 3 - Digital Design with CPLD Applications & VHDL )
Resolver el siguiente ejercicio de simplificación de funciones lógicas mediante dos métodos:
1. Utilizando teoremas de Algebra Booleana 2. Utilizando el método de Mapas de Karnaugh
Implementar en VHDL ambas funciones (original y simplificada) y validar mediante una simulación la equivalencia de ambas funciones. En la Fig. 1 podremos ver la tabla de verdad del primer ejercicio.
A B C D Y
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 0 1 1 1
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 1
1 1 0 0 1
1 1 0 1 0
1 1 1 0 1
1 1 1 1 1 Fig.- Tabla de Verdad de ejercicio 1
Una vez que se nos proporcionó la tabla de verdad podemos usarla para obtener su función
Booleana, esta se construye tomando los valores que hay en la combinación de entradas (A,
B, C, D) en donde la salida este marcada como un 1 lógico.
Esta es la función lógica de la tabla de verdad mostrada:
Y = A’B’C’D’ + A’B’CD + A’BC’D’ + AB’C’D’ + AB’CD’ + AB’CD + ABC’D’ + ABCD’ + ABCD
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 4
En base a la función lógica se puede crear el circuito lógico original, aun sin simplificar. Como
ya es sabido para construir el circuito lógico se utiliza la función booleana anterior, los
elementos multiplicados son unidos en una sola compuerta lógica AND y los elementos que
se suman, se unen mediante una compuerta lógica OR.
Cabe destacar que las compuertas lógicas utilizadas fueron adaptadas a las encontradas
comercialmente, por ejemplo en el caso de la compuerta OR, nuestra función cuenta con 6
elementos que deben ser sumados y esto se tuvo que adaptar en dimensión a las compuertas
OR de 4 entradas 1 salida, por lo que se usaron 3 compuertas en total.
En la Fig. 2 se puede ver la forma en que fue construido el circuito lógico tomado
directamente de la tabla de verdad. El circuito fue diseñado en la sección de construcción de
diagramas lógicos del programa Aldec Active-HDL.
Fig. 2.- Circuito Lógico No Simplificado (Ejercicio 1).
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 5
El siguiente paso fue que en base a la función lógica original se tuvo que realizar una
simplificación del circuito, esto con el fin de ver el modo en que el circuito es minimizado
logrando así un ahorro tanto en cantidad como en costo de componentes.
El Mapa de Karnaugh no es más que una representación visual de la tabla de verdad, esta
herramienta aprovecha la capacidad de nuestro cerebro para reconocer patrones y la
expresión analítica, de este modo es como nos es posible eliminar patrones o condiciones
redundantes. Para construirlo solo se necesita transferir los términos de la tabla de verdad al
mapa k en forma directa, es decir solo colocando los unos o ceros en su coordenada
respectiva.
En la Fig. 3 podemos ver como fue construido el Mapa K del ejercicio 1
Fig. 3.- Mapa de Karnaugh (ejercicio 1).
Una vez construido el mapa de Karnaugh, el siguiente paso es seleccionar los conjuntos de
términos de manera tal que se obtenga el menor número de términos posible. Estos términos
se seleccionan formando grupos de rectángulos cuyas áreas sean potencia de 2 tratando de
agrupar el mayor número de términos posible.
La función lógica fue reducida satisfactoriamente mediante la herramienta de Mapa K y quedo
de la siguiente manera:
Y = C’D’ + AC+ B’CD
Claramente se puede ver que después de la minimización los términos fueron reducidos en
gran medida, de tener 9 elementos sumados de 4 variables cada uno, ahora tenemos esta
función reducida a 3 elementos sumados de 2 y 3 términos. Gracias a esta reducción en la
función booleana el circuito lógico también es minimizado y trabaja del mismo modo que el
original.
En la Fig. 4. Podremos ver como quedo construido el circuito lógico de esta función booleana
reducida.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 6
Fig. 4.- Circuito Lógico reducido mediante Mapa de Karnaugh.
Por último solo hace falta realizar la simplificación de la función lógica original haciendo uso
del álgebra Booleana. A continuación se desarrollará el procedimiento.
Y = A’B’C’D’ + A’B’CD + A’BC’D’ + AB’C’D’ + AB’CD’ + AB’CD + ABC’D’ + ABCD’ + ABCD
(Función Original)
Y = A’B’C’D’ + A’B’CD + ABC’D’ + AB’C’D’ + ABCD + ABCD’ + AB’CD + AB’CD’ + A’B’CD + AB’CD
(Reacomodando términos según Mapa de Karnaugh)
C’D’ (A’B’ + AB) + C’D’ (A´B + AB’) >>> se eliminan los términos en paréntesis por el teorema de cancelación
C’D’ + C’D’ = C’D’ >>> se queda un solo termino por el teorema de idempotencia
C’D’ + ABCD + ABCD’ + AB’CD + AB’CD’ + A’B’CD + AB’CD
AC (BD + B’D’) + AC (BD’ + B’D) >>> Igual, se eliminan términos entre paréntesis por cancelación
AC + AC = AC
C’D’ + AC + A’B’CD + AB’CD
B’CD (A’ + A)
C’D’ + AC + B’CD (Función Reducida igual a la obtenida con Mapas K)
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 7
Hasta este punto ya se realizo todo el trabajo a mano o a lápiz, por así decirlo, ya que el
siguiente paso fue implementar estos dos circuitos (original y simplificado) en un software de
diseño en lenguaje VHDL.
Para empezar a trabajar en esta parte de la práctica primero iniciamos el programa Aldec
Active VHDL, en este caso usamos la versión 8.1. La Fig. 5 nos muestra la pantalla de
bienvenida del software.
Fig. 5.- Pantalla de Bienvenida de Aldec Active VHDL.
Al terminar el proceso de carga del programa nos aparecerá un cuadro de dialogo como el de
la Fig. 6, en el seleccionaremos “Create a New Work Space”
Nota: En la imagen mostrada aparecen varios diseños creados, esto es porque al momento
de redactar este reporte los diseños ya habían sido terminados.
Fig. 6.- Getting Started
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 8
Al Work Space lo llamaremos Problema_tarea_1, después de esto hay que crear un nuevo
diseño para empezar a trabajar en el, en este caso nuestro diseño será el correspondiente al
primer ejercicio asignado, que es el que se ha ido mostrando en las páginas anteriores.
La creación de diseños corresponde al diseño en donde se alojaran los circuitos original,
simplificado y la validación de estos dos, pero hay que recordar que también tienen que ser
creadas las compuertas y circuitos de forma separada dentro del diseño.
Para crear un nuevo diseño hay que seleccionar, “Create New Design” y nos aparece una
ventana como la que se muestra en la Fig. 7.
Fig. 7.- New Disign Wizard
A cada diseño hay que ajustarle las propiedades básicas, estas se dejan tal cual aparecen por
default en la pantalla de modificación, además tenemos que asignarle un nombre a cada
diseño.
Fig. 8 y 9.- Default Properties e Información Básica de los Diseños.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 9
Una vez que se creo el primer diseño bajo el nombre “Problema_1” hay que empezar a crear
las arquitecturas de las compuertas lógicas que se van a utilizar, para esto nos dirigimos a la
sección de “Add new file” en la sección de “Design Browser”, se selecciona la opción de VHDL
Source Code para crear la arquitectura de la compuerta lógica.
Fig. 10.- Abriendo un nuevo Archivo (Creación de elementos)
Cuando se llegue al punto en donde se nos pida asignarle el nombre a cada archivo y a su
arquitectura de trabajo se usara el mismo nombre solo agregando las siglas Arq seguidas de
un guion bajo antes del nombre del diseño (por ejemplo: Arq_nombre de diseño), esto solo
con el fin de diferenciar visualmente los nombres para evitar confusiones.
Fig. 11.- Nomenclatura utilizada en Archivos y Arquitecturas de Archivos
En la Fig. 12 se muestra un ejemplo de como puede ser creada una compuerta lógica, en este
punto solo se definen el nombre de cada puerto de entrada y salida. Esta forma de asignación
será la misma que se empleará en la creación de circuitos y en la validación.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 10
Fig. 12.- Ejemplo de Asignación y Etiquetado de puertos de compuertas y/o circuitos.
Una vez creado el nuevo elemento (Ya sea compuerta, circuito o bloque de validación) el
siguiente paso es asignarle la operación lógica que hará, esto mediante lenguaje VHDL.
Para hacer esto basta con dirigirnos a la sección del “Design Browser” en donde esta el
elemento creado y dar click para abrir la opción de edición en VHDL, en la Fig. 13 se muestra
como ejemplo como es asignada la función lógica AND a un archivo creado con 3 puertos,
dos entradas y una salida, en la sección de entity vemos la asignación de puertos y en la
sección después de la arquitectura denotada con la palabra clave “begin” es en donde
escribimos como trabajará este elemento. Para el caso de la compuerta AND se escribió en
código lo siguiente: S <= A and B; con esto decimos que se hará la función lógica AND entre
los puertos A y B y el resultado será asignado al puerto de salida denotado como S.
Fig. 13.- Asignación de modo de trabajo a los archivos creados
(Ejemplo de Compuerta AND).
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 11
Cuando hayamos terminado de crear todas las compuertas lógicas, nos aparecerán en el
Design Browser tal como se muestra en la Fig. 14.
Fig. 14 Design Browser con todos los archivos creados.
Ahora el siguiente paso es crear los circuitos (Simplificado y Original), estos se compondrás
de las compuertas cuyas arquitecturas ya fueron creadas en los archivos correspondientes.
Para esto se repetirán los pasos anteriores de creación de archivos.
Empezaremos primero con el Circuito Original, una vez que fue creado el archivo lo primero
que tenemos que hacer es crear las señales con que trabajara el circuito. Estas señales no
son más que señales temporales (interconexiones entre compuertas lógicas), aclarando que
no corresponden a las señales de entrada y salida del circuito.
En mi caso particular opte por denominar las señales con nombres que fueran fácilmente
identificables con dimensiones cortas, pro ejemplo para denominar las señales negadas de
las entradas se escribió “acomplemento” a la señal A’, las señales llamadas “saladn1”, según
mi nomenclatura adoptada significa Salida de la compuerta AND numero 1.
Fig. 15.- Señales creadas para el Circuito Original.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 12
Una vez que fueron declaradas todas las señales temporales que se utilizaran es momento de
crear las interconexiones entre los componentes del circuito, esto se hizo mediante lenguaje
VHDL. En este punto se les asigno un nombre y numero a cada compuerta lógica para
diferenciarlas tanto en el diagrama como en el código, por ejemplo en este caso se
necesitaron 4 inversores, cada uno fue nombrado con las siglas INV seguido de un numero
(INVX), esto se repetirá con cada una de las compuertas ya que esta técnica nos permite
darle una mejor estética a la estructura del código en el programa.
En la Fig. 16 podemos ver una sección del código VHDL en la cual están creadas ya las
compuertas con sus debidas interconexiones.
Fig. 16.- Compuertas e Interconexiones del Circuito Original.
== CIRCUITO ORIGINAL TERMINADO ==
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 13
Ya tenemos terminada la parte del circuito original, ahora lo siguiente es crear el circuito
simplificado, para evitar extender este reporte nos brincaremos los pasos de creación de
diseños y archivos anteriores y nos situaremos en el punto de asignación de señales.
Como podemos ver en la Fig. 17, para el Circuito Simplificado las señales temporales se
redujeron.
Fig. 17.- Señales Temporales de Circuito Simplificado
Ya que se crearon las señales temporales ahora sigue las interconexiones entre compuertas
para formar el circuito lógico en lenguaje VHDL. En la figura siguiente se podrá ver todo esto.
Fig. 18.- Compuertas e Interconexiones del Circuito Simplificado.
== CIRCUITO SIMPLIFICADO TERMINADO ==
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 14
Por último solo falta validar que los dos circuitos creados funcionan de igual forma, ya que los
dos deben de realizar la misma función.
Para realizar esta validación solo fue necesario crear un nuevo bloque en el diseño que lo
llamamos “probador_circuitos” este bloque consto de un puerto de entrada tipo vector (4 bits)
en el cual se le inyectaría la señal de las 4 entradas (A, B, C y D) y dos salidas llamadas
“Salida 0” y “Salida 1” por las cuales saldrá la señal de salida del Circuiro Original y Circuito
Simplificado respectivamente.
Esto ya implementado en código VHDL quedo tal como se muestra en la Fig. 18, ahí
podremos ver que como se menciono antes tiene 3 puertos, 1 entrada tipo vector y dos
salidas estándar, y solo dos entidades, correspondientes al circuito original y al circuito
simplificado.
Figura. 19.- Código VHDL de la prueba de circuitos (Validación).
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 15
Una vez que compilamos el programa y no marco ningún error es momento de abrir una
herramienta muy práctica con la que cuenta este software, se trata de un simulador de formas
de onda de las señales del circuito lógico, para esto solo es necesario dirigirnos a la barra de
herramientas de la parte superior, dar click sobre el icono que dice se llama “New Wave Form”
(flecha roja Fig. 20) y se abrirá una nueva ventana en la cual seleccionaremos la arquitectura
de “prueba_circuitos” (recuadro amarillo Fig. 20).
Fig. 20.- Abrir herramienta de formas de onda.
Una vez que se abrió la ventana hay que agregar las señales que queremos ver, solo
seleccionamos la opción “Add Signals”, se abre una nueva ventana y seleccionamos la
entrada y las dos salidas (Fig. 21a).
Después es necesario estimular la entrada tipo vector con un contador binario ya que hay que
recordar que esta entrada consta de 4 entradas que deben corresponden a una suma binaria.
Fig. 21a Fig. 21b
(Agregar señales) (Asignar contador binario a entrada)
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 16
Al final solo es necesario simular o correr el programa y se obtuvo la forma de onda que se
muestra en la Fig. 22, como podemos ver claramente se esta realizando la misma función de
salida tanto en el circuito original como en el simplificado.
Fig. 22.- Forma de onda de las salidas del circuito.
Ahora bien podemos desplegar la entrada tipo vector para ver que una a una las entradas que
estimulan a los circuitos.
Fig. 23.- Forma de onda desplegada de las salidas del circuito.
== LOS CIRCUITOS FUNCIONAN CORRECTAMENTE ==
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 17
Problema 3.36 (Capitulo 3 - Digital Design with CPLD Applications & VHDL )
Resolver el siguiente ejercicio de simplificación de funciones lógicas mediante dos métodos:
3. Utilizando teoremas de Algebra Booleana 4. Utilizando el método de Mapas de Karnaugh
Implementar en VHDL ambas funciones (original y simplificada) y validar mediante una simulación la equivalencia de ambas funciones. En la Fig. 1 podremos ver la tabla de verdad del primer ejercicio.
A B C D Y
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 1 0 X
1 0 1 1 X
1 1 0 0 X
1 1 0 1 X
1 1 1 0 X
1 1 1 1 X
En este ejercicio volvemos a obtener la función booleana de la tabla de verdad, pero como
podemos notar la tabla cuanta con valores marcados como X, esto es conocido como
condiciones de no importa, las cuales pueden ser tomadas como ceros o unos, a
conveniencia.
Por el momento la función booleana queda de este modo, mas adelante con el mapa k
veremos si nos conviene tomar alguna de las X como unos o no.
Y = A’B’CD’ + A’B’CD + AB’C’D
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 18
Ahora, minimizando mediante mapa de Karnaugh obtenemos los grupos pero analizando bien
vemos que las condiciones de no importa que corresponden a la entrada 1101, 1111, 1011 y
1010 fueron tomadas como unos lógicos para poder formar grupos mas grandes y realizar
una reducción mayor de términos. En la Fig. 24 podemos ver los grupos en el mapa K.
Fig. 24.- Mapa de Karnaugh ya marcado con los grupos seleccionados.
Entonces ahora la función booleana original aumenta en numero de elementos ya que 4
condiciones de no importa fueron tomadas como unos, y quedo de la siguiente manera.
Y = A’B’CD’ + A’B’CD + AB’C’D + AB’CD’ + AB’CD + ABC’D + ABCD
Se construye el circuito lógico en base a esta función booleana.
Fig. 24.- Circuito Original del problema 2.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 19
La función booleana ya considerando las condiciones de no importa fue reducida gracias al
mapa K quedando de esta forma:
Y = AD + B’C
De nuevo, es necesario construir el circuito lógico de esta función, en este podemos ver que
la reducción de espacio y componentes de nuevo es considerable y fácil de distinguir.
Fig. 25.- Circuito Simplificado del problema 2.
Y realizando la comprobación mediante algebra booleana podemos ver que la reducción es
correcta, esto se muestra a continuación.
Como podemos ver la comprobación mediante algebra booleana fue correcta.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 20
Ahora de nuevo sigue la parte de la realización en código VHDL, pero esta vez omitiremos el
procedimiento ya que fue explicado en el problema anterior, solo nos enfocaremos a explicar
los detalles y notas importantes.
Del mismo modo que en problema anterior se tuvieron que agregar las señales con las cuales
trabajaría nuestro circuito original, en la Fig. 26 se pueden ver las señales temporales que se
declararon.
Fig. 26.- Señales Temporales declaradas en Circuito Original.
Ahora, omitiendo las explicaciones anteriormente dadas, el código completo del archivo del
circuito original es el siguiente.
Fig. 27.- Código VHDL del Circuito Original.
== CIRCUITO ORIGINAL TERMINADO ==
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 21
Una vez terminado el circuito original se paso a la realización en lenguaje VHDL del circuito
simplificado, en este podremos ver que tanto el código como las señales temporales
declaradas son menores.
Fig. 27.- Código VHDL y Señales declaradas en Circuito Simplificado.
== CIRCUITO SIMPLIFICADO TERMINADO ==
Del mismo modo que en el problema 1 es necesario comprobar que los dos circuitos tanto
original como simplificado realizan la misma función de salida.
En la Fig. 28 podemos ver la salida generada por los dos circuitos y podemos compararlas.
Fig. 28.- Ondas de salida de la prueba de circuitos.
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 22
En la Fig. 29 podremos ver que en la señal de salida, correspondiente a la salida 1 que fue
asignada al circuito simplificado tenemos una serie de dos pulsos positivos que en el circuito
original no tenemos. Esto se debe a que si observamos bien, el circuito original que creamos
en código VHDL no consideramos ninguna de las condiciones de no importa de la tabla de
verdad, fueron tomadas a conveniencia como ceros lógicos para minimizar el circuito pero
caso contrario, en el circuito simplificado si fueron tomadas algunas de las condiciones de no
importa como unos ya que según el mapa de Karnaugh nos permitió hacer una reducción
mayor de componentes, pero si estos circuitos son llevados a la práctica se supone que estos
pulsos positivos no afectarían para nada el proceso en donde se encuentre funcionando este
circuito ya que las condiciones de no importa nos dicen que no afectan ni alteran el
funcionamiento final del proceso en el cual esta aplicado el circuito.
Fig. 29.- Pulsos positivos en causados por las condiciones de no importa.
== LOS CIRCUITOS FUNCIONAN CORRECTAMENTE ==
Reporte de Práctica
Cd. Victoria, Tamaulipas - Octubre 2012 23
Conclusiones
Durante la realización de esta práctica fue necesario dar un repaso general de algunos temas
de algebra booleana y de la realización y minimización de circuitos lógicos digitales, esto nos
ayudo mucho a recordar algunos aspectos que nos servirán para la realización de todas las
prácticas posteriores y además nos ayudan no solo a desempolvar el conocimiento sino que
también nos ayudan a mejorar las técnicas aprendidas en la Licenciatura para poder enfrentar
los problemas viéndolos desde una perspectiva diferente con la que los veíamos en ocasiones
pasadas.
Además esta práctica nos fue muy útil en el sentido de que nos permitió comprender el
proceso de realización de programas y la estructuración del lenguaje VHDL en este entorno
de desarrollo. Aunque este lenguaje tiene una similitud con el lenguaje C es muy diferente no
solo en la estructuración sino en capacidades, ya que este tipo de código es descargado en
un hardware que actualmente es de los mas rápidos y funcionales en el mercado, los FPGA’s,
este procedimiento se verá algunas prácticas adelante con lo que espero que las técnicas
aprendidas en este curso me sean de gran utilidad para mi futuro en mi proceso de formación
en este programa de posgrado.