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