19.01.2015 Views

Cap. 13 Diseño procesador multiciclo

Cap. 13 Diseño procesador multiciclo

Cap. 13 Diseño procesador multiciclo

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Cap</strong>ítulo <strong>13</strong>.<br />

1<br />

Diseño de un <strong>procesador</strong> <strong>multiciclo</strong>.<br />

<strong>13</strong>.1 Reutilización de los recursos y tiempos de ejecución de acuerdo a la<br />

instrucción.<br />

En el modelo del <strong>procesador</strong> monociclo el período del reloj se ajusta con la ruta crítica<br />

combinacional, que es la establecida por la instrucción más lenta en completar sus<br />

transferencias. En el ejemplo que se desarrolla, la instrucción load word fija el período del<br />

reloj.<br />

Sin embargo debe tenerse en cuenta que el funcionamiento de la memoria se ha simplificado, ya<br />

que es posible que ésta no pueda efectuar sus funciones en un ciclo tan corto, como se verá más<br />

adelante; si lo que se desea leer no está en la memoria caché, debe buscarse en la caché<br />

secundaria, lo cual puede tomar dos a tres veces el tiempo que se emplea al operar con la caché<br />

primaria. Y si se produce un fallo de la secundaria, debe accesarse a la memoria principal, lo<br />

que tiene un costo de 20 a 50 ciclos. También si existen instrucciones que demoren demasiado<br />

tiempo (las de punto flotante, por ejemplo), la frecuencia del reloj debe ajustarse al tiempo de<br />

ejecución de la que más tarda en realizarse.<br />

Por otra parte los recursos pueden emplearse sólo una vez por cada ciclo de reloj, lo que lleva a<br />

duplicar algunas unidades funcionales (por ejemplo: sumadores, memoria).<br />

Estas razones conducen a pensar en permitir que las instrucciones puedan ser realizadas con<br />

varios ciclos de reloj; dependiendo de la complejidad de éstas, algunas podrán ser realizadas en<br />

pocos ciclos, otras necesitarán más ciclos. Es decir, aquéllas que terminan sus transferencias en<br />

menos tiempo, ocuparán menos ciclos de reloj (y se realizan en menos tiempo).<br />

Lo anterior permite que las instrucciones tengan tiempos de ejecución diferentes, ya que<br />

emplean diferente número de ciclos de reloj; y también permite realizar diseños de menor costo,<br />

al posibilitar el compartir los recursos y reutilizarlos durante la ejecución de una instrucción.<br />

Un recurso puede ser empleado más de una vez en la realización de una instrucción, siempre<br />

que se use en diferentes ciclos del reloj.<br />

En el modelo <strong>multiciclo</strong> que se describe, cada paso o etapa de ejecución debe emplear un ciclo<br />

de reloj.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Reg<br />

A<br />

Reg AdicionalB<br />

Reg<br />

B<br />

Reg<br />

A<br />

Reg<br />

B<br />

2 Estructuras de Computadores Digitales<br />

<strong>13</strong>.2. Uso de registros para separar etapas.<br />

Los datos que serán empleados por las siguientes instrucciones deben ser almacenados en<br />

registros o en la memoria. Los datos que se emplearán en los siguientes ciclos del reloj, al<br />

ejecutar una determinada instrucción deben ser almacenados en registros adicionales.<br />

La ubicación de estos registros adicionales, dependerá de si el retardo de propagación de la<br />

unidad permite ajustarse al período del reloj, y por otra parte de que el dato sea ocupado en los<br />

próximos ciclos de ejecución de la misma instrucción.<br />

También la necesidad de registros adicionales dependerá de si se desea compartir el recurso. Por<br />

ejemplo si se desea tener sólo una memoria, tanto para datos como para instrucciones, se<br />

requieren dos registros adicionales que capturen los datos leídos desde la memoria; uno para<br />

guardar la instrucción, otro para registrar la lectura de la memoria en la instrucción load word.<br />

Un esquema conceptual de la máquina monociclo, muestra una unidad combinacional con gran<br />

retardo de propagación, ubicada entre dos unidades de almacenamiento (memoria o registros):<br />

T1 = tr + tp + ts + tskew > = Tclk1<br />

Tclk1<br />

Figura <strong>13</strong>.1. Esquema máquina monociclo.<br />

Si se pudiera dividir la unidad combinacional, en dos partes que supondremos con iguales<br />

tiempos de propagación, se tendrá el esquema siguiente:<br />

T2 = T1/2<br />

T2 = T1/2<br />

Etapa A<br />

Etapa B<br />

Tclk2=Tclk1/2<br />

Figura <strong>13</strong>.2. División unidad combinacional.<br />

Se realiza el mismo trabajo, que en el esquema anterior, pero en dos ciclos más rápidos en lugar<br />

de uno más lento.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 3<br />

Se agrega el tiempo de setup (ts) y de clock hasta la salida (tf), con respecto al caso anterior.<br />

Pero en un mismo ciclo de reloj, pueden ocuparse simultáneamente ambas etapas, esto es lo que<br />

permite compartir un recurso; ya que se lo puede usar en diferentes ciclos de ejecución de una<br />

misma instrucción.<br />

La ubicación de los registros que definen etapas o ciclos deben ser relativamente equilibrados,<br />

ya que esto tiende a minimizar la duración del ciclo del reloj.<br />

Ya vimos que en la especificación de las transferencias físicas del modelo monociclo, podían<br />

agruparse las transferencias según la unidad en que se realizaban. Si lo que se desea es que cada<br />

unidad opere en un ciclo de reloj, el análisis de las transferencias realizadas en cada unidad<br />

permite identificar los registros adicionales necesarios.<br />

Debe notarse que en el caso monociclo todas las transferencias, que están separadas en líneas, se<br />

están ejecutando con la información fluyendo a través de las etapas (y no hay registros<br />

intermedios) mediante la red de cables o buses(pero los cables no almacenan la información,<br />

salvo mientras dure la propagación a través de éstos).<br />

Se emplean los registros adicionales IR(registro de Instrucción), A y B (salidas de la Unidad de<br />

Registros), S (salida de Unidad de Operaciones) y M (Registro con el dato leído de la memoria.<br />

Memory Data Register). Estos registros se escriben en cada ciclo de reloj y no requieren control<br />

adicional, excepto IR que requiere mantener la información para la unidad de registros, la de<br />

ejecución y control. Sin embargo se han dibujado en el diagrama las señales de habilitación de<br />

escritura de registros adicionales, y también se incorporan las señales que los controlan en las<br />

secuencias correspondientes.<br />

<strong>13</strong>.3. Etapas en la ejecución de instrucciones.<br />

Entonces se tienen cinco etapas para la ejecución de instrucciones(no todas las intrucciones<br />

emplean todas las etapas):<br />

1. Búsqueda de la Instrucción. Lectura de Memoria de Instrucciones y cálculo de dirección de<br />

próxima instrucción.<br />

2. Decodificación de la Instrucción y lectura de registros.<br />

3. Ejecución de operaciones con formato R y cálculo de la dirección efectiva de Memoria.<br />

4. Lectura de Memoria de Datos o Escritura en Memoria de Datos.<br />

5. Escritura en Registros.<br />

Pueden rescribirse las transferencias empleadas en el diseño del <strong>procesador</strong> monociclo, pero<br />

ahora cada línea representa un ciclo diferente de reloj. Por esta razón los grupos de micro<br />

operaciones que se realizan juntas en un ciclo de reloj, se separan por comas y el grupo está<br />

terminado en un punto y coma. El término de instrucción se marca con un punto.<br />

El período del reloj debe ajustarse a la duración de la etapa más lenta, de este modo en un ciclo<br />

de reloj pueden realizarse todas las acciones y transferencias de cada etapa.<br />

La activación de las señales que controlan las transferencias deben efectuarse asociadas a<br />

diferentes ciclos del reloj. Para lograr esto es preciso modelar la unidad de control como una<br />

máquina secuencial de estados finitos.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


4 Estructuras de Computadores Digitales<br />

En cada canto activo del reloj se pasa a un estado diferente (se captura el estado en los<br />

registros), y en cada estado pueden activarse las señales de control que se requieran (salidas de<br />

redes combinacionales alimentadas por los estados de los flip-flops de la unidad de control).<br />

Es decir las salidas de esta máquina secuencial deben estar asociadas al estado (modelo de<br />

Moore).<br />

La ejecución de cada instrucción puede visualizarse como un recorrido en el diagrama de<br />

estados; algunas instrucciones se ejecutarán pasando por pocos estados, otras tendrán recorridos<br />

más largos.<br />

El número de estados por los que pasa una instrucción son los ciclos de reloj que demora en<br />

realizarse, y esto se mide en CPI (ciclos por instrucción).<br />

Podría ajustarse el período del reloj de acuerdo al tiempo de la etapa más rápida. Esto implica<br />

que el tiempo de las etapas será ahora un múltiplo de la etapa más rápida, lo cual aumenta el<br />

número de estados de la unidad de control, y complica su diseño.<br />

El siguiente diagrama muestra los registros que deben agregarse para ejecutar instrucciones con<br />

un número diferente de ciclos de reloj. Se muestran las señales de control en cada etapa. Se ha<br />

agregado el habilitamiento de escritura del registro de instrucción IR y de los registros<br />

adicionales A, B, S y M.<br />

nPC_sel<br />

WE PC<br />

WE IR<br />

RegDst<br />

Unidad de Control<br />

WE B<br />

RegWr WE A<br />

AluSrc<br />

WE S<br />

ExtOp AluCtr<br />

MemRd<br />

WE<br />

MemWr<br />

M<br />

MemtoReg<br />

COp+ Funct<br />

2<br />

Equal<br />

Unidad<br />

de<br />

Instrucción<br />

rs<br />

rt<br />

rd<br />

IR<br />

busW<br />

Unidad<br />

Registros<br />

A<br />

B<br />

Unidad<br />

de<br />

Operaciones<br />

S<br />

Addr<br />

0<br />

Inm16<br />

Din<br />

Memoria<br />

Datos<br />

M<br />

1<br />

Reloj<br />

Figura <strong>13</strong>.3. Registros <strong>procesador</strong> <strong>multiciclo</strong>.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 5<br />

Notar que la última etapa, la que escribe en los registros, hace fluir los datos hacia atrás. Por<br />

esta razón se denomina a esta etapa post escritura (write-back).<br />

<strong>13</strong>.4. Transferencias físicas.<br />

A continuación se muestran las transferencias físicas para ejecutar las transferencias lógicas<br />

que definen cada una de las instrucciones del repertorio.<br />

Los grupos de micro operaciones que se realizan juntas en un ciclo de reloj, se separan por<br />

comas y el grupo está terminado en un punto y coma. El término de instrucción se marca con un<br />

punto.<br />

ADD: R[rd] R[rs] + R[rt]; PC PC + 4<br />

IR = MemInst[PC], PC = PC+4;<br />

A=R[rs], B=R[rt];<br />

