Práctica 2 -LOGISIM-

Page 1



1. Ejercicio 1. Implementación de un circuito decodificador de 2 bits binarios a base 4 (4 salidas de activación independiente). Tras montar el circuito, comprobar su funcionamiento.

Tabla de Verdad del Circuito

Esquema General del Decodificador

Vemos en las capturas que el decodificador funciona según lo que se establece en su tabla de verdad. La primera entrada a 1 activa el circuito decodificador y al no haber seleccionada ninguna entrada más, ilumina el LED de salida 0. Posteriormente, según vayamos introduciendo valores en binario en las dos entradas de abajo, se iluminará el LED correspondiente, a saber: 01 el nº1, 10 el nº2, y 11 el nº3.


1. Ejercicio 2. Implementación de un bus bidireccional y compartido de 8 bits, capaz de comunicar tres registros entre si (Raux0, Raux1 y Raux2). Se utilizará un dispositivo de entrada de 8 bits para introducir los datos y un display de 2 cifras hexadecimales para visualizar los datos que circulan por el bus. ras montar el circuito, comprobar su funcionamiento.

Esquema General del Bus bidireccional y compartido Comprobaremos su funcionamiento por ejemplo realizando la carga de un dato en el registro Raux0.

1) Introduciremos el dato en el dispositivo de entrada, en nuestro caso 1001 correspondiente al número 9 en base decimal. Una vez activamos el triestado de salida (TS), vemos cómo el dato ya se encuentra circulando por el bus, apareciendo por tanto en el display, aún sin guardar en ningún registro.

2) Estando el dato en el bus, activaremos ahora la señal de carga del registro en el cual lo queremos almacenar(CRaux0) Se observa cómo el dato queda capturado en el registro.


3) Teniendo el dato ya capturado en el registro, cerraremos el triestado de salida (TS). Observamos que por tanto el dato deja de estar en el bus.

4) Activaremos pues el triestado de salida del registro donde se encuentra almacenado el dato (TRaux0). De esta manera, se libera por el bus de nuevo y por ello aparece mostrado en el display.


2. Realizar el dise帽o e implementaci贸n del banco de 4 registros de 8 bits cada uno. Deber谩 disponer de entradas de selecci贸n de registro, de carga de datos y de control de triestado OE.


3.- Realizar el diseño de una ALU sencilla de 8 bits con registro acumulador, con las siguiente operaciones: • • • •

A+B A AND B NOT A Desplazamiento de 1 bits a la izquierda (mediante la conexiones del multiplexor).


4.- Unir todos los elementos realizados en el camino de datos indicado. *Notar que se han realizado cambios en el orden de los operadores en la ALU realizada anteriormente, algo a tener en cuenta para seleccionar los códigos de operación.


5.- Con el circuito obtenido, realizar las operaciones siguientes: • • • • • • • •

Cargar en el registro R0 el dato 1Fh = 00011111 Cargar en el registro R1 el dato 21h = 00100001 Cargar en el registro R2 el dato 4Ah = 01001010 Cargar en el registro R3 el dato 35h = 00110101 Sumar R1 y R2 y almacenarlo en Raux0 Hacer la operación AND entre R0 y R3 y almacenarlos en Raux1 Desplazar dos veces el registro R1 y almacenarlo en el registro Raux2 Llevar R2 al acumulador y complementar su valor. El resultado almacenarlo en R0

1)

Introducimos el dato 00011111 en el dispositivo de entrada. Activamos el triestado de entrada (TEnt) para que el dato pase al bus. Observamos que se muestra en el display de la parte izquierda del circuito. En el Selector de Banco (SB) seleccionaremos 00 para que el dato se dirija hacia el R0. Una vez seleccionado dicho registro, procederemos a activar la señal de Carga Banco (CB) y comprobamos que el dato queda almacenado en el registro. Cerramos la señal de CB para proceder a la siguiente carga.

