Mostrando entradas con la etiqueta RAM. Mostrar todas las entradas
Mostrando entradas con la etiqueta RAM. Mostrar todas las entradas

martes, 20 de septiembre de 2016

Unknown

Diseño de otra memoria

   Hola a todos, a petición de una persona he decidido poner otro ejercicio sobre el diseño de una memoria. Espero les sea de utilidad tener otro ejemplo sobre esto ^^.

   Vamos a diseñar una memoria de 1MegaByte con un ancho de palabra de 32 bits. Los primeros 256KB de memoria son de memoria ROM, y el resto, es decir, 768KB de memoria RAM.

   Los módulos de memoria de los que disponemos son los siguientes:

  •    ROM de 128KB con un ancho de palabra de 16 bits (128KBx16). 
  •    RAM de 256KB con un ancho de palabra de 32 bits(256KBx32).
  •    RAM de 512KB con un ancho de palabra de 8 bits(512KBx8).

   Como la otra vez empezamos analizando el problema.

   Queremos conseguir un módulo de memoria de 1MByte con un ancho de palabra de 32bits, por tanto, necesitaremos 20 líneas de dirección para poder direccionar a dicha memoria, veamos que 2 elevado a 20 es justamente 1Mbyte, es de ahí de donde sale el número de líneas de dirección. Dichas líneas de dirección las nombraremos A19, A18, A17, ... A0. 

   Ahora empezamos a analizar cada parte de la memoria, por un lado la RAM y por otro la ROM.

Memoria ROM

    Necesitamos conseguir 256KBx32 de memoria ROM, pero solo disponemos de módulos de memoria ROM de 128KBx16. Debido a esto deberemos usar nuestros conocimientos de memorias, y recordar que si conectamos memorias en serie aumentamos el número de líneas, y si las conectamos en paralelo aumentamos el tamaño de la palabra.

   Dicho esto por tanto, necesitamos aumentar el ancho de palabra de 16 bits a 32 bits, por tanto necesitamos conectar dos módulos en paralelo; y también necesitamos aumentar el número de líneas de 128KB a 256KB, por tanto, necesitaremos conectar en serie dos asociaciones de estas memorias en paralelo.

   En consecuencia, necesitamos 4 módulos de memoria ROM de 128KBx16.


Memoria RAM


   Para la memoria RAM procedemos de la misma manera. Necesitamos conseguir 768KBx32 de memoria RAM. En este caso para aumentar el tamaño de línea vemos claramente que solo necesitamos asociar en serie un bloque de 512KB y uno de 256KB. El problema está con el ancho de palabra del módulo de 512KB, ya que este es de 8 bits y necesitamos 32. Por tanto, conectaremos 4 módulos de 512KBx8 en paralelo para aumentarlo.

   En definitiva, necesitamos un módulo de 256KBx32 y 4 módulos de 512KBx8.

Direccionamiento a los módulos

   Una vez que ya sabemos los módulos que necesitamos y como debemos conectarlos, debemos ver como haremos el direccionamiento a dichos módulos. 

   A priori vemos que tenemos 3 tipos de memorias por lo que necesitaremos 3 decodificadores para acceder a cada conjunto. Ahora lo que debemos saber es que líneas de direccionamiento serán las entradas de cada decodificador y así saber también el tipo de decodificador que usaremos en cada caso.

   Hemos dicho al principio que en global tenemos 20 líneas de dirección (A19, A18, A17,...A0). Los módulos de 128KB necesitan 17 líneas de dirección para direccionar a todo el módulo, esto serían las líneas (A16,A15,A14, .... ,A0), por tanto usaremos la A17 para seleccionar una asociación en paralelo de ROM, veamos que con un decodificador 1 a 2 nos da para seleccionar a cada asociación de memorias ROM.

   El módulo de 256KB de RAM necesitará de las líneas A17,A16,A15.... A0 para direccionar. Por tanto usaremos la línea A18 como entrada al decodificador que seleccionará dicho módulo. En este caso, una de las salidas de este decodificador ira conectados a la señal de activación del decodificador anterior(supongamos la salida 0).

   Por último, para direccionar a la asociación de las 4 ROMS en paralelo de 512KB necesitaremos de las líneas A18,A17,A16,...A0. Por tanto usaremos la línea A19 como entrada al decodificador, y al igual que antes será un decodificador 1 a 2 cuya una de las salidas irá conectada a la señal de habilitación del decodificador anterior.




Diagrama


   Si queremos ver gráficamente como quedaría la memoria, sería tal que así:


   El cable verde es el bus de dirección, y el cable azul es la señal de habilitación de los módulos de memoria. Por comodidad a la hora de hacer el dibujo no he puesto la línea de datos.

   Espero les haya parecido interesante este ejercicio de memorias ^^ si es así no duden en dejar sus comentarios y darle seguir.
Read More

domingo, 4 de septiembre de 2016

Unknown