S = add(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

SUB: R[rd] R[rs] – R[rt]; PC PC + 4<br />

IR = MemInst[PC], PC = PC+4;<br />

A=R[rs], B=R[rt];<br />

S = sub(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

SLT: if( R[rs] < R[rt]) R[rd] = 1; else R[rd] =0; PC PC + 4<br />

IR = MemInst[PC], PC = PC+4;<br />

A=R[rs], B=R[rt];<br />

S = slt(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

ORI: R[rt] R[rs] + zero_ext(Inm16); PC PC + 4<br />

IR = MemInst[PC], PC=PC+4;<br />

A = R[rs];<br />

S = or(A , zero_ext(Inm16) );<br />

R[rt] = S.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

Las tres instrucciones anteriores no emplean la etapa de memoria. El ORI no requiere escribir en<br />

el registro B.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


6 Estructuras de Computadores Digitales<br />

LOAD: R[rt] MEM[ R[rs] + sign_ext(Inm16)]; PC PC + 4<br />

IR = MemInst[PC], PC=PC+4;<br />

A = R[rs];<br />

S = add( A , sign_ext(Inm16));<br />

M = MemDat[S];<br />

R[rt] = M.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

Unidad Registros. Escritura.<br />

STORE: MEM[ R[rs] + sign_ext(Inm16)] R[rt]; PC PC + 4<br />

IR=MemInst[PC], PC=PC+4;<br />

A=R[rs], B=R[rt];<br />

S = add( A, sign_ext(Inm16));<br />

MemDat[S] = B.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

La instrucción STORE no utiliza el arreglo de registros para escritura. Están permanentemente<br />

cableadas las conexiones del registro B en la entrada de datos Din de la memoria; y de la salida<br />

S de la ALU, en el bus Add de direcciones de la memoria de datos.<br />

BEQ: if ( R[rs] == R[rt] ) PC (PC +4) + sign_ext(Inm16)*4 else PC PC + 4<br />

IR = MemInst[PC], PC=PC+4;<br />

A = R[rs], B = R[rt];<br />

if (Equal)<br />

PC = PC + sign_ext(Inm16)*4.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Instrucción.<br />

BEQ no ocupa las etapas de Memoria de Datos ni escritura en arreglo de Registros. Notar que<br />

en el primer ciclo se escribe en PC, la dirección de la próxima instrucción. En el tercer ciclo,<br />

puede emplearse dicho valor para calcular la dirección de bifurcación relativa a PC, lo cual<br />

permite compartir el sumador de la unidad de instrucción. Esto implica un cambio de la unidad<br />

de instrucción, que se muestra más adelante.<br />

J UMP: PC (PC +4)&0xF0000000+ add_26 *4<br />

IR = MemInst[PC], PC=PC+4;<br />

PC = (PC)&0xF0000000 + add_26 *4.<br />

Unidad Instrucción.<br />

Unidad Instrucción.<br />

Se muestra la unidad de Instrucción modificada, se agrega un mux y se comparte el sumador,<br />

empleándolo dos veces en la realización de las instrucciones beq y jump(pero en ciclos<br />

diferentes de reloj):<br />

La necesidad del registro IR, se debe a que durante el primer ciclo se calcula la dirección de la<br />

próxima instrucción y se lo escribe en el registro PC. Al cambiar éste, cambia el bus de<br />

direcciones de la memoria de instrucciones, esto requiere almacenar la instrucción para tener los<br />

campos disponibles en el resto de la ejecución.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


IR<br />

PC<br />

Diseño <strong>procesador</strong> <strong>multiciclo</strong> 7<br />

nPC_sel[0..1]<br />

WE PC<br />

WE IR<br />

4<br />

SigExt*4<br />

Inm16<br />

0<br />

1<br />

0<br />

1<br />

"1"<br />

Rd<br />

Addr<br />

Memoria<br />

Instrucciones<br />

COp<br />

Funct<br />

Rs<br />

Rt<br />

Rd<br />

PC[31..28]<br />

add_26<br />

0..1<br />

Inm16<br />

Figura <strong>13</strong>.4. Unidad de Instrucción. Procesador <strong>multiciclo</strong>.<br />

En caso de no escribir en PC hasta el término de la ejecución de la instrucción, se debe<br />

mantener la estructura de la unidad de instrucciones (que requiere dos sumadores) del<br />

<strong>procesador</strong> monociclo, y mantener las señales de control de la memoria de instrucciones en los<br />

siguientes ciclos que requieran leer campos de la instrucción. De esta forma podría no<br />

emplearse el registro IR.<br />

Si se comparte la memoria para datos e instrucciones, el registro IR es indispensable, ya que las<br />

instrucciones load word y store word, cambian el bus de direcciones de la memoria.<br />

Si no se cambian los contenidos de rd, rs, y rt, no se requieren los registros A y B. Además esto<br />

implica sostener los controles RegDst y RegWr en los ciclos en que se requiera mantener<br />

estables los contenidos del busA y busB.<br />

Sin embargo si A y B están presentes, se simplifica el diseño de la unidad de control; sólo es<br />

necesario activar los habilitamientos de escritura de A y B en el segundo ciclo. No es necesario<br />

activarlos en los ciclos que siguen, pues ya están registrados los contenidos de los buses A y B<br />

en dichos registros.<br />

Similar razonamiento puede emplearse para detectar la necesidad del registro S. Si la unidad de<br />

operaciones no se utiliza con diferentes operandos en diferentes ciclos de la ejecución de una<br />

misma instrucción (es decir si no se la comparte) no se requiere el registro S; pero esto implica<br />

sostener las señales de control a esta unidad en ciclos subsecuentes que requieran una salida<br />

estable de AluOut.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


8 Estructuras de Computadores Digitales<br />

<strong>13</strong>.5. Señales de control.<br />

Se describen a continuación, las señales de control que activan las transferencias físicas.<br />

El primer ciclo es común a todas las instrucciones. En él se lee la instrucción que se ejecutará y<br />

se la almacena en IR, en PC se guarda la dirección de la próxima instrucción. A este ciclo se lo<br />

denomina de búsqueda de instrucción (fetch). Después de este ciclo, los campos de la<br />

instrucción quedan disponibles en las salidas de IR.<br />

ADD: R[rd] R[rs] + R[rt]; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrc = "busB", AluCtr = “add”; WE S ;<br />

RegDst = "rd" , Memtoreg="alu", RegWr.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

En el segundo ciclo de ADD y SUB, se guardan en A y B los operandos de la instrucción, una<br />

vez que han sido leídos del arreglo de registros. Durante el ciclo se activan las habilitaciones de<br />

escritura, y sólo en el canto sincronizante del reloj se registran los valores.<br />

En el tercer ciclo de ADD y SUB, se almacena en S, el resultado de la operación.<br />

En el cuarto ciclo de ADD y SUB se escribe en el registro destino el resultado de la operación<br />

que fue salvado en el registro S, en el ciclo anterior. Ambas operaciones requieren cuatro ciclos<br />

de reloj para completarse.<br />

SUB: R[rd] R[rs] – R[rt]; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrc = "busB", AluCtr = “sub”, WE S ;<br />

RegDst = "rd", Memtoreg="alu", RegWr.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

SLT: if( R[rs] < R[rt]) R[rd] = 1; else R[rd] =0; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrc = "busB", AluCtr = “slt”, WE S ;<br />

RegDst = "rd", Memtoreg="alu", RegWr.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 9<br />

ORI: R[rt] R[rs] + zero_ext(Inm16); PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

Unidad Instrucción.<br />

WE A ;<br />

Unidad Registros. Lectura.<br />

AluSrc = "Op32", ExtOp = “zero”, AluCtr = “ori”,WE S ; Unidad Operaciones.<br />

RegDst = "rt", Memtoreg="alu", RegWr.<br />

Unidad Registros. Escritura.<br />

En el segundo ciclo de ORI se escribe en A el contenido del operando especificado en el<br />

registro Rs.<br />

En el tercer ciclo de ORI se escribe en S, el resultado del or del operando en registro con el<br />

operando inmediato, extendido sin signo.<br />

En el cuarto ciclo de ORI se escribe en el registro destino (rt) el valor guardado en S, en el ciclo<br />

anterior.<br />

La operación ORI requiere cuatro ciclos para completar sus transferencias físicas.<br />

LOAD: R[rt] MEM[ R[rs] + sign_ext(Inm16)]; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

Unidad Instrucción.<br />

WE A ;<br />

Unidad Registros. Lectura.<br />

AluSrc = "Op32", ExtOp = “sign”, AluCtr = “add”,WE S ; Unidad Operaciones.<br />

MemRd, WE M ;<br />

Unidad Memoria Datos.<br />

RegDst = "rt", Memtoreg = "mem", RegWr.<br />

Unidad Registros. Escritura.<br />

En el segundo ciclo de LOAD se escribe en A el contenido del operando especificado en el<br />

registro base Rs.<br />

En el tercer ciclo de LOAD se escribe en S la dirección efectiva de la celda de la memoria que<br />

se leerá, que es el resultado de la suma del operando en registro base con el desplazamiento<br />

inmediato, extendido con signo.<br />

En el cuarto ciclo de LOAD se lee la memoria de datos y se registra la lectura en M.<br />

En el quinto ciclo de LOAD se escribe en el registro destino(rt) el valor guardado en M, en el<br />

ciclo anterior.<br />

La operación LOAD requiere cinco ciclos para completar sus transferencias físicas.<br />

STORE: MEM[ R[rs] + sign_ext(Inm16)] R[rt]; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

Unidad Instrucción.<br />

WE A , WE B ;<br />

Unidad Registros. Lectura.<br />

AluSrc = "Op32", ExtOp = “sign”, AluCtr = “add”,WE S ; Unidad Operaciones.<br />

MemWr.<br />

Unidad Memoria Datos.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


10 Estructuras de Computadores Digitales<br />

En el segundo ciclo de STORE se escribe en A el contenido del operando especificado en el<br />

registro base Rs. Y en B se almacena el contenido del registro rt, que será escrito en la memoria.<br />

En el tercer ciclo de STORE se escribe en S la dirección efectiva de la celda de la memoria que<br />

se escribirá, que es el resultado de la suma del operando en registro base con el desplazamiento<br />

inmediato, extendido con signo.<br />

En el cuarto ciclo de STORE se escribe en la memoria de datos en la dirección establecida por<br />

S(en el ciclo anterior) el valor que ya se tiene en B, desde dos ciclos antes.<br />

La operación STORE requiere cuatro ciclos para completar sus transferencias físicas.<br />

BEQ: if ( R[rs] == R[rt] ) PC (PC +4)+ sign_ext(Inm16)*4 else PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

if (Equal) { nPC_sel = “Br” , WE PC }.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Instrucción.<br />

En el segundo ciclo de BEQ se leen los registros y se determina el valor de la señal Equal. En el<br />

tercer ciclo de BEQ, si debe realizarse la bifurcación, se sobreescribe PC; en caso contrario, no<br />

se cambia el valor de PC ya escrito en el primer ciclo.<br />

La instrucción BEQ tiene un CPI igual a tres. Utiliza la unidad de instrucción dos veces en la<br />

ejecución.<br />

J: PC (PC +4)&0xF0000000+ add_26 *4<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

nPC_sel = “Jmp”, WE PC .<br />

Unidad Instrucción.<br />

Unidad Instrucción.<br />

En el segundo ciclo del salto incondicional, se sobreescribe PC con la dirección de salto. Se<br />

ocupa dos veces, en ciclos diferentes de reloj, la unidad de instrucción. Y tiene CPI = 2.<br />

<strong>13</strong>.6. Comportamiento del <strong>procesador</strong> <strong>multiciclo</strong>.<br />

Si definimos, en general:<br />

TE = Tiempo de ejecución de un programa de prueba.<br />

C = Comportamiento Procesador = 1/ TE (a mayor tiempo, peor comportamiento)<br />

NI = Número de instrucciones del programa de prueba.<br />

CPI = Ciclos de reloj por instrucción. (será diferente de uno en caso <strong>multiciclo</strong>)<br />

PC = Período del reloj.<br />

Se tiene que:<br />

TE = NI * CPI * PC<br />

Para el <strong>procesador</strong> monociclo con un período fijo de reloj, se tiene:<br />

TE(monociclo) = NI*1*PCmono<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 11<br />

Se asume que el programa de prueba está constituido por la siguiente mezcla: 25% de cargas,<br />

11% de almacenamientos, 30% de sumas, 9% de restas, 4% de or inmediatos, 15% de<br />

bifurcaciones y 6% de saltos.<br />

Se tendrá ahora:<br />

TE(<strong>multiciclo</strong>) = NI (0,25*5+0,11*4+0,30*4+0,09*4+0,04*4+0,15*3+0,06*2)*PC<strong>multiciclo</strong><br />

=NI*3,98*PC<strong>multiciclo</strong><br />

Puede considerarse que el valor promedio de CPI para la mezcla es de 3,98.<br />

Si la subdivisión en etapas, se realiza de tal modo que éstas requieran igual tiempo, podría<br />

modelarse cualitativamente que el período del reloj, en el caso monociclo, es cinco veces mayor<br />

que el requerido por el <strong>procesador</strong> <strong>multiciclo</strong>. La elección de tiempos iguales para las etapas<br />

tiende a minimizar el período del reloj requerido.<br />

La comparación:<br />

C(<strong>multiciclo</strong>)/ C(monociclo) = TE(monociclo) /TE(<strong>multiciclo</strong>)<br />

= PCmono/ (3,98*PC<strong>multiciclo</strong>) = 5/3,98 = 1,26.<br />

indica que el <strong>procesador</strong> <strong>multiciclo</strong> es 1,26 veces más rápido que el monociclo.<br />

No apreciándose ventajas significativas en el aumento de velocidad, mayormente debido a que<br />

el repertorio elegido no contiene instrucciones complejas.<br />

La comparación anterior no refleja bien las bondades del diseño <strong>multiciclo</strong>; en el caso del<br />

diseño del repertorio completo existen alrededor de 100 instrucciones y algunas de ellas<br />

demandan hasta 20 ciclos de reloj. En este caso el numerador aumentaría a 20 (monociclo) y el<br />

CPI promedio (<strong>multiciclo</strong>) no subiría apreciablemente si las instrucciones largas son poco<br />

frecuentes.<br />

<strong>13</strong>.7. Alcances de compartir recursos.<br />

<strong>13</strong>.7.1. Compartir memoria.<br />

En la elección realizada para el camino de datos no se comparten demasiados recursos, que es<br />

otra poderosa ventaja del esquema de diseño <strong>multiciclo</strong>. Puede tenerse sólo una unidad<br />

aritmética y compartirla para las operaciones de las unidades de instrucción y operación,<br />

también puede compartirse la memoria de instrucciones y de datos; también puede obtenerse la<br />

condición de igualdad utilizando la misma unidad aritmética. Este desarrollo es el que efectúa el<br />

texto guía, en él puede verse que se ahorran recursos sin disminuir la velocidad de ejecución.<br />

A continuación se muestra una arquitectura que comparte la memoria de datos con la de<br />

instrucciones. Para esto es necesario modificar la unidad de instrucción, sacando de ésta la<br />

memoria de instrucciones.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


PC<br />

12 Estructuras de Computadores Digitales<br />

nPC_sel[0..1]<br />

WE PC<br />

+4<br />

SigExt*4<br />

Inm16<br />

0<br />

1<br />

0<br />

1<br />

PC[31..28]<br />

add_26<br />

0..1<br />

Figura <strong>13</strong>.5. Unidad de Instrucción. Sin memoria de Instrucciones.<br />

Se ha agregado un mux controlado por MemCtr, que permite leer la dirección apuntada por PC,<br />

que contiene la instrucción actual, y grabarla en IR; o bien leer la dirección efectiva de la<br />

memoria apuntada por S, y grabar el dato en M.<br />

El compartir el recurso, no cambia la velocidad de ejecución de las instrucciones. Se ha sacado<br />

de la Unidad de Instrucción la memoria de programa, y se muestra que a esta unidad ingresa el<br />

bus IR.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> <strong>13</strong><br />

WE PC<br />

MemWr Unidad de Control<br />

MemRd<br />

nPC_sel MemCtr<br />

WE M<br />

MemtoReg RegDst RegWr<br />

WE IR<br />

ExtOp<br />

AluSrc<br />

AluCtr<br />

Cop<br />

Funct<br />

Equal<br />

IR<br />

Unidad<br />

de<br />

Instrucción<br />

0<br />

1<br />

Addr<br />

Memoria<br />

IR<br />

rs<br />

rt<br />

rd<br />

1<br />

0<br />

Unidad<br />

Registros<br />

A<br />

B<br />

Unidad<br />

de<br />

Operaciones<br />

S<br />

Inm16<br />

Din<br />

M<br />

Reloj<br />

Figura <strong>13</strong>.6. Procesador <strong>multiciclo</strong>. Se comparte la memoria.<br />

Se ilustra la descripción de las transferencias físicas con la instrucción load word:<br />

LOAD: R[rt] MEM[ R[rs] + sign_ext(Inm16)]; PC PC + 4<br />

IR = M[PC], PC=PC+4;<br />

A = R[rs];<br />

S = add( A , signext(Inm16));<br />

M = M[S];<br />

R[rt] = M.<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

Unidad Registros. Escritura.<br />

Las secuencias de control para la instrucción store word:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


PC<br />

14 Estructuras de Computadores Digitales<br />

STORE: MEM[ R[rs] + sign_ext(Inm16)] R[rt]; PC PC + 4<br />

nPC_sel = “+4”, WE PC , WE IR , MenCtr=”Instrucciones”;<br />

WE A ; WE B ;<br />

AluSrc = "Op32", ExtOp = “sign”, AluCtr = “add”,WE S ;<br />

MemWr, MenCtr=”Datos”<br />

Unidad Instrucción.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

<strong>13</strong>.7.2. Compartiendo la ALU.<br />

A continuación se muestra una arquitectura que además de compartir la memoria comparte la<br />

unidad aritmética. Para esto es necesario modificar la unidad de instrucción, sacando de ésta el<br />

sumador.<br />

nPC_sel WE PC<br />

AluOut<br />

S<br />

jump<br />

PC[31..28]<br />

0<br />

1<br />

2<br />

add_26<br />

Figura <strong>13</strong>.7. Unidad de Instrucción, para compartir la Unidad Artitmética.<br />

Nótese que se han simplificado los recursos que emplea la unidad de instrucción. Sólo queda el<br />

circuito que forma la dirección de salto:<br />

jump = PC &0xF0000000 + add_26 *4<br />

La formación de la dirección de salto requiere que el valor que debe estar estar almacenado en<br />

PC, sea la dirección siguiente a la instrucción que está en ejecución(la que está almacenada en<br />

IR).<br />

El multiplexor controlado por nPC_sel puede ser alimentado por la salida de la ALU (para<br />

formar PC+4, como se verá luego) y desde el registro S(para formar la dirección de salto en<br />

caso de bifurcación).<br />

Para compartir la ALU, se requiere modificar la Unidad de Operaciones. Permitiendo ingresar la<br />

salida del registro PC o el busA en el primer operando. También deben agregarse las entradas<br />

+4 y la dirección de bifurcación, como posibles segundos operandos.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 15<br />

También se comparte la unidad extensora. Tomando el operando de 32 bits(Op32) y generando,<br />

por reordenamiento de las señales del bus, la nueva señal:<br />

branch = sign_ext(Inm16)*4<br />

Equal<br />

AluSrcA<br />

ExtOp AluSrcB<br />

AluCtr<br />

PC<br />

1<br />

busA<br />

Igual<br />

0<br />

busB<br />

+ 4<br />

branch<br />

0<br />

1<br />

2<br />

AluOut<br />

Inm16<br />

Extensor<br />

Op32<br />

3<br />

Figura <strong>13</strong>.8. Unidad de Operaciones, para compartir la ALU.<br />

Con estas modificaciones, las transferencias físicas, pueden expresarse, según:<br />

ADD: R[rd] R[rs] + R[rt]; PC PC + 4<br />

IR = M[PC], PC = add(PC,+4);<br />

A=R[rs], B=R[rt];<br />

S = add(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción, Operaciones.<br />

Unidad Registros, Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

SUB: R[rd] R[rs] – R[rt]; PC PC + 4<br />

IR = M[PC], PC = add(PC,+4);<br />

A=R[rs], B=R[rt];<br />

S = sub(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


16 Estructuras de Computadores Digitales<br />

SLT: if( R[rs] < R[rt]) R[rd] = 1; else R[rd] =0; PC PC + 4<br />

IR = M[PC], PC = add(PC, +4);<br />

A=R[rs], B=R[rt];<br />

S = slt(A, B);<br />

R[rd] = S.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

ORI: R[rt] R[rs] + zero_ext(Inm16); PC PC + 4<br />

IR = M[PC], PC = add(PC, +4);<br />

A = R[rs];<br />

S = or(A , zero_ext(Inm16) );<br />

R[rt] = S.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Registros. Escritura.<br />

LOAD: R[rt] MEM[ R[rs] + sign_ext(Inm16)]; PC PC + 4<br />

IR = M[PC], PC = add(PC, +4);<br />

A = R[rs];<br />

S = add( A , sign_ext(Inm16));<br />

M = M[S];<br />

R[rt] = M.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

Unidad Registros. Escritura.<br />

STORE: MEM[ R[rs] + sign_ext(Inm16)] R[rt]; PC PC + 4<br />

IR=M[PC], PC = add(PC, +4);<br />

A=R[rs], B=R[rt];<br />

S = add( A, sign_ext(Inm16));<br />

M[S] = B.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Memoria Datos.<br />

BEQ: if ( R[rs] == R[rt] ) PC (PC +4) + sign_ext(Inm16)*4 else PC PC + 4<br />

IR = M[PC], PC = add(PC, +4);<br />

A = R[rs], B = R[rt];<br />

S = add( PC, sign_ext(Inm16)*4);<br />

if (Equal) PC = S.<br />

Unidad Instrucción y Operaciones.<br />

Unidad Registros. Lectura.<br />

Unidad Operaciones.<br />

Unidad Operaciones. Unidad Instrucción.<br />

J UMP: PC (PC +4)&0xF0000000+ add_26 *4<br />

IR = M[PC], PC = add(PC, +4); Unidad Instrucción y Operaciones.<br />

PC = (PC)&0xF0000000 + add_26 *4. Unidad Instrucción.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 17<br />

Las señales de control, pueden describirse por:<br />

ADD: R[rd] R[rs] + R[rt]; PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrcA = "busA", AluSrcB = "busB", AluCtr = “add”; WE S ;<br />

RegDst = "rd" , Memtoreg="alu", RegWr.<br />

SUB: R[rd] R[rs] – R[rt]; PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrcA = "busA", AluSrcB = "busB", AluCtr = “sub”; WE S ;<br />

RegDst = "rd" , Memtoreg="alu", RegWr.<br />

SLT: if( R[rs] < R[rt]) R[rd] = 1; else R[rd] =0; PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrcA = "busA", AluSrcB = "busB", AluCtr = “slt”; WE S ;<br />

RegDst = "rd" , Memtoreg="alu", RegWr.<br />

ORI: R[rt] R[rs] + zero_ext(Inm16); PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A ;<br />

AluSrcA = "busA", AluSrcB = "Op32", ExtOp = “zero”, AluCtr = “ori”, WE S ;<br />

RegDst = "rt", Memtoreg="alu", RegWr.<br />

LOAD: R[rt] MEM[ R[rs] + sign_ext(Inm16)]; PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A ;<br />

AluSrcA = "busA", AluSrcB = "Op32", ExtOp = “sign”, AluCtr = “add”, WE S ;<br />

MemRd, WE M ;<br />

RegDst = "rt", Memtoreg = "mem", RegWr.<br />

STORE: MEM[ R[rs] + sign_ext(Inm16)] R[rt]; PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrcA = "busA", AluSrcB = "Op32", ExtOp = “sign”, AluCtr = “add”, WE S ;<br />

MemWr.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


18 Estructuras de Computadores Digitales<br />

BEQ: if ( R[rs] == R[rt] ) PC (PC +4)+ sign_ext(Inm16)*4 else PC PC + 4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

WE A , WE B ;<br />

AluSrcA = "PC", AluSrcB = "branch", AluCtr = “add”, WE S ;<br />

if (Equal) { nPC_sel = “S” , WE PC }.<br />

J: PC (PC +4)&0xF0000000+ add_26 *4<br />

nPC_sel = “alu”, AluSrcA = "PC", AluSrcB = "+4", AluCtr = “add”, WE PC , WE IR ;<br />

nPC_sel = “Jmp”, WE PC .<br />

<strong>13</strong>.8. Diseño de la unidad de control del <strong>procesador</strong> <strong>multiciclo</strong>.<br />

Puede confeccionarse un diagrama de estados a partir de las señales de control de cada etapa.<br />

Debido a que la primera serie de microoperaciones, para la etapa de búsqueda de instrucción, es<br />

igual para todas las instrucciones, se considera como el estado inicial. Luego a partir de éste se<br />

colocan las secuencias de estados para generar las señales de control para cada etapa. En el<br />

interior de cada estado se colocan las salidas asociadas a ese estado.<br />

Después de la última microoperación de cada secuencia (cuando se encuentra un punto en la<br />

secuencia), debe volverse al estado inicial, para seguir ejecutando instrucciones.<br />

Después de realizadas las transferencias del estado fetch (o de búsqueda de la instrucción), se<br />

disponen de las entradas para la unidad de control: el código de operación y el campo funct. De<br />

acuerdo al valor de las entradas se cambia al estado siguiente, cuando ocurre el canto del reloj.<br />

Cuando no están rotuladas las transiciones se asume que el próximo canto activo del reloj<br />

cambia al próximo estado de la secuencia.<br />

Pueden aplicarse las técnicas tradicionales del diseño de máquinas secuenciales.<br />

Puede emplearse métodos para la reducción de estados. Por ejemplo: el tercer estado de lw y sw<br />

son idénticos, y podrían fundirse en uno; en este caso las dos salidas de este estado deben estar<br />

rotuladas con el código de operación de lw y sw (esto debido a que el cuarto estado de éstas no<br />

es el mismo). También pueden fundirse los cuartos estados de add y sub.<br />

Si se decide escribir en el registro B, en el caso de ori y lw (no importa lo que se escriba, si<br />

luego no se lo usa), se tendrá que el segundo estado de todas las instrucciones excepto el jump<br />

pueden fundirse; en caso de efectuar esta reducción, las salidas de este segundo estado común<br />

debe estar rotuladas con los códigos de operación de las instrucciones.<br />

Luego se procede a asignar estados y continuar con las metodologías de diseño.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 19<br />

<strong>13</strong>.8.1. Diagrama de estados<br />

El modelo del diagrama de estados debe entenderse como un modelo conceptual del problema<br />

del control. En el caso de diseñar un repertorio completo, no es práctico ocuparlo para describir<br />

cientos de estados con posibles centenares de secuencias diferentes (más aún si el tipo de<br />

repertorio es complejo y posee diversos modos de direccionamiento).<br />

El siguiente diagrama de estado muestra las diferentes secuencias de las señales de control para<br />

cada una de las instrucciones del repertorio:<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

Add<br />

Sub<br />

Ori<br />

Lw<br />

Sw<br />

Beq<br />

J<br />

WE A<br />

WE B<br />

WE A<br />

WE B<br />

WE A WE A WE A<br />

WE B<br />

WE A<br />

WE B<br />

nPC_sel = Jmp<br />

WE PC.<br />

AluSrc<br />

=busB,<br />

AluCtr<br />

= add<br />

WE S<br />

AluSrc<br />

=busB,<br />

AluCtr<br />

= sub<br />

WE S<br />

AluSrc<br />

=Op32<br />

ExtOp<br />

=zero<br />

AluCtr<br />

= ori<br />

WE S<br />

AluSrc<br />

= Op32<br />

ExtOp<br />

=sign<br />

AluCtr<br />

= add<br />

WE S<br />

AluSrc<br />

= Op32<br />

ExtOp<br />

=sign<br />

AluCtr<br />

= add<br />

WE S<br />

nPC_sel =<br />

if (Equal)<br />

{<br />

Br , WE PC<br />

}.<br />

RegDst<br />

=rd<br />

Memto<br />

reg=alu<br />

RegWr.<br />

RegDst<br />

=rd<br />

Memto<br />

reg=alu<br />

RegWr.<br />

RegDst<br />

=rt<br />

Memto<br />

reg=alu<br />

RegWr.<br />

MemRd<br />

WE M<br />

MemWr.<br />

RegDst<br />

=rt<br />

Memto<br />

reg=mem<br />

RegWr.<br />

Figura <strong>13</strong>.9. Diagrama de estados.<br />

Se verá más adelante la técnica de microprogramación, que básicamente consiste en diseñar la<br />

unidad de control como si fuera un computador en miniatura.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


20 Estructuras de Computadores Digitales<br />

<strong>13</strong>.8.2. Control de Memorias Asincrónicas.<br />

En el diagrama de estados puede fácilmente incorporarse controles asincrónicos mediante ciclos<br />

de espera (wait).<br />

Algunas memorias después de transcurrido el tiempo de acceso activan una señal indicando este<br />

evento. El controlador puede adaptarse a memorias con diferente tiempo de acceso empleando<br />

la señal (asincrónica) de wait proveniente de la memoria.<br />

Consideremos, por ejemplo, la memoria de instrucciones con los controles MemRd para leer y<br />

Wait. Mientras esta última está alta debe esperarse, ya que aún no termina el tiempo de acceso;<br />

cuando Wait se desactiva, el dato en el bus es válido.<br />

El siguiente esquema ilustra una parte de la Unidad de Instrucciones:<br />

WE PC<br />

Wait<br />

WE IR<br />

MemRd<br />

PC<br />

Addr Rd<br />

Memoria<br />

Instrucciones<br />

IR<br />

Figura <strong>13</strong>.10. Control asincrónico de memoria de instrucción.<br />

El siguiente diagrama de estados incorpora ciclos de espera, empleando la señal wait:<br />

Se espera un múltiplo del período del reloj (se dice que es asincrónico, pero el tiempo que<br />

permanece esperando es sincrónico con el reloj; es la señal la que se produce en forma<br />

asincrónica al reloj).<br />

MemRD<br />

WE IR &Wait'<br />

WE PC &Wait'<br />

Wait<br />

Wait’<br />

WE A<br />

.. ..<br />

Figura <strong>13</strong>.11. Diagrama de estados. Ciclos de espera.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 21<br />

Nótese que las señales que habilitan la escritura de los registros PC e IR se activan cuando la<br />

memoria de instrucciones tiene datos válidos (cuando Wait pasa a cero). Lo anterior impide<br />

cambiar el valor de PC(es decir el bus de direcciones de la memoria) cuando aún se está<br />

leyendo; y de reactualizar con datos inválidos el registro de instrucción.<br />

La lógica combinacional que genera las señales de control de sincronización queda mejor<br />

descrita por: if (Wait) {WE IR = 0; WE PC = 0;} else {WE IR = 1; WE PC = 1;}<br />

Similar procedimiento se emplea, en la memoria de datos, en el ciclo de lectura de lw; y en el de<br />

escritura de sw.<br />

<strong>13</strong>.9 Excepciones. (Interrupciones y Traps)<br />

El flujo de control normal, es la ejecución secuencial de instrucciones, de saltos, bifurcaciones,<br />

llamados a subrutinas y retornos.<br />

Una excepción es una transferencia de control de ejecución no programada. Es una señal que<br />

avisa que ha ocurrido un evento que requiere ser atendido.<br />

Programa de<br />

Usuario.<br />

Manipulador<br />

de<br />

Excepciones.<br />

Se produce<br />

excepción...<br />

(trap handler)<br />

Servicio de<br />

excepción.<br />

Figura <strong>13</strong>.12. Servicio excepciones.<br />

Retorno de<br />

excepción.<br />

El sistema debe estar programado para tomar una acción para manipular la excepción:<br />

a) registrandro la dirección de la instrucción que causó la excepción,<br />

b) salvando el estado del <strong>procesador</strong>,<br />

c) tomando una acción correctiva,<br />

d) recuperando el estado del <strong>procesador</strong> y<br />

e) devolviendo el control al programa que causó la excepción.<br />

