Download 1 ARQUITECTURA DE COMPUTADORES. 2º INGENIERIA
Document related concepts
no text concepts found
Transcript
ARQUITECTURA DE COMPUTADORES. 2º INGENIERIA INFORMATICA. Soluciones del BOLETIN 2: Tecnología de los sistemas de memoria. Curso 06/07. 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. En el caso concreto de los ordenadores tipo PCs, estos controladores van en la placa base (chipset) del ordenador. Se ubican dentro del chip denominado “puente norte” como un módulo más. Este módulo interactúa con otro módulo del chip “puente norte” que es el que sirve de enlace con el procesador. Las tres funciones básicas (entre otras) 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 con chips de memoria diferentes a los anteriores (por ejemplo, cambio frecuencia de funcionamiento). 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. Como no hay memoria caché de datos, los accesos a los elementos del vector se hacen directamente a la memoria principal. Esto implica que el procesador hace 10.000 lecturas en memoria principal: desde el elemento cadena[0] a cadena [9999]. En la primera lectura (cadena[0]) se debe acceder por primera vez a una fila correspondientes de la matriz de datos de los dos módulos/chips de memoria Æ primera “precarga RAS” o “ACTIVATE” (notación de comandos/mandatos), es decir, abrir o acceder a una fila nueva. Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 1 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). Podría no obstante haberse trabajado con chips de memoria de 1Mbx4 que por ejemplo tuvieran 211 filas y en cada fila 29 columnas. En total sería también 0,5 MB. Como no se dice nada se suponen que los chips de memoria tienen 1024 filas, y por lo tanto también 1024 columnas. 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. Esto implicará hacer a continuación una precarga/cierre de la fila anterior para poder continuar el acceso a los datos del vector a partir de la siguiente fila en los chips. 3) 1ms = 1000 µs = 106 ns El periodo de refresco por tanto será 106 / 64 = 15625 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 en cada periodo de refresco será por tanto: 15625 ns x 0,024 = 375 ns. Por cada milisegundo se pierden en el refresco: 64 veces/milisegundo x 375 ns = 24000 ns. 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 Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 2 se muestra el diseño del sistema concerniente a la parte de decodificación de direcciones. De los “k” líneas de direcciones necesarias para direccional la memoria de 2k bytes, hay que tener en cuenta que para el caso del 68000, un bit será necesario para distinguir entre parte alta (señal UDS#) y parte baja de la palabra (señal LDS#). Por otro lado, como se pide memoria entrelazada de dos vías, un bit (A1) será necesario para distinguir entre los dos bancos. En total k-2 bits para direccionar internamente cada chip. 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. 3 5) Si se dispone de un memoria de 4Mb x 8, eso quiere decir que se tienen 4MB 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 se supone que hay 211 filas y en cada fila hay 211 columnas ya que 4MB = 211*211 bytes. El número de filas y de columnas podría haber sido diferente. Por ejemplo, se podría haber supuesto que hay 212 filas y 210 columnas por fila. 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. Puede darse el caso de que haya que acceder a dos filas, si el número está almacenado entre dos filas consecutivas. En relación a este último aspecto, si se supone que el tamaño de la palabra del procesador es 4 bytes (32 bits), en cada acceso o ciclo de bus por lectura, se debería leer un número entero. Como el bus de datos de la memoria es de 8 bits (se tiene sólo un único chip), hay que tener en cuenta por tanto que deberá haber un circuito en medio que transforme la petición del procesador de una palabra de 32 bits/4 bytes en dos accesos al chip de memoria (2 accesos * 2 bytes por acceso al ser DDR = 4 bytes). En este problema no se va a abordar esta conexión y adaptación del ancho de buses. Casualmente 4 también ese es el tamaño de la ráfaga, por lo que por cada “command” READ se podrá leerá un número entero cada dos ciclos de reloj reales (cuatro virtuales) con sólo tener que mandar la dirección de inicio del número (primera columna). En cualquier caso leer por tanto un entero de memoria se requerirá (como mínimo) de dos ciclos de reloj reales (cuatro virtuales). Previamente por supuesto habrá que haber seleccionado/abierto la fila con el “command” ACT (active). Si no es la primera vez que se utiliza ACT, previamente al ACT habrá que haber echo una precarga mediante el “command” PRE (precharge). En principio para un nuevo acceso se supone que ya se ha cerrado/precargado con anterioridad la fila anterior. Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 4 ¿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 (y cada columna se corresponde con un ciclo de reloj virtual). El chip en cada acceso proporciona 8 bits (bus de datos x8) 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. En cualquier caso se necesitan 1088 ciclos de reloj virtual. 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 contar la última precarga entonces serían 19 “commands” PRE) - 19 x 512 + 272 “commands” READ de ráfaga 4. 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 WRITEs con pre-carga incluida. Como se hace una lectura secuencial de toda la misma fila se podría haber utilizado READ con autoprecarga. De todas formas en este caso (lectura secuencial) como las precargas hay que hacerlas de una u otra forma al finalizar de leer a todas las columnas de una fila, el hecho de haber utilizado unos “commands” u otros no altera el tiempo final. Recuérdese (no es este el caso) que no se podría haber utilizado autoprecarga si después de realizar un acceso en ráfaga o no ráfaga (por lectura o escritura) en una fila, luego se quisiera acceder (leer o escribir) a otras nuevas columnas en la misma fila. ¿Por qué? Porque después del acceso en la fila con autoprecarga, se cierra automáticamente la fila (se precarga). Entre un “command” ACT y un READ, como mínimo hay 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 Boletín problemas Tecnología de Memorias. Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla. 5 cronograma tampoco está claro que sea un sólo ciclo, pero como mínimo tiene que pasar un ciclo (lo normal es que este tiempo tRCD sea de dos o tres ciclos). Por otro lado, entre dos READs consecutivos en modo ráfaga (de 4) hay 2 ciclos de reloj (real). Esa es también la latencia CAS que se puede leer en ambos cronogramas (“CL = 2”). Como hay 512 “commands” READ entonces 1024 ciclos. Falta sumar los ciclos de latencia (CAS) del primer READ después de ACT: 2 ciclos más. En total: 1026 ciclos. Finalmente tiempo de precarga tPR, PRE (precarga): se activa, mediante “command” PRE si no hay autoPRE, 3 ciclos antes del siguiente “command” ACT (siguiente fila). Ver primer cronograma. No obstante, como se están contando ciclos totales desde un ACT hasta el siguiente ACT, y si se ve el cronograma primero, sólo hay 1 ciclo desde que se obtiene el último elemento de la ráfaga en el bus de datos hasta el siguiente ACT. Total por fila completa: 1 (ACT) + 512*2 + 2 (READs) + 1 (PRE) = 1028 ciclos por fila Última fila: 1 (ACT) + 272 *2 + 2 (READs) + 1 (PRE, no estrictamente obligatorio) = 548 ciclos por la última fila TOTAL: 19 filas x tiempo fila completa + tiempo última fila = 19 x 1028 + 548 ciclos = 20080 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 20080 ciclos * 10 ns = 200800 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. 6