Você está na página 1de 13

UNIVERSIDAD DE SONSONATE

Temática: Simulación de un MIPS en Logisim

Cátedra: Arquitectura de Computadoras

Integrantes: Karla Geraldine Padilla López


Brayan Alexander Guillen Argueta
Bairon Jonathan Santos Córdova
Fabiola Astrid Sánchez Palencia
Alex Edgardo Hernández Vásquez
Organización MIPS

Memoria

CPU FPU
Registros
Registros

Alu Mul Div

Unidad
Hi Aritmética

Procesador
Traps y Manejo de Memoria
Coprocesador 0 BadVAddr Cause Coprocesador 1

Status EPC

Se ilustra el hecho que la unidad aritmética y lógica (ALU) no está conectada a la memoria.
Sólo existe conexión entre los registros y la memoria. Dicha ALU está programada para
Memoria
Se denomina palabra (word) al contenido de una celda de la memoria. La cual puede leerse y
escribirse en una sola operación.

MIPS posee palabras de 32 bits. Las direcciones de memoria corresponden a datos de 8 bits (o
sea un byte).

Entonces hay 4 bytes en una palabra. Cuando se da acceso a una palabra se leen 4 bytes
simultáneamente.

Existen dos formas de numerar los bytes contenidos, en una palabra.

Big endian: (IBM, Motorola, MIPS)

Byte 0 Byte 1 Byte 2 Byte 3

. Numeración big-endian.

La dirección del byte más significativo termina en 00(en binario), sólo si la palabra está
alineada
Ciclo de Ejecución
El ciclo de ejecución de un procesador puede describirse como una secuencia repetitiva de los
siguientes pasos (después de una etapa de inicio que consiste en determinar la primera
instrucción):

Búsqueda de instrucción:
Obtiene desde la memoria la instrucción que será ejecutada. Debe especificarse cómo obtiene
la primera instrucción.

Decodificación de Instrucción:
Determina el tipo de instrucción y su largo en caso de que la instrucción esté compuesta de
varias palabras. Debe especificarse cómo estarán codificados los operandos, la operación y la
dirección de la próxima instrucción.

Búsqueda de Operandos:
Localiza y obtiene los datos que son los operandos de la instrucción. Esto puede consistir en
accesar registros o la memoria, o decodificar valores que vienen contenidos en la misma
instrucción (operandos inmediatos), lo cual debe especificarse en la instrucción.

Ejecución:
Computa los valores del resultado y determina el estado de éste. Es decir, realiza la operación
con los operandos de entrada para generar un resultado. Y a la vez genera información sobre el
resultado, por ejemplo si es positivo, o cero. Debe especificarse las operaciones que pueden
realizarse y los tipos de datos sobre los que se efectuaran acciones.

Almacenamiento de resultados:
Deposita los resultados en la memoria de datos o en registros. Lo cual debe estar especificado
en el código de la instrucción.

Determinación de próxima instrucción:


Determina cuál será la próxima instrucción que será ejecutada a continuación, ya sea por el
cálculo efectuado durante la etapa de ejecución; o escoger por defecto, la siguiente instrucción.
Debe especificarse los mecanismos que se emplearán para la determinación de la próxima
instrucción, ya sea en saltos incondicionales, bifurcaciones o invocaciones a subrutinas.

Formato R. Para Operaciones.


Op 6 Rs 5 Rt 5 Rd 5 Shamnt 5 Funct 6

Formato R.

Se ilustra el tamaño y los nombres de los campos. Se disponen tres registros para especificar las
dos fuentes de datos (rs y rt) y el lugar para almacenar el resultado (rd).
Un grupo de estas instrucciones (las de corrimiento) ocupan el campo Shift Amount, que
permite especificar el número de posiciones de bits, en que se desplazará uno de los operandos;
su tamaño de cinco bits, permite desplazamientos de 0 a 31. Aquellas instrucciones que no
ocupen este campo lo rellenan con ceros.

