lunes, 4 de junio de 2012

E/S Buses y periféricos.


En esta practica , que se corresponde con el tema de E/S , buses y periféricos, realizamos el montaje de un transmisor serie para datos de entrada en paralelo,que se fue ampliando poco a poco; y de una matriz gráfica conectada a un a memoria, que se amplia poco a poco hasta poder mostrar una animación en la matriz.

Para montar el transmisor, se utilizan dos registros de desplazamiento de 8 bits, conectados a un reloj y a un pin de carga de la siguiente forma.



En el siguiente paso , se amplia el circuito para incluir un generador/detector de paridad. Esto se hace aumentando en 1 bit el tamaño de los registros, y usando una puerta NOR para el detector generador de paridad, manteniéndose el indicador a 0 siempre y cuando se halla producido una transmisión correcta de los datos.
Para completar el circuito, se automatiza la transmisión con un contador, para que al acabar la transmisión se pare, mediante el siguiente esquema.A pesar de que tenemos el esquema en las practicas, no hemos podido conseguir que esto funcione , aunque teoricamente deberia de hacerlo.


Ahora la practica pide que realicemos el montaje de una matriz gráfica de 8x8 con una memoria de 8 Bytes para mostrar por ella una figura(que previamente se ha almacenado en la memoria), la figura a mostrar se almacenado previamente en unos registros que actúan de buffer para mantener la imagen en la matriz.






Tras esto, duplicamos la memoria para poder almacenar dos figuras en la matriz, aumentando el contador en un bit, aunque seleccionando solos los 3 bits menos significativo para que lleguen al al decodificador.


Tras esto volvemos a duplicar la memoria(pudiendo almacenar 4 figuras ya) repitiendo los mismos pasos que en el anterior.




F.A.Q

¿Que diferencia existe entre un bus serie y un bus paralelo?

En el bus serie la información se transmite bit a bit mientras que en el paralelo se transmite en bloques de bits.

¿Que es Logisim? ¿Como puedo conseguirlo?

Logisim es una herramienta de libre distribución de diseño y simulación de circuitos lógicos digitales. Tiene licencia free-ware, luego se puede conseguir legal y gratuitamente desde la siguiente página:

¿Que es un registro de desplazamiento?

Se trata de un circuito digital formado por biestables conectados en cascada y que producen un desplazamiento a la derecha o a la izquierda de un conjunto de bits.


¿Que es un biestable?

Un biestable es un circuito digital capaz de permanecer en uno de los dos estados posibles (0 o 1) durante un tiempo indefinido. Se utiliza para almacenar información.

¿Que es un contador?

Un contador es un circuito secuencial construido con biestables y puertas lógicas capaz de realizar un cómputo de impulsos, almacenar datos o actuar como divisor de frecuencia.

¿Como puedo programar la memoria para visualizar formas en la matriz?


Se modifica el contenido de la memoria, la figura quedara almacenada en unos registros que actuan de buffer y la imagen se va mostrando en la matriz con cada ciclo de reloj.





lunes, 28 de mayo de 2012

Memorias

En esta práctica aprendimos a analizar y utilizar memorias ROM y RAM. Implementándolas con el programa Logisim.

La práctica nos pedía realizar varios circuitos. El primero consistía en introducir una memoria RAM de 64Kx8 en un circuito hacer que éste permita leer y escribir en ella.El resultado es este:


Al ser de 64K palabras o loque es lo mismo, 216 palabras, la entrada de direcciones (bus de direcciones) será de 16 bits y al ser x8, la entrada y salida de datos (bus de datos) será de 8 bits.

Para comprobar su funcionamiento nos sugerían probar a introducir en las direcciones 0023h el dato 3A y en la dirección C120h el dato 25. Para probarlo, descargue el circuito aquí (es necesario tener Logisim).

En el segundo nos pedía que uniésemos dos memorias del tipo del primer ejercicio para conformar una memoria de 64Kx16. Para probarlo, descargue el circuito aquí.




Al no variar la cantidad depalabras en cada memoria, el bus de direcciones no varía pero al serel doble de memorias, el ancho del módulo se dobla, por lo tanto el bus de datos tendrá que ser de 16 bits en vez de 8.

En el tercero se pide unir 3 memorias de 64Kx8 para conformar una de 128Kx16. Para probarlo, descargue el circuito aquí.



