Esta lección está dedicada a un tipo muy especial de módulo secuencial de uso universal, las memorias. Veremos los tipos más representativos de memorias y analizaremos con un cierto detalle su estructura y su funcionamiento. Las memorias son módulos secuenciales con una estructura bidimensional de filas y columnas que permiten guardar un número elevado de bits. Simplificando las cosas, una memoria se puede ver como un conjunto de registros apilados unos encima de otros a los cuales se puede acceder individualmente, you sea para cargar información, es decir, para escribir o para leer la información existente. Como you vimos cuando hablamos de las memorias ROM, los bits de una memoria se organizan en palabras de tamaño fijo. Para saber en cada momento qué palabra de memoria queremos leer o sobre qué palabra de memoria queremos escribir, las palabras se numeran del cero al m menos uno, siendo m el número de palabras de la memoria. El número asignado a cada palabra recibe el nombre de dirección de la palabra. Habitualmente el número de palabras de una memoria es una potencia de dos. Es de la forma dos elevado a k. Una memoria se identifica por su tipo, si es una memoria tipo RAM. ROM, Flash, etcétera. Esto you veremos los tipos que hay. Por el número de palabras que contiene y por el número de bits que forman una palabra. Así si hablamos por ejemplo de una memoria RAM de dos elevado a 16 por ocho, nos estamos refiriendo a una memoria RAM que tiene dos elevado a 16 palabras y por lo tanto para, eh, poder numerarlas todas necesitamos 16 bits de dirección y, en la que cada palabra tiene ocho bits. La estructura interna de todas las memorias es similar y muy similar a esta. Contiene un núcleo central compuesto por una serie de líneas horizontales que reciben el nombre de líneas de palabra y unas líneas verticales que reciben el nombre de líneas de bit. En las intersecciones de las líneas de palabra y las líneas de bit se ubican los dispositivos donde realmente vamos a guardar la información. Dependiendo del tipo de dispositivo que tengamos en estas intersecciones tendremos un tipo de memoria u otro. Además de este núcleo básico las memorias tienen un decodificador de direcciones y la circuitería necesaria para la lectura y la escritura. Aquí vemos la estructura interna de una memoria muy sencilla que tiene dos elevado a dos, cuatro palabras de seis bits. Dos elevado a dos palabras quiere decir este dos que necesita dos bits de dirección, son estos dos, a sub uno y a sub cero, y cada palabra tiene seis bits como vemos aquí, uno, dos, tres, cuatro, cinco y seis. Si queremos leer una palabra de memoria, por ejemplo, si queremos leer la palabra de dirección dos lo que hacemos es colocar el dos uno cero en los bits de dirección, en el llamado bus de direcciones y como consecuencia este decodificador lanza un uno por la línea de palabra correspondiente. Cuando vemos una señal de lectura el contenido de la palabra cuya línea de palabra está activada, es decir, esta palabra es la que se vuelca al exterior hacia los bits de salida del bus de datos. Si por el contrario deseamos escribir una información por ejemplo en la misma palabra de memoria, en la palabra de dirección dos, lo que tendríamos que hacer es, primero, poner la información que queremos guardar en la memoria en el bus de datos y a continuación seleccionar la dirección de la palabra sobre la queremos hacer la escritura. Al dar la señal de write lo que haríamos es que el contenido del bus de datos, los valores que nosotros hemos entrado por el bus de datos, entrarán a las celdas de la palabra que ha sido direccionada por el decodificador de direcciones. Existe una gran diversidad de tipos de memoria que se pueden clasificar dependiendo de distintos parámetros. Por ejemplo, un primer parámetro muy importante es el comportamiento de la memoria cuando deja de estar conectada a la alimentación. Cuando apagamos la fuente de alimentación, ¿qué sucede con la información almacenada en la memoria?, ¿se pierde o no se pierde? Y la respuesta es que en algunas memorias sí y en algunas memorias no. Una memoria se dice que es volátil cuando, al ser desconectada de la fuente de alimentación pierde toda su información. Y se dice que es no volátil cuando, a pesar de no estar conectada a la fuente de alimentación puede seguir conservando la información. Un segundo parámetro fundamental es el de, eh, saber si la memoria admite que se escriba información sobre ella o solo es posible leer el contenido de la memoria. Todas las memorias volátiles son memoria de lectura y escritura. Entre las memorias no volátiles tenemos memorias como la ROM you vista en lecciones anteriores que solo podemos leer la información que hay en ella y otro conjunto de memorias como las EPROM o las EEPROM, las flash, etc. que básicamente son memorias de lectura, pero que permiten la escritura en condiciones especiales que veremos un poco más adelante. Esta figura resume las características de las memorias más usuales. Es una figura muy buena porque contiene gran cantidad de información y, lo que he de decir es que es una figura que yo he recuperado de unos apuntes antiguos y no he sabido identificar de dónde salió la figura original. De forma que, primero, pido disculpas al autor de esta figura porque no he podido referenciarlo y si alguno de vosotros conoce la fuente pues le agradecería que a través de los foros me lo dijera porque podría, eh, ser más justa con el autor y referenciarlo convenientemente. Bien, en todo caso, eh, esta figura como os digo es muy significativa. En el eje x, fijaros que lo que tenemos es la capacidad de escritura de la memoria. Las memorias colocadas en la parte izquierda, cerca del cero no admiten la escritura por parte del usuario. Mientras que las memorias situadas más a la derecha admiten tantas escrituras, tantos ciclos de escritura como queramos. En las zonas intermedias están por ejemplo las OTP o las EPROM, eh, FLASH, EEPROM. Que son memorias en las cuales el usuario puede introducir información, pero no todas las veces que desea. En el eje Y tenemos la capacidad de guardar información en ausencia de alimentación. O mejor aún, lo que tenemos es el tiempo que tarda cada memoria en perder la información una vez ha sido desconectada de la fuente de alimentación. En la parte baja tenemos las memorias volátiles, que pierden la información en cuanto las desconectamos de alimentación. Y en la parte alta tenemos las memorias que nunca pierden la información como por ejemplo las ROM. Evidentemente, lo que quisiéramos es tener una memoria ideal colocada en el margen, eh, superior derecho de esta figura, ¿no? Una memoria en la cual pudiésemos escribir tantas veces como deseásemos y además nunca perdiera la información. Bueno, desgraciadamente esta memoria no existe entonces, eh, para cada aplicación hemos de poder seleccionar el tipo de memoria que más adecúa a ella. La capacidad de lectura y de escritura y la volatilidad o no de la memoria depende del tipo de dispositivo básico de almacenamiento que posea. Así que vamos a repasar, o vamos a ver las memorias más representativas. El primer tipo de memorias que vamos a ver son las memorias RAM. RAM son las siglas de Random Access Memory y son memorias volátiles, es decir, que pierden la información en cuanto las desconectamos de alimentación pero que a cambio permiten tantas lecturas y escrituras como deseemos. Existen dos tipos de memorias RAM, las SRAM y las DRAM que se diferencian precisamente en el tipo de dispositivo de almacenamiento básico que utilizan. La celda SRAM utiliza un flip flop más unas pocas puertas para permitir la lectura y escritura. Mientras que la celda DRAM, eh, contiene tan solo un transistor y una capacidad. Evidentemente, la celda DRAM es más sencilla, más pequeña y por lo tanto, eh, podemos encontrar en el mercado, eh, memorias DRAM mucho mayores que las memorias SRAM correspondientes. Y también, no solo mayores, sino más baratas. Vamos a ver con un poco de detalle cómo se realiza la lectura y escritura en cada una de estas, de estas memorias. Esta es una celda básica de memoria SRAM. Existen muchos protocolos de lectura y escritura pero nosotros nos vamos a centrar en el más sencillo posible, hay una señal read barra write que según si toma el valor cero o uno en el caso de que toma el valor uno leemos la memoria, en el caso de que tome el valor cero escribimos. Esta señal read write llega a todas las celdas de memoria, esta señal de aquí. Entonces imaginemos que lo primero que queremos hacer es leer, por ejemplo la palabra que está en la dirección uno. Lo primero que haríamos es colocar un cero uno en el bus de direcciones y el decodificador de direcciones nos lanzaría un uno por la línea de palabra correspondiente. Quiere decir que todas las celdas que están colocadas en la palabra de dirección uno reciben un uno por su línea de palabra. Todas las celdas que están colocadas en otras palabras reciben por su línea de palabra un cero y este cero hace que se deshabilite el paso de información hacia la línea de bit y además que por la señal de sincronización estén recibiendo un cero y por lo tanto imposibilita que el contenido de esa celda cambie su información, es decir en el momento en que lanzamos un uno por esta línea de palabra quiere decir que solo las celdas colocadas en dicha línea de palabras pueden ser escritas o leídas. Hemos dicho que queríamos leer, si queremos leer ponemos la señal read write igual a uno y lo que nos hará es habilitar este paso, es decir aquí tendremos un uno por uno, un uno, recordar que este símbolo quiere decir que la señal read write llega negada, por lo tanto esta puerta estará viendo un cero y la salida será cero. Esta salida cero impide que el flip flop cambie de valor y nuestra salida uno hace que se habilite el paso de la información del flip flop hacia la línea de bit y por lo tanto por la línea de bit nosotros veremos el contenido de este flip flop, nosotros podemos ver el contenido de la celda de memoria. Supongamos ahora que queremos escribir. Lo primero que haríamos sería cargar el bus, introducir por el bus de datos la información que queremos escribir en la palabra de memoria y a continuación seleccionaríamos la palabra de memoria, supongamos que seguimos seleccionando la palabra cero uno, quiere decir que en todas las celdas correspondientes a esta palabra se está recibiendo un uno por la línea de palabra y en el resto de las celdas se está recibiendo cero. En este caso la señal read write la ponemos a cero, y esta señal cero hace que aquí aparezca un cero y por lo tanto se inhabilite este paso de información, no vamos a ver sobre la línea de bit la información que hay actualmente en la memoria pero esta línea de bit va a contener la información que queremos guardar en memoria. Por aquí vamos a tener el D sub i correspondiente dependiendo de que posición esté colocada esta celda. Al poner read write igual a cero aquí tenemos un uno, aquí tenemos un uno y por lo tanto esta señal pasa de cero a uno y este flanco de reloj fuerza que la información que nos llega por la línea de bit se nos entre al flip flop, es decir quede almacenado en la celda de memoria. ¿De acuerdo? Pues así es como funciona la lectura y la escritura en las celdas de memoria SRAM. Las memorias SRAM comerciales suelen ser chips de hasta 64 megabits de información. Si aquí me podéis decir bueno pero es que mi ordenador tiene muchos más bits de memoria RAM, cuidado no hay que confundir el tamaño del chip que es lo que estamos hablando ahora con el tamaño de el banco completo de memoria. En el ordenador lo que tenemos es un conjunto de chips de memoria RAM convenientemente conectados. Hablaremos un poco de los bancos de memoria más adelante. Los tiempos de lectura y escritura típicos de esta memoria están ene l rango de los 10 a 100 nanosegundos dependiendo del tamaño y en general son memorias que consumen algo menos que las memorias DRAM que son las que vamos a ver a continuación. La celda básica de una memoria RAM dinámica utiliza, contiene simplemente un transistor y una capacidad, la información se guarda en esta capacidad. Si la capacidad está cargada estamos guardando un uno, si la capacidad está descargada estamos guardando un cero. Desafortunadamente por muy bien que se intente aislar el condensador, las corrientes de fuga hacen que el condensador se descargue al cabo de un tiempo y por lo tanto la información se pierda. Para evitar que se pierda la información las memorias DRAM están continuamente reescribiéndose ellas mismas en ciclos llamados de refresco. Y la circuitería de la lectura y escritura es más compleja porque incluye la circuitería necesaria para este refresco. Vamos a ver cómo se realiza la lectura y la escritura en este tipo de memorias. Primero vamos a ver la escritura. Para escribir una palabra en memoria se introduce la dirección y los datos en sus buses correspondientes, quiere decir que por la línea de bit aparece la información del D sub i correspondiente y por la línea de palabra aparece un uno. Este uno pone en conducción a este transistor y la capacidad se pone en contacto directo con la línea de bit. Si por la línea de bit tenemos un uno lógico, la capacidad se carga guardando un uno, si por la línea de bit tenemos un cero la capacidad se descarga guardando un cero lógico. Veamos ahora la lectura. La lectura es bastante más compleja. Antes de comenzar la lectura las líneas de bits de todas las celdas se precargan a un valor lógico uno a partir de un módulo que está dentro de esta circuitería de lectura y escritura. Cuando se realiza la lectura la línea de palabra de la palabra seleccionada conecta, aparece un uno y pone en conducción este transistor, el cual conecta la capacidad con la línea de bit. Si la capacidad está cargada no pasada nada y el valor que se ve por la circuitería de lectura y escritura es el uno que se había precargado inicialmente. Pero si el condensador está descargado, es decir si estaba a cero voltios lo que ocurre es que hay una redistribución de la carga entre la línea de bit y el condensador que hace que el valor en voltaje, en tensión de la línea de bit baje ligeramente y que el valor de tensión de esta capacidad, la carga aumente también ligeramente. Esta ligera bajada del valor de tensión de la línea de bit es detectado por un comparador muy sencillo que hay también en esta circuitería de lectura y escritura y que interpreta que la información que teníamos guardada en la celda es un cero. Desafortunadamente la capacidad que inicialmente estaba a cero voltios también ha quedado parcialmente cargada con lo cual hemos perdido la información que teníamos guardada en esta celda. Es decir, la lectura en las memorias DRAM es destructiva, cuando lees un bit destruyes esa información y a partir de ahí no sabes qué valor había en esa celda de memoria. Para obviar este problema cuando se realiza una lectura es necesario reescribir el valor original, es decir para hacer una lectura primero las líneas de bit se precargan a uno, precarga, segundo, se realiza la detección es decir, realmente se lee, se realiza la detección de si la línea de bit ha bajado ligeramente o no y tercero se reescribe toda la palabra para que la información se siga manteniendo en la misma. Esta necesidad de reescritura junto con la necesidad de que la memoria RAM se vaya refrescando continuamente, es la que hace que el tiempo de una memoria RAM de lectura y escritura sea menor, sean memorias más lentas que una memoria SRAM. En general podemos decir de las memorias DRAM que una quieren refresco, dos la lectura como hemos visto es destructiva, los chips de memoria pueden ser mayores y de hecho pues tranquilamente podemos encontrar chips de hasta dos gigabits mientras que antes estábamos hablando de megabits de memoria DRAM, son más lentas que las SRAM debido tanto a los refrescos como a la necesidad de reescritura y en general consumen más que las memorias SRAM. Perdonar pero que aquí hay un error. Consumen en general más que las memorias SRAM. Las memorias ROM you las estudiamos en la lección uno tres así que poco diremos de ellas, son memorias de solo lectura pero que a cambio son no volátiles. La información de las memoria ROM puede definirse dentro del proceso de fabricación en cuyo hablamos de memorias ROM programadas por máscara o la puede introducir una única vez el usuario en cuyo caso hablamos de memorias OTP ROM, OTP son las siglas de one time programmable ROM. Las memorias PROM son memorias de solo lectura programables. Son memorias en las que la información no se pierde en ausencia de la alimentación, es decir son no volátiles que pueden leerse tantas veces como se desee y que pueden escribirse en condiciones especiales. La pregunta es que quiere decir esto de condiciones especiales. Bueno, pues en el caso de las memorias EPROM, estas memorias la celda básica contiene un tipo de transistor especial llamado transistor de puerta flotante que guarda la información indefinidamente pero que puede borrarse, es decir puede inicializarse a cero voltios sometiéndolo a radiación ultravioleta. Son los típicos chips que tienen una especie de ventanita por la que se ve el circuito integrado y precisamente tienen esta ventanita para que la radiación ultravioleta pueda llegar al circuito integrado. Evidentemente cuando sometemos el chip a radiación ultravioleta borramos toda la memoria, de forma que para cambiar el contenido de una palabra, por ejemplo hay que borrar toda la memoria y volver a reescribirla completa. La escritura además hay que hacerla en un dispositivo programador externo. Las memorias EEPROM también contienen transistores de puerta flotante en su celda básica pero en este caso la información puede borrarse aplicando un valor de tensión determinado, un valor de tensión más elevado que la tensión de alimentación estándar de los chips. Permiten estas memorias el borrado y la reescritura selectiva palabra a palabra y además incorpora la propia circuitería de borrado y de escritura en el propio chip, de manera que en este caso no es necesario sacar el chip del equipo para poder realizar las escrituras. Las memorias flash son una nueva generación de memorias de tipo EEPROM optimizadas que también incorporan toda la circuitería necesaria para la escritura dentro del propio chip y que son las componentes de los típicos pens, de las memorias de las cámaras digitales e incluso actualmente se están utilizando para sustituir a los discos duros o a las memorias SSD. Os dejo con una pregunta de repaso y a continuación lo que veremos es cómo construir bancos de memoria a partir de chips de memoria. Esta última parte la verdad que no es una parte absolutamente necesaria para el curso que estamos haciendo. De manera que si estáis you agotado del tema de las memorias lo podéis obviar.