La manipulación de excepciones ocasiona un control complejo, lo cual disminuye la velocidad<br />

de procesamiento, ya que tiende a aumentar el CPI promedio.<br />

MIPS define que no debe ejecutarse la instrucción que causa la excepción.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


22 Estructuras de Computadores Digitales<br />

<strong>13</strong>.9.1. Tipos de Excepciones:<br />

Interrupciones:<br />

a) Causadas por eventos externos.<br />

Solicitación de dispositivo de entrada/salida<br />

b) Asincrónicas con la ejecución del programa.<br />

Deben ser manipuladas entre instrucciones.<br />

Suspenden y reanudan la ejecución del programa.<br />

Traps:<br />

a) Causadas por eventos internos.<br />

Condiciones de excepción (ej. overflow)<br />

Errores (ej. paridad)<br />

Fallas (ej. De página)<br />

Llamados al Sistema<br />

Intento de ejecutar instrucción ilegal.<br />

b) Sincrónicas con la ejecución del programa<br />

c) Las condiciones deben ser remediadas por el manipulador.<br />

d) La instrucción puede ser reintentada o simulada y el programa continúa o éste debe ser<br />

abortado.<br />

<strong>13</strong>.9.2. Formas de accesar al manipulador de excepciones:<br />

Los diferentes <strong>procesador</strong>es emplean mecanismos especiales para manipular la excepción. En el<br />

