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 05/06.
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 (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. 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
Boletín problemas Tecnología de Memorias.
Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla.
5
en las memorias DDR (y por supuesto también en las SDR). Realmente a la vista del
cronograma tampoco está claro que sea un sólo ciclo, pero como mínimo tiene que
pasar un ciclo.
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