Reciente

6/recent/ticker-posts

MIPS R2000: Señales de Control



MIPS R2000 y R3000: Señales de Control

En artículos anteriores vimos los diferentes tipos de instrucciones que teníamos y los caminos de datos de estas, hoy veremos las señales de control que permiten que un procesador pueda realizar múltiples instrucciones diferentes sin tener que realizar las modificaciones que fuimos haciendo en el anterior artículo. De base tomaremos el siguiente diagrama:

Este diagrama, como podemos ver, es similar a los anteriores que hemos utilizado, pero teniendo todos los componentes interconectados entre sí. Para que el procesador pueda realizar operaciones con los 3 tipos de instrucción que conocemos, cada Multiplexor y ALU recibirán diferentes señales para decidir cual será su salida, estas son las señales de control. Para ver como funciona esto más a fondo, observaremos que hace cada señal de control por orden y explicando el por que del valor que recibe esta en cada caso.

Señal RegDst

La señal RegDst es la que entra en el primer multiplexor que podemos ver a la izquierda, justo antes del Banco de Registros:
Este Multiplexor recibe por la primera entrada los bits del 20 al 16 y por la segunda, los bits del 15 al 11. La salida del multiplexor entraría directamente en la entrada Escribir Registro del Banco de Registros, esto significa que, en función de la salida del multiplexor, guardaremos el valor que entre por Escribir Dato en en una dirección u otra. La principal utilidad que tiene esto es que en función de si utilizamos una instrucción de tipo R o I, el resultado se almacenará en rd o en rt, por lo que la señal RegDst tendrá un valor de 0 o 1 en función del tipo de instrucción que estemos utilizado. 

Teniendo todo esto en cuenta, sabemos entonces que el valor de RegDst será 1 cuando nuestra instrucción sea de tipo R ya que el registro de destino será rd, que se encuentra entre los bits del 15 al 11 y será 0 cuando estemos con instrucciones de tipo I ya que el registro de destino será rt, que se encuentra entre los bits del 20 al 16. Como ya os habréis imaginado, el nombre de esta señal viene de Registro de Destino ya que selecciona cual será el registro en el que se almacenaran los resultados de la operación que realicemos.

Señal ALUSrc

Para esta señal le echaremos un vistazo al siguiente Multiplexor, que se encuentra justo a la salida del Banco de Registros:

Como podemos observar, este Multiplexor recibe por un lado la salida Lectura de Dato 2 del Banco de Registros y por otro lado los Bits de 15 al 0 pasados por el extensor de signo para ser una señal de 32 Bits. La salida de este multiplexor entra en la ALU por la segunda entrada. Este multiplexor recibe la señal ALUSrc, cuyo nombre viene de ALU Source en ingles. Esta señal seleccionará si la ALU recibirá el valor almacenado en el registro que se encuentra entre los Bits del 20 al 16 que entra en el Banco de Registros o el valor inmediato, esto significa que el valor de esta señal de control debe ser 0 o 1 en función del tipo de instrucción que estemos utilizando. Por lo tanto, sabemos que siempre que utilicemos una Instrucción de tipo R, su valor será 0 ya que no se utiliza el valor inmediato para nada y generalmente, en el resto de casos el valor de ALUSrc será 1 ya que probablemente realizaremos una operación con el Inmediato.
 

ALUOp


Esta señal entra en ALUControl y se encarga de indicar que clase de operación queremos realizar con la ALU. Esta señal es de 2 bits y en función de lo que queramos hacer puede tener los siguientes valores:

 Esta señal nunca toma el valor 11, si nos fijamos en esta tabla, el primer bit solo vale 1 con operaciones Tipo R, si tuviéramos que descomponer esta señal en 2, por un lado tendríamos ALUOp1, que nos indica si la operación es de Tipo R o Tipo I y ALUOp2, que nos indicaría, en caso de no ser la operación Tipo R, que operación deberá realizar la ALU.
De AluControl saldrá una señal de 3 Bits que variará en función de ALUOp que entrará en la ALU para indicar la operación a realizar.


MemRead y MemWrite

Estas 2 señales de control entran en Memoria de Datos y en encargan de indicarle a este componente si vamos a realizar una lectura y/o escritura de la Memoria de Datos. En el diagrama podemos Ubicar MemWrite arriba y MemRead abajo. Si el valor de MemWrite es 1, entonces indicamos que queremos guardar el valor que entra por la entrada Escribir Dato en la dirección indicada en Escribir Dirección.

En caso de querer Leer un dato, MemRead tendrá un valor de 1 y por la salida Lectura Dato saldrá el dato almacenado en la dirección de la entrada Leer Dirección.


MemtoReg

Esta señal de control indica que dato se enviará a la entrada Escribir Dato de los Registros, si su valor es 1, se tomara el dato saliente de memoria, en caso de que su valor sea 0, se tomará el dato que venga de la salida ALUresult de la ALU.


RegWrite

Le indica a los Registros que queremos escribir el dato que entra por Escribir Dato en la dirección Escribir Registro. Si su valor es 1 se escribe en el registro, si su valor es 0 no se realiza la escritura.


PCSrc

Indica que se va a enviar al PC al finalizar la operación, si el valor es 0 se manda PC+4, en caso de que valga 1 se envía la salida de la ALU sumadora.



Si quieres enterarte de nuevos artículos antes que nadie puedes unirte al Canal de Telegram de RetroGamesHistory

Publicar un comentario

0 Comentarios