Bloques lógicos

Anuncio
Arquitectura de Computadores
Tema 3 - Bloques lógicos
Los bloques lógicos son combinaciones de puertas lógicas (AND, OR, NOT …) que
realizan distintas funciones lógicas.
Los distintos bloques lógicos que vamos a describir son formalizaciones que realizan
diversas operaciones lógicas más o menos frecuentes en el diseño de los dispositivos
electrónicos digitales, y en concreto de los microprocesadores. Partimos, por tanto, de
puertas lógicas elementales, para acabar describiendo, aunque sea a grandes rasgos, los
componentes que forman la organización de un procesador.
Básicamente los bloques lógicos se dividen en dos categorías principales:
- Bloques combinacionales: Son aquellos en los que el valor de salida del bloque
depende únicamente de los valores de entrada del mismo, en cada instante de
tiempo, con la salvedad del retardo que impone la electrónica, es decir, el tiempo
que tarda en reaccionar el sistema, y ofrecer una salida a partir del momento en
el que efectuamos una entrada determinada en el mismo. Su comportamiento
quedá perfectamente descrito mediante una tabla de verdad.
- Bloques secuenciales: Son aquellos en los que el valor de salida del bloque
depende de las entradas, y del estado del propio sistema en el instante o instantes
anteriores. Estos sistemas nos van a permitir construir módulos sícronos,
elementos de memoria, máquinas de estados, y otros muchos componentes que
requieren un comportamiento determinado a lo largo del tiempo. Para describir
su funcionamiento, no nos bastará, en general con una tabla de verdad, sino que
necesitaremos realizar un cronograma.
Bloques combinacionales
Multiplexor
Permite seleccionar una de entre muchas líneas de entrada, y conectarla con una única
salida. La selección se realiza mediante una serie de líneas de dirección. Con n bits en la
dirección, podemos seleccionar una de entre 2n líneas de entrada. Las líneas de entrada y
de salida pueden ser de 1 o de varios bits.
Diagrama
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Función lógica
Implementación lógica de un multiplexor de 1 bit
Demultiplexor
Realiza la operación inversa al multiplexor, es decir, conecta una única entrada a una de
entre 2n líneas de salida.
Diagrama
Comunicación serie utilizando multiplexores y demultiplexores
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Unidad Aritmético Lógica (ALU)
Consiste en un solo bloque combinacional capaz de realizar distintas operaciones
aritméticas y lógicas. Necesita dos entradas de n bits (operandos) y una salida, también
de n bits (resultado). Además, necesitará una entrada adicional que permita seleccionar
la operación a realizar, así como otras entradas y salidas auxiliares de las operaciones:
acarreo de entrada para conexiones en cascada, acarreo de salida y otros flags (cero,
desbordamiento, signo…).
ALU de 1 bit conectable en cascada
Las señales F1F0 seleccionan la operación deseada. El decodificador selecciona la salida
procedente de la puerta AND, OR, NOT o del sumador.
F1
F0
Operación
0
0
S = A AND B
0
1
S = A OR B
1
0
S = NOT A
1
1
S = A + B + Cin
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Esquema de la ALU de 4 bits SN74181 de Texas Instruments
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Decodificador
El decodificador es un circuito muy similar al multiplexos. Tiene
una entrada binaria de n bits, y 2n salidas. Cuando introducimos un
valor por la entrada, se activa la línea de salida correspondiente al
valor introducido, y se desactivan todas las demás. Se añade una
línea adicional de “permiso” (grant). Si la línea de permiso está
desactivada, no se activará ninguna línea en la salida.
Los decodificadores que se activan en alto, ponen en nivel de
tensión alto (1 lógico) la línea activada, y a 0 todas las demás. Un
decodificador que se activa en bajo, pone a 0 la línea activada, y a
1 todas las demás.
Z0
X0
Z1
Z2
X1
Z3
P
Tabla de verdad de un decodificador activado en bajo
G
A
B
Y0
Y1
Y2
Y3
1
X
X
1
1
1
1
0
0
0
0
1
1
1
0
0
1
1
0
1
1
0
1
0
1
1
0
1
0
1
1
1
1
1
0
Yi = 0 si X=i y G=0 ; 1 en caso contrario
(X=AB)
Un decodificador activado en alto, tendría la tabla de verdad inversa a esta.
Esquema de implementación
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Codificadorconprioridad
X0
Realiza la función inversa al decodificador. A partir de 2n líneas
de entrada, devuelve a la salida en binario el número de la línea
de entrada más alta que esté activa (nivel lógico 1). Una línea
adicional (Bloque Activo) nos indicará si hay alguna línea activa,
o están todas inactivas (nivel lógico 0).
Z0
X1
X2
Z1
X3
Tabla de verdad de un codificador con prioridad
BA
X3
X2
X1
X0
Z1
Z0
BA
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
1
X
0
1
1
0
1
X
X
1
0
1
1
X
X
X
1
1
1
BA = Bloque Activo = 1 cuando alguna entrada está activa
Conversor de código utilizando un codificador y un decodificador
(¿cuál es su funcionamiento? ¿cómo será su tabla de verdad?)
X0
Z0
X1
Z1
MemoriaROM
Permite recuperar información binaria almacenada
dir
de forma “permanente”. La memoria está
configurada como un conjunto de 2p unidades de n
bits cada una. El bloque tendrá, por tanto una
dato
ROM
OE
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
entrada de p bits, que indice una dirección o
ubicación concreta de memoria, y una salida de n
bits, por la que obtendremos el dato solicitado. Una
entrada adicional (Output Enable) permite activar o
desconectar la salida mediante un buffer tri-estado.
Implementación básica de una ROM mediante diodos y un decodificador activado en
bajo (como el visto anteriormente). Aquellos enlaces en los que hay colocado un diodo,
presentarán un bit 0 en la salida, y los que no tienen diodo, presentarán un bit 1.
Síntesis de funciones lógicas mediante ROM
Una forma muy sencilla de implementar una funión lógica cualquiera consiste en
utilizar para ello una memoria ROM. Ló único que necesitamos para ello es una
memoria con tantos bits de dirección como variables de la función lógica, y tantos bits
por dirección (anchura de la memoria) como salidas necesitemos. En la memoria ROM
habrá que almacenar, para cada posible entrada (cada dirección de memoria) el
resultado que se espera de la función a implementar.
Ejemplo: Implementación de un sumador de dos bits, salida con acarreo.
Tenemos 4 bits de entrada (dos por cada operando) y tres de salida (resultado más
acarreo). Necesitaremos, por tanto, una ROM de 16 direcciones, y cada una de ellas de
3 bits (por lo menos).
Si las líneas de direccionamiento son d0, d1, d2 y d3, y las salidas son z0, z1 y z2,
asociamos d0=x0, d1=x1, d2=y0, d3=y1, y z3=C (acarreo)
Valor de la memoria:
D3 (Y1)
0
0
0
0
0
0
0
0
1
D2 (Y0)
0
0
0
0
1
1
1
1
0
D1 (X1)
0
0
1
1
0
0
1
1
0
D0 (X0)
0
1
0
1
0
1
0
1
0
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Z3(c)
0
0
0
0
0
0
0
1
0
Z1
0
0
1
1
0
1
1
0
1
Z0
0
1
0
1
1
0
1
0
0
Arquitectura de Computadores
1
1
1
1
1
1
1
0
0
0
1
1
1
1
0
1
1
0
0
1
1
1
0
1
0
1
0
1
0
1
1
0
1
1
1
1
0
0
1
0
0
1
1
0
1
1
0
1
1
Bloques secuenciales
Los bloques secuenciales son aquellos en los que la salida en un tiempo T depende de
los valores de la entrada en T y en los instantes anteriores. Tienen “memoria histórica”,
en el sentido de que su valor depende de cuánto ha valido la entrada anteriormente.
X
F
Z
Pueden ser:
- asíncronos:
Z(T) = F(X(t=0..T))
- síncronos :
Z[k] = F(X[k], X[k-1], X[k-2]
…) donde X[k] es la entrada en el ciclo k. El tiempo se va desarrollando en instantes
discretos o “ciclos”, que vienen determinados por un reloj, un dispositivo que genera
una onda cuadrada, y va marcando el paso del tiempo.
t
Registro
El elemento secuencial básico es el registro. Es un bloque que permite almacenar un
valor introducido por la entrada del mismo (escritura), y mantener dicho valor en la
salida (lectura), incluso en ausencia de nuevo valor en la entrada.
El circuito base de los registros es el biestable R-S, cuyo comportamiento es el
siguiente:
R
S
Q
R
Q
Q-
0
0
Q
Q-
0
1
0
1
1
0
1
0
Q
S
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
1
1
0
0
En este circuito, si la entrada S está a 1 y R a 0, la salida Q valdrá 1 (Q- en modo
normal tiene el valor complementario de Q). S cumple la función de SET (establecer a
1). Con S=0 y R=1, Q valdrá 0 (modo RESET). Si tanto R como S valen 1, la salida
será 0 tanto en Q como en Q-, y si ambas entradas están a 0, Q y Q- mantienen el valor
que tenían de forma indefinida. Tenemos así un elemento básico de memoria, que
podemos establecer a 1 (S=1) o a 0 (R=1), y luego mantener indefinidamente para
lectura, mientras mantenemos R y S en nivel bajo.
Para conseguir que el elemento funcione de forma síncrona, basta con que agregemos
una etapa previa controlada por un reloj.
R
clear
Q
clock
S
Q
preset
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
En los biestables síncronos, las entradas sólo se pueden transmitir a las salidas (y por
tanto, quedar “almacenadas” en el dispositivo) cuando la señal del reloj está en alto,
quedando las salidas desconectadas de la entrada cuando el reloj está en bajo (un reloj
en bajo hace que ambas entradas a las puertas NOR estén también en bajo). Así
conseguimos sincronizar el dispositivo, de forma que lea los datos sólo en instantes
determinados.
Aunque aquí no vamos a entrar en más detalles técnicos, es posible modificar las
estructuras anteriores, de forma que consigamos registros que respondan sólo durante el
flanco de subida del reloj, o durante el flanco de bajada. A título meramente
descriptivo, presentamos algunas variaciones del mismo.
Biestable J-K, con lectura en flanco de bajada.
Biestable tipo T
Cambia su estado con cada ciclo de reloj. Permite construir contadores.
¿Cuáles serían las salidas de Q0, Q1, Q2 y Q3 a medida que va funcionando el reloj?
Registros
Un registro es una combinación de n biestables, que permiten almacenar de forma
síncrona n bits.
X
clock
clock
Z
X
8
15
30
Z
?
8
15
t
Para que una señal presentada en la entrada del registro pase correctamente a la salida
del mismo, se deben cumplir ciertas restricciones temporales en torno al instante del
flanco ascendente del reloj (el momento en el que el reloj pasa de 0 a 1). Esto es debido
a que, aunque conceptualmente digamos que las señales son cuadradas (pasan
instantáneamente de 0 a 1), en la realidad esto no es así. Ni el reloj pasa
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
instantáneamente de 0 a 1, ni las señales se transmiten de la entrada a la salida de las
puertas lógicas instantáneamente. Estos tiempos de retardo imponen restricciones
temporales en la transmisión de las señales, y condicionarán en definitiva la máxima
frecuencia de reloj a la que puede funcionar el sistema. Los principales parámetros
temporales a tener en cuenta son:
- Setup (o tiempo de “calentamiento”). Es el mínimo tiempo que una señal tiene que
estar en la entrada de un registro antes del flanco ascendente del reloj, para que la
carga del registro se efectúe correctamente.
- Hold. Es el tiempo mínimo que debemos mantener la señal en la entrada después de
la señal de reloj, para garantizar que el dato haya sido correctamente escrito.
- Delay. Es el máximo tiempo que tarda la señal de entrada en transmitirse a la salida.
A partir de ese tiempo, podemos estar seguros de que la salida es correcta, y los
biestables del registro están debidamente estabilizados, pero antes de dicho retardo,
no podemos tener total seguridad, por lo que no podemos dar por buena la salida
obtenida.
En el siguiente cronograma, suponemos que hemos introducido por la entrada un valor
1, estando el registro anteriormente a 0. tPFF es el delay o tiempo de retardo.
clock
X
3
8
15
tsu
th
Z
8
15
tdelay
Si aumentamos la frecuencia del reloj, y por tanto, vamos estrechando el tiempo del
ciclo (tw) podemos encontrarnos con la siguiente situación al enlazar la salida de un
elemento con la entrada de otro:
En este caso, el tiempo de retardo más el tiempo de setup sumados son menores que el
ciclo de reloj. Por tanto, el sistema nos obliga a tener estabilizada una señal en la
entrada del segundo dispositivo (setup) antes de tener la seguridad de que el primer
dispositivo nos está dando una señal correcta (delay), comportándose el circuito de
forma imprevisible.
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Registro con permiso
Es una variante del registro antes descrito. Simplemente se le añade una entrada de
“permiso” (enable), que deberá estar activa antes del flanco del reloj para que se
produzca en el registro la escritura del dato introducido. Si la entrada de permiso está
inactiva, el registro no cambia su estado.
X
clock
Enable
Z
¿Cuál podría ser su implementación utilizando puertas lógicas?
Los registros con permiso pueden tener varias aplicaciones. Por ejemplo, imaginemos
que tenemos en un procesador un banco de registros donde almacenar los resultados de
operaciones aritméticas o lógicas que efectúa una ALU. Podemos conectar las entradas
de todos los registros a la salida de la ALU, y mediante un decodificador, activar
únicamente la línea de permiso del registro en el que queremos guardar el resultado,
dejando los demás registros como estaban.
Memoria RAM
La memoria RAM, es funcionalmente muy similar a una memoria ROM, con la
diferencia de que además de leer datos, podemos escribirlos. Por tanto, además de las
líneas de dirección y de salida, que ya teníamos en la ROM, necesitaremos líneas de
control que nos permitan indicar al dispositivo si lo que queremos es leer un dato
almacenado en la RAM, o escribir en la memoria un dato que introducimos por el bus
de datos. Así, mientras en la ROM el bus de datos era unidireccional (salida), en la
RAM es bidireccional (entrada y salida). Las celdas básicas de una RAM, dado que
necesitamos leer y escribir, no serán elementos preconfigurados por hardware (como en
la ROM), sino que serán esencialmente biestables como los vistos hasta ahora.
Celda básica de una memoria RAM
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Esquema de una memoria RAM
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Introducción a las máquinas de estados
Entre los automatismos, en ocasiones nos encontramos con situaciones en las que la
salida de un sistema no es función exclusivamente del valor de la entrada del mismo,
sino que depende también del estado en el que se encuentre en ese momento el sistema,
es decir, de su “historia dinámica”.
Veamos un ejemplo. Supongamos un sistema que controla el encendido y apagado de
un motor mediante un pulsador. Pulsando una vez el botón de encendido, el motor se
pone en marcha. Soltamos el botón y el motor sigue en marcha. Si queremos apagar el
motor, volvemos a pulsar el botón, y el motor se para. Soltamos el pulsador, y el sistema
queda como al principio. La señal de entrada que tenemos es el pulsador, que puede
estar pulsado (X=1) o no pulsado (X=0). Pero sólo viendo la señal de entrada (la
posición del pulsador) no podemos saber si el motor está en marcha o no. Necesitamos
conocer las distintas veces que el interruptor se ha pulsado y soltado.
No pulsar
Mantener pulsado
Pulsar
No pulsado /
apagado
Pulsado /
Encencido
Soltar
Soltar
Pulsado /
Apagado
Mantener pulsado
No pulsado /
Encencido
Pulsar
No pulsar
Como podemos deducir del diagrama, tendremos una entrada (pulsador) con dos valores
posibles, una salida con dos valores posibles (motor encendido / apagado), y cuatro
estados posibles.
Las máquinas de estados se pueden implementar electrónicamente mediante una
combinación de bloque secuencial (registro que guarda el estado del sistema) y bloque
combinacional, que calcula en cada ciclo el valor de la salida, y el nuevo estado del
sistema.
Los autómatas secuenciales son las implementaciones electrónicas de las máquinas de
estados, y pueden ser:
- síncronos: Las salidas y el estado cambian automáticamente con cualquier
modificación de las entradas, estabilizándose el sistema en un estado tal que el
“siguiente estado” es él mismo.
- Asíncronos: Las salidas y el estado del sistema cambian sólo en instantes de
tiempo predeterminados, marcados por un reloj de sincronización.
Existen dos formalizaciones para describir e implementar las máquinas de estados:
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
-
-
Autómatas de Mealy: La salida depende de la entrada y del estado del sistema.
Para un mismo estado del sistema, la salida puede variar de forma asíncrona con
una variación de las entradas, aunque el estado sólo cambie de forma síncrona.
Autómata de Moore: Las salidas dependen exclusivamente del estado del
sistema, de forma que tanto el estado del sistema como las salidas cambiarán de
forma síncrona.
En general, un autómata de moore requiere más estados para modelar una máquina de
estados, por lo que utilizará más memoria, aunque suelen ser más fáciles de modelar que
los autómatas de Mealy. Sin embargo, ambos modelos son equivalentes. Cualquier
máquina de estados se puede modelar mediante un autómata de Moore o de Mealy, y
hay normas para transformar un modelo en otro.
entrada
salida
Lógica
combinacional
entrada
Lógica
combinacional
Registro (estado)
Calculo salidas
Registro (estado)
Modelo de autómata de Mealy
salida
Modelo de autómata de Moore
Implementación electrónica
Existen muchas formas de implementar un autómata. A modo de ejemplo, veremos
cómo implementar el problema del motor y el pulsador, utilizando como lógica
combinacional una ROM.
Como nuestro problema tiene cuatro estados, necesitamos dos bits para codificar los
estados. Necesitamos también un bit para codificar la entrada, por lo que el bloque
combinacional tendrá tres entradas, y ocho combinaciones posibles. Las salidas serán
dos bits para codificar el nuevo estado (modelo de Moore). La salida la podemos
obtener directamente de uno de los bits del estado. Necesitaremos, por tanto una ROM
de ocho palabras de dos bits por palabra. Los estados los codificaremos de la siguiente
forma:
- Apagado / no pulsado = 00
- Apagado / pulsado = 01
- Encendido / no pulsado = 10
- Encendido / pulsado = 11
La salida al control de encendido del motor será, por tanto el bit más significativo del
estado. La programación de la ROM será:
S1
0
0
0
S0
0
0
1
Entrada
0
1
0
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
S’1
0
1
0
S’0
0
1
0
Arquitectura de Computadores
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
1
0
1
1
1
1
1
(S1S0 es el estado actual. S’1S’0 es el siguiente estado del sistema)
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Arquitectura de Computadores
Lasmáquinasde estadosy los microprocesadores
Hemos visto distintos bloques lógicos, combinacionales y secuenciales, necesarios para
el diseño de distintos elementos de la organización de los microprocesadores: registros
para almacenar la información temporal en los procesadores, ALUs para realizar
operaciones aritméticas y lógicas, ROMs y RAMs como almacenes de información
estática y dinámica, y otros componentes como los multiplexores y codificadores, que
permiten implementar, entre otras cosas, todas las señales de control necesarias para
activar o desactivar los distintos componentes necesarios para la ejecución de las
instrucciones.
Nos falta por describir, aunque sea mínimamente, un componente: la unidad de control.
La unidad de control es un dispositivo capaz de, a partir de una instrucción leída desde
la memoria, ejecutar toda una secuencia de acciones necesarias para la ejecución de la
misma. Por ejemplo, para ejecutar la lectura de un dato desde la memoria, y guardarlo
en un registro, deberá activar la escritura desde un registro de dirección al bus de
direcciones, activar la señal de lectura en la RAM, activar la señal de “permiso de
escritura” en el registro destino, para que el dato pase desde el bus de datos al registro,
etc.
La ejecución ordenada de todas estas operaciones se modela mediante una máquina de
estados, y se implementa dentro del microprocesador mediante un autómata como el
descrito en este tema (aunque, evidentemente, un poco más complejo que el ejemplo
propuesto).
Area de Arquitectura y Tecnología de Computadores
Departamento de Informática e Ingeniería de Sistemas
Descargar