caso del <strong>procesador</strong> MIPS, cuando se produce una excepción se pasa a modo kernel, cambiando<br />

el valor de PC a una dirección fija.<br />

Entrada fija. PC = 0x80000080 (MIPS)<br />

Otros <strong>procesador</strong>es emplean vectores o tablas de direcciones:<br />

Tabla de direcciones. PC = M[base+causa] (8051)<br />

Vectores de Interrupción. PC = base+causa<br />

<strong>13</strong>.9.3. Formas de salvar el Estado.<br />

a) En el stack.<br />

b) En registros especiales. EPC, BadVaddr, Status, Cause (MIPS)<br />

c) Cambios de banco o registros sombreados.<br />

En el caso del <strong>procesador</strong> MIPS se agregaron los siguientes recursos al camino de datos para<br />

manipular excepciones:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 23<br />

Registro EPC.<br />

Registro 14 del co<strong>procesador</strong> 0, es un registro de 32 bits que almacena la dirección de la<br />

instrucción que ocasiona la excepción. Debe ser capaz de deshacer la suma PC = PC+4, ya que<br />

EPC debe apuntar a la instrucción que causa la excepción y no a la siguiente.<br />

Es decir: EPC = PC-4.<br />

Registro Cause.<br />

Registro <strong>13</strong> del <strong>procesador</strong> 0, de 32 bits. Almacena la causa de la excepción.<br />

Registro BadVAddr.<br />

Registro 8 del co<strong>procesador</strong> 0, contiene la dirección de la instrucción que efectuó un<br />

direccionamiento ilegal.<br />

Registro Status.<br />

Registro 12 del co<strong>procesador</strong> 0, contiene las máscaras de interrupción y los bits de habilitación.<br />

Es preciso modificar el camino de datos, además de agregar registros:<br />

Se agrega una entrada al mux controlado por nPC_Sel, con la dirección fija del manipulador de<br />

excepciones: 0x8000 0080<br />

Señales de control para escribir en los registros: EPC, Cause, BadVAddr, y Status.<br />

<strong>13</strong>.9.4 Modos: User y Kernel.<br />

Proporcionar dos modos de ejecución facilita el desarrollo del sistema operativo, que es un<br />

programa especial que corre en modo privilegiado (modo kernel o system) que le permite tener<br />

acceso a todos los recursos del computador. Normalmente todos los procesos de entrada/salida<br />

son administrados por el sistema operativo. De este modo cada programa de usuario puede<br />

compartir recursos (archivos, discos, memoria, pantalla, red, etc.) en forma organizada.<br />

El manipulador de excepciones es parte del sistema operativo, en éste se programan las acciones<br />

en respuesta a eventos que ocurran mientras se ejecuta el programa del usuario.<br />

Se describen a continuación algunos registros del co<strong>procesador</strong> 0. Estos están implementados<br />

en el simulador Spim, y descritos en el manual.<br />

<strong>13</strong>.9.5. Registro de Estado. (STATUS)<br />

Se tienen ocho niveles de interrupción, cinco son de hardware y tres de software. Existe un bit<br />

por nivel que habilita (cuando es uno) o deshabilita el nivel de interrupción.<br />

Máscaras k e k e k e<br />

31 16 15 8 7 6 old previo actual<br />

Los 6 bits menos significativos forman un stack de tres niveles.<br />

Los seis bits menos significativos indican si la interrupción se produjo en modo kernel o en<br />

modo usuario, para esto se emplea el bit denominado k, en el esquema anterior. Un uno indica<br />

que se produjo en modo kernel; cero en modo usuario.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


24 Estructuras de Computadores Digitales<br />

En los bits denominados e se registra si están habilitadas las interrupciones, con un uno se<br />

marca que estaban habilitadas y con un cero deshabilitadas.<br />

Cuando se produce una interrupción, los seis bits menos significativos se desplazan en dos<br />

posiciones hacia la izquierda, dejando en cero las últimas dos posiciones. Esto implica que se<br />

corre en modo kernel con las interrupciones deshabilitadas.<br />

<strong>13</strong>.9.6. Registro CAUSE.<br />

Pendientes<br />

Causa<br />

31 16 15 10 9 6 5 2<br />

Los bits 10 al 15, se emplean para registrar si existen interrupciones pendientes de uno de los<br />

cinco niveles de interrupciones de hardware.<br />

Se setea a uno si ocurre la interrupción, y si ésta aún no ha sido servida. Se emplea para manejar<br />

la situación en que se hayan generado.<br />

Del bit 2 al 5 se registra la razón de la interrupción:<br />

0 (Int) indica una interrupción externa.<br />

4 (ADDRL) excepción por error de dirección no alineada en el fetch o en instrucción load<br />

5 (ADDRS) excepción por error de dirección no alineada en instrucción store.<br />

6 (IBUS) error de dirección en fetch de instrucción.<br />

7 (DBUS) error de bus en búsqueda de datos.<br />

8 (Syscall) excepción por llamado errado al sistema.<br />

9 (BKPT) excepción por breakpoint.<br />

10 (RI) excepción por instrucción reservada.<br />

12 (OVF) Excepción por rebalse aritmético.<br />

<strong>13</strong> Resultado punto flotante inexacto.<br />

14 Resultado punto flotante inválido.<br />

15 División por cero.<br />

16 Rebalse punto flotante.<br />

17 Vaciamiento punto flotante.<br />

<strong>13</strong>.9.7. Instrucciones para el Co<strong>procesador</strong> 0.<br />

Existen instrucciones y macros que permiten mover datos del co<strong>procesador</strong> 0 hacia el principal<br />

y viceversa.<br />

• Data transfer:<br />

lwc0, swc0<br />

• Move:<br />

mfc0, mtc0<br />

Ver trap.handler de spim (se lo incluye más adelante).<br />

<strong>13</strong>.9.8. Tratamiento de excepciones en la máquina de estados.<br />

Se ilustran las modificaciones al diagrama de estados para tratar excepciones de dos tipos:<br />

rebalse e instrucción ilegal.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 25<br />

Una instrucción indefinida o ilegal se detecta cuando no está definido el próximo estado para el<br />

código ilegal.<br />

Se define un próximo estado, al que se pasa cuando el código de operación es otro (diferente de<br />

lw, sw, j, beq, ori, tipo-R), en el cual se activan las microoperaciones para generar la excepción.<br />

La dirección ExcAdd es la del manipulador de excepciones.<br />

Rebalse aritmético.<br />

Se emplea la condición generada por la ALU, para saltar a un estado que genera excepción.<br />

Manipular las diferentes interacciones entre instrucciones y otros eventos que causan<br />

excepciones puede dar origen a un control complejo. El objetivo es mantener simple y rápida la<br />

lógica de control. Es tratamiento de las excepciones es el aspecto más complejo del control.<br />

E0 (fetch)<br />

Add<br />

Sub Ori Lw<br />

J<br />

Sw Beq<br />

E1 E2 E3 E4 E5 E6 E7<br />

E8 E9 E10 E11 E12 E<strong>13</strong><br />

oper. oper.<br />

otro<br />

EPC=PC-4<br />

PC=ExcAdd<br />

Cause=10(RI)<br />

E14 E15 E16 E17 E18<br />

E19<br />

overflow<br />

EPC=PC-4<br />

PC=ExcAdd<br />

Cause=12(Ovf)<br />

Figura <strong>13</strong>.<strong>13</strong>. Diagrama de estados, con excepciones.<br />

<strong>13</strong>.9.9. Código del manipulador de Excepciones de SPIM.<br />

# SPIM S20 MIPS simulator.<br />

# The default trap handler for spim.<br />

# Copyright (C) 1990-1995 James Larus, larus@cs.wisc.edu.<br />

# Define the exception handling code. This must go first!<br />

.kdata<br />

__m1_: .asciiz " Exception "<br />

__m2_: .asciiz " occurred and ignored\n"<br />

__e0_: .asciiz " [Interrupt] "<br />

Profesor Leopoldo Silva Bijit 19-11-2008


26 Estructuras de Computadores Digitales<br />

__e1_: .asciiz ""<br />

__e2_: .asciiz ""<br />

__e3_: .asciiz ""<br />

__e4_: .asciiz " [Unaligned address in inst/data fetch] "<br />

__e5_: .asciiz " [Unaligned address in store] "<br />

__e6_: .asciiz " [Bad address in text read] "<br />

__e7_: .asciiz " [Bad address in data/stack read] "<br />

__e8_: .asciiz " [Error in syscall] "<br />

__e9_: .asciiz " [Breakpoint] "<br />

__e10_:.asciiz " [Reserved instruction] "<br />

__e11_:.asciiz ""<br />

__e12_:.asciiz " [Arithmetic overflow] "<br />

__e<strong>13</strong>_:.asciiz " [Inexact floating point result] "<br />

__e14_:.asciiz " [Invalid floating point result] "<br />

__e15_:.asciiz " [Divide by 0] "<br />

__e16_:.asciiz " [Floating point overflow] "<br />

__e17_:.asciiz " [Floating point underflow] "<br />

__excp:.word __e0_,__e1_,__e2_,__e3_,__e4_,__e5_,__e6_<br />

.word __e7_,__e8_,__e9_,__e10_,__e11_,__e12_<br />

.word __e<strong>13</strong>_,__e14_,__e15_,__e16_,__e17_<br />

s1: .word 0 #para salvar registros de usuario.<br />

s2: .word 0<br />

.ktext 0x80000080<br />

#ExcAdd<br />

# Al entrar se pueden usar los registros k0 y k1, sin salvarlos, ya que el usuario<br />

# no puede usar estos registros.<br />

.set noat<br />

move $k1, $at # Salva at ya que el manipulador usa macros.<br />

.set at<br />

#Habilita uso de macros en modo kernel.<br />

#El manipulador usa v0 y a0, los salva en memoria de datos del kernel.<br />

#No usa el stack ya que la excepción puede ser una mala referencia al stack.<br />

#Asume que no es confiable el valor de sp.<br />

sw $v0, s1<br />

sw $a0, s2 #Salva a0 y v0 en variables locales del kernel.<br />

mfc0 $k0, $<strong>13</strong> # Cause es el registro $<strong>13</strong> del co<strong>procesador</strong> 0<br />

sgt $v0 , $k0, 0x44 # Ignora la excepción, mayor que causa 17.<br />

bgtz $v0, ret<br />

addu $0, $0, 0 # Equivale a un nop. Se ejecuta(delayed branch).<br />

li $v0, 4 # syscall 4 (print_str con mensaje m1)<br />

la $a0, __m1_<br />

syscall<br />

li $v0, 1 # syscall 1 (print_int)<br />

srl $a0, $k0, 2 # Genera en a0 el número de la excepción,<br />

syscall<br />

# y lo imprime.<br />

li $v0, 4 # syscall 4 (print_str)<br />

lw $a0, __excp($k0) #Accesa dirección mensaje de error.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 27<br />

syscall<br />

bne $k0, 0x18, ok_pc # Causa = 6. Bad PC requires special checks<br />

mfc0 $a0, $14 # a0 = EPC<br />

and $a0, $a0, 0x3 # Is EPC word-aligned<br />

beq $a0, $zero, ok_pc<br />

li $v0, 10 # Exit on really bad PC (out of text).<br />

syscall<br />

ok_pc:<br />

li $v0, 4 # syscall 4 (print_str)<br />

la $a0, __m2_<br />

syscall<br />

mtc0 $zero, $<strong>13</strong> # Clear Cause register<br />

ret: lw $v0, s1 # Recupera a0 y v0.<br />

lw $a0, s2<br />

mfc0 $k0, $14 # k0 = EPC<br />

.set noat<br />

move $at, $k1 # Restaura $at del usuario.<br />

.set at<br />

# Habilita macros de usuario.<br />

rfe<br />

# Return from exception handler<br />

addiu $k0, $k0, 4 # Return to next instruction<br />

jr $k0<br />

# Standard startup code.<br />

#Invoke the routine main with no arguments.<br />

.text<br />

.globl __start<br />

__start:<br />

lw $a0, 0($sp) # argc<br />

addiu $a1, $sp, 4 # argv<br />

addiu $a2, $a1, 4 # envp<br />

sll $v0, $a0, 2<br />

addu $a2, $a2, $v0<br />

jal main<br />

li $v0, 10 # syscall 10 (exit)<br />

syscall<br />

Observaciones:<br />

a) La instrucción: sgt $v0, $k0, 0x44 # ignore interrupt exceptions<br />

es una macro, que expandida resulta:<br />

ori $at, $zero, 0x44<br />

