Práctica 4

Práctica 4: Memorias

En esta practica trataremos de realizar 5 ejercicios relacionados con las memorias RAM y las memorias ROM, para ello utilizaremos el software logisim con los conocimientos previamente adquiridos. 
En esta práctica se nos aporta también una pequeña introducción sobre el uso de estas memorias y su implementación. 
Además para esta práctica es conveniente tener los conocimientos necesarios sobre las memorias RAM y ROM vistos en las clases de teoría respecto al tema de memorias.
También se realiza una comprobación de su funcionamiento introduciendo unos datos en diferentes direcciones de las memorias.
Para ello vamos a desarrollar los ejercicios a continuación detallados:

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.
Los elementos que vamos a necesitar son los siguientes:
-         Una memoria RAM.
-         Una entrada de direcciones.
-         Una entrada de datos.
-         Una salida de datos.
-         Un triestado.
-         5 pins de un bit de entrada cada uno. 

El circuito montado sería el siguiente:

Como podemos observar en la entrada A, van las direcciones que están formadas por un pin de 16 bits, de D sale otro pin que es la salida de datos formada por 8 bits, al igual que a la salida D conecta un cable que procede de un pin para la entrada de datos que pasa por un triestado con su correspondiente bit de control. Ahora lo vamos a probar introduciendo las direcciones dadas en la entrada de direcciones, las direcciones van en formato hexadecimal quedando de la siguiente manera:

Dato: 3A y su dirección es 0023

Hemos introducido la dirección 0023 en su entrada, para que se sepa si es la correcta se activa la entrada “sel”, después hemos introducido el dato 3A en la entrada de datos poniendo a 1 el bit de control del triestado para que el dato pase a memoria. Para que se almacene el dato ponemos a 1 el bit de control. Para conseguir que el dato salga a la salida de datos, ponemos a cero el bit del triestado y el de control y activamos el de salida “out”, así conseguimos que el dato se nos muestre en la salida. Hacemos lo mismo con la otra dirección y su dato correspondiente donde su montaje quedaría así:



Dato 25 con su dirección C120


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.

Este ejercicio es similar al primero con la única diferencia de que tenemos que unir dos memorias de las anteriores, también tendríamos que cambiar la entrada de datos a 16 bits, y dejar la de direcciones en 16 bits también, por consecuente la salida de datos debería de ser de 16 bits, el número de pins de un bit no varía. Hay que añadir un separador entre la entrada de datos y las memorias para que divida todos los datos en dos para las dos RAM que hay.



El circuito resultante es el siguiente:



Para comprobar su funcionamiento, introduciremos una serie de datos de 16 bits en las entradas de direcciones o de datos, cogeremos como dato y dirección uno del ejercicio anterior y pondremos el montaje del circuito resultante.
Dato 25 con su dirección C120

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.
El circuito correspondiente es el siguiente:


Observamos que en este circuito se añade una puerta NOT entre el pin “sel” de las dos nuevas RAM de la parte inferior, con esto se consigue que cuando el pin se coloque en 1, se active las dos RAM de arriba y cuando pase a 0 se activen las dos de abajo por el negador que lo convertiría en 1, por los demás el circuito es exactamente igual a los anteriores.

También se nos pide que comprobemos su funcionamiento, lo que haremos será meter una serie de datos de 16 bits, por ejemplo los datos del ejercicio 1 para ver como quedaría en el montaje del circuito.


Dato 3A y su dirección es 0023.


Ejercicio 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:



Aquí tenemos la modificación que supone el ejercicio 4, ya corregido ya que el montaje original tenía fallos, ampliamos el doble de memoria montando 4 RAMs más, con un decodificador para seleccionar cada banco de dos memorias.

Aquí podemos observar como quedaría montado en Logisim, podemos distinguir las distintas posibilidades de selección de memoria:



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. Indica en cada bando la el banco de direcciones de memoria que direcciona y obtén el mapa de memoria del conjunto:

Aquí simplemente cambiamos el montaje, sustituyendo las dos primeras RAM en paralelo por dos ROM, y conectándolas simplemente con el selector, ya que no tiene ninguna entrada más:



 
FAQs DE LA PRÁCTICA Nº4

1º) Me piden que represente una memoria RAM de 64Kx8, ¿Cómo tengo que interpretar 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.

2º) ¿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? 

Simplemente tienes 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.


3º) ¿Cómo lo hago si tengo que duplicar el ancho de palabra? ¿Ahora me piden palabras de 16 bits? 

Puedes conseguir una palabra de 16 bits usando 2 módulos que tengan 8 bits de ancho de palabra, o 4 módulos que tengan 4 bits de palabra, o cualquier combinación compatible. Lo realmente importante es que todas las memorias tengan la misma cantidad de posiciones o celdas de memoria para poder conectarlas en serie mediante la señal de entrada de bits de direccionamiento.

Esto es que la entrada de direccionamiento se conecte a la entrada de cada uno de los módulos y la salida de datos de cada módulo devolverá una porción del ancho total.

Por ejemplo, usando 2 módulos de 8 bits para obtener un ancho de 16 bits, un módulo devolverá los 8 bits de la parte alta de la palabra y el otro módulo devolverá la parte baja.


4º) ¿Cómo puedo ampliar la capacidad de la memoria? 

Esto se hace conectando dos o más módulos en paralelo y utilizando 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.


5º) En logisim, cuando exportas la imagen del circuito para imprimirla o guardarla, en las memorias siempre pone 64KB RAM o 128KB RAM o 16KB RAM. ¿Son KB o Kpalabras? 

Pues creo que ese es un error del programa logisim. Son Kpalabras. Serán KB cuando el tamaño de la celda o posición que se direcciona sea de 8 bits: 1Byte.

Así, si tenemos una memoria de 16K palabras de 8 bits, podríamos decir que tenemos una memoria capaz de almacenar 16K x 8bits de información, es decir 16KB de información.

Pero si la palabra es 16bits = 2Bytes. Tendríamos una memoria capaz de almacenar 16K palabras de 2Bytes, es decir 32KB de información.

No hay comentarios:

Publicar un comentario