jueves, 30 de mayo de 2013

FAQ Tema 5


1 - ¿Cómo puedo saber qué tipo de memoria es más rápida o de mayor capacidad?
En general, cuánto más cara es la memoria más rápida es pero de menor capacidad y viceversa, es decir, si aumentamos la capacidad de almacenamiento disminuye la rapidez y el precio de la memoria. He aquí una jerarquía:


2 - ¿Qué diferencias hay entre la memoria RAM y la memoria ROM?
La principal diferencia entre ambas es que la memoria RAM no sólo puede leer los datos si no que también puede escribir, modificar y borrar los datos que almacena, además es volátil, es decir, se pierde la información almacenada si cortamos el suministro de corriente, en cambio, la ROM, es de sólo lectura, no es borrable y es permanente si se va la corriente.
Memoria RAM Memoria ROM
Vemos como la RAM posee los pines de entrada de reloj (^), para cargar los datos de entrada modificando la posición de memoria seleccionada, out, para leer los datos de la dirección seleccionada y proporcionárselos a la salida, y clr (clear) para resetear la memoria, mientras que la ROM sólo posee los pines de entrada y salida y sel para conectar y desconectar un módulo ROM si están conectados en paralelo.
3-¿Cómo puedo modificar los datos en memoria?
El logisim incluye una “Herramienta de Cambio”, pero está bastante limitada a causa de restricciones de espacio, por ello es más recomendable el editor hexadecimal. Para acceder a él, abriremos un menú desplegable para el componente de memoria correspondiente y seleccionaremos Editar Contenidos... Para componentes ROM, que presentan un atributo para los contenidos de memoria, podemos acceder también al editor hexadecimal haciendo clic sobre el atributo correspondiente.
Los números a la izquierda, en itálicas, muestran las direcciones de memoria en hexadecimal. Los otros números se corresponden con los valores a partir de la dirección de memoria especificada. Para facilitar la lectura, hay un espacio después de cada grupo de cuatro valores. Podemos navegar con el teclado (con las teclas de la flechas, inicio, fin, av pag/re pag). Y cuando se pulsen caracteres hexadecimales se modificará la posición de memoria seleccionada.
4 - En los ejercicios de la práctica no entiendo qué significa que la memoria sea de 64Kx8.
Quiere decir que dispone de 64K posiciones de memoria y por lo tanto, 16 bits de bus de direcciones (64K = 64*1024= 26*210= 216), y 8 bits de ancho de palabra, es decir, 8 bits de bus de datos.
5 - ¿Qué debemos tener en cuenta a la hora de hacer un mapa de memoria?
Lo primero que nos hará falta es conocer el tamaño del bus de direcciones para saber el número de bits que necesitaremos para representar una dirección, también debemos conocer el ancho de palabra y tamaño del bus de datos (por ej. 8Mx16) para poder saber cuántos bytes va a contener cada módulo de la memoria. Y por último, necesitaremos saber el número de módulos que nos harán falta para representar el mapa de memoria.
6 - ¿Sigues teniendo dudas al realizar el mapa de memoria? Aquí tienes un ejemplo para que lo veas más claro.
Éste sería el mapa de memoria de un ordenador de 32 bits de bus de direcciones, un ancho de palabra de 128Mx64 (luego hacen falta 27 bits para direccionar la palabra, ya que 128M = 227) y por tanto 64 bits de bus de datos (64 bits = 8 bytes = 23, luego son 3 bits para direccionar el byte) y 2 módulos de RAM (2 bits para seleccionar el módulo).
7-Si no me da tiempo a finalizar una simulación, ¿puedo guardar los datos que he introducido en memoria para no tener que volver a introducirlos más tarde?
Sí, para guardar los valores solo se debe hacer clic derecho sobre el módulo de memoria y seleccionar salvar imagen. El archivo con los datos de ese módulo de memoria se guardará con el siguiente nombre: “nombre_archivo.raw”. Para cargar en el módulo de memoria los datos guardados en dicho archivo, solo se debe hacer clic derecho sobre el módulo y seleccionar cargar imagen, seleccionando en la ventana que se abre el archivo en el que habíamos guardado los datos.
8-¿Por qué a partir del ejercicio 3 uno o más de los bits más significativos de la dirección se quedan aparte de los primeros dieciséis?