El ancho de los buses no varía porque seguimos usando las mismas memorias, pero al añandir otro banco, es necesario poder seleccionar cada uno de ellos, para ello, usamos una puerta not en una de los dos caminos que van al pin “sel” de las memorias. De esta manera, si activamos la señal, se activaría el primer módulo y si la desactivamos se activaría el segundo.


En el cuarto se pide ampliar la memoria hasta 256Kx16 usando memorias de 64Kx8, pero para seleccionar cada banco de dos memorias 64Kx8 se necesita otro componente, un decodificador. Quedaría de esta forma:



El ancho de los buses siguesin variar, pero al tener mas de dos módulos, no nos sirve el usaruna puerta not para seleccionar el módulo, por tanto, usamos un decodificador para seleccionarlos.

Para comprobar su funcionamiento se nos sugería introducir algunos datos de 16 bits en varias
direcciones. Para probarlo, descargue el circuito aquí.

Y por último se nos pide transformar la estructura anterior para que los primeros 64K sean de memoria ROM. Este sería el resultado:




Lo único que cambiamos aquí son las dos primeras RAM por memorias ROM y consecuentemente, las conexiones varían ya que la ROM no tiene los mismos pines que la RAM. Para probarlo, descargue el circuito aquí.



FAQ

¿Para qué sirve el separador que ponéis a partir del 2º ejercicio?
Una palabra enviada desde un solo banco no se envía desde el mismo elemento, sino que se envía una parte desde una de las memorias y la otra parte desde la otra memoria. 
El separador permite unir las dos partes de la palabra y enviarla al bus de datos. En todos los circuitos, sepuede ver que cada pin del separador direcciona 8 bits, una del 0-7 yla otra del 8-15.

¿En los mapas de memoria solo se incluyen memorias RAM?
No, en los mapas de memoria se incluyen todas las memorias del equipo en cuestión, ROM, tarjeta gráfica,etc.

¿Cuántos bits son necesarios para identificar un byte dentro de una palabra en el mapa de memoria?
Divide el numero de bits del bus de datos entre el numero de bits del ancho de un chip y tendrás el numero de chips en un módulo, exprésalo como potencia de 2 y el exponente será el número de bits necesarios para identificar el byte dentro de la palabra.

¿Cuándo hablamos de una RAM de 64Kx8 a qué nos referimos?
Para diferenciar la palabra dentro del módulo tenemos el 64K, mientras el 8 significa los bits de tamaño de palabra.

¿Cómo cambiar los valores contenidos en memoria en Logisim?
Logisim tiene un editor hexadecimal integrado para ver y alterar contenidos de memoria. Para
acceder a él, abre un menú desplegable para el componente de memoria correspondiente y
selecciona Editar Contenidos.. y aparecerá:





¿Qué es una memoria RAM?
La memoria RAM es una memoria deacceso aleatorio (Random-Access Memory).En ella se cargan todas las instrucciones que ejecutan el procesador y otras unidades de cómputo. Es una memoria volátil. Su unidad de transferencia es la palabra. La RAM es un semiconductor. Su definición más básica podría ser: "Memoria basada en semiconductores que puede ser leída escrita por el microprocesador u otros dispositivos de hardware".

¿Qué es una memoria ROM?
La memoria ROM es una memoria de sólo lectura (Read-Only Memory). Es la memoria que se utiliza para almacenar los programas que ponen en marcha el ordenador y realizan los diagnósticos. Es también una memoria de acceso aleatorio. Actualmente, se les sigue llamando memorias ROM aunque ya no sólo sean de lectura y escritura, las ROM más modernas, como EPROM y FlashEEPROM, se pueden borrar y volver a programar varias veces, aún siendo descritos como "memoria de solo lectura".

domingo, 27 de mayo de 2012

Unidad de control y camino de datos.

En esta práctica,correspondiente al tema 4 de unidad de control, debíamos de simularlas secuencias de transferencias y acciones de algunas instruccionescomo suma o desplazamiento de bits en una CPU. 



Primeronos daban una serie de instrucciones que teníamos que codificar ahexadecimal, para que luego, a partir de la CPU, indicar las accionesque iban a llevarse a cabo en esta. Un ejemplo de instrucción seriala AND$t2, $t1, $t1. 



