MIPS R2000 Monociclo
Introducción
Instrucciones
Lógica de la UC
Lógica de ALU control
Unidad de extensión de signo
PC
Incrementador del PC
Bus de multiplexores
Diseño de la memoria SRAM
Cargador de datos e instrucciones
Orden de parada del procesador (halt)
Hacerlo funcionar todo


	INTRODUCCIÓN:

 El simulador construido corresponde al procesador monociclo MIPS R2000, dicho procesador 
opera con formatos de instrucción de 32 bits y dispone de una memoria SRAM
de 64 instrucciones por 32 bits (longitud del procesador), además implementa un fichero de 
registros de 32 bits. A continuación se listan los componentes del procesador:


	+ Un PC (Contador de programa)
	+ Un incrementador para el PC
	+ Una ALU que opera con longitudes de palabra de 32 bits
	+ Una memoria de instrucciones de 64 posiciones por 32
	+ Una memoria de datos
	+ Una unidad de extensión de signo
	+ 32 registros de 32 bits
	+ Unidad de control
	+ Control de la ALU 
	+ Multiplexores
	

INSTRUCCIONES Las instrucciones que es capaz de reconocer el procesador, junto con sus códigos de operación, son las siguientes: Formato R: add (0), sub (0) Lógicas: or(0), and(0) Transferencia de datos: lw (35), sw (43) Salto condicional: slt (0), beq (4) Bifurcación incondicional: j (2) Burbuja: nop (1) Parada del procesador: halt (63) LÓGICA DE LA UNIDAD DE CONTROL Se puede ver el diseño a nivel de puertas lógicas en la página 271 del libro Organización y diseño de computadores. La unidad que se presenta en el libro sólo reconoce las instrucciones de tipo R, lw, sw, beq; en el simulador además se ha añadido la parada del procesador (halt), bifurcación a una dirección (j), para ello ha sido necesario la adicción de dos puertas AND además de las 4 existentes de que disponía la UC.
LÓGICA DE ALU CONTROL Su diseño a nivel de puertas se puede ver en la página 256 del libro Organización y diseño de computadores. A ésta le llegan dos entradas y su lógica genera una salida que va directa a la ALU, esta salida son 3 bits que le dicen a la ALU si tiene que efectuar una operación aritmética, lógica, de transferencia de datos, o de salto ya se condicional o incondicional. Una de las entradas proviene de decodificar la instrucción y corresponden a los 6 LSB de dicha instrucción, es el campo función, y los otros bits de entrada corresponden a los que genera la UC.
UNIDAD DE EXTENSIÓN DE SIGNO Se encarga de convertir un bus de 16 líneas en otro de 32. Al método run de la clase SignoExtendido le llega un array de entrada de tipo WIRE que es de 16 posiciones, entonces en un array de salida de 32 posiciones, se copia en las primeras 16 el array de entrada y el MSB es copiado 16 veces a la izquierda hasta completar el array de salida, ya se ha convertido el bus de entrada de 16 bits a uno de 32. PC Para su implementación se ha utilizado un registro de tipo D, pero que se le ha añadido dos señales que corresponden al preset y clear. INCREMENTADOR DEL PC Está construido a partir de una ALU normal de 32 bits, pero el código de operación que se le pasa es el de la suma, éste es generado en la unidad ALU control y consta de 3 bits: op[0]=op[2]=GND op[1]=VCC BUS DE MULTIPLEXORES En realidad no se tiene un multiplexor, sino 32 multiplexores, esto es debido a que cada línea que es representada en los gráficos que aparecen en los libros (véase tema 5 del libro 'organización y diseño de computadores') y que le llega al multiplexor es realmente un bus de 32 líneas, ya que ésta es la longitud de palabra del procesador. Entonces a cada uno de los multiplexores le va a llegar una línea de cada bus, que al final las salidas estarán cortocircuitadas formando otro bus de 32 bits. Construcción de un multiplexor Estos se diseñan a partir de bufferes triestado y un decodificador. Un buffer triestado va a dejar pasar corriente o no en función de si está a alta impedancia o no. Explicado de mejor forma un buffer triestado, es un inversor de dos estado lógicos, con una línea de control que permite desconectar la salida de la entrada. Los tres eestados de salida son: nivel bajo (cuando la entrada está a nivel alto), nivel alto (cuando la entrada está a nivel bajo) y alta impedancia (cuando la salida está desconectada de la entrada). Cuando la línea de control está a nivel alto, el buffer está activo; y cuando la línea de control está a nivel bajo, el buffer está en estado de alta impedancia. Ahora que se conoce el funcionamiento de un buffer triestado se explicará el funcionamiento del multiplexor con estos componentes. Cada una de las líneas de cada bus tiene asociado un buffer triestado, entonces cada una de las líneas de control de cada buffer se encuentra enganchado a la salida de un decodificador, éste seleccionará que conjunto de bufferes son los que se tienen que activar, entonces se permitirá el paso de corriente correspondiente a un bus en concreto. En el simulador del programa se han utilizado la construcción de arrays dinámicos que contienen las señales de cada bus, es decir, si a un multiplexor le llegan dos buses, se construirá un array de tamaño 64 ( 2 * 32 bits ), de 0 a 31 se encontrará el primer bus y de 32 a 63 se encontrarán las señales correspondientes al segundo bus. IMPORTANTE: Si el multiplexor tiene dos líneas de control (se puede direccionar 4 buses de datos) y, sólo le llegan tres buses entonces la última entrada del multiplexor hay que ponerla a tierra. DISEÑO DE LA MEMORIA SRAM Es una memoria de 64 posiciones por 32bits, se compone de 4 bloques de 16 por 32, es decir, hacen falta 4 líneas para direccionar cada bloque (2^4=16) y cada bloque puede ser seleccionado de forma independiente. Aparte se encuentra la línea write, que permitirá la lectura o escritura de la memoria y el bus de entrada de datos y el de salida, ambos claramente de una anchura de 32 líneas. CARGADOR DE DATOS E INSTRUCCIONES El primer paso es leer el archivo de datos o instrucciones mediante el método leebus que se encuentra en bus.cpp. Segundo se direcciona la memoria, son necesarias 6 iteraciones debido al tamaño de la memoria ( 2^6 = 64 ). En el caso de leer el contenido de la memoria la señal write debe estar a GND, si lo que se va a hacer es escribir en ella entonces write tiene que estar a VCC. Cuando se realiza el volcado de la memoria a un archivo, lo que se está haciendo es copiar las 64 posiciones de ésta en un archivo final en formato binario, tal y como está almacenado en la propia memoria SRAM, durante este proceso por InputBus lógicamente no va a entrar nada. ORDEN DE PARADA DEL PROCESADOR (INSTRUCCIÓN HALT) La instrucción halt se reconoce por el código de operación 63, es decir, todas las líneas de entrada de la puerta AND que se encuentra en el PLA de la unidad de control tienen que estar activas (a 1), no se utiliza a la entrada de esta puerta ningún inversor, ya que la salida debe ser igual a un nivel bajo o alto, en función de si las 6 entradas a la puerta tienen todas uno de estos dos niveles. Ha sido necesario añadir una puerta AND en la unidad de control para esta instrucción. HACERLO FUNCIONAR TODO Compilación: En archivos separados en formato txt, se deben escribir en uno las instrucciones en ensamblador y en el otro los datos. La sintaxis para las instrucciones es la siguiente, es la misma que se utiliza en el libro, salvo que para las de transferencia de datos es lw registro destino, registro del dato de memoria, desplazamiento sw dato de registro, registro destino, desplazamiento Con los ejecutables Convdat y Convinst se compilan los archivo de datos e instrucciones y se pasan a un formato binario, estos después son leídos una vez se ha ejecutado el simulador MIPSm. Simulación: Mientras la línea de ControlLines[8] no contenga '1' se estará realizando la simulación, ya que si contiene un nivel alto significa que se ha leído la instrucción halt y por tanto hay que parar la simulación del procesador. En cuanto al reseteo del procesador que se realiza siempre antes de comenzar a utilizar el micro, consiste en poner la señal clear a GND, el valor de iteraciones del reloj a '0', inicializar el PC para que apunte a la primera posición de memoria y ControlLines[8], que como se ha dicho antes era la señal de halt, ponerla a GND para poder proceder a la simulación.

Inicio página