sumador secuencial - QueGrande
sumador secuencial - QueGrande
sumador secuencial - QueGrande
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
INTRODUCCIÓN<br />
Existen sistemas <strong>secuencial</strong>es demasiado complejos para<br />
poder implementarlos con las técnicas vistas hasta<br />
ahora, por ejemplo, el procesador MIPS posee 32 registros<br />
de 32 bits, lo que lleva a un total de 2 1024 estados.<br />
En este tema veremos nuevas metodologías para implementar<br />
algoritmos o computaciones sobre conjuntos de<br />
datos (vectores de n bits). En general constan de operaciones<br />
combinacionales más sencillas que se realizan<br />
<strong>secuencial</strong>mente.<br />
Ejemplos de dichos algoritmos son un <strong>sumador</strong> <strong>secuencial</strong><br />
con un único FA o un multiplicador a partir de un<br />
<strong>sumador</strong> paralelo.<br />
Esta metodología es la que se emplea para la implementación<br />
de los computadores digitales de propósito general.<br />
También se utiliza para implementar hardware específico<br />
para la computacóon de algoritmos concretos, sobre<br />
todo en campos tales como el tratamiento de señales,<br />
procesamiento de imágenes, etc.<br />
1
CONCEPTOS BÁSICOS<br />
La especificación algorítmica de sistemas <strong>secuencial</strong>es implementa<br />
eficientemente algoritmos o computaciones que se realizan sobre<br />
vectores de datos de n bits. Son los llamados algoritmos RT (’Register<br />
Transfer’).<br />
Una computación es un conjunto de operaciones más simples que<br />
consiste en la transferencia de vectores entre registros. Durante las<br />
transferencias se realizan las operaciones de suma, desplazamiento,<br />
comparación, etc.<br />
Esta nueva metodología divide la implementación en dos bloques<br />
básicos:<br />
• Camino de datos, el conjunto de elementos que implementa<br />
el almacenamiento de datos y las funciones de transformación<br />
de los mismos.<br />
• Sección de control, el sistema <strong>secuencial</strong> o autómata que<br />
controla la transferencia y transformaciones de los datos así<br />
como el secuenciamiento y la operación de todo el sistema.<br />
El esquema general se puede ver en la siguiente figura:<br />
2
CONCEPTOS BÁSICOS<br />
El camino de datos recibe los datos del exterior (entradas<br />
o “Data Input”) y devuelve los resultados obtenidos<br />
(salidas o “Data Output”).<br />
La sección de control recibe órdenes e información del<br />
exterior (“Control Input”, por ejemplo, reset, begin, stop,<br />
modo de operación...) y envía información u órdenes al<br />
exterior (“Control Output”, por ejemplo, end, done, overflow...).<br />
Las condiciones son generadas por el camino de datos<br />
y sirven para que la sección de control pueda tomar decisiones<br />
y realizar un control dependiente de los datos.<br />
Ejemplos de condiciones son el signo de un operando, el<br />
acarreo en una operación, un desbordamiento, el valor<br />
de un bit o una comparación, etc.<br />
Los puntos de control son las señales necesarias para<br />
realizar las transformaciones de los datos. Son generadas<br />
por la sección de control e indican al camino de datos<br />
el modo de operación de todos y cada uno de sus<br />
elementos.<br />
Ejemplos de puntos de control son la carga de un registro,<br />
los bits de control de un MUX o de DEMUX, el tipo<br />
de operación de una ALU, el incremento de un contador,<br />
el desplazamiento de un registro, el sentido del desplazamiento,<br />
la lectura o escritura en una memoria, etc.<br />
3
CONCEPTOS BÁSICOS<br />
El resultado de aplicar o activar cada uno de los puntos<br />
de control se denomina microoperación.<br />
El conjunto de microoperaciones que se pueden realizar<br />
de forma concurrente (en paralelo) se denomina microinstrucción.<br />
Cada microinstrucción determina o equivale<br />
a un estado del autómata de la sección de control.<br />
Cada estado debe indicar que puntos de control hay que<br />
activar en ese momento y cual es su estado (microinstrucción)<br />
siguiente, que en general dependerá de las condiciones<br />
actuales del camino de datos.<br />
El conjunto o secuencia de todas las microinstrucciones<br />
constituye un microprograma y su objetivo es implementar<br />
el algoritmo o computación requerido.<br />
4
CAMINO DE DATOS<br />
Se encarga de almacenar y transformar los datos.<br />
Consta de:<br />
• Elementos de almacenamiento.<br />
• Operadores.<br />
• Buses.<br />
Elementos de almacenamiento: almacenan la información.<br />
El componente básico es el registro de N bits.<br />
• Registro de N bits con LOAD y CLEAR.<br />
Operación: if LOAD then y←x<br />
if CLEAR then y←0<br />
5
CAMINO DE DATOS<br />
RAM = conjunto de 2 k registros de N bits que sólo pueden<br />
accederse de uno en uno.<br />
Operación: if READ then y←M[ϑ(A)] else y←0<br />
if WRITE then M[ϑ(A)]←x<br />
siendo ϑ(A) = k−1<br />
i=0 Ai · 2 i<br />
Fichero de registros.<br />
Operación: if READ then y←R[ϑ(A)] else y←0<br />
if WRITE then R[ϑ(A)]←x<br />
6
CAMINO DE DATOS<br />
Otros elementos de almacenamiento: FIFO y LIFO<br />
Operadores: se encargan de transformar los datos.<br />
donde OP: ADD, SUB, MAX, MIN, ...<br />
AND, OR, NOR, EXOR, ...<br />
SHIFT, ...<br />
OP también puede representar una función más compleja implementada<br />
con sistemas <strong>secuencial</strong>es (multiplicadores, divisores, ...).<br />
Los operadores generan algunas condiciones: >,
CAMINO DE DATOS<br />
Buses: son las conexiones, junto con los switches necesarios, que<br />
comunican los distintos elementos del camino de datos (registros y<br />
operadores).<br />
Se clasifican en:<br />
• Paralelos/Serie<br />
• Unidireccionales/Bidireccionales<br />
• Dedicados/Compartidos<br />
• Directos/Indirectos<br />
8
CAMINO DE DATOS<br />
Switches: establecen o cortan el acceso al bus.<br />
• Unidireccionales<br />
• Bidireccionales<br />
9
CAMINO DE DATOS<br />
Selector: selecciona una de entre varias fuentes de datos<br />
(MUX).<br />
Distribuidor: selecciona uno de entre varios destinos de<br />
datos (DEMUX).<br />
10
Ejemplos de buses:<br />
• Crossbar<br />
• Bus compartido<br />
◦ Usando un selector.<br />
CAMINO DE DATOS<br />
◦ Usando registros con salida triestado.<br />
11
SECCIÓN DE CONTROL<br />
Es el sistema <strong>secuencial</strong> o autómata que al activar los puntos de<br />
control en el orden adecuado controla las transferencias y transformaciones<br />
de los datos que tienen lugar en el camino de datos y que<br />
implementan un algoritmo específico.<br />
Cada estado o microinstrucción de la sección de control indica qué<br />
puntos de control se activan en cada momento (salidas del autómata)<br />
y, en función de las condiciones (entradas del autómata), cual es<br />
el estado o microinstrucción siguiente.<br />
La sección de control también se puede representar mediante un<br />
diagrama de flujo.<br />
Existen diversos métodos para implementar una sección de control:<br />
1. Tablas de estado.<br />
2. Elementos de retardo.<br />
3. Microprogramación.<br />
Tablas de Estado<br />
• Es la metodología que ya se ha explicado.<br />
• Es compleja, dificil de depurar, no es modular ni flexible y es<br />
dificil realizar modificaciones (no hai una relación evidente entre<br />
la implementación y el algoritmo).<br />
• Su uso es poco frecuente.<br />
• Se denomina “Lógica Aleatoria”.<br />
12
Elementos de retardo<br />
SECCIÓN DE CONTROL<br />
• Implementación sencilla y directa.<br />
• Alta velocidad pero con un alto coste hardware.<br />
• Se utiliza en sistemas relativamente pequeños.<br />
• Cada estado se implementa con un biestable tipo D.<br />
• Exiten equivalencias entre un autómata, un diagrama de flujo y<br />
la implementación mediante elementos de retardo.<br />
⇔ ⇔<br />
⇔ ⇔<br />
13
SECCIÓN DE CONTROL<br />
Los puntos de control que se activan en cada estado se sacan de la<br />
salida del biestable correspondiente.<br />
Para activar un punto de control en dos o más estados:<br />
14
SECCIÓN DE CONTROL<br />
Ejemplo: implementación con elementos de retardo<br />
Autómata Diagrama de Flujo<br />
15
SECCIÓN DE CONTROL<br />
Ejemplo (cont.): implem. con elementos de retardo<br />
16
SECCIÓN DE CONTROL<br />
Ejemplo (cont.): implem. con elementos de retardo<br />
17
SECCIÓN DE CONTROL<br />
Microprogramación<br />
• La implementación es sencilla y estándar.<br />
• El hardware es casi independiente de la implementación.<br />
• Es muy flexible y versátil.<br />
• Fácil de depurar, modificar y ampliar.<br />
• Su funcionamiento es relativamente lento debido a<br />
los accesos a la memoria de control.<br />
• Apta para sistemas grandes y/o complejos.<br />
18
SECCIÓN DE CONTROL<br />
Microprogramación<br />
• Una de las implementaciones más sencillas:<br />
19
SECCIÓN DE CONTROL<br />
Memoria de control<br />
• Almacena la información de control necesaria para<br />
ejecutar el algoritmo.<br />
• Su tamaño viene dado por el número de microinstrucciones<br />
(2 k ) del microprograma por el número de<br />
bits por microinstrucción (m).<br />
• Se puede implementar con una ROM, PROM o RAM.<br />
Contador de microprograma (µP C)<br />
• Direcciona la memoria de control para seleccionar la<br />
siguiente microinstrucción (µI).<br />
20
SECCIÓN DE CONTROL<br />
Registro de microinstrucciones (MIR)<br />
• Almacena la µI que se está ejecutando actualmente.<br />
• Ejemplo de formato doble para codificar las µI:<br />
1. Para instrucciones de salto:<br />
◦ El bit más significativo a cero.<br />
◦ El campo condición indica la condición a verificar.<br />
◦ El campo dirección de salto codifica la dirección de la<br />
siguiente µI a ejecutar si la condición es cierta.<br />
2. Para puntos de control:<br />
◦ El bit más significativo a uno.<br />
◦ Los puntos de control pueden estar codificados (microprogramación<br />
vertical) o no (microprogramación horizontal).<br />
21
SECCIÓN DE CONTROL<br />
El funcionamiento o secuenciamiento puede realizarse de diferentes<br />
formas. Una de las más sencillas:<br />
• a: generación de la dirección siguiente = el µP C se incrementa<br />
(ejecución de la siguiente µI) o se carga una nueva dirección<br />
(salto).<br />
• b: se direcciona la memoria de control = lectura de la µI correspondiente.<br />
• c: carga de la µI direccionada en el MIR.<br />
• d: ejecución de la µI, dos posibilidades:<br />
1. Activación de los puntos de control y desactivación del MUX<br />
de condiciones ⇒ El µP C se incrementa.<br />
2. Selección en el MUX de la condición a verificar. Si se cumple<br />
la salida del MUX = 1 ⇒ el µP C se carga con la dirección<br />
especificada en la µI.<br />
22
SECCIÓN DE CONTROL<br />
Ejemplo de sección de control microprogramada<br />
23
SECCIÓN DE CONTROL<br />
Ejemplo de sección de control microprogramada (cont.)<br />
24
SUMADOR SECUENCIAL<br />
Algoritmo 0 (alto nivel): realiza la operación pero no tiene<br />
en cuenta la sincronización con el exterior.<br />
Cargar A<br />
Cargar B<br />
Borrar C<br />
for I=1 to n<br />
{<br />
}<br />
Di ← Ai ⊕ Bi ⊕ C<br />
C ← Ai · Bi + (Ai ⊕ Bi) · C<br />
25
SUMADOR SECUENCIAL<br />
Algoritmo 1: introduce la sincronización con el exterior mediante<br />
dos señales:<br />
1. Control Input: start, indica cuando comenzar la operación.<br />
2. Control Output: done, indica cuando ha finalizado. Mientras esta<br />
señal esté a cero no puede comenzarse una nueva operación.<br />
También se identifican las entradas y salidas utilizadas:<br />
1. Data Inputs: A, B<br />
2. Data Outputs: D<br />
WAIT: do<br />
done ← 1<br />
while (start)<br />
done ← 0<br />
------------------------------<br />
Cargar A<br />
Cargar B<br />
Borrar C<br />
for I=1 to n<br />
{<br />
Di ← Ai ⊕ Bi ⊕ C<br />
C ← Ai · Bi + (Ai ⊕ Bi) · C<br />
}<br />
-----------------------------goto<br />
WAIT<br />
26
SUMADOR SECUENCIAL<br />
Una vez identificadas las líneas de conexión con el exterior<br />
empezaremos por diseñar un camino de datos capaz<br />
de realizar el algoritmo:<br />
1. Se identifican las unidades de almacenamiento y operadores<br />
necesarios:<br />
• A, B y D: registros de n bits.<br />
• C, done: biestables (registros de 1 bit).<br />
• 1 FA.<br />
• 1 Contador + 1 Comparador.<br />
2. Se establecen las conexiones entre los elementos<br />
del camino de datos identificados y se determinan<br />
los puntos de control necesarios (existen diferentes<br />
alternativas).<br />
27
SUMADOR SECUENCIAL<br />
Camino de datos (alternativa 1)<br />
28
SUMADOR SECUENCIAL<br />
Algoritmo 2: introduce los puntos de control (microoperaciones)<br />
WAIT: do<br />
Preset<br />
while (start)<br />
Clear<br />
LOADA<br />
LOADB<br />
CLEARC<br />
for I=1 to n<br />
{<br />
SHIF TD<br />
LOADC<br />
SHIF T A<br />
SHIF T B<br />
}<br />
goto WAIT<br />
Existen microoperaciones que pueden realizarse simultaneamente<br />
(p.e. LOADA y CLEARC), por lo que ambos puntos de control<br />
pueden activarse simultaneamente y formar una microinstrucción.<br />
Por el contrario hay puntos que no se pueden activar simultaneamente<br />
(p.e. LOADA y LOADB), por lo que formaran microinstrucciones<br />
diferentes.<br />
29
SUMADOR SECUENCIAL<br />
Algoritmo 3: se identifican las operaciones simultaneas<br />
(se reduce el número de microinstrucciones necesarias).<br />
WAIT: do<br />
Preset<br />
while (start)<br />
Clear || LOADA|| CLEARC<br />
LOADB<br />
for I=1 to n<br />
SHIF TD || LOADC|| SHIF T A|| SHIF T B<br />
goto WAIT<br />
30
SUMADOR SECUENCIAL<br />
El último paso consiste en eliminar las estructuras de control complejas<br />
(bucles WHILE, FOR, etc.) remplazándolas por saltos condicionales<br />
(if ) o incondicionales (goto).<br />
do<br />
operación<br />
while (x)<br />
pasaría a ser:<br />
LOOP: operación<br />
if (x) then goto LOOP<br />
for I=1 to n<br />
operación<br />
pasaría a ser:<br />
CLEARI<br />
LOOP: operación || INCI<br />
if (I
SUMADOR SECUENCIAL<br />
Algoritmo 4: se substituyen las estructuras complejas por sus microinstrucciones<br />
equivalentes activando en paralelo los puntos de<br />
control que lo permitan.<br />
WAIT: S0: Preset<br />
if (start) then goto WAIT<br />
S1: Clear || LOADA|| CLEARC|| CLEARI<br />
S2 : LOADB<br />
LOOP: S3: SHIF TD || LOADC|| SHIF T A|| SHIF T B||INCI<br />
if (I
SUMADOR SECUENCIAL<br />
El algoritmo puede expresarse también mediante un autómata<br />
o diagrama de flujo.<br />
33
SUMADOR SECUENCIAL<br />
El camino de datos que implementa una computación no<br />
es único. Otra posibilidad:<br />
34
SUMADOR SECUENCIAL<br />
Algoritmo 4 bis: sólo cambian los puntos de control que se activan<br />
en S3<br />
WAIT: S0: Preset<br />
if (start) then goto WAIT<br />
S1: Clear || LOADA|| CLEARC|| CLEARI<br />
S2 : LOADB<br />
LOOP: S3: SHIF TD || LOADC|| INCI<br />
if (I
SUMADOR SECUENCIAL<br />
Implementación de la sección de control: elementos de<br />
retardo.<br />
36
SUMADOR SECUENCIAL<br />
Implementación de la sección de control: elementos de<br />
retardo.<br />
37
SUMADOR SECUENCIAL<br />
Implementación de la sección de control: microprogramación.<br />
38
SUMADOR SECUENCIAL<br />
Implementación de la sección de control: microprogramación.<br />
39
ÂÊÁÁÇË <br />
×ÖÐÑÖÓÓÓÐÑÑÓÖÊÇÅÐ×ÓÒÓÒØÖÓÐÙÒ××ØÑ ÕÙÖÐÞÐÐÓÖØÑÓÕÙ×ÜÔÓÒÓÒØÒÙÓÒÒÒÓÐÓ×ÚÐÓÖ×Ð× ÒØÖ×ÐÑÙÐØÔÐÜÓÖ×ÐÓÒ×ÐØÓ<br />
ÁÆÁÁÇØÚÖÈÊËÌ ÌËÌÞÞ ÑÔÞÓØÓÁÆÁÁÇ ØÚÖÄÇÊÝÄÊ<br />
ÍÄØÚÖÁÆÊÅÆÌ Ð×ØÚÖËÈÄÊ Ð×ÞÞÓØÓÍÄ ØÚÖÊËÌÝÄÇ ÓØÓÇÊÊÁÇÆ<br />
ÇÊÊÁÇÆØÚÖËÍÅÝÄÇÊ ÁÒÓØÓÍÄ ÓØÓÁÆÁÁÇ ÓØÓÌËÌ<br />
ÓÐÙØÓÑØЬÙÖ×Ò×ÙÓÖÖ×ÔÓÒÒØÙÒÓÒØÖÓÐÑÖÓ ÔÖÓÑÓÑÔÐØ<br />
z<br />
I>n<br />
c<br />
S 0<br />
S 1<br />
S 2<br />
S 3<br />
S 4<br />
S 5<br />
start<br />
z<br />
c<br />
I
ÌÅËÈÁÁÁÇÆÄÇÊÁÌÅÁËÁËÌÅËËÍÆÁÄË Ä×ÙÒجÙÖÖÔÖ×ÒØÙÒÙÒÓÒØÖÓÐÑÔÐÑÒØÓÒÐÑÒØÓ× ÖØÖÓÜØÖ×ÙÙØÓÑØÓÒØÖÓÐÑÔÐÑÒØÐÓÑÒØÐØÒ ÓÒØÖÓÐÑÖÓÔÖÓÖÑÓ D<br />
CLK<br />
0<br />
Q 0<br />
DEMUX<br />
1 a 2<br />
1 0<br />
D1<br />
Q1<br />
D2<br />
Q<br />
2<br />
DEMUX<br />
1 a 2<br />
0 1<br />
Preset<br />
start<br />
I>n<br />
D<br />
Q 3<br />
3<br />
D<br />
Q 4<br />
4<br />
DEMUX<br />
1 a 4<br />
D<br />
Q 5<br />
C2,C7<br />
×ÒÙÒÙÒÓÒØÖÓÐÑÖÓÔÖÓÖÑÓÑÔÐØÓÖÖ×ÔÓÒÒØÐÐÓ<br />
X<br />
ÖØÑÓ×ÙÒØÕÙÖÐÞÐÑÙÐØÔÐÓÒÒØÖÓ×ÒÙÑÖÓ×ÒØÙÖÐ×<br />
00 01 10 11<br />
Y<br />
×ÙÒØ×ØÓ×ØÑÔÓ×ØÐÞÓÒÐÓ×Ö×ØÖÓ×ÝÓÒØÓÖ× ÙØÖÓØ×ØÒÒÓÒÙÒØÐÑÒÓØÓ×ЬÙÖÐÙÐØÑÒ ÙÐ×ÐÑÓÖ×ÒÐÖÐÓÔÖ×ÒÖÓÒÞÖÐ××ØÑØÒÒÓÒÙÒØÐÓ×<br />
5<br />
Ò×ØÑÔÓ<br />
C5<br />
ÖØÖÓÒÐ×ÙÑÓÖØ× ÐÓ×ÑÙÐØÔÐÜÓÖ× Ò×ØÑÔÓ×ÓÐÑÑÓÖÒ× Ò×ØÑÔÓÖØÖÓÒÐÓÑÔÖÓÖÝÒ<br />
ÓÖØÓ Ö Ö ÔÐÙ×<br />
BUS DE ENTRADA<br />
4<br />
4 4<br />
LOAD LX LOAD LY COUNT CON<br />
RELOXO<br />
Rexistro X<br />
Rexistro Y<br />
CONT CLEAR CC<br />
4bits<br />
0<br />
4 4<br />
4<br />
4<br />
4<br />
C SUM<br />
out<br />
C<br />
SUM<br />
in<br />
C<br />
out<br />
C<br />
A B<br />
in<br />
bits<br />
4 bits 0<br />
COMP<br />
AB<br />
4<br />
0<br />
Ò 4<br />
Clear<br />
4<br />
LOAD<br />
Rexistro ACH CLEAR<br />
4<br />
4<br />
C0<br />
C1<br />
C3<br />
C4,C6<br />
LOAD<br />
Rexistro ACL<br />
CLEAR<br />
4<br />
LAC<br />
CAC<br />
BUS DE SAÍDA<br />
Rexistro S<br />
8<br />
LOAD<br />
AB<br />
LS<br />
FIN<br />
D<br />
Q
9.5. Obter o autómata de control e deseñar a unidade de control microprogramada completa que<br />
implemente o algoritmo seguinte:<br />
INICIO: activar READY<br />
IF start goto INICIO<br />
BUCLE: activar OK, STARTING<br />
IF end goto ESPERAR<br />
ELSE<br />
activar OK, SELECT<br />
IF input = 00<br />
activar PROCESSING<br />
ELSE IF input = 01<br />
activar INITIATING<br />
activar PROCESSING<br />
activar DONE<br />
ELSE goto RECUPERAR<br />
END IF<br />
goto BUCLE<br />
ESPERAR: activar WAIT, CHECK<br />
IF ready goto ESPERAR<br />
goto INICIO<br />
RECUPERAR: activar FAULT<br />
IF ready<br />
activar WAIT, RESTORING<br />
goto ESPERAR<br />
END IF<br />
goto BUCLE
9.5. Autómata de Control:<br />
INICIO:<br />
BUCLE:<br />
ESPERAR:<br />
RECUPERAR:<br />
Temos:<br />
ready<br />
i 1 i 0 =00<br />
S 3<br />
start<br />
S 0<br />
end<br />
i 1 i 0 =01<br />
S 1<br />
S 2<br />
S 4<br />
S 5<br />
S 6<br />
start<br />
11 puntos de control<br />
10 microinstruccións de activación<br />
5 condicións no MUX<br />
12 instruccións de salto<br />
end<br />
i 1 i 0 =10<br />
OR<br />
i 1 i 0 =11<br />
(i 1 =1)<br />
ready<br />
S 8<br />
S 9<br />
S 7<br />
ready<br />
ready<br />
{READY}<br />
{OK, STARTING}<br />
{OK, SELECT}<br />
{PROCESSING}<br />
{INITIATING}<br />
{PROCESSING}<br />
{DONE}<br />
{WAIT, CHECK}<br />
{FAULT}<br />
{WAIT, RESTORING}
9.5. Diagrama de Fluxo:<br />
S 3<br />
S 4<br />
S 5<br />
S 6<br />
S 8<br />
ready<br />
no<br />
si<br />
si<br />
si<br />
S 0<br />
start<br />
S 1<br />
no<br />
end<br />
S 2<br />
no<br />
i 1i 0=00<br />
no<br />
i 1 i 0 =01<br />
S 9<br />
no<br />
si<br />
si<br />
si<br />
S 7<br />
ready<br />
no<br />
{READY}<br />
{OK, STARTING}<br />
{OK, SELECT}<br />
{PROCESSING}<br />
{INITIATING}<br />
{PROCESSING}<br />
{DONE}<br />
{WAIT, CHECK}<br />
{FAULT}<br />
{WAIT, RESTORING}
9.5. Implementación con Elementos de Retardo:<br />
PRESET<br />
CLOCK<br />
START<br />
CLEAR<br />
END<br />
i 1i 0 = 00<br />
i 1i 0 = 01<br />
READY<br />
Cl<br />
S 8<br />
Cl<br />
Cl<br />
S 9<br />
Cl<br />
Pr<br />
S 2<br />
S 1<br />
S 0<br />
DEMUX<br />
1 a 2<br />
0 1<br />
DEMUX<br />
1 a 2<br />
0 1<br />
DEMUX<br />
1 a 2<br />
0 1<br />
DEMUX<br />
1 a 2<br />
0 1<br />
DEMUX<br />
1 a 2<br />
0 1<br />
Cl<br />
Cl<br />
Cl<br />
Cl<br />
S 3<br />
S 4<br />
S 5<br />
S 6<br />
Cl<br />
S 7<br />
DEMUX<br />
1 a 2<br />
0 1<br />
READY<br />
STARTING<br />
OK<br />
SELECT<br />
PROCESSING<br />
FAULT<br />
INITIATING<br />
DONE<br />
RESTORING<br />
WAIT<br />
CHECK
9.5. Unidade de Control Microprogramada:<br />
1<br />
start<br />
end<br />
ready<br />
i1i0 = 00<br />
i1i0 = 01<br />
MUX<br />
8 a 1<br />
3<br />
INICIO:<br />
BUCLE:<br />
ESPERAR:<br />
RECUPERAR:<br />
STROBE<br />
00000<br />
00001<br />
00010<br />
00011<br />
00100<br />
00101<br />
00110<br />
00111<br />
01000<br />
01001<br />
01010<br />
01011<br />
01100<br />
01101<br />
01110<br />
01111<br />
10000<br />
10001<br />
10010<br />
10011<br />
10100<br />
10101<br />
INCR<br />
LOAD<br />
CONTADOR MICROPROGRAMA<br />
5<br />
5<br />
ROM<br />
(32 x 12)<br />
12<br />
REG. MICROINSTRUCCIONES<br />
RESTORING<br />
FAULT<br />
CHECK<br />
WAIT<br />
DONE<br />
INITIATING<br />
PROCESSING<br />
SELECT<br />
STARTING<br />
OK<br />
READY<br />
CLK<br />
1 1 0 0 0 0 0 0 0 0 0 0<br />
0 0 0 1 x x x 0 0 0 0 0<br />
1 0 1 1 0 0 0 0 0 0 0 0<br />
0 0 1 0 x x x 0 1 1 1 0<br />
1 0 1 0 1 0 0 0 0 0 0 0<br />
0 1 0 0 x x x 0 1 0 0 0<br />
0 1 0 1 x x x 0 1 0 1 0<br />
0 0 0 0 x x x 1 0 0 0 1<br />
1 0 0 0 0 1 0 0 0 0 0 0<br />
0 0 0 0 x x x 0 0 0 1 0<br />
1 0 0 0 0 0 1 0 0 0 0 0<br />
1 0 0 0 0 1 0 0 0 0 0 0<br />
1 0 0 0 0 0 0 1 0 0 0 0<br />
0 0 0 0 x x x 0 0 0 1 0<br />
1 0 0 0 0 0 0 0 1 1 0 0<br />
0 0 1 1 x x x 0 1 1 1 0<br />
0 0 0 0 x x x 0 0 0 0 0<br />
1 0 0 0 0 0 0 0 0 0 1 0<br />
0 0 1 1 x x x 1 0 1 0 0<br />
0 0 0 0 x x x 0 0 0 1 0<br />
1 0 0 0 0 0 0 0 1 0 0 1<br />
0 0 0 0 x x x 0 1 1 1 0<br />
. . .<br />
activar READY<br />
IF start goto INICIO<br />
activar OK, STARTING<br />
IF end goto ESPERAR<br />
activar OK, SELECT<br />
IF i 1 i 0 = 00 goto 8<br />
IF i 1 i 0 = 01 goto 10<br />
goto RECUPERAR<br />
activar PROCESSING<br />
goto BUCLE<br />
activar INITIATING<br />
activar PROCESSING<br />
activar DONE<br />
goto BUCLE<br />
activar WAIT, CHECK<br />
IF ready goto ESPERAR<br />
goto INICIO<br />
activar FAULT<br />
IF ready goto 20<br />
goto BUCLE<br />
activar WAIT, RESTORING<br />
goto ESPERAR
[Examen TC Septiembre'2005]<br />
Deseñar a unidade de control microprogramada completa do seguiente algoritmo:<br />
INICIO: activar PREPARADO<br />
IF empezar GOTO INICIO<br />
activar INICIALIZANDO<br />
BUCLE_TIEMPO: activar CALCULAR_INSTANTE<br />
activar INICIALIZAR1, INICIALIZAR2, INICIALIZAR3<br />
IF x 1 x 0 = 11<br />
activar PROCESAR1<br />
ELSE IF x 1 x 0 = 01<br />
activar PROCESAR2<br />
activar DONE<br />
ELSE<br />
IF parar<br />
activar FINALIZAR<br />
GOTO INICIO<br />
END IF<br />
END IF<br />
GOTO TEST<br />
GOTO BUCLE_TIEMPO<br />
TEST: activar PONER_A_CERO<br />
BUCLE_TEST: activar ACUMULAR<br />
IF parar<br />
activar FINALIZAR<br />
GOTO INICIO<br />
END IF<br />
activar COMPARAR<br />
IF converge<br />
GOTO BUCLE_TEST<br />
GOTO BUCLE_TIEMPO
[Examen TC Septiembre'2005]<br />
Autómata de Control:<br />
INICIO:<br />
BUCLE_TIEMPO:<br />
TEST:<br />
BUCLE_TEST:<br />
Temos:<br />
S 4<br />
converge<br />
X 1 X 0 =11<br />
converge<br />
empezar<br />
X 1 X 0 =01<br />
13 puntos de control<br />
12 microinstruccións de activación<br />
5 condicións no MUX<br />
7 instruccións de salto<br />
S 0<br />
S 1<br />
S 2<br />
S 3<br />
S 5<br />
S 6<br />
S 8<br />
S 9<br />
S 11<br />
empezar<br />
parar<br />
(X 1 X 0 =00 AND parar)<br />
OR<br />
(X 1 X 0 =10 AND parar)<br />
(X 0 =0 AND parar)<br />
parar<br />
S 10<br />
S 7<br />
{PREPARADO}<br />
{INICIALIZANDO}<br />
{CALCULAR_INSTANTE}<br />
{INICIALIZAR1,<br />
INICIALIZAR2,<br />
INICIALIZAR3 }<br />
{PROCESAR1}<br />
{PROCESAR2}<br />
{DONE}<br />
{FINALIZAR}<br />
{PONER_A_CERO}<br />
{ACUMULAR}<br />
{FINALIZAR}<br />
{COMPARAR}
[Examen TC Septiembre'2005]<br />
Unidade de control micropogramada:<br />
1<br />
empezar<br />
parar<br />
converge<br />
x1x0 = 11<br />
x1x0 = 01<br />
INICIO:<br />
BUCLE_TIEMPO:<br />
TEST:<br />
BUCLE_TEST:<br />
MUX<br />
8 a 1<br />
00000<br />
00001<br />
00010<br />
00011<br />
00100<br />
00101<br />
00110<br />
00111<br />
01000<br />
01001<br />
01010<br />
01011<br />
01100<br />
01101<br />
01110<br />
01111<br />
10000<br />
10001<br />
10010<br />
10011<br />
10100<br />
10101<br />
3<br />
STROBE<br />
INCR<br />
LOAD<br />
CONTADOR MICROPROGRAMA<br />
5<br />
5<br />
ROM<br />
(32 x 14)<br />
14<br />
REG. MICROINSTRUCCIONES<br />
PONER_A_CERO<br />
FINALIZAR<br />
DONE<br />
PROCESAR2<br />
PROCESAR1<br />
INICIALIAR3<br />
INICIALIZAR2<br />
INICIALIZAR1<br />
CALCULAR_INSTANTE<br />
INICIALIZANDO<br />
PREPARADO<br />
. . .<br />
COMPARAR<br />
ACUMULAR<br />
CLK<br />
1 1 0 0 0 0 0 0 0 0 0 0 0 0<br />
0 0 0 1 x x x x x 0 0 0 0 0<br />
1 0 1 0 0 0 0 0 0 0 0 0 0 0<br />
1 0 0 1 0 0 0 0 0 0 0 0 0 0<br />
1 0 0 0 1 1 1 0 0 0 0 0 0 0<br />
0 1 0 0 x x x x x 0 1 0 0 1<br />
0 1 0 1 x x x x x 0 1 0 1 1<br />
0 0 1 0 x x x x x 0 1 1 1 0<br />
0 0 0 0 x x x x x 1 0 0 0 0<br />
1 0 0 0 0 0 0 1 0 0 0 0 0 0<br />
0 0 0 0 x x x x x 1 0 0 0 0<br />
1 0 0 0 0 0 0 0 1 0 0 0 0 0<br />
1 0 0 0 0 0 0 0 0 1 0 0 0 0<br />
0 0 0 0 x x x x x 1 0 0 0 0<br />
1 0 0 0 0 0 0 0 0 0 1 0 0 0<br />
0 0 0 0 x x x x x 0 0 0 0 0<br />
1 0 0 0 0 0 0 0 0 0 0 1 0 0<br />
1 0 0 0 0 0 0 0 0 0 0 0 1 0<br />
0 0 1 0 x x x x x 0 1 1 1 0<br />
1 0 0 0 0 0 0 0 0 0 0 0 0 01<br />
0 0 1 1 x x x x x 1 0 0 0 1<br />
0 0 0 0 x x x x x 0 0 0 1 1<br />
activar PREPARADO<br />
IF empezar goto INICIO<br />
activar INICIALIZANDO<br />
activar CALCULAR_INSTANTE<br />
activar INIC1, INIC2, INIC3<br />
IF x 1 x 0 = 11 goto 9<br />
IF x 1 x 0 = 01 goto 11<br />
IF parar goto 14<br />
goto TEST<br />
activar PROCESAR1<br />
goto TEST<br />
activar PROCESAR2<br />
activar DONE<br />
goto TEST<br />
activar FINALIZAR<br />
goto INICIO<br />
activar PONER_A_CERO<br />
activar ACUMULAR<br />
IF parar goto 14<br />
activar COMPARAR<br />
IF converge goto BUCLE_TEST<br />
goto BUCLE_TIEMPO