Unavez hecho esto con cada instrucción, pasamos a la simulación enLogisim. Para ello, utilizamos un archivo descargado del campus conuna CPU. Esa CPU contiene los mismo elemento que la CPU vista enclase. 



Parallevar a cabo la simulación, simplemente hay que ir activando lostriestados, las cargas, etc, tal y como lo hicimos manualmente. Enel ejemplo de la instrucción AND, se empezaría activando T4 y C1. 



Seguimosactivando triestados y cargas, hasta llegar a la ALU, dondeelegiríamos el código de operación 00004, ya que la ALU cuenta conlas siguientes operaciones:

00001Suma
00002Resta
00003OR
00004AND
00005Desplazamiento a la derecha de 1,2,3,4 bits
00006Desplazamiento a la izquierda de 1,2,3,4 bits
00007NOT
00008XOR



Parafinalizar, se selecciona el registro donde se quiere guardar y secarga.



FAQ

¿Qué es una CPU?
La CPU consta de la UC y la ALU y se encarga de realizar las operaciones aritméticas y lógicas del ordenador.


¿Qué es la UC?
La UC se encarga de que todo los dispositivos funcionen correctamente mandando señales de control para regular el paso de la información desde su entrada hasta la salida final del resultado.


¿Cómo sabe la UC que pasos tiene que hacer para ejecutar una instrucción?
La unidad de control contiene una memoria ROM con un firmware que le permite saber que señales de control debe activar para realizar cualquier operación que tenga disponible.


¿En que consiste el firmware?
Es un conjunto de micro programas que contiene para cada ciclo de reloj todas las señales de control que debe generar para realizar su cometido.


¿Qué es la señal de reloj?
La señal de reloj es un señal digital que sincroniza todo el sistema. Sirve para generar las distintas señales de control y triestado.


¿Cómo se le indica a la CPU que operación tiene que realizar?
Se le indica mediante instrucciones en ensamblador, cada instrucción contiene que operación tendrá que realizar, de donde debe tomar los datos para realizar la operación y que hacer finalmente con el resultado.


¿En que consiste la codificación de una instrucción?
A cada operación le corresponde un código especifico al igual que los registros. Estos se codifican en hexadecimal tomando todo el conjunto en bloques de 4 bits.


¿Cómo funcionan las señales de control?
Las señales de control activan los registros para que guarden los datos que le llegan del bus. También existen las señales de triestado que controlan que el bus no esté ocupado antes de pasar nuevos datos.


¿Qué es un registro?
Un registro es una memoria que hace de intermediario entre las distintas partes citadas antes la memoria principal, su función consiste en acelerar el acceso a los datos necesarios y que los triestados puedan regular el paso de información por el bus.


¿Qué partes regula la UC en la CPU para ejecutar las instrucciones?
Una parte se encarga del transito de información entre memoria y los distintos dispositivos del sistema. El contador de programa se encarga de regular la dirección de memoria a la que tendrá que tener acceso en un futuro la CPU. La unidad de control se encarga de guardar la instrucción que se esta ejecutando, decodificarla y generar las distintas señales de control necesarias. El banco de registros contiene los datos con los que trabajara la ALU. La ALU se encarga de realizar las operaciones que le encarga la UC con los datos que esta le facilita. El registro de indicadores almacena las incidencias producidas en cada operación.

viernes, 25 de mayo de 2012

ALU y Cronogramas

En esta práctica nos enseñaron a analizar la ALU, a crearla mediante Logisim y a realizar los cronogramas correspondientes a los diferentes procesos que la ALU es capaz de llevar a cabo.

En principio recordaremos el uso del Logisim aquí.

La práctica nos pedía que hiciéramos algunos circuitos básicos para después unirlos y crear así una ALU completa. Esta ALU puede realizar las siguientes operaciones: Suma , And, Not y Desplazamiento de 1 Bit hacia la izquierda como podemos ver en la siguiente imagen.



Si queréis comprobar el funcionamiento de la ALU podéis descargaros el archivo de Logisim aquí.

La segunda parte, y más importante, de la práctica es la creación de los cronogramas correspondientes a algunas de las operaciones que realiza la ALU anterior. Para realizarlo debemos tener en cuenta las distintas señales que podemos utilizar en los cronogramas:

· Flanco de subida (Carga)



·De nivel (Triestado)