2)

Introducimos el nuevo dato, 00100001. Activamos el triestado de salida (TEnt) para que pase al bus, y esta vez, en el Selector de Banco (SB) para que se dirija el dato hacia el registro R1 seleccionaremos 10. Activaremos entonces la señal de Carga Banco (CB) y queda así capturado el dato en el registro. Cerramos de nuevo la señal CB para otra carga más.

3)

Introducimos nuevo dato, a saber, 01001010. El procedimiento a seguir es el mismo que los dos anteriores a diferencia del Selector de Banco, que para que se guarde en el R2, deberá elegirse la combinación 01.

4)

Por último, introduciremos el dato 00110101.De igual manera, se sigue las mismas instrucciones que en los apartados anteriores, escogiendo en el Selector de Banco la combinación 11 para que se almacene el dato en el R3. Tras haber introducido todos los datos, podemos cerrar el Triestado de Entrada (TEnt) que a su vez podría haberse cerrado también tras cada una de las cargas hasta introducir un nuevo dato.

Observamos que los datos han quedado correctamente capturados en los registros correspondientes.

5)

Realizaremos a continuación la suma de los datos guardados en R1 Y R2. En el Selector de Banco (SB) seleccionamos 10 para seleccionar R1. Activaremos el Triestado de Banco (TB) para liberar el dato hacia el bus. Para realizar la operación, lo almacenaremos en el registro A, para lo cual, activaremos la carga del mismo (CA) y tras quedar capturado, cerramos el mismo. A continuación, seleccionaremos del Selector de Banco 01 para seleccionar R2. Activamos el Triestado de Banco (TB) para liberar el dato hacia el bus. Ahora seleccionaremos en el MUX perteneciente a la ALU el código necesario para realizar la suma, esto es 00. Para almacenar el resultado en el registro temporal (Temp), activaremos su señal de carga (CTemp) y tras quedar capturado en el registro, desactivamos. El resultado se encuentra ahora en el bus de la derecha del circuito. Para que pase al bus de los registros, activaremos el triestado de salida TRi. Cerramos el TB si es que lo habíamos dejado activado. Ahora sólo tendremos que activar la señal de carga de Raux0 (CRaux0) y desactivarla y ya está capturado el dato de la suma de R1 y R2. Cerramos TRi.


Observamos que la suma se ha realizado correctamente: 21+4A=6B (107 en binario)

6)

Ahora realizaremos la operación AND entre los datos de R0 y R3. Marcamos en n el Selector de Banco (SB) seleccionamos 00 para seleccionar R0. Activaremos el Triestado de Banco (TB) para liberar el dato hacia el bus. Para realizar la operación, lo almacenaremos en el registro A, para lo cual, activaremos la carga del mismo (CA) y tras quedar capturado, cerramos el mismo. A continuación, seleccionaremos del Selector de Banco 11 para escoger R3. Activamos el Triestado de Banco (TB) para liberar el dato hacia el bus. Ahora para realizar la operación AND en la ALU, marcamos el código 10. Para almacenar el resultado en el registro temporal (Temp), activaremos su señal de carga (CTemp) y tras quedar capturado en el registro, desactivamos. El resultado se encuentra ahora en el bus de la derecha del circuito. Para que pase al bus de los registros, activaremos el triestado de salida TRi. Cerramos el TB si es que lo habíamos dejado activado. Ahora sólo tendremos que activar la señal de carga de Raux1 (CRaux1) y desactivarla y ya está capturado el dato de la suma de R1 y R 2 . C e r r a m o s T R i .

Observamos que la operación AND se ha realizado correctamente:1F AND 35 = 15 (21 en binario)


7)

