jueves, 31 de mayo de 2012

Tema 6 - FAQ



- Al empezar la práctica hay muchos ejercicios y poco tiempo, ¿Por donde empiezo?

No hay que alertarse, ya que la práctica es simplemente ir conectando elementos conforme se avanza en los ejercicios. Por ejemplo, el segundo ejercicio es una ampliación del primero.

-Al estar montando el circuito, observo que mi cableado aparece de color azul y no funciona, ¿qué puedo hacer?

Puede que los cables no están correctamente conectados a la entrada o salida, así que observa que los extremos de los cables estén correctamente unidos a cualquier punto de conexión de cualquier componente. Tras esto, los cables deberían aparecer en verde o en negro, que indica la conexión correcta.

- Ahora los cables son naranjas, ¿Por qué?
El ancho de banda es incompatible, esto quiere decir que el numero de bits que intercambiada dos componentes no es la más correcta. Esto se arregla modificando el apartado "bits de datos" al nº más adecuado a la situación. 

-En el cuarto ejercicio me piden visualizar un grafico, ¿Cómo lo hago?
Simplemente comprueba que cada columna de la matriz de 8x8 tiene asociado un registro que retiene datos a mostrar.

-¿Cómo funciona la matriz?
Para cargar una imagen necesitaremos 8 bytes, de los cuales cada uno de ellos corresponderá a una columna. El contador hará que se vaya almacenando cada byte de la imagen en un registro cuya salida estará conectada a una columna de la matriz de forma que la imagen se irá dibujando columna a columna. 


El byte que llega a la matriz definirá que fila/s se enciende en esa columna iluminandose en verde oscuro si llega un 0 a la fila o en verde claro si llega un 1 a la fila. Por ejemplo, si a una columna llega (10000001) se activará la primera fila y la última.


Ampliando la memoria podremos almacenar más imagenes que se mostraran una a continuación de la otra. De esa forma y cambiando la frecuencia del reloj podremos hacer las animaciones que se piden en el último ejercicio.

-¿Para qué sirve el conversor paralelo-serie-paralelo? 

El conversor que construimos en el primer ejercicio, y que vamos ampliando en los dos siguientes. Su función es transmitir en serie (bit a bit) un dato que le llega en paralelo, para después volver a sacarlo en paralelo. Utilizaremos un registro de desplazamiento, que transmitirá en serie a otro registro de desplazamiento, el dato que ha cargado en paralelo, para que vuelva a salir de forma paralela por el segundo registro. 
En el segundo ejercicio ampliaremos el conversor añadiendo un bit de paridad, y en el tercero automatizaremos el envío paralelo con un contador que pare al llegar a 9 (ya que son 9 los bits a enviar).

miércoles, 30 de mayo de 2012

Tema 4 - FAQ


-Necesito las tablas de equivalencias de las instrucciones de MIPS en binario, ¿Dónde las puedo encontrar?
Las tablas de equivalencia se pueden encontrar en los apuntes del Campus.

-¿Por qué se producen errores cuando hay más de un triestado activado?
Cuando un triestado se abre es deja pasar la información al bus, por lo tanto si se abren varios llega información de diferentes lugares y se producen colisiones.

¿Qué significa la señal de “RESET” de la esquina inferior derecha del circuito de la CPU?
Como su nombre indica, el RESET permite reiniciar el circuito, para poder realizar nuevos cambios

-¿Cómo se codifican las instrucciones a hexadecimal?
Cada instrucción tiene un formato determinado para ser codificada en binario. Por ejemplo, en la práctica, la operación ADD $t0, $t1, $t2 sería del siguiente modo:


De esta forma la operación ADD tiene valor 0 y se coloca en el primer espacio de 6 bits (seis ceros), en los próximos se almacenará el número de registro que corresponda (la tabla de equivalencias de registros con sus números está en el campus), en el quinto espacio almacenaremos el desplazamiento en 5 bits (en este caso serán cinco ceros) y por último escribiremos 20 en hexadecimal y con 6 bits (quedando en este campo 100000). Posteriormente podremos pasar la instrucción a hexadecimal dividiendo los 32 dígitos en binario en grupos de 4 y pasando cada grupo a su valor en hexadecimal (por ejemplo, si tenemos 1010, pondremos A). Si algún registro no se usa en la instrucción, se escribirán 0 en 5 bits.

-Cuando realice los ciclos de instrucción, ¿Los 4 primeros ciclos son siempre los mismos?
Sí, ya que hasta el proceso de decodificación los pasos a seguir son los mismos para todas las instrucciones. El resto de pasos será propio de cada instrucción.

-¿Por qué la ALU tiene dos salidas? 
Una de las salidas de la ALU denominada salida directa se utilizará para que el resultado de la ALU salga al bus interno en el mismo ciclo en el que se hace la operación. De esta forma conseguimos reducir ciclos de reloj pero solo puede utilizarse si el bus no esta ocupado por otro dato en ese ciclo. En ese caso utilizaremos la otra salida que almacena el resultado en RT3 para sacarlo al bus interno en el siguiente ciclo.