Diseño de una memoria

   Hola a todos. Hoy voy a explicarles como diseñar una memoria. Para realizar la explicación supondremos que la memoria que queremos obtener tiene un tamaño total de 1 Mbyte con un ancho de palabra de 32 bits. En dicha memoria, los primeros 256 KB serán memoria ROM y el resto será memoria RAM.

   Los módulos de memoria de los que dispondremos para realizar el diseño serán:


  •    Memorias ROM de 64 KB con un ancho de palabra de 8 bits.
  •    Memorias RAM de 256 KB con un ancho de palabra de 32 bits.
  •    Memorias de RAM de 512 KB.

   Antes de empezar con el diseño debemos recordar unos conceptos básicos. Para poder direccionar a una memoria de un tamaño 2n    palabras de m bits necesitaremos n líneas de dirección para poder seleccionar cada una de las líneas. 

   Si necesitamos aumentar el tamaño de línea, podemos conectar módulos de memoria en paralelo, mientras que si lo que necesitamos es aumentar el número de líneas de direccionamiento, las debemos conectar en serie.

   Dicho esto podemos empezar con el diseño.

   Bloque de memoria ROM

   Hemos dicho que 256 KB de la memoria que queremos diseñar serán de memoria ROM. Por tanto, si pasamos dicho tamaño a potencias de 2 tenemos que 256 KB = 218 KB cpn un ancho de palabra de 32 bits. Los módulos de ROM de los que disponemos son de 64 KB = 216  KB con ancho de palabra de 8 bits. Por lo tanto, debemos conectar módulos en serie y en paralelo para poder alcanzar el tamaño deseado.

   Empecemos con las líneas de direccionamiento. Como he dicho anteriormente, si queremos aumentar el número de las mismas debemos conectar módulos de memoria en serie. En este caso tenemos módulos de 8 líneas de direccionamiento, así que si conectamos 4 módulos en serie de los mismos conseguiríamos el número de líneas de direccionamiento deseadas, ya que 8 x 4 =32.

   Ahora nos faltaría conseguir el tamaño de memoria deseado, para este caso vemos que tenemos módulos de 64 KB y necesitamos conseguir 256 KB. Si observamos 64 KB x 4 = 256 KB, y como habíamos dicho antes, para aumentar el tamaño necesitamos conectar módulos en paralelo, por tanto, necesitamos 4 módulos en paralelo para conseguir lo deseado.

   Visto esto, el número total de módulos de 64 KB de 8 líneas de direccionamiento será de 16, ya que necesitaríamos conectar 4 grupos de memorias conectadas en paralelo, en serie.

Bloque de memoria RAM

   Habíamos dicho que el espacio restante de la memoria sería de RAM, por tanto, 1024 KB - 256 KB = 768 KB, que es el tamaño que deberá tener la parte de RAM.

   Al igual que antes dicha memoria debera tener 32 bits de tamaño de palabra.

   En este caso contamos de dos módulos de RAM de diferente tamaño. Esto no tiene mayor importancia, así que procederemos como en el caso anterior.

   En este caso empezaremos con el tamaño de memoria. Veamos que tenemos módulos de 256 KB y 512 KB. La suma de un módulo de cada tipo nos da el tamaño que deseamos conseguir, por lo tanto, ahora mismo necesitaríamos un módulo de 512 KB y otro de 256 KB.

   Ahora comprobemos el número de líneas de direccionamiento. Vemos que el módulo de 256 KB ya tiene 32 bits por tanto no necesitamos hacer nada más con él. Pero en el caso del módulo de 512 KB solo tenemos 16 bits de direccionamiento, por tanto necesitaremos conectar 2 módulos en serie para así conseguir los 32 bits.

   Por tanto, para la parte de RAM necesitaremos 1 módulo de 256 KB x 32 bits, y dos módulos de 512 KB x 16 bits conectados en serie.

Direccionamiento a los módulos

   Una vez sabido el número de módulos que necesitaremos, así como de que forma debemos conectarlos, debemos ver como direccionamos a cada grupo de módulos. A priori necesitaremos 3 decodificadores para poder llevar esto a cabo, ya que tenemos 3 grupos de módulos diferentes.

   Para poder ver esto fácilmente usaremos una tabla, en las que aparecerán las últimas líneas de direccionamiento de las que disponemos. 

   En total vemos que para direccionar a la memoria total necesitamos 20 líneas de direccionamiento. A estas líneas las llamaremos A19, A18,... A0.

   Para direccionar al bloque de ROM necesitamos 16 líneas ya que los módulos son de 64 KB, así que usaremos las líneas A17 y A16 como entradas del un decodificador para seleccionar cada una de las filas de memorias ROM, dicho decodificador será 2 a 4 ya que tenemos 2 entradas y 4 filas a las que referirnos.

   En el caso del módulo de 256 KB, necesitamos 18 lineas para direccionarlo, por lo que podemos usar la línea A19 como entrada al decodificador que active su línea. Véase que las líneas A17...A0 las vamos a usar para direccionar dentro de los módulos de RAM así que la otra entrada del decodificador la usaremos como señal de habilitación del decodificador anterior.

  Para el caso del bloque de RAM de 512 KB, necesitaremos 19 líneas de dirección para direccionar, así que podemos usar la línea A19 como entrada del decodificador que selecciona esa fila. Al igual que antes el decodificador será 1 a 2 y una de las salidas será la señal de habilitación del decodificador anterior.

A19
A18
A17
A16
A15


A1
A0


0
0







0
1







1
0







1
1






1







1









Diagrama

   A continuación se muestra el dibujo de como quedaría nuestra memoria. Véase que en el dibujo nos faltaría añadir el bus de datos.


   Esto ha sido todo, espero que encontraran interesante este artículo, si es así denle like. Si alguien está interesado en que haga algún diseño en particular pueden enviarme un correo solicitándolo.
Read More