5.1         Periférico Memoria Caché.

 

Los DSPs de la familia TMS320C3x de Texas Instruments poseen un periférico interno destinado a la optimización, en caso necesario, de los accesos del sistema a memoria externa de programa. Este periférico consiste en una memoria capaz de almacenar hasta 64 instrucciones (de tamaño 64x32 bits) y un algoritmo de control del acceso a dicha memoria. Se usa para almacenar secciones de código repetidas, para evitarle a la CPU el acceso al exterior a volver a recoger una instrucción que hace relativamente poco tiempo que se recogió. Esto reduce los accesos a memoria externa acelerando, en el tiempo, la ejecución de los programas almacenados en dispositivos de memoria externa lentos (que tienen por otro lado la ventaja de ser los más baratos). Cuando la CPU pretende recoger una instrucción entra en funcionamiento este periférico, siempre que se encuentre habilitado, que decide, de alguna forma, si es o no necesario el acceso al dispositivo externo donde se encuentra físicamente la instrucción.

 

Una de las principales ventajas e inconvenientes de este periférico, es que actúa de forma independiente y automática, el usuario no interviene. Usa un algoritmo denominado LRU (Least Recently Used) para la actualización del contenido de la memoria y como lógica de control del acceso al periférico.

 

La arquitectura de la memoria Caché se muestra en la figura 2.23. La memoria Caché se divide en dos segmentos de 32 words cada uno, con 32 posibles instrucciones cada uno. A cada segmento se le asocia otro registro de 19 bits denominado SSA (Segment Start Address), SSA0 para el segmento 0 y SSA1 para el segmento 1. A cada word de la Caché se le asocia un bit, denominado bit P, que indica si está o no presente una instrucción en ella.

 

Cuando la CPU necesita recoger una instrucción ubicada en la memoria externa, el periférico Caché realiza un chequeo para ver si la instrucción está contenida en su memoria. El Algoritmo de control de acceso a la memoria de la Caché, figura 2.23, se basa en la división de la dirección de la nueva instrucción que se desea recoger, indicada por el registro PC, en dos partes:

 

·       Los 19 MSBs del registro PC (bits más significativos de la dirección). Se usan para seleccionar entre uno de los dos segmentos de que dispone el periférico (SSA0 ó SSA1).

·       Los 5 LSBs del registro PC (bits menos significativos de la dirección). Se usan para buscar la instrucción dentro del segmento seleccionado, para seleccionar una posición de memoria de entre 32 posibles que dispone cada segmento.

 

Los 19 MSBs de la dirección de la nueva instrucción se comparan con los dos registros SSA. Si coincide con alguno de ellos, los 5 LSBs del registro PC se utilizan para comprobar si el bit P del segmento seleccionado está activo. El bit P lo utiliza la CPU para ver si la instrucción que desea recoger está presente en el segmento. Si no se encuentra una coincidencia con los SSA de los 19 MSBs de la instrucción puede reemplazarse uno de los dos segmentos de la memoria Caché con nuevos datos, instrucciones que se recojan de la memoria externa a partir de ese momento.

 

El algoritmo LRU es el que determina el segmento a reemplazar. Para ello se define una pila de 2 bits, LRU-Stack, que se emplea en determinar el segmento, de los dos posibles, menos usado recientemente por el periférico. Cuando hay que reemplazar datos de la Caché se usa el segmento que más tiempo hace que no es accedido, determinado por el elemento o bit que ocupa la parte inferior de la pila. Una vez determinado el segmento menos empleado, las 32 banderas P de él son puestas a 0 y el registro SSA correspondiente a ese segmento es reemplazado por los 19 MSBs de la dirección de la instrucción que se está recogiendo en esos momentos. Cada vez que el periférico accede a uno de los segmentos introduce en la cima de la pila el número correspondiente al mismo (si se usó el SSA0, se introduce en la parte alta de la pila del LRU el valor 0). Obsérvese que la pila tiene 2 bits, uno de los cuales vale siempre 1 y el otro 0, de forma y manera que si en la parte alta de la pila aparece un 0 en la baja tiene que haber un 1 y viceversa.

 

