Práctica 4: Memorias

Para la realización de esta práctica, número 4, vamos a utilizar el programa “logisim”. Para el correcto entendimiento del contenido de la práctica es conveniente que tengamos conocimientos previos adquiridos en las clases teóricas sobre memorias. Aun así, antes de comenzar con los ejercicios propuestos, vamos a comentar brevemente conceptos básicos como RAM y ROM para facilitar la realización  de la práctica.



RAM

La RAM, es probablemente el componente más complejo de las librerías que Logisim trae incorporadas, almacena hasta 4,096 valores, cada uno de los que puede incluir hasta 32 bits. El circuito puede cargar y almacenar valores en la RAM. Además, el usuario puede modificar cada valor de la RAM en concreto utilizando la Herramienta De Cambio o modificarlos todos a través del Menú De Herramienta. Los valores se muestran en el componente. Las direcciones pueden verse en gris a la izquierda del área de visualización. Dentro, los valores se muestran en hexadecimal. El valor de la dirección seleccionada se mostrará en texto inverso (blanco sobre negro).

Pines

A sobre el borde oeste: permite especificar a qué valor de la memoria se accede.

D: Si out vale 1 o indefinido, entonces la RAM proporciona a la salida, en el pin D, el valor de la posición de memoria seleccionada. Si out vale 0, entonces el pin D se comporta como una entrada; así, su valor será almacenado en la posición de memoria seleccionada cuando el reloj pase de 0 a 1.

Sel: Para un sólo módulo RAM, se puede ignorar esta entrada. Si tienes más de un módulo RAM en paralelo, puedes utilizar esta entrada para conectar o desconectar cada módulo RAM, en función de si su valor es 0 ó 1. En otras palabras, cuando vale 0, no se proporciona ningún valor en el pin de salida, D, y no se cambiará ningún valor de la memoria cuando el reloj pase de 0 a 1.

triángulo sobre el borde sur: Entrada de reloj : Cuando out vale 0, y esta entrada pasa, entonces el valor de la posición de memoria de la dirección seleccionada pasa a ser el mismo que el proporcionado en el pin D. Sin embargo, mientras el reloj permanezca a 0 o a 1 el valor del pin D no será almacenado en memoria.

out: especifica si la RAM debería proporcionar a la salida el valor de la dirección seleccionada (A). La opción de salida está seleccionada si out vale 1 o indefinido; si out vale 0, entonces D se comporta como una entrada de forma que se almacena su valor en los flancos de subida del reloj.

Clr: cuando vale 1, y sel vale 1 o indefinido, se resetea la memoria, es decir, los valores de todas sus posiciones de memoria pasan a ser 0, sin importar lo que valgan las demás entradas.

ROM

La ROM puede almacenar hasta 4,096 valores, y cada uno de ellos puede ser de hasta 32 bits. Un circuito puede acceder a los valores de la ROM, pero no los puede modificar. El usuario puede cambiar los valores individualmente a través de la Herramienta De Cambio, o puede editarlos todos con la Herramienta De Menú. A diferencia de la RAM, los contenidos de la ROM se almacenan como atributos del componente. Así, si un circuito que contiene una ROM se utiliza dos veces, entonces ambas ROM contendrán los mismos valores. También a causa de este comportamiento, los contenidos de la ROM se almacenan en archivos creados por Logisim. Los valores de la ROM se muestran en el componente. Las direcciones se pueden ver en gris a la izquierda del área de visualización. Dentro, cada valor se proporciona en hexadecimal. El valor de la dirección seleccionada se mostrará en texto de color inverso (blanco sobre negro).


Pines
       
A sobre el borde oeste: permite seleccionar a cuál de los valores se está accediendo desde el circuito.

D sobre el borde este: proporciona en el pin D, el valor de la dirección seleccionada.

Sel: para un solo módulo ROM esta entrada no tiene función, se puede ignorar. Para más de un módulo ROM en paralelo, se puede utilizar esta entrada para conectar y desconectar un módulo ROM en función de si su valor es 1 ó 0. En otras palabras, cuando vale 0, no se proporciona ningún valor en el pin de salida D.

Además de esto, Logisim tiene un editor hexadecimal integrado para ver y alterar contenidos de memoria. Para acceder a él, abre un menú desplegable para el componente de memoria correspondiente y selecciona Editar Contenidos... Para componentes ROM, que presentan un atributo para los contenidos de memoria, puedes acceder también al editor hexadecimal haciendo clic sobre el atributo correspondiente.


Empezamos con los ejercicios propuestos:

1.- Introducir una memoria RAM de 64Kx8 y realizar un circuito que permita leer y escribir en ella. Probar a introducir en las direcciones 0023h el dato 3A y en la dirección C120h el dato 25.


2.- Unir dos memorias del tipo utilizado en el apartado 1, para conformar una de 64Kx16. Comprobar su funcionamiento de forma similar al apartado anterior: introduciendo algunos datos de 16 bits en varias direcciones.


3.- Unir tres memorias para como las de los apartados anteriores (64Kx8) para conformar una de 128Kx16. Comprobar su funcionamiento de forma similar al apartado anterior: introduciendo algunos datos de 16 bits en varias direcciones.


4.- Ampliar la memoria hasta 256Kx16 ¿Qué elemento será necesario para seleccionar cada banco de dos memorias de 64Kx8? Un decodificador. Comprobar su funcionamiento de forma similar al apartado anterior: introduciendo algunos datos de 16 bits en varias direcciones.


5.- Transformar la estructura del anterior punto para que los primeros 64K sean de memoria ROM Observar que señales de control son las que intervienen en cada tipo de memoria. Indica en cada bando la el banco de direcciones de memoria que direcciona y obtén el mapa de memoria del conjunto.