Eso es debido a que los bits menos significativos tienen como finalidad identificar a qué posición del módulo accedemos, mientras que los más significativos se utilizan para seleccionar qué módulo está activo en cada momento. Se activará la entrada “sel” del módulo al que queramos acceder utilizando un decodificador con los hilos de selección de módulo; de esta forma, solo un en un módulo se podrán escribir o leer datos, mientras que los demás permanecerán inactivos.

9-¿Cómo conecto los chips, en serie o en paralelo?
Pues bien, eso dependerá del ancho de bus de datos (ancho de palabra) si los chips son de 128K*8 (8 bits de ancho) y el ancho de palabra es de 16, deberás conectarlos en paralelo teniendo de esta forma 128K posiciones de memoria de 16 bits de ancho. Por el contrario conectando los chips en serie tendrías 256K posiciones de memoria de 8 bits de ancho.








Resumen T5

Sistemas de memoria:


En esta práctica del tema 5 hemos estudiado a fondo las memorias que componen un pc, sus características y su funcionamiento. Para realizar esta práctica hemos hecho uso del programa LogiSim.
Existen varios tipos de memorias, cada una de ella responden a unas necesidades específicas para cada situación, pero por norma general, todas las memorias tienen en común que existen dos características inversamente proporcionales, la velocidad y la capacidad, de modo que cuando una sube la otra baja y viceversa.
La capacidad y la velocidad son inversamente proporcionales principalmente por temas de costes, cuando se consigue una tecnología que logra una gran velocidad de transferencia de datos, su coste suele ser muy alto, por lo que se reduce su capacidad para abaratar el coste del producto y viceversa.
Hay dos tipos de memorias, SRAM y DRAM, la principal diferencia entre ambas es que la DRAM necesita refresco y la SRAM no y que la SRAM está compuesta por biestables y la DRAM por condensadores. Debido a estas composiciones la SRAM tiene una gran velocidad pero implementar los biestables es muy costoso, por lo que se utiliza para lugares donde se necesiten pequeñas cantidades de memoria como en las caches, mientras que la DRAM tiene una velocidad más limitada al estar compuesta por condensadores pero es muy fácil de hacer que tenga una gran capacidad, por lo que se utiliza como memoria principal. Otras características a tener en cuenta de las memorias son la latencia, que no es más que el tiempo que tarda desde que se le solicita un dato hasta que lo tiene en las patillas de salida, la velocidad de transferencia, que es la velocidad en que transmite los datos y se mide en bytes/s y tiempo de ciclo, que no es más que el tiempo que pasa entre un ciclo y otro en las memorias DRAM. Al ser la DRAM la que se usa como memoria principal, será en este tipo en la que nos centremos de ahora en adelante.
Las memorias DRAM se organizan por módulos y los módulos a su vez contienen a uno o más chips de memoria trabajando en paralelo entre ellos, para una mejor comprensión se aporta una imagen del esquema típico de un módulo:


Pues bien, tal y como puede verse en la imagen, el modulo aloja 8 chips funcionando en paralelo, por lo que si cada chip es capaz de almacenar una palabra de 8 bits, los 8 chips juntos devolverán al bus de datos 64 bits.
Dentro de las memorias DRAM existen variantes, que se han ido desarrollando a lo largo del tiempo para mejorar sus características, recientemente han estado las SDRAM, que son memorias síncronas con una señal de reloj y las DDR que consiguen dos accesos a memoria por ciclo. Dentro de las DDR en los últimos años han pasado de las DDR a secas, a la DDR2 y DDR3, todas ellas consiguiendo un aumento de velocidad de transferencia a la vez que bajando el consumo de energía.

