Bueno, a expensas de que Julián y Cristina corrijan sus resúmenes, el blog queda finalizado. Únicaente nos falta, por lo tanto, la defensa del trabajo, que se llevará a cabo, Dios mediante, este miércoles 6 de junio. Os felicito por el trabajo desempeñado, y os deseo suerte en la defensa del trabajo. Como colofón, coloco aquí además la maquina del ejercicio 4 con las mejoras que le he incluido, que son:
-Añadida entrada reset al banco.
-Añadido teclado para introducir valores en el bus interno.
-Añadidos tres módulos para sacar del RI el inmediato según el tipo de instrucción (desplazamiento de las instrucciones R, 16 bits de inmediato de las de tipo I y 26 de las de tipo J).
-Corregido el sumador/restador, que le faltaba icluir el acarreo previo para pasar el número a complemento a 2.
- Añadidas las operaciones lui (cargar en la parte alta del registro) y slt, quedando las operaciones implementadas así:
00000 Suma
00001 Resta
00010 OR
00011 AND
00100 Despl. lógico a la izquierda.
00101 Despl. lógico a la derecha.
00110 LUI A
00111 XOR
01000 NOT A
01001 SLT
- Corregidos los desplazamientos, ya que antes si indicabas 2 bits de desplazamiento, se desplazaba 1, y así. Ahora sin indicamos desplazamiento 2, se desplazará 2 bits.
El comentario en la defensa sobre la máquina, lo puede hacer Javier (que hizo el resumen del tema 4) o si lo prefiere, yo mismo.
Aquí incluyo la máquina:
martes, 5 de junio de 2012
domingo, 3 de junio de 2012
Resumen tema 5
En
esta práctica aprendimos a analizar y utilizar memorias RAM y ROM.
Implementándolas con el programa Logisim
Primero explicaré como determinar el tamaño del chip de memoria sea RAM o ROM. Para ello deberemos cambiar los atributos "número de bits de datos y dirección".
El número de bits de datos define el ancho del chip mientras que el número de bits de direcciones definirá el número de posiciones o alto del chip. El número de posiciones será 2 elevado al número de bits de direcciones.
Ahora que sabemos determinar el tamaño de nuestro chip de memoria podemos realizar los cinco ejercicios propuestos.
El número de bits de datos define el ancho del chip mientras que el número de bits de direcciones definirá el número de posiciones o alto del chip. El número de posiciones será 2 elevado al número de bits de direcciones.
Ahora que sabemos determinar el tamaño de nuestro chip de memoria podemos realizar los cinco ejercicios propuestos.
El
primer ejercicio nos pedía introducir una memoria RAM de 64Kx8 (número de bits de dirrecciones 16 y número de bits de datos 8) y
realizar un circuito que permita leer y escribir en ella. Probar a
introducir en las direcciones 0023h el dato 3A y en la dirección
C120h el dato 25.
Como
vemos en el circuito la entrada de direcciones es de 16 bits y con
esto podremos
seleccionar
el lugar donde guardas los datos de entrada, que como dijimos
anteriormente
son de 8 bits
A
continuación probamos a introducir en las direcciones 0023h el dato
3A
El
segundo ejercicio consistía en unir dos memorias del tipo utilizado
en el apartado 1, para conformar una de 64Kx16.
Después comprobaríamos su funcionamiento de forma similar al apartado anterior:
introduciendo algunos
datos
de 16 bits en varias direcciones.
Se
puede comprobar que es exactamente igual que el primer ejercicio,
pero poniendo dos chips en paralelo.
En
el tercer ejecicio se pide unir dos módulos como los del segundo ejercicio (64Kx8) para conformar una de 128Kx16. Podemos comprobar su funcionamiento introduciendo valores como en los apartados anteriores.
En
el cuarto ejercicio se pide ampliar la memoria hasta 256Kx16, por lo tanto necesitaremos cuatro módulos del ejercicio dos. Para seleccionar entre los cuatro módulos utilizaremos un decodificador unido a los dos bits más significativos de dirrección, que será en este caso de 18 bits (16 para seleccionar las posiciones dentro de un módulo y los dos más significativos para seleccionar el módulo)
En el último ejercicio solo debemos cambiar el primer módulo por memorias ROM con los mismos atributos.
Hay
que observar en el siguiente circuito como en la memoria ROM
únicamente nos encontramos una señal de control: el selector, que
va junto con los selectores de las memorias RAM al decodificador para poder seleccionar el módulo de memorias ROM.
Espero que os sirva éste resumen en el cual se explica todo lo que si hizo ese día en las practicas del tema 5 correspondientes a la cuarta practica.
Espero que os sirva éste resumen en el cual se explica todo lo que si hizo ese día en las practicas del tema 5 correspondientes a la cuarta practica.
viernes, 1 de junio de 2012
Tema 6 - Resumen
En esta última práctica tendremos que demostrar todo lo que
hemos ido aprendiendo de las anteriores, ya que se mezclarán todas las
operaciones y comandos, seguiremos usando Logisim para crear los circuitos que
se nos proponen, tales como un circuito conversor de paralelo-serie-paralelo y
matrices gráficas; para este último usaremos un nuevo elemento, “LED Matrix”.
A continuación explicaremos todos los circuitos:
1. Montar un circuito
conversor paralelo-serie-paralelo por medio de un registro de desplazamiento
serie.
Como recordaremos, para montar un registro de desplazamiento
usaremos separadores, solo que en vez de unir dos, los uniremos a dos registros
de desplazamiento, llamados Shift Register.
Este circuito tiene este nombre ya que si nos fijamos en el
dibujo, manda los datos de forma paralela al registro, y de este sale en serie
al siguiente registro para volver a acabar en paralelo
2. Una vez comprobado el buen
funcionamiento del sistema, ampliarlo a un bit adicional (9) que contenga la
paridad del dato a enviar. Comprobar también la paridad del dato recibido.
Para modificar el circuito deberemos
poner una entrada/salida más a los registros para así tener nuestro bit de
paridad y unir este junto con los otros ocho a una puerta AND con la intención
de conseguir al final una salida la cual será correcta si su resultado es cero.
3.
Automatizar el envío de datos mediante un contador.
Como nos dice el enunciado, añadiremos
un contador, este estará unido al reloj, ya que así trabajará según los ciclos,
además tendrá 4 salidas que implementaremos con un separador que se unirán a
una puerta NAND para obtener una salida
4. Montar
una matriz gráfica de 8x8 puntos conectada a una memoria que sirva para almacenar
un gráfico en la matriz. Cada fila de la matriz debe poseer un registro que
actúe como buffer para retener el dato a visualizar. Programar la memoria para
visualizar cuadrado.
Como tenemos una matriz 8x8 y nos piden un registro por fila,
tendremos que usar en total 8 registros; por otro lado usaremos una memoria RAM
(ya vista en la práctica anterior), y un decodificador que básicamente haga de
unión con todos los elementos.
Una vez montado el circuito, os explicaremos como trabajar con
esta matriz gráfica; a cada columna de la matriz de llegan 8 bits, así que
imaginad que queremos activar el primer y tercer cuadrado de nuestra fila, en
ese caso deberemos pasarle el siguiente conjunto de bits: 10100000
5. Modificar el circuito anterior, duplicando
la capacidad de memoria y utilizando un
contador
de 4 bits, de forma que se visualicen dos figuras una detrás de otra, en la
matriz.
Para realizar este circuito solo deberemos modificar un poco el
anterior, aumentaremos nuestra RAM a 16GB y el contador con un bit más,
usaremos dos separadores, uno de 4 bits y otro de 3 para así poder seguir
trabajando con nuestro anterior decodificador, el cual hará que se visualicen
las dos figuras
6.
Modificar el circuito anterior volviendo a duplicar la memoria, de forma que se
visualicen
cuatro
figuras una detrás de otra. Crear una pequeña animación.
Al igual que en el ejercicio anterior, volveremos a duplicar la
memoria RAM y jugando con el reloj y las direcciones de memoria de la RAM, nos
fijamos que conseguimos que cada circuito se encienda o apague. Adjuntamos también una pequeña animación sencilla en gif.
FAQ Tema 5
· ¿Qué significan los elementos que
veo en el módulo de memoria?
Dentro del módulo de memoria (ya sea RAM o ROM) veremos un rectángulo con el borde más fino y a la izquierda del mismo encontramos una serie de dígitos de color gris. Estos dígitos serán las posiciones a las que estamos accediendo en hexadecimal, habiendo 2n posiciones, y siendo n el número de bits del bus de direcciones (se puede cambiar en los atributos del módulo, así como el número de bits del bus de datos).
Dentro del rectángulo se mostrarán con dígitos negros en hexadecimal los valores almacenados en las distintas posiciones. Dependiendo del tamaño del bus de datos y del bus de direcciones se mostrará en una misma fila el contenido de varias posiciones, siendo por lo tanto los dígitos en gris que se sitúen en esa fila la dirección de la primera posición de la fila. Por lo tanto, la dirección de las siguientes posiciones de la misma fila será la dirección de la primera más lo que nos desplacemos con respecto a la primera posición (si hay 4 posiciones por fila, y la dirección de la primera posición es 4, la dirección de la segunda será 5, la de la tercera 6 y la de la cuarta 7).
· A la hora de editar los datos de la
memoria, solo veo las primeras posiciones, ¿Cómo puedo editar el resto de
posiciones?
Existen tres alternativas para editar el resto de posiciones tanto en RAM como en ROM:
Existen tres alternativas para editar el resto de posiciones tanto en RAM como en ROM:
- Al seleccionar una posición cualquiera, aparecerá un rectángulo rojo en esa posición, indicando que podemos editar su contenido. Si queremos mover el rectángulo rojo para introducir datos en el resto de posiciones pulsaremos la barra espaciadora para avanzar a la siguiente posición, tecla de borrar (retroceso) para volver a la anterior posición, o tecla intro (debajo de la de borrar) para avanzar a la siguiente fila.
- Si pinchamos en una dirección (dígitos en gris) el rectángulo rojo se situará sobre ella y podremos teclear la dirección a la que deseamos acceder. De esta forma, nos llevará a la fila en la que se encuentre la posición a la que deseamos acceder.
- Si hacemos clic con el botón derecho sobre el módulo y seleccionamos editar contenidos, se nos abrirá el editor hexadecimal, con el que nos será más fácil acceder a cualquier posición para editar su contenido.
· ¿Qué diferencia existe entre RAM y
ROM en logisim, si puedo modificar los datos en ambos tipos de memoria?
Ciertamente, en ambos casos es posible modificar el contenido mediante cualquiera de las tres alternativas mencionadas en la anterior pregunta. No obstante, en el caso de la ROM solo podremos hacer la operación de lectura (no en vano ROM significa Read Only Memory), es decir, no se pueden escribir los datos que vengan por el bus de datos y solo podremos modificar el contenido de la memoria como se hizo en la pregunta anterior. Sin embargo, en la memoria RAM es posible realizar tanto la operación de lectura como la de escritura, por lo tanto, podremos modificar el contenido de la memoria escribiendo los datos que vengan por el bus de datos o bien, como se hizo en la pregunta anterior.
· ¿Para qué sirven los pines de entrada y salida de la RAM y la ROM?
- Sel: Nos permite activar o desactivar un chip RAM o ROM. Si tenemos uno o más chips en paralelo (módulo) no es necesario, pero será muy útil si tenemos varios módulos, ya que podremos activar únicamente el módulo al que accedamos en cada momento.
- Triángulo (Escritura de datos, E): Puede ser conectado a un pin de entrada de 1 bit o a un reloj. En cualquier caso, en nivel alto, y con clr y out en nivel bajo, escribirá en la posición suministrada por la entrada A el dato que llega por la entrada D. (Solo RAM)
- Out (Lectura de datos, L): Cuando está en nivel alto permitirá salir por D el contenido de la dirección indicada por A. Al estar en nivel alto no permite que se carguen datos, por lo que debe ser desactivado si queremos escribir en la memoria. (Solo RAM)
- Clr (clear): Cuando está en nivel alto, se resetea la memoria. (Solo RAM)
- A: Suministra la posición a la que deseamos acceder.
- D: Entrada o salida de datos a la memoria.
· Estoy haciendo una simulación y por
cualquier motivo debo dejarla a la mitad, ¿Podría salvar los datos que he
introducido en memoria para no tener que volver a introducirlos cuando reanude
la simulación?
Por supuesto. Para salvar los valores solo se debe hacer clic derecho sobre el módulo de memoria y seleccionar salvar imagen. El archivo con los datos de ese módulo de memoria se salvarán en un archivo que deberá tener el siguiente nombre: nombre_archivo.raw. Para cargar en el módulo de memoria los datos salvados en el archivo, solo se debe hacer clic derecho sobre el módulo y seleccionar cargar imagen, seleccionando en la ventana que se abre el archivo en el que habíamos guardado los datos.
· ¿Por qué a partir del ejercicio 3
uno o más de los bits más significativos de la dirección se quedan aparte de
los primeros dieciséis?
Eso es debido a que los bits menos significativos (en este caso son dieciséis, pero depende de las posiciones que tenga el módulo) del bus de direcciones tienen como finalidad identificar a qué posición del módulo accedemos, mientras que los más significativos (en cada caso necesitaremos un número distinto según el número de módulos que tengamos) se utilizan para seleccionar qué módulo está activo en cada momento. Como se dijo antes, se activará la entrada sel del módulo al que queramos acceder utilizando un decodificador con los hilos de selección de módulo; de esta forma, solo un en un módulo se podrán escribir o leer datos, mientras que los demás permanecerán inactivos (evitando que un mismo dato se escribiera en varias posiciones a la vez o que de cada módulo saliera un dato distinto, provocando colisiones).
· ¿Cómo puedo determinar el tamaño de
mi chip de memoria RAM o ROM?
Para ello solo
debemos modificar los atributos de nuestro chip de memoria, ya sea RAM o ROM.
Seleccionamos
nuestro chip y observamos que podemos cambiar tres atributos. Para modificar el
tamaño de nuestro chip nos interesan los dos primeros. El primero de ellos:
Número de bits de dirección, nos permitirá definir el ancho del bus de
direcciones que se debe conectar a dicho módulo; por lo tanto definiremos así
el número de posiciones de nuestro chip, siendo éstas tantas como 2 elevado al
número de bits de dirección que seleccionemos (en nuestro ejercicio utilizamos
chips de 64 K posiciones, o lo que es lo mismo 2^16 posiciones, por lo tanto
debemos seleccionar 16 en el número de bits de dirección). Así hemos definido
el “alto” de nuestro chip. Para definir el “ancho”, es decir, el número de bits
que de los datos almacenados en el chip, usaremos el atributo: Número de bits
de datos (en nuestro ejemplo, el chip es de 64K x 8, luego el número de bits de
datos será 8).
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.
-¿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.
.
Suscribirse a:
Entradas (Atom)