Memoria Dinámica y Arquitectura del TMS320C3x: Optimizando el Rendimiento en DSPs
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 7,86 KB
Memoria Dinámica y su Uso en DSPs
La memoria volátil en un DSP es normalmente RAM estática por su sencillez y rendimiento. Sin embargo, ocupa más silicio que la memoria RAM dinámica. La DRAM necesita refrescos periódicos y un control mucho más sofisticado a través del direccionamiento de fila y de columna. Una forma de aumentar la rapidez en las memorias DRAM son los accesos especiales como la paginación o columnas estáticas. Son accesos especiales más rápidos cuando accedemos a datos que pertenecen a la misma fila de la memoria (es decir, datos que se encuentran dentro de una página de memoria). Los TMS320C3x tienen capacidades para detectar el cambio de página y generar estados de espera adicionales. En todos los casos, será necesario hardware adicional para controlar la DRAM.
Acceso Directo a Memoria (DMA)
El DMA es una técnica para el control de las E/S donde se realizan transferencias directas entre la memoria y el periférico sin intervenir el procesador. Normalmente, los DSP incorporan el DMA dentro del chip para aumentar el rendimiento.
El rendimiento depende del procesador. El TMS320C3x tiene buses independientes del procesador con un acceso a memoria por ciclo de reloj. El DSP3210 tiene un DMA sin buses, el acceso es por ciclo robado. Algunos controladores de DMA pueden manejar múltiples transferencias DMA en paralelo, se dice que tienen múltiples canales.
Arquitectura de la Memoria del TMS320C3x
Puede direccionar 16 M de 32 bits que pueden ser datos, programas o E/S.
- RAM interna en dos bloques de 1 K x 32 bits cada uno de memoria rápida (2 accesos por ciclo).
- Buses separados para leer código, leer dos datos y un DMA en un ciclo de instrucción.
Caché de Instrucciones del TMS320C3x
La caché de instrucciones del C3X se utiliza para aumentar el rendimiento cuando se ejecuta código almacenado en memoria externa. La caché funciona de manera transparente para el usuario. La caché está formada por dos segmentos de 32 palabras de 32 bits cada uno. Asociado con cada segmento tenemos un registro SSA (Segment Start Address) de 19 bits, donde se almacena la parte alta de la dirección de las instrucciones almacenadas en ese segmento. Por cada palabra de la caché tenemos un bit indicador de presencia (P) que indica la presencia o no de una instrucción en esa posición.
Cuando el procesador busca una instrucción en memoria externa, el algoritmo de la caché verifica si los 19 bits superiores de la dirección coinciden con el contenido de algún registro SSA. Si coincide con algún SSA, se comprueba el bit de presencia de la palabra del segmento útil con los 5 bits inferiores. Si el bit de presencia es 1 (P = 1), entonces tenemos caché acertada. El procesador realizará las siguientes operaciones:
- Lee la instrucción de la memoria caché.
- Actualiza la pila LRU poniendo en la cima el número del segmento accedido.
Si el bit de presencia es 0 (P = 0), entonces tendremos caché fallida con palabra fallida, ya que coincidía el SSA. Las operaciones serán en este caso:
- Lectura del código de instrucción de la memoria externa.
- Almacenamiento del código de instrucción en el segmento donde coincide la SSA y en la palabra indicada por los 5 bits inferiores.
- Se pone el bit de presencia a 1 (P = 1).
- Actualiza la pila LRU poniendo en la cima el número del segmento accedido.
Si los 19 bits altos de la dirección no coinciden con algún SSA, entonces tendremos caché fallida con segmento fallido. En este caso, las operaciones serán:
- El segmento menos utilizado frecuentemente (el que se encuentra en la cima de la pila LRU) se borra (borrando todos los bits de presencia).
- El registro SSA del segmento LRU se actualiza con los 19 bits superiores de la dirección de la instrucción que ha provocado el fallo de la caché.
- Lectura del código de instrucción de la memoria externa.
- Almacenamiento del código de instrucción en la caché.
- Se pone el bit de presencia a 1 (P = 1).
- Actualiza la pila LRU poniendo en la cima el número del segmento accedido.
Bits de Control de la Caché
El control de la caché se realiza con tres bits:
- Bit Borrado de caché (CC): Escribiendo un 1 se borra toda la caché. Todos los bits P se ponen a 0.
- Bit Habilitación de caché (CE): Escribiendo un 1 se habilita la caché y tendrá el funcionamiento indicado anteriormente. Si es 0, la caché está inhabilitada y ni se actualiza la caché ni se buscan instrucciones en la caché.
- Bit de caché parada (CF): Escribiendo un 1 paramos la caché, es decir, no se actualiza pero sí se siguen buscando instrucciones en la caché.
El C30 tiene dos interfaces (puertos) externos:
- Bus primario (con *STRB).
- Bus secundario o bus de expansión (con *IOSTRB y *MSTRB).
El C31 solo tiene el bus primario.
- HOLDST.- Bit de estado HOLD. Indica si el bus está tomado o no.
- NOHOLD.- Habilita o no la posibilidad de estado HOLD con las señales *HOLD y *HOLDA. No inhabilita HIZ.
- SWW.- Modo generación de estados de espera.
- WTCNT.- Número de ciclos de espera programables.
- NKCMP.- Número de bits de comparación de banco de memoria.
Programación de los Estados de Espera
Es posible controlar los estados de espera a través de los registros de control asociados a cada interface externo (primario y secundario). Con los bits SWW se controla el modo de generación de estados de espera.
Programación en la Conmutación entre Bancos de Memoria
Se utiliza para generar estados de espera automáticos cuando hay un cambio de banco de memoria. Se utilizan cuando se conectan memorias DRAM. En el modo paginado de las memorias DRAM, no es necesario mandar el direccionamiento de fila cuando este no cambia. Cuando se cambia de página, el C3X añade un estado de espera en el acceso, de esta forma es posible enviar el nuevo direccionamiento de fila.
La longitud del banco de memoria (página) se determina con los bits BNKCMP que puede variar de 0 a 16. Cuando se produce un direccionamiento sobre la memoria externa, se compara el número de bits indicados en BNKCMP con los del direccionamiento anterior. Si no son iguales (ha cambiado la página), el procesador añade un ciclo de espera. Si BNKCMP es igual a 16, entonces el tamaño del banco de memoria es de 8 bits (24-16=8). Por lo tanto, si el nuevo direccionamiento cambia en los 16 bits superiores, entonces se añadirá un estado de espera.
Autoboot del C31
El C31 en modo microcomputador soporta autoboot (auto arranque) a través de:
- Puerto serie (*INT3 activa en el arranque).
- Carga a través de la dirección 1000h (*INT0 activa en el arranque).
- Carga a través de la dirección 400000h (*INT1 activa en el arranque).
- Carga a través de la dirección FFF000h (*INT2 activa en el arranque).
- Carga a través de una posición de memoria.
Secuencia:
- 1000h - Tipo de memoria (8/16/32 bits).
- 1001h - Configuración de la memoria de carga (ciclos de espera, etc.).
- 1002h - Tamaño del bloque del programa.
- 1003h - Dirección de destino en la memoria del C31.
- 1004h - Dirección de ejecución.
- 1005h y siguientes - Programa de arranque.
Se pueden transmitir varios bloques, hasta que el tamaño de bloque sea 0. A través del puerto serie sólo se manda: tamaño del bloque, Dir. Destino y Dir. de ejecución.