Las memorias DRAM tienen al tener una gran capacidad se ha diseñado un sistema llamado mapa de memorias con el que se sabe cuántos bits serán necesarios para direccionar toda la memoria disponible de forma que si se dispone de un bus de direcciones de 32 bits se podrán direccionar 232 bits, lo que son 4GB y también es necesario indicar para que se usara cada bit, para ello es importante tener en cuenta los siguientes datos ordenado de bits menos significativos a más:
  1. Bits necesarios para identificar el byte. Ejemplo: Si el bus de datos es de 32 bits, pues 32/8=4 y 4=22 por lo que serán necesarios 2 bits para identificar la palabra que serán los bits A0 y A1.
  2. Numero de bits necesario para transportar la capacidad del módulo. Ejemplo: Si tiene una capacidad de 1 GB, podrá almacenar 128Mpalabras, por lo que 128=27 y 1024=220 siendo por tanto necesarios 27 bits, de A2-A29.
  3. Por último, si se tienen 2 módulos se necesitara identificar a que módulo ir. Ejemplo: serán necesarios 2=21 por lo que serán necesario un último bit A30.
  4. El último bit disponible que sobra, quedara libre y se indicara asi en el mapa de memorias.
Tras lo dicho hasta ahora es suficiente para tener una buena idea de cómo son y funcionan las memorias DRAM, pero ahora si solo se dispusiera de este tipo de memorias en un PC cuando la CPU necesite algún dato debería de acceder directamente a la memoria principal, pero tal como se ha explicado anteriormente las memorias DRAM son lentas en comparación con otros componentes, como por ejemplo la CPU, por lo que se produciría un cuello de botella, para evitar este problema se creó lo que se conoce como memoria cache.
Las memorias cache no son más que memorias hechas con memoria SRAM y que por lo tanto son increíblemente rápidas pero de pequeña capacidad. Los datos más usados por la CPU son enviados a la cache, por lo que la CPU tratara de funcionar siempre que pueda con esta memoria, de forma que, cuando la CPU solicita un dato lo busca primero en la memoria cache y si no lo encuentra lo busca en la memoria principal con el consiguiente aumento de tiempo que esto supone, por lo que la primera opción siempre es la memoria cache.
A continuación explicaremos los ejercicios realizados durante las prácticas.
Primero diremos qué son: S, L, CLOCK y CLEAR.
S: Selección, si no se activa el seleccionador nada de lo que ocurra en el módulo quedara almacenado.
CLOCK: La señal de reloj, recoge los datos en el flanco de subida.
L: Load, cuando está activo es cuando saca los datos hacia el bus de datos.
CLEAR: Cuando se activa se resetean todos los valores de la memoria RAM.


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.


Lo primero a analizar aquí es que significa 64Kx8, con 64K habla de la capacidad de la memoria y con 8 especifica que salida que tendrá al bus de datos.


Para hacer el ejercicio introducimos el valor en binario de 0023h y 3A en entrada, activamos el triestado, S y CLOCK y se queda registrado en la memoria RAM.


Ya está almacenado el dato 3A en memoria, para la dirección C120h y el dato 25, sería hacer exactamente lo mismo solo que cambiando la dirección y la entrada por los datos ahora facilitados.

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.

Construimos el circuito en Logisim:


Para probar su funcionamiento indicamos una dirección y añadimos un valor en la entrada de datos.
Por último sólo nos queda seleccionar en memoria la dirección que hemos indicado y cargar el dato en esa dirección.





Como podemos ver en la imagen, ya hemos cargado en memoria el dato.
Primero, activamos SEL para poder posicionarnos en memoria según la dirección que indicamos.
Segundo, activamos el triestado de entrada de datos para que llegue al bus y finalmente activamos E para cargar el dato en la memoria.

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.

Construimos el circuito en Logisim:

