- Diseñe una ALU de 1 bit utilizando el esquema parcial de la figura siguiente.
Esta ALU realiza las operaciones de suma, AND, OR y NOT sobre las entradas de 1 bit
poniendo el resultado en la salida según las entradas como muestra la tabla.
Solo interconecte los componentes dados, no agregue ningún tipo de dispositivo lógico.
|
|
|
Función |
0 |
0 |
ADD(A,B) |
0 |
1 |
AND(A,B) |
1 |
0 |
OR(A,B) |
1 |
1 |
NOT(A) |
|
|
- ! Diseñe una barra de desplazamiento (barrel shifter) de 8 bits
que pueda hacer corrimientos aritméticos a la izquierda de
0 a 3 bits.
- Siguiendo el diagrama del datapath de una pequeñísima arquitectura
horizontal2 que se muestra a continuación,
obtenga la secuencia de control para realizar las operaciones
-
-
|
|
|
Función |
0 |
0 |
ADD(A,B) |
0 |
1 |
AND(A,B) |
1 |
0 |
A |
1 |
1 |
NOT(A) |
|
|
La resta deberá ser utilizando complemento a 2's, y no podrá modificar ningún registro
excepto .
Para la operación necesitará un registro temporal.
Suponga que inicialmente el registro contiene el valor 1.
A continuación se muestra el formato de la palabra de control que deberá utilizar.
Hab.Escr. |
Hab.Bus A |
Hab.Bus B |
|
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
0 |
1 |
2 |
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cuando no necesite realizar operaciones en un bus, puede poner todas sus líneas de
selección en 0.
- Instrucciones a palabras de control
-
Escriba la forma binaria para las instrucciones mostradas.
Utilize el formato del ejercicio 5 y rellene con 0's los bits cuyo valor resulta indistinto.
60: R[temp0] NOR(R[0],R[temp0]); IF Z THEN GOTO 64;
61: R[rd] INC(R[rs1]);
- ¿Cómo son las palabras de control para el siguiente programa?
60: IF Z THEN GOTO 64; R[temp0] NOR(R[0],R[temp0]);
61: GOTO NEXT; R[rd] INC(R[rs1]);
- palabras de control a instrucciones
-
Desensamble la siguiente secuencia de palabras de control:
|
| |
| |
| |
| |
| |
| A |
| |
| |
| |
| |
| |
| |
| B |
| |
| |
| |
| |
| |
| |
| C |
| R |
| W |
| |
|
| |
| |
| |
| |
| |
| |
| |
| |
A |
|
| B |
|
| C |
|
| D |
| R |
| ALU |
Cond |
| DirSalto |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 1 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
1 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 0 |
| 1 |
| 1 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 0 |
| 1 |
| 1 |
| 0 |
| 0 |
- ¿Que sección del microcódigo es?
- Salto múltiple con DECODE
- Forme la dirección de salto dentro del almacenamiento de
control para las instrucciones srl y ld.
- ¿Porqué el programa de st ocupa los segmentos
y en vez de ocupar uno solo como
el ?
- Extienda el juego de instrucciones de
para incluir una nueva instrucción modificando
el programa.
La nueva instrucción es andn, realiza la operación lógica entre
sus operandos y no modifica los códigos de condición.
La instrucción estará entre las de formato artimético y tendrá .
Deberá interpretar adecuadamente el bit 13 de direccionamiento inmediato.
- Comparación de la performance entre control programado y cableado.
Podemos pensar que la cantidad de instrucciones que toma una instrucción
en ejecutarse es una medida del tiempo que tardará.
Definimos esta cantidad como la longitud de la secuencia de ejecución del
programa que va desde el instruction fetching (dirección 0) al
incremento del pc (dirección 2047).
La misma medida puede ser tomada para el control cableado, pero sobre la
secuencia de estados que va del 0 (instruction fetching) al 20
(incremento del pc).
Dar la secuencia de ejecución para el control programado y cableado
en los siguientes casos. Comparar la performance.
- Instrucción ld con y sin operando inmediato.
- Instrucción bneg suponiendo psw.n=1, o sea que
el salto se realiza.
- La línea 2047 del programa
contiene una instrucción GOTO 0.
¿Cambiará el comportamiento del programa si cambiamos esta instrucción por un
skip?
- ! ¿Porqué la ALU tiene operaciones como LSHIFT2(A) y LSHIFT10(A) si también se
cuenta con una barra de desplazamiento (shift barrel) a su salida?
- En la programación horizontal, las palabras son anchas, mientras que en la
programación vertical resultan angostas.
La diferencia reside que en la programación horizontal las señales de
selección de los buses se encuentran decodificadas, evitando los decodificadores ,
ganando en velocidad pero aumentando los requerimientos de la memoria de
control 3.
Transformamos
a programación horizontal, expandiendo los campos , y
a 38 bits para contener un único bit de selección por cada uno de los registros.
Calcular el ancho de la nueva palabra.
¿En qué procentaje se incrementará el almacenamiento?
- Se quiere llevar la idea de la nanoprogramación un paso más allá y crear una
picomemoria que sería referenciada por la nanomemoria donde esta ahora contendría
picodirecciones.
¿Tiene sentido este planteamiento?
- ¿Habrá que cambiar el programa de la
si se modifica la ALU para que trabaje
en
's en vez de
's?
Donde suponemos que siempre tomamos la representación adecuada de los números con
signo en nuestros programas.
- ** Uno de los diseñadores de
dijo que había encontrado un método muy práctico
para codificar el programa de la nueva instrucción swap sin haber hecho
uso de ningún registro temporal.
Intente obtener este programa.
- La ALU de
se implementa con una tabla de búsqueda (lookup table - LUT).
- Muestre las tablas LUT para la operación INC(A)
4.
- ! Idem pero para las operaciones INCPC(A) y
SEXT13(A) .
- ! La semántica ``à la Patterson'' de la instrucción ba es la siguiente:
ba disp22
|
R[pc]ADD(R[pc],LSHIFT2(SEXT22(disp22))) |
Muestre que la implementación del control programado no sigue esta semántica y
explique como cambiaría el código para solucionarlo.
- + En el práctico de Arquitectura del Conjunto de Instrucciones se utilizó mucho la
siguiente construcción de
para compilar la expresión booleana .
subcc %r1, %r2, %r0
bpos label
Sin embargo esto produce problemas si, por ejemplo, el primer argumento es positivo y el segundo negativo.
Para números de 8 bits con signo en complemento a 2's, este test dice que
.
La solución está en verificar en conjunto los bits de estado y .
- Encuentre la expresión lógica entre y que si resulte equivalente
a luego de hacer la resta. Demuestre que su expresión es correcta.
- Modifique el programa de
para incluir la instrucción de salto bge
(branch greater equal) con lo realizado en el punto anterior.
- Muestre como, a partir de esta instrucción, podemos generar esquemas de
compilación de guardas de la forma , y .