Cap. 13 Diseño procesador multiciclo
Cap. 13 Diseño procesador multiciclo
Cap. 13 Diseño procesador multiciclo
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