A continuación, realizaremos dos desplazamientos del dato almacenado en R1. Para ello, en el Selector de Banco (SB) seleccionamos 10 para seleccionar R1. Activaremos el Triestado de Banco (TB) para liberar el dato hacia el bus.Para hacer el despalzamiento, lo almacenaremos en el registro A, para lo cual, activaremos la carga del mismo (CA) y tras quedar capturado, lo cerraremos. Seleccionaremos el código correspondiente en la ALU para realizar el desplazamiento, a saber, 11. Para almacenar el resultado en el registro temporal (Temp), activaremos su señal de carga (CTemp) y tras quedar capturado en el registro, desactivamos. El resultado se encuentra ahora en el bus de la derecha del circuito. Para que pase al bus de los registros, activaremos el triestado de salida TRi. Cerramos el TB si es que lo habíamos dejado activado. Para volver a realizar el desplazamiento, lo cargaremos de nuevo en el registro A activando CA. Como el código de operación de la ALU ya se encontraba marcado anteriormente, sólo tendremos que almacenar el nuevo resultado en Temp de nuevo, para lo que activamos su carga con CTemp y tras quedar capturado, lo desactivamos. Para que pase al bus de los registros, activaremos el triestado de salida TRi. Cerramos el TB si es que lo habíamos dejado activado. Ahora sólo tendremos que activar la señal de carga de Raux2 (Craux2) y desactivarla, quedando el resultado de los dos desplazamientos ya almacenado. Cerramos Tri.

Observamos que el doble desplazamiento se ha realizado correctamente: 00100001 -> 10010000 -> 01001000 (48 en Hexadecimal)


8)

Por último, llevaremos R2 al acumulador y complementaremos su valor. Para seleccionar R2, en el Selector de Banco (SB) seleccionamos 01. Activaremos el Triestado de Banco (TB) para liberar el dato hacia el bus. Para complementar el dato, lo almacenaremos en el registro A, para lo cual, activaremos la carga del mismo (CA) y tras quedar capturado, lo cerraremos. Ahora deberemos seleccionar el código de operación en la ALU, el 01 para realizar la operación NOT. Para almacenar el resultado en el registro temporal (Temp), activaremos su señal de carga (CTemp) y tras quedar capturado en el registro, desactivamos. El resultado se encuentra ahora en el bus de la derecha del circuito. Para que pase al bus de los registros, activaremos el triestado de salida TRi. Cerramos el TB si es que lo habíamos dejado activado. Para almacenarlo en R0, seleccionaremos en el Selector de Banco (SB) la combinación 00. Una vez seleccionado el registro donde queremos guardar el dato, activamos su señal de carga activando la Carga de Banco (CB), quedando capturado en el registro. Desactivamos CB.

Observamos que se ha realizado correctamente el complementario de 01001010 -> 10110101 (en Hexadecimal B5)

Así quedan los registros donde se han almacenado las correspondientes operaciones.


6.- Realizar el cronograma de las tres últimas operaciones • Hacer la operación AND entre R0 y R3 y almacenarlos en Raux1

CLK Bus de datos

1F

35

SB

R0

R3

TR0 TR3 CA Op

AND

CTemp TRi CRaux1

A

1F

R0

1F

R3

35

Temp

15

Raux1

15


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

CLK Bus de datos

21

SB

R1

90

48

TR1 CA Op

DE SP

DE SP

CTemp TRi CRaux2

A R1 Temp

21

90

21 90

Raux2

48 48


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

CLK Bus de datos

4A

SB

R2

B5 R0

TR2 CA Op

NO

CTemp TRi CB

A R2 Temp

4A 4A B5

R0

B5


1. He completado mi circuito usando Logisim y aparecen cables azules. ¿Qué significa esto? Los cables azules en Logisim indican que existen elementos desconectados, por lo que si aparecen cables azules la ALU no funcionará correctamente. Revisa las conexiones donde aparecen cables azules, ya que indica que no has realizado el circuito correctamente.

