La evolución de la memoria

Se entiende que de la memoria usada en ordenadores. Es otro artículo rescatado de la epoca Macedonia (como véis, voy haciendo limpieza). De utilidad si estáis interesados en un poco de historia reciente de las tecnologias asociadas a las memorias volátiles.

Actualización 10/04/2008: Gracias a Jaime me entero que la web de Macedona ya no está activa. Así que he rescatado el artículo y lo reproduzco a continuación:

Hace unos años practicamente nadie se planteaba que tipo de memoria comprar, si la iban a cambiar en los proximos meses, si seria compatible con las siguientes placas o cuando quedaria obsoleta. Solo conociamos la memoria DRAM y, algunos afortunados, poseian tarjetas de video muy avanzadas (para la epoca) que venian con VRAM.

Hoy, el mercado de las memorias es tan variable como el de los microprocesadores. De hecho, estamos cambiando casi tanto de tipo de memoria como de arquitectura de procesador, intentando acompasar unos con otros. Hemos dejado atras las velocidades de 100 ns, 80 ns e incluso los famosos 70 ns, el tipo de memoria mas rapido que podiamos comprar con nuestros primeros 486.

Para entender como y porque ha evolucionado toda la tecnologia referente a la memoria, entraremos un poco antes en como funciona, o funcionaba, la clasica memoria DRAM. Los siguientes tres parrafos son bastante tecnicos, pero no realmente necesarios para seguir el resto del articulo, aunque si muy importantes para entender realmente los cambios producidos entre los diferentes tipos de memoria.

Puede imaginarse un modulo DRAM de memoria como una matriz o tabla. Cada una de las posiciones de la tabla estaria formada por condensadores, que son los encargados de almacenar la informacion, y por tanto cada una de estas posiciones podria almacenar uno o mas bits, dependiendo de la configuracion concreta. Cuando el microprocesador pide a la memoria el contenido de una cierta posicion de memoria, unos decodificadores en el chip de memoria traducen esta direccion de memoria fisica a un numero de fila y un numero de columna, seleccionando de esta manera una casilla concreta de la tabla. Estos decodificadores funcionan de manera sincrona, con un reloj propio, no el del sistema. De esta manera, tenemos un reloj para el RAS (filas) y otro para el CAS (columnas).

Los condensadores tienden a perder su carga con el tiempo, y para evitar perder la informacion guardada en estos, el chip de memoria debe "refrescar" el contenido de los condensadores, o sea, cargar en ellos el mismo valor que tenian originalmente. El problema de esto es que se pierden algunos de los ciclos en refrescar los condensadores, momento en el cual no pueden ejecutarse operaciones de lectura o escritura en esos condensadores.

Para aclarar un poco estos dos ultimos parrafos, veamos un pequeño ejemplo ilustrativo de los pasos llevados a cabo en un acceso tipico a memoria. Lo primero es la generacion de la peticion de acceso por parte del microprocesador. La direccion de memoria correspondiente llega a los pins de direccion del chip de memoria. En este momento, a esta direccion no se le hace ningun caso, puesto que, por razones tecnologicas, todo circuito asincrono de este tipo requiere de unos buffers a la entrada para evitar que cualquier señal que circule por el bus de direcciones se tome como un acceso o modifique un acceso en curso. Cierto tiempo despues de que el micro haya hecho ya la peticion, la señal de reloj del RAS (el de la fila) se activara, copiando el contenido en ese momento del bus de direcciones (la direccion que llega del microprocesador al chip de memoria) a un buffer que sera el que realmente se utilice para direccionar la tabla. Una vez hecho esto, ya tenemos localizada la fila de la tabla donde tenemos la posicion de memoria a la cual se quiere acceder. Toda esta fila se copia en los que se conocen como 'sense amps', un conjunto de transistores que actuan como buffers de la fila. Lo siguiente que ocurre es que se produce la señal de reloj del CAS, con lo cual se selecciona la columna pertinente de la fila que ya tenemos seleccionada, y entonces se copia ya el valor deseado desde el 'sense amp' correspondiente en un buffer de salida, que va directamente al bus de datos donde puede acceder el microprocesador.