slt $v0, $at, $k0 #coloca 1 en v0 si 0x44 < k0<br />

0x44 equivale al binario 1000100, con número de excepción binario 10001(ya que los dos<br />

últimos son ceros). Es decir si la causa de excepción es mayor que 17 ignora la excepción.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


28 Estructuras de Computadores Digitales<br />

b) La macro: lw $a0, __excp($k0) #Accesa dirección mensaje de error.<br />

Accesa al arreglo de punteros, que contienen los mensajes asociados a la causa de la excepción.<br />

En k0 está la causa de la excepción, considerando que los dos bits menos significativos son<br />

ceros se tiene, por ejemplo, que cuando k0 tiene valor binario 11000, se tendrá la causa 6(110).<br />

Y se suma a la dirección dada por __excp el valor decimal 24(equivale a 11000); el cual<br />

equivale a 6*4. Es decir la sexta entrada con valor simbólico: __e6_.<br />

c) Los rótulos del kernel usan el símbolo underscore( _ ), de esta forma el ensamblador<br />

difícilmente puede tener conflicto con los símbolos de usuario.<br />

d) La instrucción rfe, restaura el registro de estado como estaba antes de la excepción y reanuda<br />

la ejecución en la instrucción siguiente a la que causó la excepción.<br />

<strong>13</strong>.10 Diseño de la Unidad de Control de un Procesador Multiciclo.<br />

<strong>13</strong>.10.1. Diseño clásico.<br />

A partir del diagrama de estados se plantean las ecuaciones lógicas para determinar el próximo<br />

estado; y las ecuaciones de salida en función del estado (se emplea el modelo de Moore, para<br />

máquinas secuenciales de estados finitos).<br />

Entradas<br />

Lógica próximo<br />

estado<br />

Registro<br />

Lógica<br />

de<br />

Salida<br />

Salidas<br />

Estado<br />

Figura <strong>13</strong>.14. Modelo de Moore. Máquina de estados.<br />

En cada estado se especifican los valores de las señales de control que gobiernan las<br />

Transferencias entre Registros.<br />

El cambio de estado ocurre en el canto activo del reloj y la duración del reloj debe permitir la<br />

transferencia confiable de la etapa más lenta.<br />

La secuencia de transferencias se controla mediante el recorrido a través de los estados.<br />

La información que puede derivarse del diagrama de estados permite construir la siguiente tabla<br />

de verdad, que corresponde a la matriz de transiciones.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 29<br />

Entradas<br />

Estado<br />

Código<br />

Operación<br />

Funct Condiciones<br />

Salidas<br />

Próximo<br />

estado<br />

Señales de control<br />

Figura <strong>13</strong>.15. Modelo de Moore. Matriz de transiciones.<br />

El diseño consiste en encontrar las funciones combinacionales mínimas para:<br />

Próximo estado = f1(Estado, Cod. Op., Funct)<br />

Señales de Control = f2(Estado, Cod. Op., Funct, Condiciones)<br />

Se asume que el próximo estado no depende de las condiciones generadas en el camino de<br />

datos. La secuencia de estados depende sólo de la instrucción en ejecución; mientras que la<br />

activación de algunas señales de control están condicionadas por los valores generados durante<br />

la ejecución. Esto reduce el número de estados.<br />

<strong>13</strong>.10.2. Microprogramación.<br />

Método sistemático para diseñar la unidad de control de un <strong>procesador</strong>. Se programan las<br />

transferencias entre registros y la secuencia en que éstas deben efectuarse.<br />

Cada microinstrucción especifica el valor que deben tomar las señales de control, las funciones<br />

de la alu, y cuál es la próxima microinstrucción.<br />

Una forma de implementar las funciones de próximo estado y las salidas es almacenar el estado<br />

en un registro ( PC), e implementar las funciones de próximo estado y las salidas en una ROM<br />

o en un dispositivo programable.<br />

El esquema anterior puede visualizarse como el de un <strong>procesador</strong> que ejecuta<br />

microinstrucciones almacenadas en una memoria. Cada microinstrucción puede considerarse<br />

dividida en dos campos: uno, el conjunto de micro-operaciones; el otro, asociado a las<br />

bifurcaciones y saltos incondicionales dentro del microprograma, que podríamos denominar<br />

control de secuencia de las microinstrucciones.<br />

Denominamos micro operaciones a las señales de control que actúan sobre los recursos del<br />

camino de datos: las funciones de la ALU y de la Unidad de Extensión, la programación de las<br />

vías de datos a través de los muxes, las habilitaciones de escritura sincrónica de los diversos<br />

registros, los controles de lectura y escritura de las memorias y el arreglo de registros (control<br />

de transferencias físicas), y las señales que controlan la secuenciación de las instrucciones en la<br />

unidad de instrucción (que dependen de las condiciones: equal, cero, etc.).<br />

Una representación de la información que se almacena en la micro memoria, que se denomina<br />

microprograma es la siguiente:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


PC<br />

bus IR<br />

30 Estructuras de Computadores Digitales<br />

Dirección<br />

Microinstrucción<br />

Estado = PC Control Microoperaciones<br />

Figura <strong>13</strong>.16. Microprograma.<br />

Además existe la siguiente función:<br />

señales que controlan PC = f(micro operaciones de Control PC, Condiciones)<br />

Se denomina microcontrol a la información que permite determinar la próxima<br />

microinstrucción a ejecutar, que en general depende solamente de la instrucción que esté en<br />

ejecución. Ésta se ilustra en la siguiente tabla de verdad:<br />

Entradas<br />

Salidas<br />

Control COp Funct Próxima Instrucción<br />

Figura <strong>13</strong>.17. Microcontrol.<br />

La tabla anterior describe el secuenciador de las microintrucciones.<br />

Un esquema de diseño de una unidad de control microprogramada se ilustra a continuación:<br />

WE PC<br />

"1"<br />

Rd<br />

Control<br />

Cop<br />

Funct<br />

Secuenciador<br />

Memoria<br />

Instrucciones<br />

Addr<br />

op<br />

funciones<br />

muxes<br />

memoria<br />

registros<br />

write enable<br />

Control<br />

PC<br />

Señales<br />

de<br />

Control<br />

Figura <strong>13</strong>.18. Unidad de control microprogramada.<br />

Condiciones<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 31<br />

La ejecución de una instrucción puede visualizarse como la ejecución de una serie de<br />

microinstrucciones. En cada microinstrucción está la información necesaria para activar las<br />

diferentes microoperaciones de una etapa (en un ciclo de reloj) y determinar cuál es la próxima<br />

microinstrucción a ejecutar.<br />

Nótese que sólo es necesario el registro PC, el que mantiene estable el bus de direcciones de la<br />

micromemoria, lo cual genera las señales de control estables entre ciclos de reloj.<br />

Es decir, una instrucción determinada es una secuencia específica de lecturas de la<br />

micromemoria.<br />

La Unidad de Control microprogramada, es realmente otro <strong>procesador</strong>, y como cualquier<br />

<strong>procesador</strong> puede ser representado mediante el lenguaje que implementa. Se tienen todas las<br />

ventajas que poseen los diferentes lenguajes; es decir, se dispone de simuladores y<br />

microensambladores que facilitan la verificación de la correcta interpretación de las<br />

microinstrucciones.<br />

Una alternativa de diseño es emplear un contador, con las funciones sincrónicas de poner en<br />

cero, incrementar en uno y precargar un valor, para el registro PC. Lo anterior observando que<br />

en el diagrama de estados ocurren frecuentes transiciones al estado inicial (clear, si se denomina<br />

con binario cero al estado inicial) y al estado siguiente (corresponde a incrementar en uno el<br />

contador, esto funciona siempre y cuando pueda darse adecuados nombres a los estados; es<br />

decir, que el estado siguiente tenga valor binario incrementado en uno, respecto del actual).<br />

De esta forma puede reducirse el ancho de la palabra de microcontrol. En la figura siguiente se<br />

ilustra el diseño del secuenciador mediante: muxes, un sumador en uno y algunas redes<br />

combinacionales, que implementan el contador con las funciones especiales.<br />

Las redes combinacionales que determinan la próxima microinstrucción a partir de los bits de<br />

microcontrol y de los códigos de operación (Cop, funct), suelen denominarse tablas de<br />

despacho.<br />

Cuando PCsel toma valor 0, se tiene retorno al estado inicial (búsqueda de instrucción o<br />

fetch); cuando toma valor 1 se pasa a la microinstrucción siguiente; y cuando vale 2 se<br />

determina la próxima microinstrucción en función de la instrucción que se está interpretando<br />

electrónicamente, mediante la activación de una tabla de despacho.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


PC<br />

bus IR<br />

32 Estructuras de Computadores Digitales<br />

TDsel<br />

PCsel<br />

WE PC<br />

"1"<br />

Cop<br />

Funct<br />

Secuenciador<br />

T0 0<br />

T1 1<br />

T2 2<br />

1<br />

dir<br />

0<br />

0<br />

1<br />

2<br />

Memoria<br />

Instrucciones<br />

Add<br />

r<br />

Rd<br />

op<br />

Control<br />

funciones<br />

muxes<br />

memoria<br />

registros<br />

write enable<br />

Control PC<br />

Condiciones<br />

Señales<br />

de<br />

Control<br />

Figura <strong>13</strong>.19. Unidad de control, mediante secuenciador.<br />

Además de los dos bits que forman PCsel, se requieren algunos adicionales que permitan<br />

representar todas las bifurcaciones que se produzcan en el diagrama de estado. En el diagrama<br />

anterior se tienen tres tablas de despacho, lo cual requiere dos bits adicionales que se han<br />

denominado TDsel; este ejemplo supone tres estados con múltiples bifurcaciones.<br />

Debe notarse que las condiciones provenientes del camino de datos junto con las<br />

microoperaciones que controlan PC forman las señales de control que actúan sobre la Unidad de<br />

Instrucción.<br />

Ventajas de la microprogramación:<br />

Facilita el diseño del control.<br />

Es flexible: puede adaptarse a los cambios, mediante reprogramación.<br />

Permite implementar repertorios complejos.<br />

Generalización: Puede implementar diversos repertorios en la misma máquina,<br />

sintonizando el repertorio con la aplicación.<br />

Compatibilidad: Diferentes organizaciones y recursos pueden disponer del mismo repertorio.<br />

Desventajas de la microprogramación:<br />

Es costosa su implementación.<br />

Es lenta comparada con un control alambrado (hardwired); es decir, mediante compuertas.<br />

Se tienen dos modalidades de microprogramación:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 33<br />

Microprogramación horizontal:<br />

Se especifica un bit para cada punto del control del camino de datos. Se tiene control total del<br />

paralelismo del camino de datos, pero emplea gran cantidad de bits de microcódigo.<br />

Microprogramación vertical:<br />

Se compacta el microcódigo codificando en campos en que se agrupan clases de<br />

microoperaciones. Luego se decodifica localmente para generar todas las señales de control.<br />

Permite una mejor abstracción de la microprogramación, pero la decodificación puede hacer la<br />

máquina más lenta; debido a los niveles que deben recorrerse para la decodificación.<br />

Pueden especificarse diferentes formatos, por ejemplo uno para especificar transferencias y otro<br />

para especificar saltos.<br />

Por ejemplo asumiendo una longitud de palabra de micromemoria de 21 bits:<br />

Para las microinstrucciones de operaciones puede emplearse el siguiente formato:<br />

código operando1 operando2 destino operaciones<br />

1 5 5 5<br />

Para las microinstrucciones de control, que cambian la secuencia de ejecución, puede emplearse<br />

el siguiente formato:<br />

código condición próxima microdirección<br />

1 3 17<br />

Se consideran sólo dos formatos, por esto el campo código de microinstrucción ocupa un bit.<br />

Compromiso: Espacio versus tiempo.<br />

Dependiendo de la estructura del camino de datos, algunas señales de control no se pueden<br />

activar simultáneamente; por ejemplo en la post-escritura se activa memoria a registro o alu a<br />

registro, pero no ambas simultáneamente. Esto implica que puede codificarse ambas señales en<br />

un solo bit de la microinstrucción, lo cual ahorra memoria de microprograma.<br />

En el caso del registro que debe leerse y cargarse en el busA, puede disponerse de 32 señales,<br />

que activan individualmente a cada uno de los registros del arreglo; pero como no pueden<br />

activarse simultáneamente dos registros para que coloquen sus datos en el busA, si se codifica<br />

en un campo de cinco bits, deberá colocarse un decodificador externo (con cinco líneas de<br />

entrada y 32 salidas) pero se incurrirá en un tiempo adicional debido al circuito combinacional.<br />

La codificación debe permitir que las acciones que se puedan realizar en paralelo puedan ser<br />

especificadas en una sola microinstrucción.<br />

<strong>13</strong>.10.3. Diseño del microprograma:<br />

Existen dos modalidades, una orientada a las transferencias; la otra, a las señales de control.<br />

5<br />

Profesor Leopoldo Silva Bijit 19-11-2008


34 Estructuras de Computadores Digitales<br />

a) Microprograma orientado a las transferencias.<br />

El microprograma se escribe en forma similar a un programa en un lenguaje de alto nivel.<br />

Cada línea, que puede tener un rótulo que simboliza la microdirección, corresponde a una<br />

microinstrucción, que se realiza en un ciclo de reloj.<br />

Una microinstrucción es un secuencia de microoperaciones, separadas por comas.<br />

Las microoperaciones son descritas por las transferencias físicas que realizan, o por las<br />

funciones que activan en los recursos, o por sentencias de control.<br />

Las sentencias de control deben especificar cuál será la próxima microinstrucción a realizar:<br />

Pueden emplearse saltos a microdirecciones; o activar funciones combinacionales, mediante las<br />

tablas de despacho) que determinan la próxima microdirección.<br />

El emplear lenguajes permite realizar simulaciones para verificar la correcta interpretación de<br />

las instrucciones, y a la vez ensamblar los diferentes bits de cada microinstrucción.<br />

El siguiente es el texto del microprograma que implementa el <strong>procesador</strong> <strong>multiciclo</strong><br />

desarrollado anteriormente, pero con un segundo estado común para todas las instrucciones.<br />

Esto último implica que la instrucción jump se realizará en dos ciclos. Nótese que el estado<br />

siguiente al add y al sub se ha tratado como un solo estado equivalente (el ubicado en la<br />

microdirección writereg), lo cual requiere emplear otra tabla de despacho, ya que sólo puede<br />