En este ejercicio tendremos la opción de elegir la pareja de memorias de arriba o la de abajo, esto se hace mediante el inversor que hay en el selector, por tanto una pareja estará seleccionada y la otra no. Esto podemos verlo claramente en la imagen.

Pues bien, vamos a probar nuestro circuito. Como en los ejercicios anteriores, primero indicamos la dirección de memoria en la cual queremos guardar el dato. En entrada de datos indicaremos el dato que queremos guardar en la dirección que indicamos anteriormente.


Podemos ver que antes teníamos seleccionada la pareja de memoria de abajo y, al activar SEL, hemos activado las memorias de la parte superior de la imagen.

Para terminar el ejercicio, desactivo SEL y vuelvo a seleccionar las memorias de la parte inferior de la imagen. Ahora que estamos situados en la dirección que indicamos para guardar el dato en memoria, activamos el triestado de entrada de datos y tenemos en el bus el dato que queremos guardar. Finalmente activamos E y se guarda en memoria el dato que queríamos para la dirección que hemos indicado.

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.

Implementamos el circuito en logisim:

A continuación, procederemos a probar el circuito implementado, lo primero que deberemos hacer es indicar la dirección de memoria en la que queremos guardar el dato, la indicaremos en la entrada de direcciones. Una vez realizada dicha operación procederemos a introducir el dato, en la entrada de datos que posteriormente guardaremos en la dirección de memoria antes introducida.





Una vez tengamos introducidas la dirección de memoria, y el dato que queremos introducir, procederemos a seleccionar el modulo mediante el selector, en este caso vamos a seleccionar el modulo 1, para ello solo tenemos que indicarlo en el selector con el codigo (“01”).



El siguiente paso, será abrir el triestado de entrada de datos para permitir el paso del dato antes introducido al bus interno, y por ultimo le damos carga E y almacenaríamos el dato en la dirección de memoria que hayamos introducido.


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.

Lo primero sería implementar el circuito en logisim:

Una vez tengamos el circuito implementado en logisim,las señales que intervienen en la memoria rom solo seria la del selector del chip, ya que las memorias rom no tienen señales de lectura, escritura o reset, por lo tanto en la siguiente imagen procederemos a introducir una dirección de memoria, para introducir el dato en dicha dirección de memoria deberíamos introducirlo manualmente, ya que como antes hemos comentado no tiene una señal de escritura y para resetearlo, deberíamos de hacerlo también manualmente.


Por ultimo, realizamos el mapa de memoria que se muestra a continuación, donde aparece el rango de direcciones y los componentes que componen el circuito.


Direcciones
Componente
0 – 65535
MODULO ROM
65536 – 131071
MODULO RAM 1
131072 – 196607
MODULO RAM 2
196608 – 262143
MODULO RAM 3

lunes, 20 de mayo de 2013

FAQ Tema 3

1- He mirado la práctica y es enormemente trabajosa, ¿me dará tiempo?
No te preocupes, los ejercicios están correlacionados. Al final de la práctica te harán falta todos los pasos intermedios, así que no debes verlos como ejercicios aislados, sino como un solo ejercicio. 

2-  ¿Qué es Logisim y de dónde puedo descargarlo?
Logisim es una herramienta de libre distribución bajo licencia GNU GPL, de diseño y simulación de circuitos lógicos digitales. Su intuitiva interfaz y su sencillo simulador permiten aprender con facilidad los conceptos básicos relacionados con la lógica de los circuitos digitales. Con la capacidad de construir grandes circuitos a partir de otros más simples, Logisim puede ser utilizado para el diseño de CPUs al completo con propósitos educativos.
Puedes descargarlo y obtener más información desde su página oficial en http://sourceforge.net/projects/circuit/

3-  No recuerdo cómo usar el Logisim, ¿qué hago?
Puedes usar el tutorial subido al aula virtual o, si lo prefieres, esperamos que te ayude la presentación existente en el siguiente enlace: http://www.slideshare.net/perplejo/logisim-4308715?utm_source=slideshow03&utm_medium=ssemail&utm_campaign=share_slideshow_loggedout

