COMPONENTES DE MEMORIZACIÓN 1. 2. 3. 4. Registros Contadores Bancos de registros Memorias Objetivo fundamental: - Almacenar datos - Realizar transformaciones sencillas: o Desplazar o Contar ------------------------------------------------------------------------------------------------------- 1.- Registros Es el componente de memorización más sencillo. Un registro de n bits está formado por n biestables por lo que tendrá: n entradas n salidas una señal de reloj común. Tenemos 1 biestable por cada bit que queremos almacenar. I3 I0 I1 I2 Pr D3 Q3 D2 Q2 D1 Q1 D0 Q0 Clr Clk Este registro lo representaremos de la siguiente forma: o Preset I3 I2 I1 I0 o Clear D3 D2 D1 D0 1 Registro de 4 bits con biestables tipo D y señales asíncronas de puesta a 1 (Preset (Pr)) y puesta a cero (Clear (Clr)). Preset: Todos a 1 cuando Pr = 0. Clear: Todos a 0 cuando Clr = 0. De ahora en adelante, las supondremos pero no las pintaremos. Registros de desplazamiento En el esquema anterior se almacena un dato automáticamente en cada flanco ascendente de la señal de reloj. Sin embargo, en la mayoría de los sistemas digitales, un dato se memoriza durante varios ciclos de reloj antes de modificarlo. Por este motivo es útil poder controlar cuando ha de introducirse el dato en el registro. Esto se consigue con el uso de una señal de control denominada carga (load) o habilitación (enable) que permite cargar un dato en el registro. Los datos se pueden introducir y sacar en serie o paralelo. Además los datos se pueden desplazar (shift) dentro del registro a la derecha o a la izquierda. Por tanto, podemos distinguir diferentes tipos de registros: - Entrada paralelo / salida paralelo - Entrada serie / salida serie Con desplazamiento a derecha Con desplazamiento a izquierda - Entrada paralelo / salida serie Éste es el más usado aunque podría ser también con desplazamiento a la izquierda 2 - Entrada serie / salida paralelo Éste es el más usado aunque podría ser también con desplazamiento a la izquierda - Rotación Con desplazamiento a derecha Con desplazamiento a izquierda Entrada paralelo / salida paralelo Está formado por multiplexores y biestables Load I3 I2 I1 I0 Load 0 1 D3 D2 D1 D0 I3 1 I2 0 1 Q3 I3 I1 0 1 Q2 Q1 No cambia I2 I1 Q0 I0 I0 0 1 0 Load D3 Q3 D2 Q2 D1 Q1 Q0 D0 Clk 3 Entrada serie / salida paralelo Vamos a ver el caso con desplazamiento a la derecha. Shift IL Shift 0 1 D3 D2 D1 D0 Q3 IL Q2 Q1 No cambia Q3 Q2 Q0 Q1 IL 1 0 1 0 1 0 1 0 Shift D3 Q3 D2 Q2 D1 Q1 Q0 D0 Clk 4 Otros registros Con esta idea podemos implementar otros registros de desplazamiento S1 0 0 1 1 S0 0 1 0 1 Q3 Q2 Q1 No cambia I2 I1 Q1 Q0 Q3 Q2 I3 Q2 IL S1 IL I3 3 2 1 0 Entrada paralelo / salida paralelo. Entrada serie / salida paralelo. desplazamiento. izquierda Entrada serie / salida paralelo. desplazamiento. derecha I0 IR Q1 I3 I2 I1 I0 S0 IL Q0 IR D3 D2 D1 D0 I2 3 2 1 IR I0 I1 0 3 2 1 0 3 2 1 0 S0 S1 D3 Q3 D2 Q2 D1 Q1 Q0 D0 Clk 5 2.- Contadores Un contador es un tipo especial de registro que incorpora un circuito que permite contar de forma ascendente o descendente. Vamos a diseñar un contador de tres bits que dependiendo de la entrada “C”, realice una cuenta ascendente (C = 1) o descendente (C = 0). a.- Para diseñar un contador de tres bits necesitamos tres biestables. b.- A continuación tenemos que hacer la tabla de transición de estados. C 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Q2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Q1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 Q0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Q2+ 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 Q1+ 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 Q0+ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 c.- Una vez sabemos el estado en el que nos encontramos y el estado al que queremos pasar, basta con conocer la tabla de excitaciones de los biestables que hayamos decidido utilizar para determinar sus funciones. Supongamos que queremos utilizar biestables tipo T, cuya tabla de excitación es: Q -> Q+ T 0 0 1 1 0 1 1 0 -> -> -> -> 0 1 0 1 6 De esta manera hayamos las funciones de entrada de los tres biestables. C 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Q2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 Q1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 Q2+ 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 Q0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Q1+ 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 Q0+ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 T2 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 T1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 T0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 d.- El siguiente paso es minimizar mediante Karnaugh las funciones T2, T1 y T0. Estas funciones tienen 4 variables de entrada: C, Q2, Q1 y Q0 Recordar que Q2+, Q1+ y Q0+ nos han servido para calcular T2, T1 y T0 pero ya no las vamos a utilizar más. T1 T2 CQ 2 Q 1Q 0 1 1 1 1 T0 = 1 1 1 1 1 T1 = C ´Q 0´+ CQ 0 CQ 2 Q 1Q 0 1 1 1 1 T2 = CQ 1Q 0 + C ´Q 1´Q 0´ 7 e.- Por último, dibujamos el circuito C . . E . T0 Q0 . . T1 . Q´0 Q2 T2 Q´2 Q´1 . clk . Q1 . Si la entrada E = 1, el circuito funciona tal y como lo hemos diseñado, pero si E = 0, todos los biestables tendrán a su entrada un 0 y por tanto mantendrán su valor (paramos el contador). Contador asíncrono Se pretende eliminar las puertas entre los biestables, esto se consigue haciendo que cada biestable cambie de estado a distinta frecuencia, por lo que no están sincronizados todos por la misma señal. E . T0 T1 Q0 Q´0 Q1 T2 Q2 Q´2 Q´1 clk clk Q0 E=1 Q1 Q2 000 001 010 011 100 101 110 111 000 8 Retardo de propagación A los contadores asíncronos también se les conoce como contadores con propagación ya que el efecto de un impulso de reloj en la entrada lo siente primero T0. Después del retardo propio del biestable (está formado por puertas lógicas), pasa a T1 y así sucesivamente hasta el último biestable. Veamos el efecto con tres biestables en el paso 111 a 000. Este retardo acumulativo de un contador asíncrono es una de sus mayores desventajas. Siempre ha de ser menor que el periodo de la señal de reloj. 111 000 A partir de un cierto número de bits se puede optar por contadores de modo mixto. Por ejemplo supongamos un contador de 8 bits. En lugar de optar por un solo contador hemos optado por tener dos contadores de 4 bits. Solución 1: Contadores síncronos sincronizados de forma asíncrona. clk E . E Contador síncrono Clear Q3 Q2 Q1 Q0 E Contador síncrono Clear Q3 Q2 Q1 Q0 . clear .. . . Solución 2: Contadores asíncronos sincronizados de forma síncrona. E clk . E Contador asíncrono Clear clear . Q3 Q2 Q1 Q0 E Clear Contador asíncrono Q3 Q2 Q1 Q0 .. .. 9 3.- Bancos de registros Un banco de registros es una matriz bidimensional (2n x m) de celdas de biestables (RFC, Register File Cells), decodificadores de lectura y escritura y una lógica de adaptación de salidas. Cada fila es un registro, formado por m celdas. Tenemos 2n filas (registros). La ventaja de tener los registros agrupados en una matriz es que se requiere menos circuitería que si los tuviéramos separados. RFC . Selección escritura D Q . Salida Entrada clk Entradas a RFC: - Bit de entrada - Señal de selección de escritura - Señal de selección de lectura - Señal de reloj Salidas del RFC: - Bit de salida Selección lectura El biestable D memoriza el bit de entrada si “selección de escritura” = 1 si no, mantiene el valor que tenía. Si “selección de lectura” = 1, el valor del biestable pasa a la salida a través del adaptador triestado. E /m WA n n / / WE RA RE clk /m Decodificador de escritura: Si WE = 1, selecciona una de las filas según WA y memoriza los valores de la entrada E coincidiendo con el flanco ascendente del reloj. Decodificador de lectura: Si RE = 1, selecciona una de las filas según RA y la saca por la salida S. Si RE = 0, todos los valores de la salida tendrán un valor de alta impedancia. S 10 E3 RFC WA WA E1 E2 RFC E0 RFC RFC 1 1 0 RFC RFC RFC RFC RFC RFC RFC RFC RFC RFC RFC RFC 0 RA RA WE S3 S2 S1 RE S0 No pintamos la señal de reloj para no complicar el dibujo. La limitación principal del banco de registros es que de todos los registros que lo forman, sólo podemos estar accediendo a uno de ellos para lectura y a uno para escritura en un momento determinado. Por esta razón, la mayoría de bancos de registros tienen dos decodificadores de lectura y uno o dos de escritura ya que las operaciones normalmente requieren dos operandos y un resultado. Los bancos de registros son por lo general muy rápidos, pero tienen el inconveniente de ser muy caros. Por este motivo se emplean en aplicaciones de alta velocidad y en microprocesadores. 11 4.- Memorias Hemos visto que los bancos de registros son de tamaño reducido, rápidos y apropiados para la memorización temporal durante los cálculos. Por otra parte, las memorias de acceso aleatorio (RAM: Random Acces Memory), son grandes y más lentas, pero muy apropiadas para la memorización de programas y datos. Al igual que los bancos de registros, las memorias están organizadas en matrices de (2n x m) celdas de biestables (MC, Memory Cells), decodificadores de direcciones y una lógica de adaptación de entradas/salidas, con la diferencia que en este caso, n es mucho mayor, y la circuitería empleada para acceder a las celdas se reduce bastante. Selección de fila MC . Entrada D Q Salida Habilitación escritura Entradas a MC: - Bit de entrada - Señal de selección de fila - Señal de habilitación de escritura Salidas del MC: - Bit de salida Para que la entrada se cargue en el biestable es necesario que tengamos permiso de escritura (habilitación de escritura) y que hayamos seleccionado esa fila, entonces se producirá un flanco ascendente que nos cargará el dato. Para poder leer la salida es necesario que hayamos seleccionado esa fila. 12 Decodificador de direcciones 0 MC MC MC MC MC MC MC MC MC MC MC MC MC MC MC MC 1 A1 A0 2 3 RWS CS . . . . IO 3 . . IO 2 . . IO 1 . IO 0 CS = 1 La memoria opera normalmente. CS = 0 Se inhabilita el funcionamiento de la memoria. Habilitación de escritura (RWS). Selecciona el modo de operación de la memoria. RWS = 1 Se escribe el contenido de la entrada (IO) en la memoria. RWS = 0 Se lee el contenido de la memoria. IO: Bus de datos. Línea que nos sirve tanto para introducir datos (escribir) como para obtener datos (leer) de la memoria. A: Bus de direcciones. Nos indica la fila a la que queremos acceder. Mediante el decodificador de direcciones se activa la señal de selección de la fila correspondiente. 13