06.05.2013 Views

sumador secuencial - QueGrande

sumador secuencial - QueGrande

sumador secuencial - QueGrande

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!