Para simplificar la unidad combinacional que decodifica la operación a realizar, se fija en las 6
posiciones más significativas, en todos los formatos, el código de operación. Esto limitaría a 64
el número total de operaciones; pero veremos que el número total de operaciones es mayor de
64 y menor de 128. Para resolver esto, y mantener pequeño el código de operación, se emplea la
técnica de expandir el código de operación. Esto se logra empleando, para todas las operaciones,
lógicas y de corrimiento, el código de operación 000000, y diferenciándolas mediante el campo
funct de 6 bits (que también debe considerarse parte del código de operación).

Las instrucciones que operan la administración de memoria y excepciones, también emplean el


formato R, y ocupan el código de operación 010000; y también el campo funct, lo cual posibilita
64 operaciones de este tipo.
De esta forma quedan disponibles 62 códigos para el resto de las instrucciones.

Operaciones Aritmeticas y Logicas


Sobre números con signo
Algunas de las instrucciones son para números sin signo (llevan una u al final, por unsigned).

Los enteros se representan en una palabra de la memoria, y sus valores dependen del ancho de
palabra que tenga la memoria (en MIPS son de 32 bits).

El procesador emplea representación complemento a dos para representar números con signo.

Suponiendo un largo de palabra de la memoria de 3 bits (en lugar de 32), para simplificar la
explicación, se tienen las siguientes representaciones:

Representación Representación Externa. Equivalente Decimal.


interna
Enteros Fracciones
Secuencia Sin Comp. Comp. Signo- Sin Con signo.
Binaria signo a dos a uno Magnitud signo Comp. dos
000 0 +0 +0 +0 0 +0
001 1 +1 +1 +1 1/8 +1/4
010 2 +2 +2 +2 2/8 +2/4
011 3 +3 +3 +3 3/8 +3/4
100 4 -4 -3 -0 4/8 -4/4
101 5 -3 -2 -1 5/8 -3/4
110 6 -2 -1 -2 6/8 -2/4
111 7 -1 -0 -3 7/8 -1/4

El complemento a dos es el complemento a uno más uno (sumarle uno en binario). Esto se
insinúa con pequeñas flechas en las columnas de las representaciones externas, en decimal.
Las columnas de interpretación, de las secuencias binarias, están desplazadas en la unidad.

Si tenemos: 010, su complemento 1 es 101 y al sumarle uno queda: 101 + 1 = 110


Si tenemos: 101, su complemento 1 es 010 y al sumarle uno queda: 010 + 1 = 011

El negativo de un número se obtiene complementándolo, excepto para el mayor negativo que


no tiene complemento en tres cifras. De esta manera para restar, basta sumar el complemento.

Nótese que en complemento a uno existen dos ceros; pero el rango de representación es
simétrico. Electrónicamente es sencillo generar el complemento a uno de una palabra:

A2 A1 A0
Comp

B2 B1 B0
Si Comp ==1 se tiene que B es complemento uno de A; en caso contrario: B =

A. En complemento a dos, existe un cero, pero con rango de representación

asimétrico.
Para 16 bits, en C-2(complemento dos), el rango de representación es desde -(2^15) hasta
+(2^15 )-1; lo cual equivale al intervalo desde -32768 hasta +32767.

Electrónicamente es sencillo realizar sumas o restas en complemento dos. Mediante un


sumador binario, basta incorporar un uno a la reserva de entrada y pasar el sustraendo en
complemento a uno, para realizar restas. El esquema siguiente ilustra lo anterior:

Conexión de los elementos


Partes del Mips:
 CPU
 ALU
 MEMORIA
 ARCHIVO DE REGISTRO
 RUN

El RUN
Contiene al CPU, este a su vez contiene las conexiones de la ALU, MEMORIA y los ARCHIVO
DE REGISTRO, es decir el EJECUTABLE.
Este, es el ejecutable donde se agregan las instrucciones en la memoria, y al accionar el reloj inicia
la simulación.

Paso 1: Posee el CPU, al cual se conecta en la parte superior 5 pins donde se almacenan las
variables.

Paso 2: En la parte inferior se conecta un pin, par ala función de un tiempo de camino, al cual se le
conecta un “counter” y a este se le conecta un reloj, y se une a la parte inferior del CPU.