existir un estado siguiente al estado 0011.<br />

Se describe una unidad de control microprogramada mediante la descripción de las<br />

microoperaciones (empleando transferencias físicas), y el microcontrol empleando:<br />

transferencias al PC (micro contador de programa) e invocaciones a las tablas de despacho.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 35<br />

El microprograma implementa el siguiente diagrama de estados (donde la identificación del<br />

estado es la microdirección):<br />

000<br />

0<br />

inc<br />

j<br />

001<br />

T1 0<br />

add<br />

sub<br />

001<br />

1<br />

inc<br />

010<br />

0<br />

Cero<br />

ori<br />

010<br />

1<br />

inc<br />

011<br />

0<br />

000<br />

T0 1<br />

load<br />

011<br />

1<br />

100<br />

0<br />

sw<br />

inc<br />

inc<br />

beq<br />

101<br />

0<br />

inc<br />

101<br />

1<br />

110<br />

0<br />

100<br />

Cero<br />

1<br />

Cero Cero Cero<br />

Figura <strong>13</strong>.20. Diagrama de estados. Microprograma.<br />

fetch: IR = MemInst[PC], PC = PC+4, PC = PC +1;<br />

A=R[rs], B=R[rt], if(COp == J) PC = (PC)&0xF0000000+add_26*4, PC = T0[OP];<br />

add:<br />

S = add(A, B), PC = T1[OP];<br />

sub: S = sub(A, B), PC = PC +1;<br />

writereg: R[rd] = S, PC = 0.<br />

ori: S = or(A, zero_ext(Inm16)), PC = PC +1;<br />

R[rt] = S, PC = 0.<br />

loadword: S = add(A, sign_ext(Inm16)), PC = PC +1;<br />

M = MemDat[S], PC = PC +1;<br />

R[rt] = M, PC = 0.<br />

storeword: S = add(A, sign_ext(Inm16)), PC = PC +1;<br />

MemDat[S] = B, PC = 0.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


36 Estructuras de Computadores Digitales<br />

beq: if (Equal) PC = PC + sign_ext(Inm16)] *4, PC = 0.<br />

Si mediante las 12 líneas formadas por los buses Cop y Funct, formamos un decodificador de la<br />

instrucción, generando el bus OP, de tres bits, ya que en el ejemplo se microprograman siete<br />

instrucciones, se tiene:<br />

Instrucción COP Funct OP<br />

ADD 000000 100000 000<br />

SUB 000000 100010 001<br />

ORI 001101 010<br />

LW 100011 011<br />

SW 101011 100<br />

BEQ 000100 101<br />

J 000010 110<br />

COp<br />

Funct<br />

6<br />

6<br />

OP<br />

Figura <strong>13</strong>.21. Generación de bus OP.<br />

La tabla de despacho 0, puede describirse por el siguiente mapa de memoria, asumiendo la<br />

dirección 0000 para la primera microinstrucción que realiza la búsqueda de la instrucción. Se<br />

agregan columnas con los mnemónicos de las instrucciones y con los nombres simbólicos de las<br />

micro direcciones:<br />

Instrucción OP dirección Rótulo<br />

ADD 000 0010 add<br />

SUB 001 0011 sub<br />

ORI 010 0101 ori<br />

LW 011 0111 loadword<br />

SW 100 1010 storeword<br />

BEQ 101 1100 beq<br />

JUMP 110 0000 fetch<br />

OP<br />

T0<br />

3 4<br />

dirección<br />

Figura <strong>13</strong>.22. Tabla de despacho 0.<br />

También puede diseñarse mediante compuertas la tabla anterior.<br />

La tabla de despacho 1 (equivale a una constante), puede describirse según:<br />

Instrucción OP dirección Rótulo<br />

ADD 000 0100 writereg<br />

Figura <strong>13</strong>.23. Tabla de despacho 1.<br />

Es importante destacar que cada línea del microprograma debe permitir determinar el valor de<br />

cada uno de los bits de la microinstrucción.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 37<br />

Se definen tres microoperaciones para controlar la escritura en el registro PC. La señal PCWR,<br />

que debe activarse para escritura incondicional en PC; PCBEQ que se activa si la instrucción en<br />

ejecución es una bifurcación; y PCJ que se activa si la instrucción en curso es un salto<br />

incondicional. Las señales nPC_sel[1..0] seleccionan el contenido a escribir en el registro PC.<br />

La siguiente ecuación muestra cuando debe escribirse en el registro PC.<br />

WE PC = PCWR | (PCBEQ & Equal) | (PCJ & (OP== j))<br />

La siguiente tabla muestra los contenidos del microprograma que tienen relación con el control<br />

y las operaciones que cambian PC. Puede completarse agregando las columnas para el resto<br />

de las microperaciones. En caso de implementar con ROM, las condiciones superfluas se<br />

reemplazan por ceros.<br />

control<br />

operaciones que cambian PC<br />

Rótulo dirección TDsel PCsel nPC_sel PCWR PCJ PCBEQ<br />

fetch 0000 01 00 1 0 0<br />

0001 00 10 1 0 1 0<br />

add 0010 01 10 0 0 0<br />

sub 0011 01 0 0 0<br />

writereg 0100 00 0 0 0<br />

ori 0101 01 0 0 0<br />

0110 00 0 0 0<br />

loadword 0111 01 0 0 0<br />

1000 01 0 0 0<br />

1001 00 0 0 0<br />

storeword 1010 01 0 0 0<br />

1011 00 0 0 0<br />

beq 1100 00 10 0 0 1<br />

Figura <strong>13</strong>.24. Contenidos del microprograma.<br />

Se vuelve a dibujar un esquema parcial de la unidad de instrucción y un esquema, en base a<br />

compuertas, para la lógica que forma la señal de control que habilita la escritura en el registro<br />

PC.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


PC<br />

38 Estructuras de Computadores Digitales<br />

nPC_sel1<br />

nPC_sel0<br />

WE PC<br />

Equal<br />

PCBE<br />

Q<br />

PCWR<br />

WE P<br />

C<br />

4<br />

0<br />

0<br />

PCJ<br />

OP<br />

==j<br />

SigExt*4<br />

Inm16<br />

PC[31..28<br />

]<br />

add_26<br />

0..1<br />

1<br />

1<br />

Figura <strong>13</strong>.25. Unidad de instrucción. Escritura en PC.<br />

<strong>13</strong>.10.4. Microprogramación orientada a las señales de control.<br />

Se desarrollará el método para el camino <strong>multiciclo</strong> propuesto en el texto de referencia, que se<br />

ilustra a continuación:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 39<br />

WE BR<br />

nPC_sel<br />

WE PC<br />

MemCtr<br />

MemWr<br />

Unidad de Control<br />

MemRd<br />

WE IR<br />

MemtoRe<br />

Cop g<br />

Funct<br />

RegDs<br />

t<br />

RegW<br />

r<br />

ExtOp AluCtr<br />

AluSel<br />

A<br />

AluSel<br />

B<br />

Cero<br />

JAddr<br />

BR<br />

2<br />

1<br />

0<br />

P<br />

C<br />

0<br />

1<br />

Add<br />

r<br />

Memoria<br />

IR<br />

Rs<br />

Rt<br />

Rd<br />

1<br />

0<br />

Unidad<br />

Registros<br />

Unidad<br />

de<br />

Operaciones<br />

AluOut<br />

Inm16<br />

Din<br />

DOut<br />

Reloj<br />

Figura <strong>13</strong>.26. Camino de datos <strong>multiciclo</strong>. Texto de referencia.<br />

El camino de datos comparte la memoria para las instrucciones y los datos; los cálculos de<br />

direcciones de la unidad de instrucción se realizan en la ALU; para calcular la condición de<br />

igualdad en las bifurcaciones se emplea la ALU (ésta genera la señal cero). En el texto de<br />

referencia se agrega el registro MDR (Memory Data Register), para almacenar datos leídos de la<br />

memoria.<br />

En el primer ciclo del reloj se lee la memoria para obtener la instrucción a ejecutar, y al mismo<br />

tiempo se emplea la unidad de operaciones para calcular la dirección de la próxima instrucción<br />

(PC = PC +4).<br />

En el segundo ciclo del reloj, se decodifica la instrucción a ejecutar (en la unidad de control), al<br />

mismo tiempo se leen los registros asociados a los campos Rs y Rt de la instrucción (aunque<br />

algunas instrucciones no los empleen); también se calcula empleando la unidad de operaciones<br />

Profesor Leopoldo Silva Bijit 19-11-2008


40 Estructuras de Computadores Digitales<br />

la dirección de salto de la bifurcación (que se almacena en BR); y se genera la dirección de salto<br />

incondicional.<br />

Es necesario un registro adicional para almacenar la dirección de bifurcación, se emplea BR con<br />

este propósito. Debe destacarse que se calcula en todos los casos dicha dirección, aunque la<br />

instrucción no sea una bifurcación.<br />

En caso de instrucción de salto, en el segundo ciclo se tiene decodificada la instrucción y se<br />

pueden activar las señales de control de PC, para grabar la dirección de salto que se denomina<br />

Jaddr, en el diagrama. Además, en este caso, se requiere que la próxima microinstrucción sea de<br />

búsqueda de próxima instrucción (fetch).<br />

De este modo el segundo estado será común para todas las instrucciones, en él se leen los<br />

registros y además se decodifica la instrucción, generándose las señales de control, y mediante<br />

la activación de la tabla de despacho se puede seguir procesando las diferentes instrucciones.<br />

En el tercer ciclo del reloj se ejecutan las operaciones inmediatas y aritméticas, o bien se calcula<br />

de dirección efectiva en el caso de instrucciones de transferencias. En caso de bifurcación se<br />

calcula la resta de los operandos leídos en el segundo ciclo, y se genera la señal de resultado<br />

igual a cero.<br />

A continuación se ilustran la forma de generar la dirección de salto Jaddr, y un detalle de la<br />

unidad de operaciones modificada para compartir la unidad aritmético lógica.<br />

PC[31..28]<br />

add_26<br />

0..1<br />

JAddr<br />

PC<br />

busA<br />

ExtOp<br />

ALUSel<br />

A<br />

0<br />

1<br />

ALUSel<br />

B<br />

AluCtr Cero<br />

AluOut<br />

Cero<br />

PCWRCon<br />

d PCWR<br />

COp ==j<br />

WE P<br />

C<br />

busB<br />

4<br />

0<br />

1<br />

Inm16<br />

Extensor<br />


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 41<br />

El diagrama lógico muestra la señal habilitadora de escritura del registro PC: en forma<br />

incondicional (para formar PC+4), o para formar la dirección de salto en caso de jump; y en<br />

forma condicionada por el test del flag cero para las bifurcaciones.<br />

Note que se requiere que la entrada B de la ALU tenga ahora un mux de cuatro entradas. La<br />

constante 4 permite formar PC + 4. Cuando el control del mux toma valor dos se deja pasar<br />

hacia la alu, el campo inmediato de 16 bits extendido con signo y multiplicado por cuatro para<br />

generar saltos relativos a PC, considerando que el valor inmediato es de instrucciones (no de<br />

bytes).<br />

Cuando el control del mux toma valor tres se deja pasar hacia la alu, el campo inmediato de 16<br />

bits extendido con signo para las instrucciones de transferencias; y extendido con ceros, si la<br />

instrucción es lógica.<br />

El camino de datos no almacena en registro la salida de la alu, por esta razón deben sostenerse<br />

las entradas a la alu, para que ésta no cambie su salida.<br />

fetch: IR = M[PC], AluOut=add(PC, 4), PC = AluOut, PC = PC +1;<br />

A=R[Rs], B=R[Rt],if(COp == J) PC = JAddr,<br />

AluOut=add(PC, sign_ext(Inm16)] *4), BR=AluOut, PC = T0[OP];<br />

add: AluOut = add(A, B), PC = PC +1;<br />

R[Rd] = AluOut, AluOut = add(A, B), PC = 0.<br />

sub: AluOut = sub(A, B), PC = PC +1;<br />

R[Rd] = AluOut, AluOut = sub(A, B), PC = 0.<br />

ori: AluOut = or(A, zero_ext(Inm16)), PC = PC +1;<br />

R[Rt] = AluOut, AluOut = or(A, zero_ext(Inm16)), PC = 0.<br />

loadword: AluOut = add(A, signext(Inm16)), PC = PC +1;<br />

Dout = M[AluOut], AluOut = add(A, signext(Inm16)), PC = PC +1;<br />

R[Rt] = Dout, AluOut = add(A, signext(Inm16)), PC = 0.<br />

storeword: AluOut = add(A, signext(Inm16)), PC = PC +1;<br />

