Datapath
Transcripción
Datapath
Unidades principales en la implementación Data Register # PC Address Instruction Instruction memory Registers Register # ALU Address Data memory Register # El procesador: camino de datos y control Data IEC – UTM Moisés E. Ramírez G. 1 Introducción Instrucciones de acceso a memoria: lw, sw Instrucciones aritmético-lógicas: add, sub, slt, and, or Brincos: BEQ, J Para mantener consistencia, y no entrar en detalles de los valores de voltaje, una señal acertada indicará un 1 lógico. Cualquier valor que se almacene, será guardado durante el flanco de reloj. En la implementación, cada instrucción inicia su ejecución sobre el flanco de reloj y la completa al siguiente flanco de reloj. El inconveniente es que todas las instrucciones están limitadas a la instrucción que ocupa más tiempo. Pasos generales Elementos que operan sobre datos (combinacionales) Elementos que contienen estados (secuenciales)3 Convenciones Se diseñará una implementación que incluya las instrucciones más importantes. Tipos de elementos: Enviar el contador del programa (PC) a la memoria que contiene el código y atrapar la instrucción. Leer uno o dos registros usando los campos de la instrucción para seleccionar los registros a leer. Uso de la ALU para el cálculo de una dirección, ejecución de una operación aritmética o lógica o comparaciones. Acceso a la memoria de datos para lectura o escritura. 2 4 1 Elementos a usar para la búsqueda y captura de la instrucción a ejecutar (fetch) La memoria de instrucciones almacenará las instrucciones a ejecutar. El program counter, indica la instrucción que se está ejecutando Un sumador es necesario para calcular la siguiente instrucción que se ejecutará (sumar 4 al PC). Las entradas al archivo de registros deben incluir los números de los registros a leer y el número de registro a escribir, al igual que el dato que se escribirá en el registro especificado. Para calcular la dirección en memoria a accesar, se suma el contenido del registro base con el desplazamiento de 16 bits. La memoria de datos permitirá lecturas (cargas) y escrituras (almacenamientos). El módulo de extensión de signo permitirá convertir una palabra de 16 a 32 bits. La constante es un valor expresado en complemento a 2 de esta manera permite acceder a direcciones anteriores o posteriores al registro base. 5 Archivo de registros (register file) Cargas y almacenamientos 5 Register numbers 5 5 Data 3 Read register 1 Read register 2 Registers Write register Write data ALUcontrol Read data 1 Data Zero ALU ALU result Read data 2 7 Camino de datos para cargas y almacenamientos Se accesa a los registros, posteriormente se calcula la dirección de memoria ya sea para leer o escribir y posteriormente, en el caso de una carga, se concluye con la escritura del registro. RegWrite a. Registers b. ALU 6 8 2 Saltos incodicionales J Instrucción BEQ El repertorio de instrucciones especifica que la base para el cálculo de la dirección destino es la dirección siguiente a la instrucción del brinco. Dado que en el camino de los datos dedicado a buscar y capturar la instrucción, calculamos PC + 4, este valor se usará como base para obtener el destino del salto. Debido a que las instrucciones utilizan palabras de 32 bits, el desplazamiento debe corresponder a un desplazamiento de palabras y no de bytes. Para ello, una vez que se haya extendido en signo al campo del desplazamiento, será necesario multiplicarlo por 4, esto se consigue si se desplaza 2 lugares a la izquierda. 9 Camino de datos para BEQ La instrucción j tiene dos campos, un campo de 6 bits que corresponde al opcode y otro de 26 bits que indica la dirección destino del salto. Para esta instrucción también deberá considerarse que las instrucciones ocupan 4 bytes, de manera que también será necesario desplazar este campo 2 bits a la izquierda. Después del desplazamiento se tendrán 28 bits, de manera que el nuevo valor del contador del programa se obtendrá concatenando los 4 bits más significativos del PC 11 Implementación 10 Debe tomarse en cuenta que se trata de una implementación que ejecutará todas las instrucciones en 1 ciclo de reloj. Esto significa que los recursos en el camino de los datos no pueden ser usados mas de una vez por instrucción, de manera que cualquier elemento que se requiera mas de una vez, deberá ser duplicado. Al compartir elementos, pueden requerirse múltiples conexiones a una entrada. Para ello se utilizarán multiplexores, y será el control el que determine cual de los datos fluirá a cada entrada. 12 3 Implementación de un ciclo Tipo R + acceso a memoria El primer operando en ambos casos es el dato escrito en el registro 1, obtenido del archivo de registros, sin embargo el segundo operando difiere para las dos instrucciones: En el caso de las instrucciones tipo-R el segundo operando es el dato escrito en el registro 2, obtenido del archivo de registros. Mientras que para los accesos a memoria, el segundo operando es una constante extendida en signo. Por lo que es necesario un multiplexor en la entrada del segundo operando de la ALU. En la entrada de datos del archivo de registros también deberá colocarse un multiplexor por medio del cual se seleccione entre el dato que viene de memoria (lw) o el resultado de la operación de la ALU BEQ: Un multiplexor a la entrada del PC, para permitirá seleccionar entre PC + 4 y el resultado de haber sumado a PC + 4 una constante. PCSrc Add ALU Add result 4 RegWrite Instruction [25–21] PC Read address Instruction [31– 0] Instruction memory Instruction [20–16] Read register 1 Read register 2 Read data 1 Read data 2 1 M u Instruction [15–11] x 0 Write register Write data Registers RegDst Instruction [15–0] 16 Sign 32 extend 1 M u x 0 Shift left 2 MemWrite ALUSrc 1 M u x 0 ALU control Zero ALU ALU result MemtoReg Address Read data 1 M u x 0 Write Data data memory MemRead Instruction [5– 0] 13 15 ALUOp Camino de datos para instrucciones tipo R y de acceso a memoria Control de la ALU 14 Para cargas y almacenamientos se requiere que la ALU realice una suma para calcular la dirección de la localidad de memoria a la que se realizará el acceso. Para instrucciones aritmético lógicas la ALU realizará una suma, resta, AND, OR o ajuste sobre menor que, dependiendo del campo de función. Para el salto sobre igual la ALU necesita realizar una resta. 16 4 Diseño del control de la ALU Campos en los tipos de instrucciones Se usan dos formatos de instrucciones distintos Las instrucciones tipo R usan 3 registros como parámetros (fuentes: rs, rt; destino: rd) Las instrucciones de salto sobre igual y cargas y almacenamientos usan 2 registros rs y rt que serán evaluados para conocer si son iguales. En las cargas (35) y almacenamientos (43), el registro base rs, es el registro que se sumará a la dirección de 16 bits. 17 Tabla de verdad para controlar las operaciones de la ALU 19 Diseño del control principal Opcode bits 31-26 -> op[5-0] En instrucciones tipo R, saltos sobre igual y almacenamientos, los registros a ser leídos: rs (25-21) y rt (20-16) El registro base para cargas y almacenamientos es rs (25-21) Los 16 bits de desplazamiento para brincos sobre igual, cargas y almacenamientos siempre están en los bits 15-0 El registro destino está en uno de dos lugares: En caso de requerir más funciones, serán necesarias nuevas ecuaciones. Ya que habrá nuevas combinaciones. 18 instrucciones tipo R en rd (15-11) Cargas en rt (20-16) Por lo tanto es necesario un multiplexor para seleccionar el campo que corresponda al registro que se escribirá de acuerdo a la operación. 20 5 Cada una de las señales de control Camino de datos con las señales de control identificadas 21 23 El control principal Señales del control principal 22 24 6 Control para la implementación de un solo ciclo La unidad de control ajustará el valor de todas las señales dependiendo del código de operación, con excepción de PCSrc, ya que depende del resultado de la comparación en BEQ. Una de las entradas de la AND en PCSrc indica que se está realizando la operación de BEQ y la otra provendrá de la bandera de cero proveniente de la comparación dentro de la ALU| En la siguiente tabla se muestra las señales de control que deberán colocarse en función del Opcode 25 27 Implementación del control 26 28 7 Implementación de saltos incondicionales Problemas en la implementación de un solo ciclo J es un tipo de salto incondicional, ello implica que el salto siempre se realizará. La instrucción contiene una dirección de 26 bits que se extenderá a 28 bits (palabras en vez de bytes). Al realizarse un salto, la nueva dirección estará formada de: No se usa una implementación de un solo ciclo porque no es eficiente. Una implementación de un solo ciclo tiene CPI de 1 (ciclos por instrucción). Todos los ciclos deberán ser del mismo tamaño, están determinados por la ruta o la instrucción que ocupa mayor cantidad de elementos en la máquina, la carga: Los 4 bits más significativos de PC+4, 28 bits (26 + 2 bits) del campo inmediato de la instrucción de salto. Memoria de instrucciones Archivo de registros ALU Memoria de datos Archivo de registros Diferentes tipos de instrucciones se podrían ejecutar en menos tiempo. 29 31 Implementación multiciclos Cada instrucción se dividirá en pasos: 30 lectura de la instrucción, decodificación, lectura de registros, etc. Cada paso se realizará en un ciclo de reloj, todos los ciclos de la misma longitud. Se requerirán multiples ciclos para cada instrucción. El número de ciclos dependerá del tipo de instrucción. Una unidad funcional puede ser usada más de una vez por instrucción, en diferentes ciclos. 32 8 Ventajas de una implementación multiciclos Consideraciones: Cada instrucción puede tomar diferente número de ciclos de reloj. Se pueden compartir unidades funcionales dentro de la ejecución de una instrucción. Se puede usar una sola memoria para datos e instrucciones. Se puede usar una sola ALU Se agregan registros después de cada unidad funcional, para que éstos mantengan la salida hasta que su valor sea usado en un ciclo de reloj sucesivo. Estos registros no son visibles al programador. La colocación de los registros temporales depende de dos factores: Se puede notar que existen: 34 El archivo de registros puede realizar a la vez dos lecturas o una escritura. La memoria puede realizar una lectura o una escritura. La ALU puede realizar una operación Cada uno de estos tres elementos genera un resultado que debe salvarse para las próximas etapas. Se agregan a la implementación: Registros temporales para respaldar la salida de la memoria: IR Instruction Register (instrucción). Este es el único registro que se mantiene durante toda la ejecución de la instrucción. MDR memory data register (dato) Ambos registros se almacenan por separado ya que ambos pueden ser necesarios en un mismo ciclo. La salida del archivo de registros se almacenan en A y B. La salida de la ALU se almacena en ALUOut. 35 Implementación de múltiples ciclos. Una sola memoria (instrucciones y datos) Una sola ALU, en vez de una ALU y dos sumadores. En cada ciclo de reloj: Las unidades funcionales que se requieren en cada ciclo Los datos que se requerirán en etapas posteriores. 33 Aproximación a un camino de datos de una implementación multiciclos En los recuadros se marcan los registros necesarios para la implementación de múltiples ciclos. 36 9 Camino de datos y control para la implementación de múltiples ciclos. Multiplexor para Instrucciones o Datos Un multiplexor para seleccionar entre dos posibles direcciones: Dirección de una instrucciones (que proviene del PC) Dirección de un dato (que se generó como el resultado de una operación de la ALU). 37 Multiplexores que controlan las entradas de la ALU PC A (registro) El segundo multiplexor Posibles valores que escribirán en el PC El primer multiplexor permite seleccionar entre 39 B 4 Salida de ext de signo 16->32 Dirección desplazada <<2 PC + 4 ALUOut que mantiene la dirección destino del salto sobre igual después de ser calculada Los 26 bits que provienen del IR que son desplazados a la izquierda por 2 y que posteriormente se concatenan con los 4 bits más significativos del PC+4. Haber cambiado a una memoria y una ALU, reduce los costos. 38 40 10 Señales de control de 2 bits 41 43 Distribución de la ejecución de las señales de control Señales de control de 1 bit Es necesario evaluar lo que deberá ocurrir en cada ciclo de reloj de la implementación multiciclo, con esto determinará que señales de control adicionales pueden ser necesarias, así como las activaciones de las diferentes señales de control. Cada paso está limitado a 42 Una operación de la ALU Un acceso a memoria (R o W) Un acceso al Archivo de registros El tiempo de ciclo será tan corto como la operación que tome el tiempo más largo. Después de cada operación los datos generados deberán ser almacenados en elementos de estados principales (RF, PC, Memoria) o temporales (IR, MDR, A, B ALUOp) 44 11 Pasos para la ejecución de una instrucción 2) Decodificación de la instrucción y lectura de registros 1.- Búsqueda de la instrucción 2.- Decodificación de la instrucción y lectura de registros Hasta este momento se desconoce la instrucción que se está ejecutando. Se realizará la lectura del archivo de registros, dejando los valores leídos en los registros A y B. En caso de que alguna instrucción no requiera de ellos no perjudicará. Suponiendo que se trata de un Salto condicional, se aprovecha para calcular la dirección destino del brinco, se suman los 16 bits más bajos del IR, extendidos en signo y desplazados a la izquierda en 2. 3.- Ejecución, cálculo de una dirección de memoria o culminación de un brinco/salto 4.- Acceso a memoria o culminación de una instrucción tipo-R 45 1) Búsqueda de la instrucción 5.- Culminación de una lectura de memoria Lo realizan todas las instrucciones Se lee la instrucción de la memoria y se almacena en IR. Al mismo tiempo se aprovecha la ALU para calcular la dirección de la siguiente instrucción. La memoria se habilita: MemRead IorD = 0 para que PC suministre la instrucción IR se habilita para escribir IRWrite, dicha escritura se realizará en el siguiente flanco de reloj. ALUSrcA = 0 <- PC ALUSrcB = 01 <- 4 ALUOp = 00 <- Suma PCWrite = se acerta para guardar el resultado de la suma que se realizará en el siguiente flanco de reloj. ALUOut Guarda el resultado de PC + 4 46 La lectura del archivo de registros es automática: no requiere habilitaciones La escritura en A y B, tampoco requiere habilitaciones pero se realizará en el siguiente flanco de reloj. ALUOp = 00 <- suma ALUSrcA = 0 <- PC ALUSrcB = 11 <- 16 bits más bajos de IR <<2 ALUOut guardará el resultado de la suma de forma automática OPCoder definirá lo que se realizará en los siguientes pasos 47 3) Ejecución, cálculo de una dirección de memoria, culminación de un brinco/salto A partir de esta etapa, la ejecución depende de la clase de instrucción. La ALU opera sobre los resultados obtenidos de la etapa anterior Acceso a memoria: ALUOut = A + ext-signo( IR[15-0] ) ALUSrcA = 1 ALUSrcB = 10 ALUOp = 00 La escritura en ALUOut no requiere habilitación 48 12 (3b) Instrucción aritmético-lógica (Tipo R): (3d) ALUOut = A op B La ALU realizará la operación especificada en el campo de función ( IR[5-0] ) ALUOp = 10 ALUSrcA =1 ALUSrcB = 00 La escritura en ALUOut no requiere habilitación Salto PC = PC [ 31-28 ] || ( IR[ 25-0] << 2 ) El PC es reemplazado por la dirección del salto PCSource = 10 PCWrite debe ser acertado. Aquí termina esta instrucción. 49 (3c) 4) Acceso a memoria o culminación de una instrucción tipo-R Brinco sobre igual Si ( A == B ) PC = ALUOut 51 Se aprovecha que en el paso anterior ya se calculó la dirección destino del brinco, la cual está en ALUOut. Se aprovechará la ALU para la comparación los dos registros para la posible generación de bandera zero. ALUSrcA = 1 ALUSrcB =0 00 ALUOp = 01 PCSource = 01 (PC tomará el valor de ALUOut) PCWriteCond =1. Si la escritura del PC se va a realizar, lo hará en el siguiente flanco de reloj, y tomará la dirección correcta puesto que no ha cambiado el valor de ALUOut. Con este paso culmina la ejecución de esta instrucción y se puede continuar con la siguiente. El PC se modifica dos veces, en el paso 1 se escribió en el PC el valor de PC + 4. En el paso 2 sobre este valor se calculó la dirección destino del brinco, la cual se escribió en el paso 3 en el PC. 50 Durante este paso, se accesará a la memoria para una carga o un almacenamiento y una instrucción tipo R almacenará su resultado. Acceso a Memoria: MDR = Memory[ ALUOut ] <Carga> o Memory[ ALUOut ] = B <Almacenamiento> La dirección calculada en el paso anterior está en ALUOut. IorD = 1 Si es una Carga, MemRead debe acertarse, el dato a cargar se almacenará en el registro MDR. Para almacenamientos, MemWrite debe acertarse, el dato que se escribirá está en el registro B, se obtuvo en el paso 2, pero su valor no cambio durante el paso 3. La escritura del registro MDR y de la memoria se hará en el siguiente flanco de reloj. Con este paso terminan los almacenamientos, pero no las cargas. 52 13 (4b) Instrucción aritmético-lógica Tipo R Reg[ IR [ 15-11 ] ] = ALUOut 5.- Culminación de una lectura de memoria En este paso se completa la carga Reg[ IR [ 20-16 ] ] = MDR El resultado de la operación de la ALU, que esta en ALUOut, debe escribirse en el registro especificado en el campo rd. RegDst =1. RegWrite debe acertarse MemtoReg = 0 Aquí terminan las instrucciones tipo R El dato que está en el registro MDR debe escribirse en el registro especificado en el campo rt. RRegDst =0 RegWrite debe acertarse MemtoReg = 1 53 55 Resumen 54 56 14 Instruction fetch and decode El control multiciclos En la implementación de un sólo ciclo, por medio de una tabla de verdad se determinó la habilitación de las señales para cada clase de instrucción. Para la implementación del control, usaremos una máquina de estados finitos. Una máquina de estados finitos consiste de un conjunto de estados y direcciones sobre cómo cambiar de estado. Las direcciones son definidas por la función del estado siguiente, la cual hace un mapeo entre el estado actual y sus entradas con el estado siguiente. Para la implementación de la máquina, las salidas de habilitación que no estén explícitamente acertadas estarán desacertadas, no se tendrá una 57 condición no importa. Para pasar de 0 a 1 no hay ninguna restricción 59 Aproximación al control multiciclos El paso 1 y 2 es el mismo para todos los tipos de instrucción. A partir de ese momento cada instrucción realiza cosas independientes. 58 Máquina finita para controlar referencias a memoria 60 15 Instrucciones tipo R 61 63 | Branch Implementación final de la máquina de estados Jump 62 64 16 65 67 66 17