-¿Cuándo puedo colocar en un mismo ciclo varias instrucciones?
Se podrán solapar varias instrucciones en un mismo ciclo si no producen colisiones en el bus interno.

-¿Cómo funcionan las entradas de la ALU? 
En la máquina usada en este tema nos encontramos con que el banco de registros tiene dos salidas, una para el operador A y otra para el operador B, pudiendo seleccionarse para cada una de ellas registros diferentes. También podremos capturar en RT1 y RT2 valores para A y B, respectivamente, desde el bus interno (para utilizar los inmediatos que están en la instrucción). Necesitaremos por lo tanto dos multiplexores (uno en A y otro en B) que seleccionen de cuál de los dos caminos se tomará el dato. 


-¿Cómo leo y escribo en la memoria?

En el caso de la lectura se almacenará la dirección de la que quiero leer en el MAR y activaremos la señales Td, Sel, L. En el caso de la escritura almacenaremos la dirección en la que queremos escribir en el MAR y el dato que queremos escribir en el MBR y despues activaremos la señales Ta, Td, Sel, E.

lunes, 28 de mayo de 2012

Resumen de las practicas del tema 4


Unidad de Control.
En esta práctica el objetivo central era comprender como funcionaba la ALU, la gestión de los buses y la forma en la que interactúan los diferentes componentes.
En las practicas se nos proponía una serie de instrucciones diferentes para codificarlas en hexadecimal, posteriormente realizar la secuencia para ejecutar dichas instrucciones y por ultimo comprobar, con ayuda del software logisim y el circuito proporcionado en el Campus Virtual ,que la secuencia que hemos realizado con anterioridad estaba correcta y no creamos ningún conflicto con el uso del Bus.
A la hora de realizar la secuencia tenemos que mucha atención con el uso que le damos al bus y no intentar trasmitir dos datos diferentes al mismo tiempo por el bus ya que eso ocasionaría graves errores.
Para realizar todo el resumen utilizare la primera instrucción que nos plantean como ejemplo, todas las demás instrucciones variarían según la codificación que tengan y según la función que hagan habrá que hacer el seguimiento acorde a su función.
La instrucción que utilizaremos será la ADD $t0, $t1, $t2.  Para la codificación de la instrucción utilizaremos el siguiente esquema que nos dice cuantos bits tenemos que dedicar a cada parte de la operación. Para la instrucción ADD se seguirá el siguiente esquema.
De tal manera habrá que sustituir según el valor que tengan nuestros registros en los correspondientes. Una vez tenemos todo el numero en binario agrupamos los bits de 4 en 4 para que nos dé el numero en hexadecimal que sería el 0x012A4020.
Para la realización del seguimiento tenemos que usar el esquema proporcionado en el Campus virtual.
 
 La secuencia se podría dividir en tres apartados, el primer apartado corresponde a la lectura de la instrucción, la segunda fase es la fase de la decodificación y por ultimo seria la fase de ejecución. En la fase de decodificación solo se puede descodificar la señal y no se pueden ejecutar varias acciones a la vez en el mismo ciclo.
A partir de ahora cuando nos refiramos a los ciclos estaremos haciendo referencia a todas las señales y operaciones que se pueden hacer en un solo ciclo de reloj.
Primero para leer la instrucción tendremos que pasar la dirección de PC hasta MAR, posteriormente leer en la memoria principal la dirección que está en MAR y llevarlo hasta MBR, en este paso también incrementaremos el contador PC en 4. El siguiente paso sería pasar el contenido de MBR hasta RI, todo esto sería la fase de lectura de instrucción y después tendríamos la fase de decodificación en la que se decodifica la instrucción que está en RI. Todo esto visto en ciclos quedaría de esta manera:

C1:
MAR ← PC
T4,C1
C2:
MBR Ml(MAR)
Td,L,C2

PC PC+4
C4
C3:
RI MBR
T3,C6
C4:
Decodificación



Después de la decodificación se pasaría a la fase de ejecución que sería propia de cada instrucción y en nuestro caso habría que pasar el registro $t1 y el registro $t2 a la ALU para llevar a cabo la operación y el resultado tendríamos que almacenarlo en $t0, todo esto visto en ciclos quedaría de la siguiente forma:

C5:
ALU $t1
RA=01001,MA=0

ALU $t2
RB=01010,MB=0

$t0 ALU
OP=Suma,T5,RC=01000,SC

RE ALU
C8
Una vez tenemos la secuencia realizada procedemos a comprobar el correcto funcionamiento con el software y el esquema proporcionado. La realización es simple y sirve para ver de una manera directa que lo que hemos realizado en teoría si lo llevamos a la práctica se cumple sin ningún error.
Una vez hecho todo el proceso y verificado que realmente siguiendo los pasos que hemos descrito en la secuencia escrita con anterioridad, habría que repetir el proceso con cada una de las instrucciones hasta terminar  la práctica completa.
.