Para la realización de esta práctica vamos a trabajar con los componentes RAM y ROM, dos de los componentes más útiles incorporados en Logisim, aunque a su vez son los más complejos, debido al gran volumen de información que pueden almacenar. Antes de comenzar con los ejercicios, conviene realizar una pequeña introducción a estos componentes: RAM
La RAM, es probablemente el componente más complejo de las librerías que Logisim trae incorporadas, puede almacenar hasta 4.096 valores, cada uno de los que puede incluir hasta 32 bits. Los valores están especificados en el atributo Número de Bits de Direccionamiento y los bits que incluye en Número de Bits de Datos. El circuito puede cargar y almacenar valores en la RAM, además, podemos modificar cada valor utilizando la Herramienta de Cambio. Los valores se muestran en el componente. A la izquierda del área de visualización, en gris, aparecen las direcciones. Dentro se muestran los valores en hexadecimal. Veamos ahora para que sirve cada uno de los pines que incorpora la RAM: A: Se encuentra en el borde izquierdo, es la entrada de datos, cuyo número de bits coincide con el atributo Número de Bits de Direccionamiento. Permite especificar a qué valor de la memoria se accede. D: Se encuentra en el borde derecho. Actúa como entrada/salida y su número de bits coincide con el atributo Número de Bits de Datos. (IMPORTANTE: Si out vale 0, el pin D actuará como entrada y si out vale 1, el pin D actuará como salida.) Sel: Se encuentra en la esquina inferior izquierda. Triestado de salida OE. Triángulo inferior: Carga de datos E o W. Entrada de reloj: Cuando out vale 0, y esta entrada pasa de 0 a 1 (y sel vale 1/indefinido y clr vale 0), 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: Se encuentra en la parte inferior. Es una entrada de un bit y se encarga de la lectura de datos L o R. Especifica si la RAM debe proporcionar a la salida el valor de la dirección seleccionada. Clr: Se encuentra en la parte inferior. Es una entrada de un bit. Cuando vale 1 y sel vale 1, resetea la memoria, sin importar lo que valgan las demás entradas.
ROM
La ROM, en su funcionamiento, es casi similar a la RAM. Puede almacenar los mismos valores, sin embargo, un circuito podrá acceder a los valores de la ROM, pero no modificarlos. El usuario podrá cambiar los valores en Logisim a través de la Herramienta de Cambio. A diferencia de la RAM, los contenidos de la ROM se almacenan como atributos del componente. Así, si un circuito que contenga una ROM es utilizado dos veces, ambas ROM contendrán los mismos valores. A causa de este comportamiento los contenidos de la ROM se almacenan en archivos creados por Logisim. Los valores de la ROM se mostrarán de manera similar a la RAM. Veamos ahora los pines: A: Se encuentra en el borde izquierdo, es una entrada y su número de bits coincide con lo que indica el atributo Número de Bits de Direccionamiento. Permite seleccionar a cual de los valores se está accediendo desde el circuito. D: Se encuentra en el borde derecho, actúa como entrada/salida y su número de bits coincide con lo que indica el atributo Número de Bits de Datos. Sel: Se encuentra en el borde inferior, es una entrada de un bit. Para un solo módulo de ROM esta entrada se puede ignorar, pero para más de un módulo ROM en paralelo, se puede utilizar esta entrada para conectar y desconectar módulos ROM en función de si su valor es 1 o 0. En definitiva, cuando vale 0 no se proporcionará ningún valor en el pin de salida D. Una vez aclarado el funcionamiento de la RAM y la ROM y la utilidad de sus pines, veremos los ejercicios propuestos en la práctica:
Ejercicio 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.
Como podemos ver, la primera parte del ejercicio pide introducir una memoria RAM de 64kx8 y realizar un circuito que permita leer y escribir con ella, lo cual quedaría de la siguiente manera:
Bien, una vez realizado esto la segunda parte del ejercicio nos pide introducir en las direcciones 0023h el dato 3A y en la dirección C120h el dato 25, quedando el circuito de la siguiente manera:
Ejercicio 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. Como dice el ejercicio, uniremos dos memorias del tipo utilizado en el apartado 1, quedando de la siguiente manera:
Efectivamente su funcionamiento es correcto, ya que como podemos ver en la siguiente imagen, hemos podido introducir varios datos en varias direcciones:
Ejercicio 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. Sirviéndonos de las memorias anteriores, formaremos una de 128Kx16, quedando en Logisim de la siguiente manera:
Efectivamente su funcionamiento es correcto, como podemos ver en la siguiente imagen:
Ejercicio 4: Ampliar la memoria hasta 256Kx16 ¿Qué elemento será necesario para seleccionar cada banco de dos memorias de 64Kx8? Comprobar su funcionamiento de forma similar al apartado anterior: introduciendo algunos datos de 16 bits en varias direcciones.
Ejercicio 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. Para este último ejercicio cogeremos el circuito del ejercicio 4 y cambiaremos las dos primeras memorias RAM por memorias ROM, quedando de la siguiente manera:
Como podemos ver, la memoria ROM es de solo lectura, por lo que tiene menos pines inferiores que las memorias RAM.
1. ¿Cuántos valores puede almacenar la memoria RAM de Logisim como máximo? Verás, en Logisim, la memoria RAM es de las componentes más complejas que tiene una capacidad de almacenar hasta 4096 valores, y cada uno de ellos puede incluir 32 bits. Luego veremos cómo puedes cambiar esos valores con la Herramienta de Cambio.
2. ¿Cómo editar el contenido de la memoria RAM o de la ROM manualmente? Logisim tiene un editor hexadecimal integrado para ver y editar contenido de memoria. Para acceder a él abre el menú desplegable para el componente correspondiente y selecciona editar contenido.
3. Bien, y ¿cómo funciona este editor hexadecimal?
Los números de la izquierda muestran las direcciones de memoria hexadecimales. Los otros números se corresponden con los valores a partir de la dirección de memoria especificada; para editar cada uno sólo hay que seleccionar sobre el elemento a editar y escribir el valor deseado.
4. ¿Es necesario activar CLR cada vez que se guarde un nuevo valor en una posición
de memoria ya usada?
Qué va. El nuevo valor introducido sustituirá al anterior sin necesidad de que éste pase a ser 00.
5. Tengo que representar una memoria RAM de 64Kx8… ¿Cómo hago esto? Una memoria RAM de 64Kx8 es una memoria de 64K “posiciones” de memoria y 8 bits de ancho de palabra. Así que debes pensar cuantos bits necesitarás para direccionar 64K direcciones de memoria (esos serán los bits de dirección) y el ancho de palabra serán los bits que salen de la memoria a la vez (el tamaño de cada celda que se direcciona). En definitiva, te están pidiendo 64K celdas de 8 bits cada una.
6. ¿Cómo sé cuántos bits de direccionamiento debe tener el registro de entrada que se conecta a la entrada A en las memorias de Logisim? No te preocupes, tendrás que calcular usando las potencias de dos: Así, si te piden una memoria de 128K palabras debes calcular: 128 = 27 y K se refiere a 1024, que es 210. Así que 128K es = 27 x 210 = 217. Por lo tanto, pedirte una memoria de 128K palabras en lo mismo que pedirte una memoria de 217 palabras. ¿Y cuantos bits se necesitan para direccionar 217 direcciones? Pues 17, el mismo número que hay en el exponente del dos.
7. ¿Cómo puedo ampliar la capacidad de la memoria? Fácil, conecta dos o más módulos en paralelo y utiliza la entrada denominada sel que activa o desactiva el módulo de memoria. Así, si queremos una memoria de 256K palabras, podemos usar una combinación de 2 memorias de 128K palabras en las que la señal de entrada de direccionamiento sería la misma para las dos. Pero la señal sel de selección desactivaría un módulo cuando el otro estuviese activado. De esta manera podríamos acceder a las primeras 128K palabras activando el primer módulo y acceder a las otras 128K palabras activando el segundo módulo.