4- ¿Qué era un banco de registros?
Es un elemento de estado que consiste en un conjunto de registros, que pueden ser leídos y escritos, proporcionando el identificador del registro al que se desea acceder.
Además de conectar los biestables en fila, es posible conectarlos formando una estructura bidimensional. En una estructura de este tipo podemos considerar que cada fila es un registro, por eso se le suele dar el nombre de banco de registros. La principal ventaja de un banco de registros es que, dada su regularidad, el diseño final resulta menos complejo de lo que sería necesario si implementamos los registros por separado.

5-  ¿Qué es una ALU?
La unidad aritmético lógica, también conocida como ALU (siglas en inglés de arithmetic logic unit), es un circuito digital que calcula operaciones aritméticas (como suma, resta, multiplicación, etc.) y operaciones lógicas (si, y, o, no), entre dos números.

6- ¿Qué es un triestado?
La utilidad del tercer estado o triestado (Hi-Z) es borrar la influencia de un dispositivo del resto del circuito. Si más de un dispositivo está conectado, pone una salida en Hi-Z se usa para que en un mismo bus no haya dos señales diferentes, es decir, una con valor 1 y otra con valor 0.

7- ¿Qué debo hacer en los ejercicios?
En la propia guía de la práctica vienen los ejercicios que hay que implementar en el Logisim ya resueltos. Simplemente debes copiarlos y comprobar su funcionamiento.

8-  En el ejercicio 3, ¿es correcto el desplazamiento implementado en el ejemplo?
No, lo que está implementado realiza una rotación, mientras que el enunciado indica que debe realizar un desplazamiento. Por lo tanto, deberás modificar esta parte del circuito.


9- En el ejercicio 5, ¿qué debo hacer?
Lo primero que debes hacer es poner nombre a  las “Cargas” y los “Triestados”. Te recomendamos que uses la misma nomenclatura de clase, así te será más sencillo. Por ejemplo, al triestado del banco deberías llamarlo TB y a la carga del banco CB.

10- En el ejercicio 5, ¿de dónde obtengo los datos a cargar en los registros?
Debido al nivel en el que estamos trabajando, debemos suponer que se encuentran a la entrada de nuestro circuito, siendo transparente para nosotros de dónde vienen los mismos (por ejemplo, de la memoria principal). Para la realización del ejercicio, debes empezar por el triestado que está a continuación de dicha entrada.



11- ¿Cómo diseño una ALU basica?
A continuación veremos como por medio de compuertas lógicas y multiplexores, se pueden implementar las operaciones aritméticas básicas de una ALU.

En primera instancia se implementa una ALU que lleve a cabo las operaciones lógicas and y or, como se muestra en la siguiente figura:

Este esquema elemental, con dos compuertas y un multiplexor, permite establecer algunas consideraciones extensibles a diseños más complejos. Se distinguen:

Las líneas de datos de entrada y salida (a,b,result).
Las compuertas and, or.
La lógica de control interno ( multiplexor ).
Las líneas de control que determinan cual es la operación que debe realizar la ALU.

12-  Tengo todos los componentes para mi ALU preparados pero, ¿Cómo los engancho todos?
Una vez que se tienen todos los elementos para construir la ALU se unen las salidas de los componentes a un Multiplexor y mediante el selector que tiene este, se realizará la función de uno u otro componente.
Ejemplo de la unión de un sumador y una puerta OR mediante un Multiplexor:


13- ¿Necesitas una plantilla para el cronograma? Aquí tienes una referencia


CLK














Bus de datos














SB














CB














TB














CRi0














TRi0














CRi1














TRi1














CRi2














TRi2














CA














Op














Ctmp














Ttmp














Ci














A














R0














R1














R2














R3














Ri0














Ri1














Ri2














R estado