M[AluOut] = B, AluOut = add(A, signext(Inm16) , PC = 0.<br />

beq: AluOut= sub(A, B), if (Cero) PC = BR, PC = 0.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


42 Estructuras de Computadores Digitales<br />

La siguiente tabla muestra el contenido del microprograma, cada columna corresponde a una<br />

microinstrucción; en los renglones figuran los valores de las señales de control.<br />

WE BR 0 1 0 0 0 0 0 0 0 0 0 0 0 0<br />

nPC_sel[0] 0 0 1<br />

nPC_sel[1] 0 1 0<br />

PCWR 1 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

PCWRCond 0 0 0 0 0 0 0 0 0 0 0 0 0 1<br />

MemCtr 0 1 1 1 1 1<br />

MemWr 0 0 0 0 0 0 0 0 0 0 0 0 1 0<br />

MemRd 1 1 1 0<br />

WE IR 1 0 0 0 0 0 0 0 0 0 0 0 0 0<br />

MemtoReg 0 0 0 0<br />

RegDst 0 0 0 1<br />

RegWr 0 0 0 1 0 1 0 1 0 0 1 0 0 0<br />

ExtOp 1 0 0 1 1 1 1 1<br />

AluCtr[0] 0 0 0 0 0 0 1 1 0 0 0 0 0 0<br />

AluCtr[1] 1 1 1 1 1 1 0 0 1 1 1 1 1 1<br />

AluCtr[2] 0 0 0 0 1 1 0 0 0 0 0 0 0 1<br />

AluSelA 0 0 1 1 1 1 1 1 1 1 1 1 1 1<br />

AluSelB[0] 0 0 0 0 0 0 1 1 0 0 0 0 0 1<br />

AluSelB[1] 0 1 1 1 1 1 1 1 1 1 1 1 1 0<br />

PCsel[0] 1 0 1 0 1 0 1 0 1 1 0 1 0 0<br />

PCsel[1] 0 1 0 0 0 0 0 0 0 0 0 0 0 0<br />

TDsel[0] 0<br />

TDsel[1] 1<br />

Dirección 0 1 2 3 4 5 6 7 8 9 a b c d<br />

Figura <strong>13</strong>.28. Microprograma.<br />

Para ejecutar el salto en dos ciclos se requiere agregar una señal de control que se active cuando<br />

el código de operación es un salto incondicional.<br />

La tabla de verdad para la Tabla de Despacho 1, se ilustra a continuación. Las microdirecciones<br />

están en hexadecimal.<br />

Cop+Funct Dirección<br />

ADD 2<br />

SUB 4<br />

ORI 6<br />

LW 8<br />

SW b<br />

BEQ d<br />

J 0<br />

Figura <strong>13</strong>.29. Tabla de despacho 1.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 43<br />

Note que la señal de control WE PC se forma con las microoperaciones: PCWR, PCWRCond y la<br />

condición Cero, y con la señal (COp == j). Se tiene la siguiente ecuación:<br />

WE PC = (PCWRCond & Cero) | PCWR | (COp == j);<br />

En caso de implementar con ROM, las condiciones superfluas en el microprograma anterior<br />

pueden reemplazarse por ceros. Si se emplea lógica programable, pueden simplificarse las<br />

ecuaciones a través del uso de las condiciones superfluas.<br />

La tabla de despacho también puede implementarse en ROM, o bien con lógica programable; en<br />

este caso pueden emplearse condiciones superfluas, ya que sólo es de interés el campo funct en<br />

las operaciones de tipo R; es decir aquéllas en las cuales el COp es cero.<br />

Debido a la dificultad que tiene el manipular largos vectores de unos y ceros, puede aplicarse el<br />

siguiente método para describir el microcódigo:<br />

Efectuar listado de las señales de control, junto a los valores que pueden tomar.<br />

Agrupar funcionalmente las señales de control, en campos.<br />

Colocar los campos en un orden lógico. Primero las que controlan las fuentes de datos,<br />

luego las operaciones sobre ellos, después el destino del resultado, y finalmente la<br />

microsecuenciación.<br />

Establecer nombres simbólicos para los campos, y los valores (también simbólicos) que<br />

pueden tomar.<br />

Codificar operaciones que nunca puedan realizarse en concurrencia.<br />

Señales no codificadas.<br />

Señal No Activa Activa<br />

ALUSelA AluInA = PC AluInA= R[rs]<br />

RegWr - R[Rw] busW<br />

MemtoReg busW =AluOut busW=Dout<br />

RegDst Rw = Rd Rw = Rt<br />

WE BR - BR AluOut<br />

MemRd - Dout=Mem[Add]<br />

MemWr - Mem[Add]=Din<br />

MemCtr Add = PC Add = AluOut<br />

WE IR - IR Dout<br />

PCWR - PC PCSource<br />

PCWRCond - If (Cero) PC PCSource<br />

ExtOp ExtOut=ZeroExt(Inm16) ExtOut=SignExt(Inm16)<br />

PCSource es el bus de entrada al registro PC.<br />

Figura <strong>13</strong>.30. Señales no codificadas.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


44 Estructuras de Computadores Digitales<br />

Señales Codificadas.<br />

Señal Control Valores Transferencias físicas.<br />

AluCtr 010 ALUOut= AluInA + AluInB<br />

AluCtr 110 ALUOut= AluInA - AluInB<br />

AluCtr 001 ALUOut= AluInA or AluInB<br />

ALUSelB 00 AluInB = 4<br />

ALUSelB 01 AluInB = R[rt]<br />

ALUSelB 10 AluInB = SignExt(Inm16)*4<br />

ALUSelB 11 AluInB = ExtOut<br />

nPC_sel 00 PCSource = AluOut<br />

nPC_sel 01 PCSource = BR<br />

nPC_sel 10 if(COp ==j) PCSource = JAddr<br />

PCsel 00 PC = 0<br />

PCsel 10 PC = TablaDespacho(COp ,funct)<br />

PCsel 01 PC = PC + 1<br />

TDsel 00 TablaDespacho=T1<br />

TDsel 01 TablaDespacho=T2<br />

TDsel 10 TablaDespacho=T3<br />

Figura <strong>13</strong>.31. Señales codificadas.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 45<br />

Nombres y Valores Simbólicos de los Campos.<br />

Nombre Campo Valores Campo Función del campo con valor específico<br />

ALU Add ALU realiza suma<br />

Sub<br />

ALU realiza resta<br />

Or<br />

ALU realiza or<br />

FuenteA PC AluInA = PC<br />

rs<br />

AluInA = R[rs]<br />

FuenteB 4 AluinB = 4<br />

rt<br />

AluInB = R[rt]<br />

Inm*4 AluInB = SignExt( IR[15-0] *4)<br />

Extend<br />

AluInB = ExtOut<br />

Ext Sign ExtOut = SignExt( Inm16)<br />

Cero<br />

ExtOut = CeroExt(Inm16)<br />

Destino rd ALU R[rd] = AluOut<br />

rt ALU<br />

R[rt] = AluOut<br />

rt Mem R[rt] = Dout<br />

Memoria Read PC lee instrucción usando PC<br />

Read ALU<br />

lee dato usando dirección efectiva en AluOut<br />

Write ALU<br />

escribe dato con dirección efectiva en AluOut<br />

IR write IR IR = Mem[PC]<br />

BR write BR BR = AluOut<br />

PC write ALU PC = ALU<br />

Branch<br />

IF (Cero) then PC = BR<br />

ifJump<br />

if(COp==j) PC = JAddr ; Dirección de salto<br />

Control Sig Va a siguiente µinstrucción<br />

Fetch<br />

Va a la primera microinstrucción<br />

TD n<br />

Despacho usando tabla n<br />

Microprograma:<br />

rótulo ALU FuenteA FuenteB Ext Destino Memoria IR<br />

BR PC Control<br />

Write Write Write<br />

Fetch: Add PC 4 Read PC IR ALU Sig<br />

Add PC Inm*4 Sign BR ifJump TD 1<br />

Add: Add rs rt Sig<br />

rd ALU<br />

Fetch<br />

Sub: Sub rs rt Sig<br />

rd ALU<br />

Fetch<br />

Ori: Or rs Extend Zero Sig<br />

rt ALU<br />

Fetch<br />

Lw: Add rs Extend Sign Sig<br />

Read ALU<br />

Sig<br />

rt MEM<br />

Fetch<br />

Sw: Add rs Extend Sign Sig<br />

Write ALU<br />

Fetch<br />

Beq: Sub rs rt Branch Fetch<br />

Figura <strong>13</strong>.32. Microprograma con señales.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


46 Estructuras de Computadores Digitales<br />

El microprograma es una tabla simbólica del contenido de la micromemoria.<br />

Los rótulos corresponden a direcciones simbólicas de la micromemoria.<br />

Los valores de cada columna, dentro de un renglón, deben permitir determinar el valor de cada<br />

uno de los bits de la microinstrucción.<br />

Notar que el branch se resuelve después de la alu, con la señal cero.<br />

<strong>13</strong>.10.5. Lógica alambrada.<br />

Usar un dispositivo programable con salidas de registro, para programar las funciones<br />

siguientes:<br />

Próximo estado = F1(Estado, Cod. Op., Funct)<br />

Señales de Control = F2(Estado, Cod. Op., Funct, Condiciones)<br />

Con esta arquitectura, las realimentaciones del estado son internas al dispositivo.<br />

PLD<br />

Entradas<br />

Salidas<br />

Figura <strong>13</strong>.33. Esquema lógica alambrada.<br />

Este esquema se emplea para diseñar unidades de control en firmware, o de lógica alambrada.<br />

Diseño que resulta más rápido que la lectura de memorias del caso anterior.<br />

Microsecuenciación<br />

Una variante del esquema a) mediante diagramas de estado, es emplear para registrar el estado<br />

un contador sincrónico con funciones (sincrónicas): de carga paralela, clear e incrementar. Y<br />

programar la función de próximo estado en función de estas señales.<br />

Este esquema se denomina de microsecuenciación y se emplea en diseños de la unidad de<br />

control de <strong>procesador</strong>es.<br />

Las funciones de las señales de control del contador son:<br />

Cero: llevar al estado inicial.<br />

Inc: pasar al estado siguiente.<br />

Load: presetear un estado determinado<br />

0000<br />

Cer<br />

o<br />

i<br />

i+1<br />

Inc<br />

i<br />

Load<br />

Figura <strong>13</strong>.34. Señales de control del contador.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 47<br />

Ejemplo.<br />

Diseñar con un secuenciador el siguiente diagrama de estados.<br />

0000<br />

inc<br />

0100<br />

x= 0<br />

inc<br />

load<br />

0110 1000 1011 0011 0010<br />

inc<br />

0001<br />

load<br />

load<br />

load load<br />

load<br />

x=1 x= 2 x= 3 x= 4<br />

inc<br />

1001 1100<br />

inc<br />

x= 5<br />

inc<br />

0101 0111 1010<br />

Cero Cero Cero Cero Cero Cero<br />

Figura <strong>13</strong>.35. Diagrama de estados de secuenciador.<br />

El contador registra el estado, y sus salidas están conectadas al bus de direcciones de la<br />

memoria. El contenido de la memoria son: los bit C, I, L que están conectadas a las señales<br />

Cero, Incrementar y Cargar del registro; además pueden grabarse en la memoria, los diversos<br />

bits de salida que se requieran asociados a cada estado (esquema de Moore).<br />

Esto en caso de emplear una memoria para la implementación combinacional; pero también<br />

puede emplearse un dispositivo lógico programable.<br />

A continuación se presenta la tabla de transiciones, o programa del secuenciador, notando que la<br />

información del próximo estado no se almacena en la memoria, se incorpora en la tabla sólo con<br />

fines aclaratorios:<br />

Profesor Leopoldo Silva Bijit 19-11-2008


48 Estructuras de Computadores Digitales<br />

Estado Próximo C I L Salidas<br />

0000 0001 0 1 0<br />

0001 0 0 1<br />

0010 0000 1 0 0<br />

0011 0000 1 0 0<br />

0100 0101 0 1 0<br />

0110 0111 0 1 0<br />

1000 1001 0 1 0<br />

1011 1100 0 1 0<br />

1001 1010 0 1 0<br />

1100 0000 1 0 0<br />

0101 0000 1 0 0<br />

0111 0000 1 0 0<br />

1010 0000 1 0 0<br />

Figura <strong>13</strong>.36. Tabla de transiciones.<br />

Nótese que los nombres binarios de los estados se eligen para ocupar lo más eficientemente que<br />

sea posible la señal de cuenta o incremento del contador.<br />

Al estado 0000, se llega después del reset inicial. Y si la naturaleza del proceso secuencial es<br />

repetitivo, al terminar los diferentes recorridos de estados se retorna al estado inicial. Para esto<br />

se emplea la señal Cero.<br />

Estando en el estado 0001, de acuerdo a la entrada se discierne cuál es el próximo estado. En el<br />

ejemplo existe sólo un estado para el cual existen múltiples bifurcaciones. Se requiere<br />

almacenar la información de los próximos estados de acuerdo a los valores de las entradas, y<br />

cuando se active la señal Load. Esta información se denomina Tabla de Despacho.<br />

Entrada x Próximo estado.<br />

000 0100<br />

001 0110<br />

010 1000<br />

011 1011<br />

100 0011<br />

101 0010<br />

Figura <strong>13</strong>.37. Tabla de despacho.<br />

Esta información puede codificarse en una ROM pequeña, o implementarse mediante un PLD.<br />

Debe notarse que en la ROM del secuenciador no se almacena el próximo estado. Esto puede<br />

significar un ahorro importante de memoria, si existe un pequeño número de estados con<br />

múltiples bifurcaciones.<br />

En caso de existir varios nodos con bifurcaciones, es preciso definir otras señales de carga, una<br />

por cada nodo con bifurcaciones, y también igual número de tablas de Despacho. La señal Load<br />

del contador es activada por el or de las señales de carga de las tablas de despacho.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 49<br />

Un esquema general de la arquitectura para diseñar máquinas secuenciales, en base a un<br />

secuenciador, se ilustra a continuación:<br />

Tabla de<br />

Despacho<br />

Entradas<br />

Contador<br />

Carga<br />

Paralela<br />

L C Inc<br />

ROM( o PLD)<br />

Direcciones<br />

Salidas<br />

Contenidos<br />

I C L<br />

Próximo Estado<br />

Figura <strong>13</strong>.38. Esquema secuenciador.<br />

<strong>13</strong>.11 Resumen del Diseño del Control Multiciclo.<br />

La especificación inicial del control puede efectuarse a partir de un diagrama de estados o de un<br />

microprograma.<br />

A partir de lo anterior, debe seleccionarse cómo especificar el control de la secuenciación. Lo<br />

cual a su vez puede realizarse de dos formas básicas: Especificando la función de próximo<br />

estado; o bien, las funciones del contador de saltos.<br />

Debe notarse que el control de la secuenciación puede determinarse independientemente de la<br />

elección inicial.<br />

Luego la representación lógica del control puede efectuarse mediante ecuaciones o tablas de<br />

verdad.<br />

Finalmente la técnica de implementación de las ecuaciones lógicas puede realizarse mediante<br />

dispositivos lógicos programables o mediante ROM.<br />

Debe notarse que la representación lógica y la técnica de implementación también pueden ser<br />

determinadas independientemente de las decisiones anteriores.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


50 Estructuras de Computadores Digitales<br />

El siguiente esquema muestra las diversas relaciones que existen:<br />

Representación<br />

inicial.<br />

Control<br />

secuenciación.<br />

Representación<br />

lógica.<br />

Técnica de<br />

implementación.<br />

Diagrama de Estados.<br />

Función Próximo<br />

Estado.<br />

Ecuaciones lógicas.<br />

Dispositivo<br />

programable.<br />

lógico<br />

control alambrado.<br />

Microprograma<br />

Contador.<br />

Tablas de Despacho.<br />

Tablas de Verdad.<br />