La primera operación que nos piden  es una AND entre R0 y R3 y almacenarlos en Raux1. Aquí tenemos su cronograma.



La siguiente operación es  un Desplazamiento de 2 bits a la izquierda de R1 y almacenarlo en Raux2. El cronograma quedaría de la siguiente manera.




FAQ

¿Qué es una A.L.U.?
  • A.L.U. son las siglas de Unidad Lógica y Aritmética.
  • Es la encargada de realizar las operaciones dentro de una CPU. Por ejemplo AND. XOR, Suma, Resta…
  • No puede funcionar por si misma. Necesita de dos elementos adicionales:
  1. Registros: En los que se almacenan los datos a operar y el resultado obtenido
  2. Buses: para recibir y enviar los datos antes indicados

¿Cuánto tiempo dura activado una señal de triestado, y cuántos pueden haber activados al mismo tiempo?
La señal de triestado se mantiene durante un ciclo de reloj exacto, y no pueden activarse más de uno al mismo tiempo si coinciden en el camino para desplazarlo a algún lugar, únicamente pueden activarse mas de uno cuando éstos no tienen nada que ver uno con el otro.

¿Qué es un bus? ¿ Qué tipos hay?
Conjunto de líneas eléctricas, cuyo cometido es transportar información de un circuito a otro.
  •  Bus dedicado
  •  Bus compartido
  •  Bus unidireccional
  •  Bus bidireccional
  •  Bus de receptor o transmisor
  •  Bus serie
  •  Bus paralelo
  •  Bus asíncrono

¿Qué ocurre cuando el número de posiciones a desplazar en los operadores de desplazamiento es variable?
Sería necesario un circuito adicional compuesto por otro multiplexor, y además serían operadores diádicos y no monádicos como lo sería si el número de posiciones a desplazar fuesen fijas.

¿Cuales es la clasificacion de los operadores?
Número de operandos:
  • Monádicos: Opera un solo dato (NOT A)
  • Diádicos: Operan dos datos (A+B)
Número de operandos:
  • Lógicos (AND, NOR, …)
  • Aritméticos (suma, resta, …)
  • Desplazadores (lógicos, aritméticos, circulares)
  • Otros (paridad, desbordamiento, …)

¿De que se encargan los operadores de desplazamiento?
Son los que se encargan de desplazar o rotar, las posiciones de los bits de los datos de entrada.

viernes, 18 de mayo de 2012

Ensamblador

En esta práctica aprendimos el uso de ensamblador. Comenzamos con una guía para la introducción al IDE MARS, el cuál sirve además para simular el código, y conceptos básicos del ensamblador para procesadores MIPS.
En nuestro primer programa vimos como desarrollar la serie de Fibonacci, la cuál consiste en una secuencia de números en el que el siguiente número es la suma de los dos anteriores comenzando siempre por 1 los dos primeros casos.

Cuando observamos el programa y vimos para que servía cada instrucción, se planteó la idea de que el programa calculase la suma de los tres anteriores números. Cambiando ligeramente algunas instrucciones dimos con la tecla.


Al finalizar el primer contacto con el lenguaje ensamblador, nos pusimos a realizar una serie de ejercicios, concretamente 11, en los que se nos exigía distintos objetivos y a la vez que se avanzaba de ejercicio, la dificultad iba aumentando, en los que se incluían la utilización de bucles if, if-else, for, etc con su forma en ensamlador. Veamos un ejemplo de unos de ellos:

En este ejercicio se planteaba mostrar por pantalla la suma de dos números, la suma del 100 y del -10, y reservar un espacio donde almacenar el resultado de dicha suma. Cargamos en los registros $t0 y $t1 los número 100 y -10 respectivamente. La suma de ambos números la guardamos en el mismo registro $t0 y realizamos una llamada al sistema con la instrucción syscall para que mostrara el resultado por pantalla. Finalmente cargábamos el resultado de la suma en la variable resultado.




Y esto es un resumen de lo visto en la prácticas de ensamblador.



FAQ

¿Qué es ensamblador?
Es un lenguaje de programación entendible que interpretan instrucciones máquinas.

¿Para que sirve ensamblador?
Ayuda al desarrollo de lenguajes de más alto nivel facilitando la creación de nuevos programas. Todo lenguaje es convertido a ensamblador antes de ser procesado por el procesador, finalmente será convertido a código máquina. También es usado como lenguaje de programación para componentes de diseño sencillo como pueden ser procesadores para electrodomésticos o bien para aplicaciones que requieren un alto nivel de optimización.