2. He completado mi circuito en Logisim y aparecen cables naranjas con el texto “Ancho incompatible”. ¿Qué significa esto? Esto ocurre cuando los elementos que has conectado tienen un ancho de bits distinto. Es un error habitual cuando ponemos una entrada de 8 bits y empezamos a poner componentes, ya que Logisim por defecto coloca los elementos para que trabajen con 2 bits. Para solucionarlo debes seleccionar el componente, ir a la parte inferior izquierda de Logisim y donde dice “Ancho de bits” colocar el número correcto (Por ejemplo, si la entrada que hemos puesto es de 8 bits, debemos colocarlo a 8 bits) De esta manera deberían desaparecer los cables naranjas.

3. ¿Qué es un cronograma? ¿Es necesario? Un cronograma es un esquema que contiene todos los elementos de un circuito donde se puede ver claramente su funcionamiento de forma esquemática durante los ciclos de reloj. Es necesario porque es la mejor manera de ver cómo funciona la ALU.

4. Has mencionado ciclos de reloj. ¿Qué es eso? Los ciclos de reloj son los tiempos en los que el reloj interno marca la apertura/finalización de una señal.

5. Ya he montado el circuito, ¿cómo lo pruebo? En la parte superior izquierda de Logisim debes tener seleccionado el modo edición. Para probar el funcionamiento debes hacer clic en el modo simulación y empezar a probar los componentes.

6. ¿Cómo se almacena un dato en un registro? ¿Y cómo se libera? En primer lugar, se introduce en el bus el dato que se desea, y luego se activa la señal de carga en un registro para que ese dato quede almacenado en dicho registro. Para liberarlo, puede ser que haya un triestado o no. Si no lo hay, ese dato sigue circulando por el bus a parte de estar ya en el registro, pero si hay triestado, se debe activar la señal del triestado para dejar pasar el dato al bus y luego volver a capturarlo o realizar operaciones con el mismo.


7. En logisim, ¿Cómo se hace una operación de desplazamiento de un bit a la izquierda? Se deben colocar dos separadores con 8 bits cada uno, y conectar la salida 1 a la entrada 0, la salida 2 a la entrada 1… hasta llegar a la salida 7 que se conecta a la 6. Luego hay que conectar la salida 0 a la entrada 7 para obtener el cambio de bits.

8. ¿Qué diferencia existe a la hora de almacenar un dato en un registro en paralelo y en un registro en serie? El registro en paralelo permite almacenar todos los bits de los que se componen el dato al mismo tiempo, mientras que el registro en serie solo permite el almacenamiento secuencial de sus bits, uno a uno; Siendo más lento el registro en serie.

9. ¿Cómo se realiza una operación en la ALU que necesite dos operandos? Primero se libera el dato de uno de los registros o se introduce un dato directo por el bus (dependiendo de lo que se desee), y cargamos el dato en un registro libre de triestado que da directamente a la ALU para realizar una operación con ese dato. Al tenerlo guardado en el registro que llamaremos “A”, está guardado en él, por lo que podemos liberar otro dato de otro registro ó introducir otro dato directo en el bus e introducirlo directamente a la ALU. Así, tenemos en la ALU el dato que estaba en el registro (que no tiene triestado) y el dato que estamos introduciendo directamente. Ya solo queda señalar la operación en el multiplexor y activar la carga de la operación.

10. ¿Cómo se realiza el complemento a 2 de un dato en una ALU? En primer lugar, se libera el dato del registro activando el triestado, por lo que lo tenemos en el bus. A continuación, señalamos la operación NOT (complementario) en el multiplexor, y guardamos el resultado. Ahora, volvemos a liberar ese resultado y lo introducimos en el registro que llamaremos “A”, que no tiene triestado e introduce el valor constante en la ALU. Introducimos ahora directamente el valor 1 en el bus de datos y lo llevamos a la ALU. Ya tenemos esos dos datos introducidos, por lo que señalamos la operación suma en el multiplexor y guardamos el resultado. Obtendremos el complemento a 2.



Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.