ROM<br />

control<br />

microprogramado<br />

Figura <strong>13</strong>.39. Relaciones entre métodos de diseño.<br />

La figura anterior muestra las alternativas de diseño del control.<br />

El control es más complicado cuando se tienen: repertorios complejos de instrucciones,<br />

diferentes modos de direccionamiento, tratamiento de excepciones o cuando el camino de datos<br />

tiene restricciones para ahorrar componentes (ejemplo tratado en el texto, sólo una memoria y<br />

un sumador).<br />

Se puede simplificar aún más el control si se desea ejecutar varias instrucciones al mismo<br />

tiempo, más que aumentar la velocidad promedio de ejecución de las instrucciones individuales.<br />

<strong>13</strong>.12. Preparación para segmentación (pipeline).<br />

Se desea ejecutar varias instrucciones, al mismo tiempo. Se dividen las etapas mediante<br />

registros, cada instrucción puede estar ejecutándose en una etapa. Si existen cinco etapas,<br />

pueden ejecutarse simultáneamente cinco instrucciones. Para esto es preciso, que cada<br />

instrucción pase por las cinco etapas, y que cada etapa tenga su propio control.<br />

Se verá más adelante las razones por las cuales las instrucciones deben durar aproximadamente<br />

lo mismo. Para lograr esto, basta en el diagrama de estados, agregar estados en los que no se<br />

activen controles.<br />

La determinación de cuáles estados deben agregarse requiere de un análisis más refinado que se<br />

efectuará más adelante.<br />

A continuación se muestra un esquema, con los estados agregados.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 51<br />

nPC_sel = “+4”, WE PC , WE IR ;<br />

Add<br />

Sub Ori Lw Sw Beq J<br />

WE A<br />

WE B<br />

WE A<br />

WE B<br />

WE A WE A WE A<br />

WE B<br />

WE A<br />

WE B<br />

nPC_sel =<br />

Jmp WE PC.<br />

AluSrc<br />

=busB,<br />

AluCtr<br />

= add,<br />

WE S<br />

AluSrc<br />

=busB,<br />

AluCtr<br />

= sub,<br />

WE S<br />

AluSrc<br />

=Op32,<br />

ExtOp<br />

=zero,<br />

AluCtr =<br />

ori,<br />

AluSrc =<br />

Op32,<br />

ExtOp<br />

=sign,<br />

AluCtr =<br />

add,<br />

AluSrc =<br />

Op32,<br />

ExtOp<br />

=sign,<br />

AluCtr =<br />

add,<br />

if (Equal)<br />

{ nPC_sel =<br />

Br ,<br />

WE PC<br />

}.<br />

WE S<br />

WE S<br />

WE S<br />

RegDst<br />

=rd,<br />

Memto<br />

reg=alu<br />

RegWr.<br />

RegDst<br />

=rd,<br />

Memto<br />

reg=alu<br />

RegWr.<br />

RegDst<br />

=rt,<br />

Memto<br />

reg=alu<br />

,RegWr<br />

.<br />

MemRd<br />

WE M<br />

MemWr<br />

.<br />

RegDst<br />

=rt,<br />

Memto<br />

reg=mem,<br />

RegWr.<br />

Figura <strong>13</strong>.40. Estados adicionales.<br />

Un esquema del control asociado a la etapa se muestra a continuación:<br />

Las señales de control, van viajando con los datos a través de la cañería (pipeline).<br />

Profesor Leopoldo Silva Bijit 19-11-2008


52 Estructuras de Computadores Digitales<br />

Reg<br />

MemtoReg Wr<br />

WE IR<br />

WE PC<br />

nPCsel<br />

0<br />

nPCsel<br />

WE1<br />

A<br />

nPCsel<br />

WE 0 S<br />

AluCtr<br />

AluSrc<br />

ExtO<br />

p<br />

WE M<br />

MemRd<br />

MemWr<br />

WE B<br />

RegD<br />

st<br />

COp+<br />

Funct<br />

Equal<br />

Unidad<br />

de<br />

Instrucción<br />

I<br />

R<br />

Rs<br />

Rt<br />

Rd<br />

busW<br />

Unidad<br />

Registros<br />

Inm16<br />

A<br />

B<br />

Unidad<br />

de<br />

Operacion<br />

es<br />

S<br />

Din<br />

Addr<br />

Memoria<br />

Datos<br />

M<br />

0<br />

1<br />

Reloj<br />

Figura <strong>13</strong>.41. Control pipeline.<br />

Profesor Leopoldo Silva Bijit 19-11-2008


Diseño <strong>procesador</strong> <strong>multiciclo</strong> 53<br />

Índice general.<br />

CAPÍTULO <strong>13</strong>. ...................................................................................................................................... 1<br />

DISEÑO DE UN PROCESADOR MULTICICLO. ............................................................................. 1<br />

<strong>13</strong>.1 REUTILIZACIÓN DE LOS RECURSOS Y TIEMPOS DE EJECUCIÓN DE ACUERDO A LA INSTRUCCIÓN. ...... 1<br />

<strong>13</strong>.2. USO DE REGISTROS PARA SEPARAR ETAPAS................................................................................... 2<br />

<strong>13</strong>.3. ETAPAS EN LA EJECUCIÓN DE INSTRUCCIONES. ............................................................................. 3<br />

<strong>13</strong>.4. TRANSFERENCIAS FÍSICAS. ........................................................................................................... 5<br />

<strong>13</strong>.5. SEÑALES DE CONTROL.................................................................................................................. 8<br />

<strong>13</strong>.6. COMPORTAMIENTO DEL PROCESADOR MULTICICLO. ................................................................... 10<br />

<strong>13</strong>.7. ALCANCES DE COMPARTIR RECURSOS. ........................................................................................ 11<br />

<strong>13</strong>.7.1. Compartir memoria. .......................................................................................................... 11<br />

<strong>13</strong>.7.2. Compartiendo la ALU. ....................................................................................................... 14<br />

<strong>13</strong>.8. DISEÑO DE LA UNIDAD DE CONTROL DEL PROCESADOR MULTICICLO. .......................................... 18<br />

<strong>13</strong>.8.1. Diagrama de estados ......................................................................................................... 19<br />

<strong>13</strong>.8.2. Control de Memorias Asincrónicas. ................................................................................... 20<br />

<strong>13</strong>.9 EXCEPCIONES. (INTERRUPCIONES Y TRAPS) ................................................................................ 21<br />

<strong>13</strong>.9.1. Tipos de Excepciones: ........................................................................................................ 22<br />

<strong>13</strong>.9.2. Formas de accesar al manipulador de excepciones: ........................................................... 22<br />

<strong>13</strong>.9.3. Formas de salvar el Estado. ............................................................................................... 22<br />

<strong>13</strong>.9.4 Modos: User y Kernel. ....................................................................................................... 23<br />

<strong>13</strong>.9.5. Registro de Estado. (STATUS) ........................................................................................... 23<br />

<strong>13</strong>.9.6. Registro CAUSE. ............................................................................................................... 24<br />

<strong>13</strong>.9.7. Instrucciones para el Co<strong>procesador</strong> 0. ............................................................................... 24<br />

<strong>13</strong>.9.8. Tratamiento de excepciones en la máquina de estados. ...................................................... 24<br />

<strong>13</strong>.9.9. Código del manipulador de Excepciones de SPIM. ............................................................ 25<br />

<strong>13</strong>.10 DISEÑO DE LA UNIDAD DE CONTROL DE UN PROCESADOR MULTICICLO. .................................... 28<br />

<strong>13</strong>.10.1. Diseño clásico. ................................................................................................................. 28<br />

<strong>13</strong>.10.2. Microprogramación. ........................................................................................................ 29<br />

Ventajas de la microprogramación: .................................................................................................................... 32<br />

Desventajas de la microprogramación: .............................................................................................................. 32<br />

Microprogramación horizontal: .......................................................................................................................... 33<br />

Microprogramación vertical: .............................................................................................................................. 33<br />

<strong>13</strong>.10.3. Diseño del microprograma: ............................................................................................. 33<br />

<strong>13</strong>.10.4. Microprogramación orientada a las señales de control. ................................................... 38<br />

<strong>13</strong>.10.5. Lógica alambrada. ........................................................................................................... 46<br />

Microsecuenciación ............................................................................................................................................ 46<br />

Ejemplo. .............................................................................................................................................................. 47<br />

<strong>13</strong>.11 RESUMEN DEL DISEÑO DEL CONTROL MULTICICLO. .................................................................. 49<br />

<strong>13</strong>.12. PREPARACIÓN PARA SEGMENTACIÓN (PIPELINE). ...................................................................... 50<br />

ÍNDICE GENERAL. ............................................................................................................................... 53<br />

ÍNDICE DE FIGURAS. ............................................................................................................................ 54<br />

Profesor Leopoldo Silva Bijit 19-11-2008


54 Estructuras de Computadores Digitales<br />

Índice de figuras.<br />

FIGURA <strong>13</strong>.1. ESQUEMA MÁQUINA MONOCICLO. ........................................................................................ 2<br />

FIGURA <strong>13</strong>.2. DIVISIÓN UNIDAD COMBINACIONAL. ..................................................................................... 2<br />

FIGURA <strong>13</strong>.3. REGISTROS PROCESADOR MULTICICLO. ................................................................................. 4<br />

FIGURA <strong>13</strong>.4. UNIDAD DE INSTRUCCIÓN. PROCESADOR MULTICICLO. ......................................................... 7<br />

FIGURA <strong>13</strong>.5. UNIDAD DE INSTRUCCIÓN. SIN MEMORIA DE INSTRUCCIONES. ............................................ 12<br />

FIGURA <strong>13</strong>.6. PROCESADOR MULTICICLO. SE COMPARTE LA MEMORIA. .................................................... <strong>13</strong><br />

FIGURA <strong>13</strong>.7. UNIDAD DE INSTRUCCIÓN, PARA COMPARTIR LA UNIDAD ARTITMÉTICA. ............................ 14<br />

FIGURA <strong>13</strong>.8. UNIDAD DE OPERACIONES, PARA COMPARTIR LA ALU. ...................................................... 15<br />

FIGURA <strong>13</strong>.9. DIAGRAMA DE ESTADOS. .................................................................................................... 19<br />

FIGURA <strong>13</strong>.10. CONTROL ASINCRÓNICO DE MEMORIA DE INSTRUCCIÓN. ................................................... 20<br />

FIGURA <strong>13</strong>.11. DIAGRAMA DE ESTADOS. CICLOS DE ESPERA..................................................................... 20<br />

FIGURA <strong>13</strong>.12. SERVICIO EXCEPCIONES.................................................................................................... 21<br />

FIGURA <strong>13</strong>.<strong>13</strong>. DIAGRAMA DE ESTADOS, CON EXCEPCIONES. .................................................................... 25<br />

FIGURA <strong>13</strong>.14. MODELO DE MOORE. MÁQUINA DE ESTADOS. ................................................................... 28<br />

FIGURA <strong>13</strong>.15. MODELO DE MOORE. MATRIZ DE TRANSICIONES. ............................................................. 29<br />

FIGURA <strong>13</strong>.16. MICROPROGRAMA............................................................................................................ 30<br />

FIGURA <strong>13</strong>.17. MICROCONTROL. ............................................................................................................. 30<br />

FIGURA <strong>13</strong>.18. UNIDAD DE CONTROL MICROPROGRAMADA. ..................................................................... 30<br />

FIGURA <strong>13</strong>.19. UNIDAD DE CONTROL, MEDIANTE SECUENCIADOR............................................................. 32<br />

FIGURA <strong>13</strong>.20. DIAGRAMA DE ESTADOS. MICROPROGRAMA. .................................................................... 35<br />

FIGURA <strong>13</strong>.21. GENERACIÓN DE BUS OP. ................................................................................................. 36<br />

FIGURA <strong>13</strong>.22. TABLA DE DESPACHO 0. ................................................................................................... 36<br />

FIGURA <strong>13</strong>.23. TABLA DE DESPACHO 1. ................................................................................................... 36<br />

FIGURA <strong>13</strong>.24. CONTENIDOS DEL MICROPROGRAMA................................................................................. 37<br />

FIGURA <strong>13</strong>.25. UNIDAD DE INSTRUCCIÓN. ESCRITURA EN PC. .................................................................. 38<br />

FIGURA <strong>13</strong>.26. CAMINO DE DATOS MULTICICLO. TEXTO DE REFERENCIA. ................................................. 39<br />

FIGURA <strong>13</strong>.27. UNIDAD DE OPERACIONES. DIRECCIÓN DE SALTO. ESCRITURA EN PC. ............................... 40<br />

FIGURA <strong>13</strong>.28. MICROPROGRAMA............................................................................................................ 42<br />

FIGURA <strong>13</strong>.29. TABLA DE DESPACHO 1. ................................................................................................... 42<br />

FIGURA <strong>13</strong>.30. SEÑALES NO CODIFICADAS. .............................................................................................. 43<br />

FIGURA <strong>13</strong>.31. SEÑALES CODIFICADAS. ................................................................................................... 44<br />

FIGURA <strong>13</strong>.32. MICROPROGRAMA CON SEÑALES. ..................................................................................... 45<br />

FIGURA <strong>13</strong>.33. ESQUEMA LÓGICA ALAMBRADA. ...................................................................................... 46<br />

FIGURA <strong>13</strong>.34. SEÑALES DE CONTROL DEL CONTADOR. ............................................................................ 46<br />

FIGURA <strong>13</strong>.35. DIAGRAMA DE ESTADOS DE SECUENCIADOR. .................................................................... 47<br />

FIGURA <strong>13</strong>.36. TABLA DE TRANSICIONES. ................................................................................................ 48<br />

FIGURA <strong>13</strong>.37. TABLA DE DESPACHO. ...................................................................................................... 48<br />

FIGURA <strong>13</strong>.38. ESQUEMA SECUENCIADOR. ............................................................................................... 49<br />

FIGURA <strong>13</strong>.39. RELACIONES ENTRE MÉTODOS DE DISEÑO. ........................................................................ 50<br />

FIGURA <strong>13</strong>.40. ESTADOS ADICIONALES. ................................................................................................... 51<br />

FIGURA <strong>13</strong>.41. CONTROL PIPELINE. .......................................................................................................... 52<br />

Profesor Leopoldo Silva Bijit 19-11-2008

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!