No conozco ningún lenguaje de programación, ¿me recomiendas empezar por ensamblador?
Es recomendable iniciarse en la programación con algún lenguaje de alto nivel que facilite el aprendizaje y una vez comprendido su funcionamiento y lógica, adentrarse a niveles más bajos.

¿Qué es MARS?
Es un IDE (Interactive Development Environment) que permite la creación y simulación de código ensamblador para porcesadores MIPS.

¿Donde puedo encontrar documentación para el ensamblador MIPS?
Si usas el programa simulador MARS dispondrás de una ayuda muy completa desde el menú "Help" donde se detallan instrucciones básicas, pseudo-instrucciones, directivas, llamadas al sistema y exepciones, todo lo necesario para comenzar. En internet también se puede encontrar gran cantidad de documentación.

¿Puedo programar ensamblador MIPS para cualquier máquina?
El ensamblador para MIPS visto en clase es específico para máquinas que usan el MIPS R3000. Este modelo cuenta con un juego de instrucciones que es el que empleamos para programar y podremos trasladar a cualquier máquina que contenga dicho juego de instrucciones sin importar otros aspectos.

¿Donde se almacenan los datos con los que trabaja los programas en ensamblador?
Principalmente en registros del procesador para además así aumentar su velocidad de ejecución aunque también se hace uso de la memoria principal.

¿Debería comentar mis programas?
Siempre es recomendable hacer los programas lo más claro y simples posibles para que otro programador pueda seguir con nuestro trabajo además nos ayudará para reconocer más rápidamente nuestro propio trabajo en un futuro. Los comentarios pueden ayudar a aclarar algoritmos complejos.

¿Siempre es necesario usar la directiva .globl?
No, solo es necesario usarlo cuando nuestro programa necesita comunicarse con otro programa. Un ejemplo sería un programa que reciba un dato por parámetro de forma externa.

¿Qué es una pseudo-instrucción?
Una pseudo-intrucción no es más que una secuencia de intrucciones que representan una sola instrucción simplificando al programador intrucciones que necesitarían varias líneas de código para su implementación.

¿El tamaño de la directivas de datos .word siempre es de 32 bits?
No, depende de la arquitectura y juego de instrucciones del procesador con el que trabajemos. Si usamos un procesador de 32 bits la directiva tendrá un tamaño de 32 bits mientras que en un procesador de 64 bits la palabra ocupará 64 bits. Este tamaño es el ofrecido por los registros ubicados en el procesador.
Descargar memoria en formato PDF

miércoles, 16 de mayo de 2012

Entrega de las prácticas

Aquí os pongo el calendario para que os acordéis de quiénes son los encargados de realizar todas las tareas que debemos hacer. Quiero que si vais teniendo dudas preguntéis sin ningún temor en los comentarios de esta entrada y entre todos intentaremos responder para aclarar cualquier cosa.


Asignación de las tareas a los miembros del grupo.
Práctica 1 (Tema 2):
· José Marqueses Rodríguez
· Jesús Gómez
*Esta práctica la revisarán los componentes del grupo que realice la práctica 5.
Práctica 2 (Tema 3):
· Sergio Real Aragón
· Carlos Gutiérrez Vázquez
*Esta práctica la revisarán los componentes del grupo que realice la práctica 1.
Práctica 3 (Tema 4):
· Daniel Molina Cabrera
· Manuel Alejandre Sánchez-Barriga
*Esta práctica la revisarán los componentes del grupo que realice la práctica 2.
Práctica 4 (Tema 5):
· Daniel Peralta de la Herrán
· Manuel Bonat Lucia
*Esta práctica la revisarán los componentes del grupo que realice la práctica 3.
Práctica 5 (Tema 6):
· Daniel Pérez Sánchez
· Francisco Javier Rodríguez Vázquez
*Esta práctica la revisarán los componentes del grupo que realice la práctica 4.


Un saludo,
Sergio Real.


Blog Fundamentos de Estructura de Computadores A4

Hola señores, usaremos este blog para publicar cada práctica de la memoria de FEC que debemos de realizar.

Un saludo,
Sergio.