Como hemos visto, la memoria DRAM es asincrona, puesto que depende de unos relojes internos que nada tienen que ver con el reloj del sistema, que sincroniza el microprocesador y los buses con el resto de elementos. Todo sistema asincrono tiene asignado unos tiempos minimos para cada una de las operaciones internas, por lo que podemos tener en accesos diferentes, tiempos diferentes de respuesta del sistema. Esta es otra de las desventajas de estos sistemas, pues aunque acaben en medio de un ciclo su operacion, hasta el siguiente ciclo no pueden empezar otra operacion, dada que han de resincronizarse con el resto de componentes.

Durante largo tiempo, la gran preocupacion de los fabricantes de DRAM fue incrementar su velocidad de alguna manera: sea incrementando el numero de bits que pueden tratar por acceso, paralelizando varias operaciones para minimizar el tiempo medio o eliminar algunas de las operaciones para determinados accesos. El metodo que parece mas sencillo es el de aumentar el tamaño de la palabra (numero de bits) con el que se trabaja, pero esto requiere puertos de entrada/salida mayores, lo que se traduce en mas pins en la pastilla y aumenta por tanto el tamaño del encapsulado (cosa nada deseable). Otro problema es que a mayor numero de puertos de entrada/salida, mas corriente electrica circula de dentro a fuera de la pastilla, creando mas interferencias electromagneticas con el resto de componentes, con lo que el acceso es mas lento, pues hay que esperar a que las señales se estabilicen.

Ahora que ya entendemos como funciona la DRAM, veamos que se inventaron los ingenieros para ir mejorando este diseño.

Page Mode Access

Uno de las primeras mejoras fue el Modo de Acceso por Paginas. Como su nombre indica, este modo pretende incrementar la eficiencia del acceso a paginas completas de memoria. Se consigue manteniendo fijo el valor del RAS, con lo que solo cargamos los 'sense amps' una vez, y variando posteriormente el CAS, con lo que podemos ir accediendo a todas las posiciones dentro de una misma fila mucho mas rapidamente, puesto que no hay que recargar los 'sense amps' cada vez.

Fast Page Mode (FPM)

La clave del funcionamiento de la memoria FPM es la eliminacion del tiempo de preparacion de la señal de la columna durante el ciclo de pagina. Esto se consigue teniendo en cuenta, como hemos visto en el Modo de Acceso por Paginas, de que mantenemos activa la señal RAS. Asi, utilizamos esta señal para decodificar continuamente la señal CAS durante el acceso a la pagina. De esta manera, cuando nos viene una señal del reloj CAS, los datos pasan directos al buffer, y no hay que esperar a que se estabilice la señal, pues ya se ha estabilizado antes.

La memoria FPM se convirtio rapidamente en el estandar, y es, de hecho, la memoria que asociamos directamente con nuestras maquinas antiguas y sigue utilizandose aun. Hoy, esta memoria es la peor de todas las memorias DRAM existentes. Ningun sistema nuevo se montaria con esta memoria, a no ser que no soporte ninguna de las mas nuevas. Se sigue fabricando, pero la demanada se limita a ampliaciones de maquinas existentes, y por tanto, dada la baja demanada, el precio es muy superior a las memorias actuales mucho mas rapidas.

Los tiempos tipicos de esta memoria son 6-3-3-3, o sea, 3 ciclos de latencia iniciales (el RAS) y luego 3 ciclos para cada acceso.

HyperPage Mode (EDO)

La memoria EDO (Extended DataOut) represento el ultimo avance significativo en el campo de la memoria DRAM asincrona. Su funcionamiento se basa en no desconectar los buffers de salida antes de cargar la siguiente columna. De esta forma, puede lanzarse la siguiente columna en el mismo instante que se lee el resultado de la anterior, solapando al tiempo de lectura de los datos, el de cargar de la señal CAS. El resultado es un nada despreciable aumento del 40% del tiempo de acceso. Todo esto, simplemente cambiando la logica del circuito anterior, sin añadir nada fisicamente, por lo que tenemos un chip del mismo tamaño y coste de fabricacion que el anterior. La memoria EDO, aunque diseñada para trabajar a 66 MHz, puede funcionar a 83 MHz sin muchos problemas. Ademas, ofrece un rendimiento muy similar a la memoria SDRAM. Sin embargo, si nos vamos a los 100 MHz de bus la cosa cambia, ya que la EDO no puede mantener el ritmo.

