- 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 ALU (que sólo realiza operaciones lógicas) de 8 bits que tome dos entradas
de 8 bits y produzca una salida también de 8 bits.
Las entradas de control son y operan de la siguiente forma:
|
|
Función |
0 |
0 |
AND(X,Y) |
0 |
1 |
OR(X,Y) |
1 |
0 |
NOR(X,Y) |
1 |
1 |
XOR(X,Y) |
Realice un diseño top-down, mostrando primero el diagrama en bloques
utilizando ALUs de 1 bit, luego cree la tabla de verdad de cada una de estas ALU y finalmente
obtenga una implementación de la ALU de 1 bit utilizando un MUX 8-a-1.
- Siguiendo el diagrama del datapath de una pequeñísima arquitectura 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.
- 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]);
- Realice ahora el proceso inverso, es decir a partir de las palabras binarias de control que se
dan, obtenga la versión nemotécnica utilizando el lenguaje assembler como se mostró en
el ejercicio 4.
|
|
|
|
|
|
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?
- ¿Cuántas instrucciones puede tener una instrucción ARC sin tener que cambiar el
flujo de control a la parte baja del almacenamiento de control luego que la operación
Decode produjo el salto a la parte alta correspondiente al opcode combinado?
- Extienda el juego de instrucciones de ARC 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.
- En muchas porciones del código se utilizan instrucciones del tipo ADD(a,a)
para obtener desplazamientos aritméticos a izquierda.
Demuestre formalmente a partir de las especificaciones que
sa+a sLSHIFT(a).
sa+b
sLSHIFT(a)
- Comparar la cantidad pasos que toma ejecutar con control programado y control cableado:
- La instrucción ld con y sin operador inmediato.
- El salto por signo negativo bneg suponiendo que o sea el salto
se realiza.
En el control programado la cuenta está dada por la cantidad de instrucciones
que se ejecutan desde el comienzo en la dirección 0 hasta que se vuelve a ella.
Para el control cableado la cuenta es la cantidad de estados visitados desde el inicio
en el estado 0 hasta que la secuencia regresa a él.
En ambos casos escriba la secuencia de ejecución. En un tipo de contol será una
secuencia de direcciones y en el otro de estados.
Compare ambos acercamientos con los elementos obtenidos.
- La línea 2047 del programa ARC contiene una instrucción GOTO 0.
¿Cambiará el comportamiento del programa si cambiamos esta instrucción por un
skip?
- En la programación horizontal, las palabras son anchas, mientras que en la
programación vertical resultan angostas.
En general la diferencia reside en que para la programación horizontal las señales de
selección de los buses se encuentran decodificadas, mientras que en la vertical es necesario
incluir decodificadores en , perdiendo velocidad pero reduciendo los requerimientos
de la memoria de control 1.
Si hiciéramos más anchas las palabras expandiendo , y a 38 bits para contener
un único bit de selección por cada uno de los 38 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?
- La ALU de ARC se implementa con una tabla de búsqueda (lookup table - LUT).
Muestre la tabla LUT y LUT para la operación INC(A)
(
).
- ¿Habrá que cambiar el programa de la ARC si se modifica la ALU para que trabaje
en cpl1's en vez de cpl2's? Donde suponemos que siempre tomamos la representación
adecuada de los números con signo en nuestros programas.
- *2 En el práctico 4a se utilizó mucho la siguiente
construcción en la ISA de ARC 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.
- Modifique el programa de ARC 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 compilar guardas de la
forma , y .