









Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Introducció als Computadors, Profesor: Fernandez, Agustin, Carrera: Enginyeria Informàtica, Universidad: UPC
Tipo: Ejercicios
1 / 15
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!










Objetivos que se deben haber alcanzado antes de realizar la práctica
Antes de preparar esta práctica se deben haber alcanzado los objetivos específicos que se indican en la siguiente tabla. Para ello, es recomendable haber estudiado las secciones de la documentación que se indican en la primera columna de la tabla.
Secciones de la documentación a estudiar
Capítulo 4: Sección 4.
Capítulo 6: Secciones 6.1.3, 6.1.4 yn6.1.5. Sección 6.2.2 y 6.3. Secciones 6.5.2 y 6.5.3. Sección 6.1.
Estos objetivos serán evaluados en el informe previo que debéis entregar al inicio de la sesión de laboratorio y en la prueba previa individual que se hará al inicio de la sesión.
Objetivos que se deben alcanzar al realizar la práctica
Después de realizar esta práctica, además de haber mejorado el nivel de consecución de los objetivos necesarios para preparar la práctica (citados en la tabla anterior) y de los objetivos de la práctica anterior relativos al manejo del programa LogicWorks, el alumno será capaz de:
Ya sabemos implementar circuitos combinacionales de pocas entradas. En la práctica 1 hemos construido un circuito combinacional con dos entradas ( x , y ) y dos salidas ( c , s ), denominado Half-adder, que suma dos bits con el mismo peso. En esta parte de la práctica, primero vamos a utilizar el bloque Half-adder para construir un bloque combinacional que suma tres bits con el mismo peso, denominado Full-adder, y por último vamos a usar los Full-adder para diseñar un sumador de números naturales de 16 bits.
Un Full-adder tiene tres entradas y dos salidas, por lo que se puede sintetizar perfectamente con el método sistemático que hemos estudiado: formulación de la tabla de verdad e implementación en suma de minterms. Sin embargo, ahora vamos a encontrar otra implementación del Full-adder sin seguir ningún método sistemático. Sabemos que un Half-adder suma dos bits del mismo peso y que un Full-adder suma tres bits del mismo peso. ¿Sabríamos sumar tres bits haciendo varias sumas de dos bits cada una? Si sabéis hacerlo sobre el papel y con ejemplos, ¡también podéis implementar un circuito que lo haga!
Dibuja un circuito que sume tres bits del mismo peso (que haga la funcionalidad de un Full-adder) usando solamente dispositivos Half-adder (puedes usar los que desees, pero sólo Half-adders, ¡ni una puerta más!).
A continuación mostramos tres diseños, uno de ellos es un Full-adder implementado con menos de tres Half-adders y alguna puerta más.
A) B) C) x y z
c s
cs
HA
c s
HA
x y z
c s
cs
HA
x y z
c s
cs
HA
c s
HA
a) Construye una tabla de verdad para cada uno de los tres diseños y compárala con la tabla de verdad del Full-adder. ¿Cuál de ellos es un Full-adder? ¿Por qué no se realiza correctamente la suma de los tres bits para los circuitos que no son un Full-adder? (Piensa en los pesos de los bits a sumar y en los pesos de los resultados parciales y finales. Si los dos bits que entran en un Half-adder tienen peso 2 0 , la salida s tiene también peso 2 0 , pero la salida c tiene peso 2 1 ). Al diseño correcto del Full-adder obtenido de esta pregunta lo denominaremos Fa-ha (las siglas ha indican que está construido con half-adders)
b) Cada uno de los Half-adders que hemos usado en estos diseños está construido con una And- 2 para la salida c y una Xor-2 para la salida s (como hicimos en la práctica 1). Si el tiempo de propagación de una And-2 es de 20 u.t., el de una Xor-2 es de 50 u.t. y el de una Or-2 es de 20 u.t., ¿cuál es el tiempo de propagación de cada entrada a cada salida, para cada uno de los tres circuitos anteriores?
Diseño A) Diseño B) Diseño C) Tpx-c = Tpx-c = Tpx-c = Tpy-c = Tpy-c = Tpy-c = Tpz-c = Tpz-c = Tpz-c = Tpx-s = Tpx-s = Tpx-s = Tpy-s = Tpy-s = Tpy-s = Tpz-s = Tpz-s = Tpz-s = c) ¿Son intercambiables las entradas del Fa-ha en cuanto a tiempo de propagación (¿Tpx-c = Tpy-c= Tpz-c?, ¿Tpx-s = Tpy-s= Tpz-s? )?
2.1.3 Implementación del circuito en LogicWorks
Implementad en LogicWorks el Fa-ha (la implementación correcta de las tres que se daban en la segunda parte de la pregunta 1 del informe previo: con dos Half-adders y alguna puerta). Para ello, utilizad el dispositivo Half-adder (Ha) de la librería de esta práctica 2, LibPrac2. El dispositivo Full-adder dentro del que tenéis que dibujar el circuito que vais a crear con vuestros Half-adders se encuentra en la librería con el nombre Fa-ha. Como en anteriores prácticas este dispositivo tiene adjunto un circuito con sólo los port connectors y vosotros tenéis que completar el esquema. Después de encapsularlo y salvarlo probad su funcionalidad con el simulador LogicWorks, para aseguraros que el proceso se ha realizado correctamente.
b) Obtened los valores Xu, Yu y Wu (en decimal) de los números naturales representados hexadecimal por los vectores de dígitos X, Y y W. Realizad el cálculo Xu + Yu (en decimal) y comprobad que os da igual al valor Wu obtenido. Si es así, la suma en hexadecimal que habéis hecho en el apartado anterior es correcta. Xu = Yu = Wu = ¿Xu + Yu = Wu?
c) Suma en binario ( b =2) de los vectores de bits X =0101 e Y =
Dígito 4 Dígito 3 Dígito 2 Dígito 1 Dígito 0 X^0 1 0 Y^1 1 0 k =0 w (^0) c k =1 w (^1) c k = 2 w (^2) c k = 3 w (^3) c W
d) Obtened los valores Xu, Yu y Wu (en decimal) de los números naturales representados en binario por los vectores de dígitos X, Y y W. Realizad el cálculo Xu + Yu (en decimal) y comprobad que os da igual al valor Wu obtenido. Si no es así, la suma en binario que habéis hecho en el apartado anterior no es correcta. Xu = Yu = Wu = ¿Xu + Yu = Wu?
2.1.5 Sumador binario combinacional con propagación del acarreo
La implementación combinacional del algoritmo de suma en binario se obtiene disponiendo de n Full- adders (tantos como bits tienen los números a sumar, en nuestro ejemplo n = 4) y conectandolos como indica la siguiente figura. Aunque el primer Fa podría ser un Ha porque c 0 vale 0, dejamos un Fa-ha. A pesar de que la entrada c 0 no la usamos en esta práctica, es útil en otras ocasiones.
x yz
c w
Fa3 Fa2 Fa1 cs Fa
Fa c s
Fa c s
Fa c s
Fa c s
Fa
x0 y
c
w
x1 y
w
x2 y
w
x3 y
c
w
Fijaos que en el diseño de la figura, la salida w 4 la hemos denominado c 4 (esto es correcto ya que
w 4 (^) c 4 ). No hemos nombrado w 4 porque en los computadores generalmente todos los datos tienen el
mismo número de dígitos. Cuando la salida cn del sumador vale 1 nos indica que el resultado correcto de
la suma no puede representarse en binario con n bits.
2.1.6 Implementación del circuito en LogicWorks
Implementad en LogicWorks el sumador binario combinacional con propagación del acarreo que hemos diseñado en esta práctica, para n = 4, usando dispositivos Fa-ha. Colocad Binary Switch en las entradas y Binary Probe en las salidas para comprobar su correcto funcionamiento. El resultado de vuestro trabajo tiene que ser algo parecido a lo siguiente.
cs
Fa c s
Fa c s
Fa c s
Fa
1 0 0 0 0
10 10 10 10
0
1
10 10 10 10
Cuando estéis seguros del correcto funcionamiento del circuito sumador con Fa-ha, avisad al profesor de laboratorio y pedidle que revise vuestro trabajo y firme el informe final.
2.1.7 Tiempo de propagación del sumador
Vamos a calcular el tiempo de propagación de un sumador de dos números de 4 bits implementado con Fa en propagación del acarreo para el caso de implementar cada Fa con dos Ha y una puerta Or-2. Para ello es de gran ayuda la siguiente figura que muestra el sumador binario con dispositivos Fa-ha pero sin que se visualicen los bloques Fa-ha, sino viendo directamente todas las puertas con que están construidos los Half-adders que se usan para construir los Full-adders. También os ayudará para estos ejercicios que recordéis los tiempos de propagación de las puertas, que la Xor-2 puede tener un tiempo de propagación de 40 o de 50 dependiendo de los valores concretos de sus entradas, por lo que para calcular caminos críticos hay que considerar que el tiempo es el de la combinación de valores que produce el máximo retardo, 50 u.t.
Para la implementación basada en los Full-adders Fa-ha (suponed que el tiempo de propagación de las puertas And-2, Or-2 y Xor-2 es 20, 20 y 50 u.t. respectivamente):
X
Y
W
d 4 d 3 d 2 d 1 d 0
c) Explicad las diferencias entre el caso a) y b): i. ¿Por qué en el caso a) d3 es mayor que d2, d2 mayor que d1, y d1 mayor que d mientras que en el caso b) d3, d2, d1 y d0 tienen el mismo tiempo? ii. ¿Por qué en el caso a) d4 es menor que d3 mientras que en el b) d4 es 0?
Vamos a comprobar en el laboratorio si son correctas vuestras respuestas a la pregunta 8 del informe previo. Para ello, en el sumador con Fa-ha, poned un Switch que vaya a la entrada del acarreo del primer Full-adder ( c 0 ) y cuatro Switches más en las entradas de cada uno de los dos números que queremos sumar. Dad nombres a las salidas para poder visualizar en la ventana de tiempos del LogicWorks los cronogramas de las señales de salida.
Comprobad mediante los cronogramas del LogicWorks si son ciertas las respuestas que habéis dado a la pregunta 8 del informe previo.
a) Suponed que en el sumador construido con Fa-ha todas las entradas han valido 0 durante mucho tiempo antes del instante t. En el instante t las entradas pasan a valer: X = 1010, Y = 0101 y C 0 = 1. La salida w k se estabiliza con su valor correcto en el instante de tiempo t+d (^) k, para k = 0,..,3 y la salida c 4 se estabiliza en el tiempo t+d 4. ¿Cuánto vale dk para cada una de las cinco salidas del sumador, c 4 , w 3 ,…, w 0 ?:
d 4 d 3 d 2 d 1 d 0
¿Coincide con la respuesta del informe previo? Si no coincide indicad la razón. b) Repetid el ejercicio anterior para X = 1010, Y = 0101 y C 0 = 0.
d 4 d 3 d 2 d 1 d 0
¿Coincide con la respuesta del informe previo? Si no coincide indicad la razón.
2.1.8 Encapsulado del circuito
Ahora vamos a encapsular un circuito sumador como el que habéis implementado pero para n=16, que es el tamaño de palabra del computador que construimos en este curso. El símbolo dentro del que encapsularéis el circuito lo hemos dibujado nosotros y se encuentra en la librería LibPrac2, con el nombre de ADD-P2. Si lo copiáis de la librería a un circuito veréis la figura de la derecha.
Las patillas del dispositivo no son negras y finas, como ocurría hasta ahora, sino azules y gruesas. Cada una de estas líneas azules representa un bus de n bits ( n =16 en nuestro caso), una patilla de tipo bus. Esta es una facilidad muy interesante que nos ofrece LogicWorks: de los dispositivos pueden entrar y salir buses para interconectar dispositivos con solamente una línea gruesa que simboliza n bits.
Si hacéis doble clic ahora en el símbolo del ADD aparece el circuito que se muestra a continuación. El circuito interno consta solamente de los PORT CONNECTORS de los buses de entrada X e Y (dispositivos PORTIN de 16 bits, que son más grandes que los que ya conocéis, PortIn, de un bit) y del bus de salida W (dispositivo PORTOUT, también más grande que los PortOut de un bit). No cambiéis el nombre de estos PORT CONNECTORS pues debe coincidir con el nombre de las patillas de buses que nosotros hemos puesto al crear el símbolo del dispositivo ADD-P2 (estos
nombres deben coincidir al igual que ocurría con los nombres de los Port Connectors y las patillas de un bit).
Todos los buses que vamos a usar en este curso son de 16 bits y las 16 señales internas (los 16 bits del bus) se denominan siempre: b15, b14, …, b2, b1, b0, independientemente del nombre del bus. Si no seguimos este convenio nuestros diseños no funcionaran, ya que esos son los nombres que hemos dado a los bits de los buses de los conectores PORTIN y PORTOUT.
Al final de esta sección vais a completar el circuito interno del dispositivo ADD-P2 con un circuito sumador con propagación del acarreo para n=16 bits. Así, cuando hagáis doble clic en el símbolo se abrirá su interior y aparezca un circuito como el que se muestra a continuación. Conseguir esto es vuestro objetivo ahora.
Para acceder a los cables de un bit que hay dentro de un bus, hay que usar un Breakout. Para poner un breakout en un circuito tenéis que ir al menú Schematic -> New Breakout. Nos aparece una ventana que nos pregunta o Pin List. Aquí tenéis que copiar: b0..15 (exactamente así, de lo contrario no funcionará) o Pin Spacing. Podéis usar el número 1, 2, 3, 4, etc. Dependiendo de lo separados que queráis que salgan los cables del bus (probad distintas opciones para ver el resultado). Si usáis el espaciado 6 como hemos usado nosotros en el circuito anterior, el diseño os cabrá en una sola página y quedará muy bonito.
Se puede dibujar un bus de n bits (que es una línea azul gruesa) para unir, por ejemplo, el bus del PORTIN X con un breakout que obtendrá sus bits internos, o para unir dos patillas de tipo bus de dos dispositivos en un circuito complejo. Para ello se estira de la patilla de tipo bus del dispositivo (como se
hace para el caso de cables de 1 bit), o se usa el botón (equivalente al botón usado para dibujar cables de un bit).
Después de esta pequeña introducción sobre los buses en LogicWorks vamos a dibujar el circuito en la página que se abre al hacer doble clic sobre el símbolo ADD y que sólo contiene los tres PORT CONNECTORS. Ahora ya podéis crear tres breakout, dos para conectarlos a los PORTIN X e Y y otro para conectarlo a W, como se muestra en la figura anterior. El siguiente paso consiste en pegar los 16 Full-adder a los cables que salen de los breakout.
Una vez terminado el circuito ya podéis cerrarlo. Ahora podéis seleccionar el símbolo ADD para salvar los cambios que habéis hecho en su circuito interior en la librería LibPrac2, de la misma forma que ya conocéis de la práctica anterior para los dispositivos que tienen patillas de un bit.
2.1.9 Comprobación del circuito encapsulado
Apellidos y nombre: ................................................................................................................ Grupo: .......
Apellidos y nombre: ................................................................................................................ Grupo: .......
(por orden alfabético)
a)
b)
Diseño A) Diseño B) Diseño C) Tpx-c = Tpx-c = Tpx-c = Tpy-c = Tpy-c = Tpy-c = Tpz-c = Tpz-c = Tpz-c = Tpx-s = Tpx-s = Tpx-s = Tpy-s = Tpy-s = Tpy-s = Tpz-s = Tpz-s = Tpz-s =
c)
a)
b)
a)
a)
d 4 d 3 d 2 d 1 d 0
b)
d 4 d 3 d 2 d 1 d 0
c) Explicad las diferencias entre el caso a) y b):
i. ¿Por qué en el caso a) d3 es mayor que d2, d2 mayor que d1, y d1 mayor que d mientras que en el caso b) d3, d2, d1 y d0 tienen el mismo tiempo?
ii. ¿Por qué en el caso a) d4 es menor que d3 mientras que en el b) d4 es 0?