ARQUITECTURA DE COMPUTADORES. 2º INGENIERIA INFORMATICA. BOLETIN PROBLEMAS (Tecnología de los sistemas de memoria). Curso 03/04. 1) ¿Cuáles son las tres misiones más importantes de un controlador de memoria DRAM? 2) Se tiene el siguiente código que codifica una cadena de caracteres mediante la codificación del Cesar (a cada letra X se le suma un número para transformarla en la letra número X + 5 del abecedario): … char cadena[10000]; ... for ( i = 0; i < 10000; i++) cadena[i] = (cadena[i] – ‘a’ + 5) %26 + ‘a’; ... Este fragmento de código hace 10000 lecturas de un vector almacenado a partir de la posición/dirección de memoria A0000h. El procesador dispone de una memoria caché interna para instrucciones de forma que sólo accede a la memoria principal para acceder a los datos. Esto implica que a partir de la primera lectura de datos (cadena[0]) el procesador hace 9999 lecturas más en memoria principal. En esa primera lectura se debe acceder por primera vez a una fila de la matriz de datos del módulo de memoria correspondiente à primera “precarga RAS” o utilizando la notación vista en clase primer “ACTIVTE”. Se utiliza un sistema de memoria con varios chips/módulos de DRAM de 1Mb x 4, es decir, memorias de 1M de bus de direcciones con un bus de datos de 4 bits y por lo tanto con una capacidad total de 0,5MBs. ¿Cuál será el valor de la variable “i” cuando se produzca la segunda “precarga RAS”, es decir, cuando se tenga que acceder a otra nueva fila en los módulos de memoria? 3) Considere una RAM dinámica a la que deba darse un ciclo de refresco 64 veces por milisegundo. Cada operación de refresco requiere 150 ns. Un ciclo de memoria requiere 250 ns. ¿Cuál es el tiempo total de funcionamiento de la memoria que se pierde debido a los refrescos? 4) Considerar un sistema basado en un microprocesador 68000 con una memoria entrelazada de 2 vías/bloques de tamaño 2k bytes. El subsistema de memoria se diseña con chips de 2j posiciones de 2i bits (matriz de 2j x 2i bits). Utilizar el número de chips necesarios para diseñar el subsistema de memoria mostrando el circuito con todas las líneas de interconexión necesarias. Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 1 5) Se dispone de una memoria PC1600 (DDR200) que trabaja con un frecuencia real de 100 MHz. Concretamente se tiene un único chip de 4Mb x 8 y que también contiene un único banco de memoria. No se dispone de memoria caché para datos. La memoria puede trabajar en modo ráfaga 4. Sus principales características se muestran en los siguientes cronogramas: CL es la latencia CAS y t PR el tiempo de precarga. El “command” ACT selecciona una fila de un banco, el “command” READ selecciona una columna dentro de una fila y el “command” PRE (precarga) desactiva fila y columna seleccionada. Por otro lado el “command” NOP indica que no se envía ninguna operación a la memoria. En un programa de usuario se quiere sumar un uno a todos los elementos de una matriz cuadrada de números enteros de dimensión 100. Un número entero se representa mediante 4 bytes. La matriz se encuentra cargada a partir de la dirección de memoria 0h. ¿Cuánto tiempo emplea el programa en lo que son accesos a memoria? Indique número de ciclos y tiempo total. Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 2 RESPUESTAS Tecnología de los sistemas de memoria. Curso 03/04. 1) Como ya se ha visto en la teoría hay operaciones relativas al acceso a memoria DRAM que no son hechas ni por el procesador ni por el módulo de memoria. Esas operaciones son realizadas por un dispositivo externo llamado controlador de memoria que puede ir en el propio DIMM o en la placa base (chipset) del ordenador. Las tres funciones básicas que realiza son: 1- Refresco. Por ejemplo a los módulos de memoria SDRAM o DDR-DRAM les llegan periódicamente “mandatos” AUTO REFRESH o SELF REFRESH y mediante un hardware interno (contador) van refrescando las diferentes filas de los bancos de memoria. Estos “mandatos” son enviados por el controlador de memoria y a veces incluso la frecuencia de envío se puede modificar a través de la BIOS de un ordenador. Esto a veces hay que hacerlo si se produce un cambio de DIMMs o RDIMMs en el ordenador. 2- Arbitración. No siempre los módulos de memoria DRAM están disponibles para ser accedidos por parte del procesador. A veces la DRAM está ocupada por tareas concernientes al refresco. El controlador de memoria se encarga de dar paso a la petición de la CPU cuando no se esté realizando ninguna tarea de refresco. 3- Multiplexación direcciones. El procesador “ve” la memoria (caché, DRAM, disco duro) como un todo. Se dice que la memoria es “transparente” al procesador. Simplemente envía direcciones y envía/recibe datos. Por otro lado al módulo de DRAM le llega la dirección del procesador en dos partes: la fila y la columna, validadas por las señales RAS# y CAS# respectivamente. En medio por tanto, tiene que existir un circuito que como mínimo haga la múltiplexación y activación de las señales CAS# y RAS#. 2) Supongamos que se duplican los chips de memoria, es decir, se utilizan dos chips en paralelo. De esa forma por cada acceso se lee un byte y el bus datos por tanto son 8 bits. En cuanto al bus de direcciones está claro que son 20 bits ya que los chips son de 1M. En resumen, de cara al procesador se dispone de 1MB (un mega byte) = 220 bytes. Por cada página (fila) se podrán leer 210 columnas, o lo que es lo mismo 1024 elementos, ya que las direcciones son divididas por el controlador de memoria en dos partes: la fila (parte alta) y la columna (parte baja). Al leer el primer elemento del vector en el programa de usuario (cadena[0], i = 0), ¿qué fila y qué columna se seleccionan en la DRAM? Como “cadena[0]” está a partir de la dirección A0000h = 1010 0000 0000 0000 0000b, entonces la fila es 1010 0000 00b (diez bits de la parte alta de la dirección) y la columna es la 00 0000 0000b (diez bits de la parte baja de la dirección). El primer acceso por tanto es a la columna 0 y como hay 1024 columnas (de la 0 a la 1023) entonces cuando la dirección de la columna sea 11 1111 1111b = 1023, i valdrá 1023. En concreto la dirección que “marcará” una nueva fila será la A0400h = 1010 0000 0100 0000 0000b Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 3 4) En el esquema siguiente se van a representar el bus de direcciones (A1-23 ), el bus de datos (D0-15 ) y parte del bus de control (señales UDS# y LDS#) del microprocesador 68000. Faltarían las señales del bus de control R/W#, AS# y DTACK#. Por lo tanto sólo se muestra el diseño del sistema concerniente a la parte de decodificación de direcciones. Suponiendo que para simplificar k - 2 = j + i entonces cada bloque de chips será de la siguiente forma: Si j + i < k – 2 entonces habría que poner más configuración de 2i+j x 8 chips para cubrir los 2k-2 x 8 bits. Si j + i > k – 2 entonces habrá posiciones de memoria que no se usarán en esta configuración, es decir, se desaprovechará memoria. En cualquier caso k tiene que ser menor o igual que 24 ya que ese es el tamaño del bus de direcciones del 68000. Por otra parte cada chip de memoria del bloque tendrá una estructura como la que sigue: Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 4 3) 1ms = 1000 µs = 106 ns El periodo de refresco por tanto será 106 / 64 = 12625 ns Esto quiere decir que por cada 15625 ns se pierden 150 ns por motivos de refresco. El resto (15475 ns) se supone que es tiempo útil para realizar accesos a memoria. Por otro lado se dice que un ciclo de memoria (leer o escribir un dato en memoria) son 250 ns. Esto quiere decir que se podrán hacer 61 accesos a la DRAM y que el 62 no se podrá completar ya que 15475 ns / 250 ns por acceso = 61,9 accesos. En total 61 accesos como máximo. ¿Cuál es el tiempo perdido entonces al refresco? Para ello se va a calcular el porcentaje de ocupación de la memoria para acceso a información útil: 15625 ns 250 x 61 ns 100 % X X = 97,6 % del tiempo se accede a información útil à 100 % - 97,6 % = 2,4 % del tiempo perdido en refrescos El tiempo total perdido debido a los refrescos será por tanto: 15625 ns x 0,024 = 375 ns 5) Si se dispone de un memoria de 4Mb x 8, eso quiere decir que se tienen 4MBs en total. Como sólo hay un banco de memoria (y no se dice nada al respecto) la memoria no puede ser entrelazada. Por otro lado una dirección de memoria siempre se divide en dos partes: fila y columna. Por lo tanto hay 211 filas y en cada fila hay 211 columnas ya que 4MB = 211 *211 bytes. Como la memoria es de x8 cada vez que se lea una columna se estarán recuperando por el bus de datos 8 bits, o lo que es lo mismo, 1 byte. En ese caso para leer un número entero será necesario acceder 4 veces al chip, o lo que es lo mismo, leer 4 columnas (4 bytes) de una misma fila o de dos filas si el número da la mala suerte de que se almacena entre dos filas del chip. Casualmente ese es el tamaño de la ráfaga, por lo que por cada “command” READ se podrá leerá un número entero en dos ciclos de reloj reales (4 virtuales) con sólo tener Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 5 que mandar la dirección de inicio del número (primera columna). Previamente por supuesto habrá que haber seleccionado la fila con el “command” ACT, y si no es la primera vez que se utiliza ACT, previamente al ACT habrá que haber echo una precarga mediante el “command” PRE. ¿Cuántas filas hay que leer en el chip de DRAM? Si la matriz de datos del usuario es de dimensión 100 eso quiere decir que hay un total de 100 x 100 números enteros y por lo tanto hay que leer 100 x 100 x 4 bytes = 40000 bytes. En una fila de nuestro chip de memoria hay 211 bytes = 2048 bytes. Por lo tanto la matriz del programa estará almacenada en veinte filas consecutivas del chip (40000/2048 = 19,53). • En concreto las primeras 19 filas habrá que leerlas completamente à 211 bytes / 4 bytes por número entero (y ráfaga) = 512 números por fila y por lo tanto 512 “commands” READ consecutivos por fila. Recuérdese que cada “command” READ lee en modo ráfaga 4 columnas. El chip en cada acceso proporciona 8 bits (x8) de datos y por lo tanto al leer una columna se proporciona en la salida del chip 1 byte. • La última fila no se lee entera. 40000 – 2048*19 = 1088 bytes à 1088 bytes o columnas / 4 bytes por número entero = 272 números en la fila número 20 y por lo tanto también 272 “commands” READ. Resumiendo: - 20 “commands” ACT (uno por fila) - 20 “commands” PRE (al finalizar la lectura de la fila anterior. Si después de leer la última fila NO se quiere hacer precarga entonces serían 19 “commands” PRE) - 19 x 512 + 272 “commands” READ (como ya se ha visto, casualmente hay que hacer un sólo READ por cada número contenido en la matriz) Si ahora se quieren calcular el número de ciclos totales habrá que fijarse en los cronogramas para ver cuánto dura por ejemplo la lectura de una fila del chip. La secuencia de lectura de una fila en el chip DRAM es: primero se manda ACT (fila), luego diferentes READs (columnas) y finalmente PRE (precarga). En este caso no se utilizan/proporcionan READs o WRITREs con pre-carga incluida. De todas formas como las precargas hay que hacerlas de una u otra forma el hecho de haber utilizado unos “commands” u otros no altera el tiempo final. Entre un ACT y un READ como mínimo un 1 ciclo de reloj (real) ya que los mandatos (“commands”) se activan con un flanco de subida de la señal de reloj en las memorias DDR (y por supuesto también en las SDR). Realmente a la vista del cronograma tampoco está claro que sea un solo ciclo, pero como mínimo tiene que pasar un ciclo. Entre 2 READs consecutivos hay 2 ciclos de reloj (esa es la latencia CAS). Como hay 512 “commands” READ entonces 1024 ciclos. Finalmente tiempo de precarga tPR, PRE (precarga): 3 ciclos más antes del siguiente ACT (siguiente fila). Ver primer cronograma. Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 6 Total por fila completa: 1 (ACT) + 511*2 (READs) + 3 (PRE) = 1026 ciclos por fila Última fila: 1 (ACT) + 272 *2 (READs) + 3 (PRE, no estrictamente obligatorio) = 548 ciclos por la última fila TOTAL: 19 filas x tiempo fila completa + tiempo última fila = 19 x 1026 + 548 ciclos = 20042 ciclos. Si se quiere expresar en tiempo absoluto habrá que multiplicar los ciclos por la frecuencia. Como la frecuencia real es 100 MHz entonces el periodo es 10 ns. Por lo tanto el tiempo total es 20042 ciclos * 10 ns = 200420 ns , es decir, aproximadamente 0,2 ms Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 7