Burst EDO (BEDO)

La memoria BEDO esconde tras de si verdaderas intrigas politicas y economicas. Se trata de una version mejorada de la memoria EDO, de tal forma que al recibir una posicion, inmediatamente despues de dar los datos de una fila y columna, internamente la memoria BEDO recoje los datos de las tres siguientes columnas, reduciendo de esta forma el tiempo necesario para acceder a datos secuencialmente (algo muy utilizado, dado que las memorias cache de segundo nivel, que son las que realmente acceden a la memoria, cuando acceden lo hacen a trozos) puesto que se evita leer cada vez el CAS nuevo. Este diseño hubiera (de haber sido construido finalmente) dado unos tiempos de 4-1-1-1 a 66 MHz.

La razon por la que esta memoria no salio de los planos de los ingenieros es que Intel no la soporto en sus chipsets, en contra de la memoria SDRAM. Parece ser que las grandes casas fabricantes de memoria llevaban muchos años investigando en la linea de la SDRAM y no querian ver como la mejora de una memoria anterior acababa con sus diseños. Tambien es cierto que la memoria BEDO no fue diseñada para el bus a 100 MHz, pero aun asi representaria una soluciona mejor y mas estable a la memoria SDRAM.

Memorias sincronas

BEDO (o EDO de hecho) fueron las ultimas memorias asincronas. A partir de ahora se trabajo solo sobre diseños de memorias sincronas. De hecho, SDRAM viene de Syncronous DRAM. La necesidad de este tipo de memorias vino de la mano de los buses de mas de 66 MHz. Con la memoria sincrona se consiguio que el procesador no tuviera que esperar a que la memoria le diera permiso para lanzarle una peticion, sino que simplemente la puede lanzar en un ciclo en el que la memoria este libre, y esta, al estar sincronizada al reloj del sistema, recoje y se guarda esta informacion (direccion de la posicion de memoria a acceder, operacion a realizar, datos...), procesa el acceso y tras un numero especifico de ciclos en los que el procesador puede realizar otras tareas, los datos estan disponibles.

Otra ventaja de la memoria sincrona es la elminacion de relojes internos, como los del RAS y el CAS, disminuyendo asi la complejidad de la circuiteria.

JEDEC SDRAM (PC66 SDRAM)

La mayoria de las memorias sincronas se las conoce como SDRAM, sin diferenciar el tipo concreto. Este tipo de memoria es bastante mas avanzado que las anteriores que hemos ido viendo. Para empezar, no funciona siempre de la misma manera, sino que tiene varios modos de funcionamiento que pueden irse cambiando durante la ejecución. Estos modos de funcionamiento determinan algunos parametros que ahora veremos. Uno de los puntos mas importantes de esta memoria es la posibilidad de trabajar a rafagas (burst) de alta velocidad. Este resultado es algo similar a lo que se espera encontrar con la memoria BEDO, en la que la primera posicion tenia la latencia del RAS, pero la siguientes posiciones se iban transmitiendo secuencialmente. Esto es mucho mas importante de lo que puede parecer en un primer momento. Muchos pensareis que es dificil que el procesador necesite mas de dos o tres posiciones de memoria consecutivas en ciclos de reloj consecutivos, y es cierto en buena medida. Pero hay algo de lo que no he hablado, pero que ahora se hace necesario: las memorias cache (se pronuncia 'kach'). No voy a entrar en el funcionamiento de estas memorias, lo dejo para otro posible reportaje en el futuro, pero comentar solamente que las memorias cache son las que realmente se comunican con la memoria central, y el procesador solo se entiende con la cache. Por la manera en la que funcionan las cache, cuando se pide una posicion de memoria casi siempre se pide toda la pagina, con lo que este modo acelera muchisimo los accesos. Si os fijais, ya desde la memoria EDO se viene mejorando este punto, el del acceso sequencial. Pues esta es la razon.