Paso 3: También una “memoria Rom”, donde se almacenan las instrucciones necesarias, a este se
conectan 2 pin, uno donde está la instrucción requerida y uno donde va la dirección requerida.
ALU
La ALU es la encargada de realizer, los procedimientos matemáticos algebraicos dentro del MIPS.

Paso 4: Posee 2 pin, los cuales representas las entradas de datos a la “ALU”, y un pin para
representar la salida.

Paso 5: Tiene un Multiplexor, al cual se conectan las puertas lógicas necesarias(and y or), también
se le conectan: sumadores , restadores y shifter.

Paso 6: Al restador se le conecta el túnel con el sub_result y al sumador el túnel de add_result.

Paso 7: Al comparador se le conecta el tunel de equal y luego un Bit Extender.

Paso 8: A la salida del multiplexor se conecta al túnel de result.

Paso 9: Un multiplexor al cual se le conectan constantes y el túnel add y sub y a la salida de este se
conecta un túnel llamado overflow.

Paso 10: El túnel “add” compuesto por dos compuertas AND, a las cuales se le conecta 3
comparadores a cada una, y a esto se le conectan 3 Bit Extender respectivamente, y también se le
conectan los túnel que representan la entrada de datos.

Paso 11: Para el túnel “sub”, seguir el paso anterior.


CPU
Este componente contiene la unión de la ALU, MEMORIA y ARCHIVO DE REGISTRO.

Paso 12: Pin que son las entrada y salida del run, un reloj.
Paso 13: Pins donde se guardan los datos.
Paso 14: Un contador, se le conectan 3 túnel.
Paso 15: Un multiplexor, al cual se le conecta una constante, un túnel que representa la instrucción
a la salida de este se le conecta un registro.
Paso 16: En la salida del registro se conectan 8 túneles.
Paso 17: Tenemos un Bit Extender, al cual se conecta un túnel a la entrada y a la salida un Shifter al
cual a su vez se le conecta una constante.
Paso 18: Tenemos 2 sumador, uno de ellos está conectado a la salida del Shifter, y un túnel con la
dirección, al otro sumador se le conectan una constante en un extremo y también un túnel.
Paso 19: A la salida de ambos sumadores se conectan a un Multiplexor.
Paso 20: La salida de este se conecta a otro multiplexor, al cual se conectan por medio de cables 2
sumadores y un convertidor.
Paso 21: Agregamos la RAM a la se conectan en las entradas los tuneles, que contienen los datos a
procesar y la salida de este se conecta a un Mux, junto con el túnel del Outputs_ALU.
Paso 22: El túnel Kill, se conforma por:3 compuertas OR , en una de ellas se conectan túnel, con
datos de 1 bits, a la salida de esta se conecta a otra compuerta or y en la otra entrada del mismo , se
conecta la siguiente compuerta or a la cual, se encuentran conectadas, 3 compuertas and en un
extremo de ellas se coloca un túnel, y en el otro el túnel, en la primera compuerta and va el túnel
ALU_Equal, en la segunda ALU_Equal a una compuerta de negación ,
y en la tercera ALU_Overflow(desvordamiento).
Paso 23: El Archivo de registro, en las entradas superiores se le conectan los tuneles donde, están
ubicados los datos a trabajar, en el siguiente orden : $s0, $s1, $s2, $ra, $sp.

ARCHIVO DE REGISTRO
Es el encargado de mantener los registros, de las operaciones que se realizan.
Paso : Pin que representan la entrada de datos, con un túnel al final.
Paso : Pines de salida de datos.
Paso: Dos multiplexores y se le conectan 2 tunel a cada uno de ellos.
Paso : Compradores conectados a un puerta lógica AND y luego a un registro.
Paso : A este se le conectan los túnel write.
MEMORIA
Donde se guardan las instrucciones, para la realización de las operaciones.
Paso: Colocar una memoria RAM.
Paso : Colocamos 3 pin representan la Direccion(Addess), Lectura(Read) y Escritura(Write).
Paso: Se conecta un reloj en la parte central.
Paso: Y se conectan unas constantes y un Write.

Você também pode gostar