Cuando se resetea el sistema microprocesador, el periférico de memoria Caché se inicializa con los siguientes valores:

 

§        Top pila=0. El segmento 0 es el segmento que, después de un reset, se define como el último usado.

§        Bottom pila=1. El segmento 1 es el segmento que, después de un reset, se define como el que no se ha usado recientemente.

§        Todas las banderas P (una por cada word de la memoria caché) se ponen a 0 indicando que no hay ninguna instrucción en el registro correspondiente.

 

El algoritmo de acceso y actualización de la memoria caché se resume como sigue:

 

1.    CACHE HIT: Se dice que se ha producido un Caché Hit si la memoria del periférico caché tiene la instrucción que la CPU está buscando. En este caso, la CPU no accede al exterior a recoger la instrucción sino que la recoge de la memoria del periférico caché. El algoritmo de acceso a la instrucción se completa con la actualización de la pila de dos bits: En la cima de la pila (top pila) se introduce el número del segmento (0 ó 1) donde estaba la instrucción recogida.

 

Figura 2.22. Arquitectura del periférico de memoria caché.

 

2.    CACHE MISS: Se dice que se ha producido un Caché Miss si la memoria del periférico caché no tiene la instrucción que la CPU está buscando. En este caso, el periférico no dispone de la instrucción por dos posibles causas:

 

·      WORD MISS: Uno de los segmentos SSA coincide con los 19 MSBs de la dirección de la instrucción que se desea recoger pero la bandera P, asociada a los 5 LSBs de esa instrucción, no está activada. En este caso, la instrucción es recogida por la CPU de la memoria externa y se aprovecha para almacenarla en la propia caché. Los 5 LSBs de la dirección de la instrucción indican la word en la que se almacena la instrucción. La bandera P correspondiente a dicha posición de memoria de la caché se pone a 1. En la cima de la pila de dos bits aparece el número del segmento en el que se acaba de almacenar la instrucción recogida.

 

·      SEGMENT MISS: Los 19 MSBs de la dirección de la instrucción no coinciden con ninguno de los registros SSA del periférico. En este caso, la instrucción se recoge de memoria exterior y, simultáneamente, se aprovecha para almacenarla en la caché. Ahora, al contrario que en el caso anterior, todas las banderas P correspondientes al segmento que indicaba la parte baja de la pila (bottom pila) son puestos a 0 (se limpian). Los 19 MSBs de la dirección de la instrucción accedida se copian al registro SSA del segmento inicializado, se activa la bandera P ligada a los 5 LSBs de la dirección de la instrucción recogida y, finalmente, se guarda la instrucción recogida en la posición de memoria seleccionada de la caché. Al final, el número del segmento activado se almacena en la cima de la pila (top pila).

 

NOTA IMPORTANTE: Hay que tener cuidado con programas que modifiquen el código si se ha habilitado, activado, simultáneamente el periférico caché. Las modificaciones que se realicen puede no recogerlas la caché. Nos podemos encontrar con una situación en la que, aunque hemos cambiado el código vía software, la CPU no ejecuta el código nuevo sino el antiguo por estar impidiendo, el periférico caché, el acceso a la memoria donde se ha ubicado el programa.

 

e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


IMPLANTACIÓN DE UNA RED ASÃNCRONA DE ENSEÑANZA DEDICADA A LA IMPARTICIÓN DE LA ASIGNATURA COPLEMENTOS DE SISTEMAS ELECTRÓNICOS DIGITALES DE 3º CURSO DE INGENIERÃA DE TELECOMUNICACIÓN.

: Oliveros Garrido, Antonio
: Ingeniería Telecomunicación
Contenido del proyecto: