lunes, 6 de mayo de 2013

Práctica 3: ALU Y CAMINO DE DATOS


ALU Y CAMINO DE DATOS

En esta práctica aprendemos a realizar un circuito en el que intervienen una ALU, un banco de registros y tres registros independientes adicionales, y todos ellos unidos por un camino de datos. Seguidamente enumeramos los objetivos de dicha práctica y el desarrollo de cada punto para un mejor aprendizaje.

Objetivos a conseguir:
1. Repasar brevemente el uso del entorno de diseño y simulación LOGISIM.
2. Realizar el diseño de un banco de registros básico de 4 registros.
3. Realizar el diseño de una ALU sencilla de 4 operaciones.
4. Conformar un camino de datos compuesto por el banco de registros y ALU antes realizada, además de tres registros independientes adicionales.
5. Comprobar el funcionamiento de este banco de datos para una serie de operaciones elementales simples.
6. Realizar el cronograma de algunas operaciones elementales.

Primeramente, recordaremos el uso y funcionamiento básico del simulador LOGISIM donde describo a continuación una ligera presentación y uso del simulador.

Logisim está dividido en tres partes: el panel del explorador que será el lugar donde busquemos todo lo necesario para montar el circuito, la tabla de atributos para elegir las características de cada elemento así como etiqueta, los bits de entradas o salida etc, y el lienzo o la pizarra donde dibujaremos el circuito. Sobre estas partes están la barra de herramientas y la barra de menú.  
Construir un circuito es más fácil insertando las puertas primero a modo de esqueleto para más tarde añadir el cableado al circuito. A medida que vayas dibujando cables, podrías encontrarte con algunos de color azul o gris. El azul en Logisim indica que el valor en ese punto es desconocido, y el gris indica que el cable no
está conectado a nada. Una vez que tu circuito esté acabado, ningún cable podrá estar ni azul ni gris.
Pero una vez que tu circuito esté acabado, ningún cable podrá estar ni azul ni gris. Todos los cables insertados deberían mostrarse verde clarito u oscuro.
Por otro lado no es necesario añadir comentarios al circuito para que funcione; pero si quieres enseñar tu circuito a alguien, en ese caso poner algunas etiquetas ayudará a entender el propósito de las diferentes partes de tu circuito. Cuando cambies el valor de entrada, Logisim te mostrará que valor viaja a través de un cable pintándolo de verde muy claro para indicar un 1 o verde oscuro para indicar un 0. Aquí os dejo un video de un ejemplo en Logisim:


Seguidamente vamos realizando lo que se pide en la práctica con una imagen de como iría quedando cada apartado y unos vídeos para complementar la comprensión.

DECODIFICADOR DE 2 BITS BINARIO A BASE 4.

Este circuito es un decodificador de 2 bists de entrada (D1 y D0) que se han conectado a un separador de 2 bits para seleccionar la salida del decodificador y 4 bits de salida. También tiene un habilitador que su función es activar el decodificador.

BUS BIDIRECCIONAL Y COMPARTIDO DE 8 BITS COMUNICANDO TRES REGISTROS ENTRE SÍ.

En este otro circuito basado en un bus bidireccional y compartido por tres registros auxiliares. Éstos reciben los datos de una entrada de 8 bits mediante un buffer controlado. Después de cada registro se encuentra otro buffer controlado para que no haya más de un dato en el bus. Finalmente se ha añadido un display hexadecimal que muestra el contenido que hay en el bus en ese momento.



BANCO DE 4 REGISTROS DE 8 BITS CADA UNO.

Aquí se ha implementado un banco de 4 registros conectados cada uno de ellos al decodificador antes diseñado donde cada salida de éste va a cada buffer que hay a la salida de cada registro para dar la señal de activación a la salida. Este banco de registros también está unido al bus de datos. 



DISEÑAR LA ALU.
En este apartado hemos diseñado la ALU de 4 operaciones, sumador, AND, NOT y desplazamiento de 1 bit a la izquierda cuya operación se selecciona mediante un multiplexor. Se ha añadido un registro acumulador. También a la salida del multiplexor un registro para almacenar el resultado y otro display hexadecimal para mostrarlo seguidamente de un buffer controlado para permitir o no su salida al bus.





CIRCUITO FINAL
A continuación está el mismo circuito señalando lo que corresponde a cada parte que hemos ido diseñando.

Seguidamente en la práctica debemos realizar operaciones con el circuito anterior.

Antes de realizar las operaciones explicaré un poco como realizarlas y luego mostrare el resultado de cada una de ellas a través de unas imágenes que mostrarán el resultado final de cada dato introducido en su correspondiente registro.

Para guardar un dato en un registro que son los 4 puntos siguientes seguiremos los siguientes pasos:
-Primero ha de introducirse en el bus de datos el número que queremos meter en el registro.
 -Luego seleccionamos a través del decodificador con D1 y D0 el registro donde queremos guardar el dato. - A continuación activamos la carga del banco para almacenar el dato. Siempre cargará cuando se pasa de 0 a 1 en la carga, lo que quiere decir que el flanco activo es el de subida. 

     1) Cargar en el registro R0 el dato 1Fh





     2) Cargar en el registro R1 el dato 21h



     3) Cargar en el registro R2 el dato 4Ah

     4) Cargar en el registro R3 el dato 35h

Los siguientes apartados son operaciones que se hacen con los datos antes introducidos a través de la ALU, donde finalmente se guardará el resultado en un registro especificado.

     5) Sumar R1 y R2 y almacenarlo en Raux0.
Para ello seleccionamos R1 y activamos el triestrado de salida para que el dato esté en el bus y cargamos en el Reg A, luego seleccionamos R2 y lo pasamos al bus. Seleccionamos en la ALU la operación suma (00) y cargamos en el registro para que el resultado se almacene. Seguidamente cerramos el triestrado que pasaba el dato al bus del banco de registros, quedando así el bus vacío para poder meter otro dato. Luego abrimos el triestrado que da salida al resultado de la ALU pasando al bus y cargamos en Raux 0 quedando así almacenado en éste. 

   
  6) Hacer la operación AND entre R0 y R3 y almacenarlos en Raux1




Debemos primero llevar el dato de R0 al Reg A y R3 al bus. Seguidamente hacer la operación AND seleccionando en el multiplexor 01 y cargando en el registro para almacenar el resultado. Cerrar el triestrado de salida de datos del banco de registro y abrir el que está a continuación del registro que almacena el resultado y activar la carga del Raux1.




    7) Desplazar dos veces en registro R1 y almacenarlo en el registro Raux2



Para esta operación sencillamente seleccionamos R1 lo guardamos en Reg A seleccionamos la operación de desplazamiento que sería 11, cargamos en el registro siguiente la pasamos al bus activando el triestrado y metemos el nuevo dato en Reg A, hacemos lo mismo y cuando ya está el resultado final en el bus activamos carga de Raux2.



     8) Llevar R2 al acumulador y complementar su valor. El resultado almacenarlo en R0


Para éste último seleccionamos R2 lo llevamos al acumulador (Res A) seleccionamos la operación de complementar (10) y lo guardamos en el registro posterior. Después lo pasamos al bus, teniendo en cuenta que el bus no contiene anteriormente otro dato (si hace falta cerrar el triestrado del banco de registros), y seleccionamos R0 y cargamos almacenando el dato.




A continuación dejo un video donde se realizan las operaciones anteriores para una mayor aclaración.


Finalmente y la parte más importante de este tema es la realización de cronogramas. En éstos queda reflejado las distintas activaciones y desactivaciones de las partes del circuito para que éste funcione en un tiempo de reloj lo menor posible. Para realizarlo debemos tener en cuenta las distintas señales que podemos utilizar en los cronogramas:

· Flanco de subida (Carga)




·De nivel (Triestado)


En el último ejercicio nos pide hacer un cronograma de las tres últimas operaciones. A continuación lo realizamos para cada uno de ellos. Debemos saber que las que empiezan por C son de carga y las que empiezan por T de control de triestado.
-Hacer la operación AND entre R0 y R3 y almacenarlos en Raux1

-Desplazar dos veces en registro R1 y almacenarlo en el registro Raux2


-Llevar R2 al acumulador y complementar su valor. El resultado almacenarlo en R0



FAQs

¿ Que es el Logisim ?
Logisim es un simulador lógico que permite diseñar y simular circuitos electrónico
digitales mediante una interfaz gráfica de usuario. Lo podremos encontrar para
windows, linux y mac.

¿ Donde puedo descargarlo ?
Podréis encontrarlo aquí,
http://ozark.hendrix.edu/~burch/logisim/es/index.html

¿ Que significan los colores de los cables ?
Verde oscuro o claro, no te preocupes el diseño esta correcto.
Rojo, estas dando dos datos distintos en un mismo cable.
Azul indica que el valor en ese punto es desconocido.
Gris indica que el cable no está conectado a nada
Naranja, anchos incompatibles

¿ Que significa ancho incompatible y como lo soluciono ?
Debes revisar las dos piezas indicadas ya que el numero de bits de datos sera distinto
en estas piezas.

¿ Como consigo unir varias salidas en una sola entrada o al contrario ?
En el panel del explorador vais a wiring dentro encontrareis una pieza llamada
separador.

No hay comentarios:

Publicar un comentario