Comercialmente, las memorias SDRAM se miden tanto en MHz (megahertzs) como en ns (nanosegundos). Para pasar de MHz a ns debeis dividir 1 entre los MHz. El resultado lo multiplicais por mil. Eso os dará, por ejemplo, que un modulo SDRAM de 66 MHz corresponde a 15 ns. El mismo método funciona a la inversa, para pasar los ns a MHz. En este punto queria comentar que nos os alarmeis los aun poseedores de memorias asincronas, de 70 u 80 ns. Los ns de cada tipo de memoria no miden lo mismo. Un modulo de SDRAM de 100 MHz, que corresponde a 10 ns, puede corresponder a uno EDO de 50/60 ns.

Cuando se trata de memorias de tipo Jedec (el 99% de las actuales SDRAM) existe un limite teorico de unos 133 MHz, por lo que actualmente compiten varios estandars para lo que sera la proxima generacion de memorias.

DDR SDRAM

La DDR SDRAM (Double Data Rate SDRAM) es una mejora de la SDRAM tipo Jedec convencional. En vez de limitarse a utilizar solo los flancos ascendentes del reloj, utiliza ambos. Con esta medida, tan simple al parecer, consigue duplicar la velocidad de operacion hasta los 200 MHz. Sin embargo las dificultades tecnologicas inherentes a este hecho no son, desde luego, triviales.

Existen actualmente placas Socket 7 con soporte para este tipo de memoria, pese a que aun no se fabrica esta memoria en masa.

Enhanced SDRAM

Este tipo de memoria es tambien, como su nombre indica, una mejora sobre la SDRAM convencional. La idea es integrar una pequeña cache de memoria SRAM en el propio chip. Puede parecer redundante dado que para tal tarea ya esta la cache de segundo nivel del microprocesador, pero no lo parece tanto cuando nos damos cuenta que el hecho de residir en el propio chip elimina la limitacion de trabajar con un bus de tamaño reducido, como 32 o 64 bits, pudiendo elevar este numero hasta los 256 o mas bits.

Memorias basadas en protocolo

Hasta ahora, todas las memorias que hemos ido viendo tenian lineas separadas para los datos, las direcciones y el control. Esto introduce una limitacion tecnica que solo puede eliminarse de una forma: combinando toda la informacion por un solo bus, con lo que aparece la necesidad de definir un protocolo para interpretar correctamente la informacion en ambos extremos. De esta idea nacen dos propuestas: SLDRAM (SyncLink DRAM) y DRDRAM (Direct Rambus DRAM).

Direct Rambus DRAM

Lo primero que hay que señalar es que Intel ha puesto su dinero en esta memoria, por lo que lo mas probable es que, como siempre, tengamos que tragarnosla aunque no sea (ni es) la mejor solucion.

A primera vista la cosa promete. La memoria DRDRAM puede llegar a 800 MHz. Sin embargo, el siguiente dato es desalentador. El tamaño del bus es de solo 16 bits, frente a los actuales 64, con lo que el aumento real queda limitado al doble de velocidad. Ademas, la latencia efectiva de esta memoria puede llegar a ser mayor (lo cual es peor) que las memorias SDRAM actuales mas rapidas. Este dato es muy negativo, aunque para entenderlo es necesario un articulo completo, que estamos preparando.

Y por si todo esto no fuera poco, esta tecnologia es propietaria, por lo que cualquiera que desee producir memoria de este tipo debera pagar unos royalties a RamBus e Intel.

SLDRAM

Para combatir al estandar RDRAM de Intel/Rambus, los principales fabricantes de memoria se han unido y el fruto se llama SLDRAM, un estandar de industria abierto, por lo que nadie tiene que pagar royalties.

El hecho de ser una memoria basada en protocolo, empaquetando en un mismo bus las señales de control, datos y direcciones, esta memoria puede funcionar sobre buses de hasta 200 MHz. Ademas, y al igual que la DDR SDRAM, puede funcionar al doble de reloj utilizando los dos flancos del reloj. Algunos ingenieros son del parecer que podran alcanzarse en poco tiempo los 800 MHz.

Comparada con la memoria DRDRAM parece una solucion mejor en todos los aspectos. Menor velocidad de reloj para conseguir la misma velocidad (menos interferencias), latencia menor y coste de fabricacion menor, al no haber de pagar royalties. Incluso el ancho de banda, el principal argumento de la DRDRAM cae ante la SLDRAM: 3'2 GB/s frente a 1'6 GB/s.