FAQ

FAQ DE LA PRÁCTICA Nº1

1º) ¿Qué programa es el Mars?
MARS (MIPS ensamblador y simulador de tiempo de ejecución) es un Entorno Interactivo de Desarrollo ligero (IDE) para programación en lenguaje ensamblador MIPS, destinados a uso educativo.

2º) ¿Para qué sirve Mars?
El IDE MARS ofrece programa de edición y montaje, pero su verdadera fortaleza es su soporte para la depuración interactiva. El programador puede establecer y quitar puntos de interrupción de la ejecución o el paso a través de la ejecución hacia adelante o hacia atrás (deshacer) mientras se visualiza directamente el registro y la edición y contenido de la memoria.

3º) ¿Cómo se pueden almacenar vectores o arrays en los registros?
Los vectores son elementos que no pueden guardarse en los registros, así siempre serán guardados en memoria. Lo que si puede almacenarse en los registros es la dirección del primer elemento del vector y a continuación será posible acceder al resto de elementos usando el modo de direccionamiento relativo a registro base.

4º) ¿Qué relación hay con el incremento de la dirección de cada elemento del array? y ¿qué instrucción permite acceder a cada byte de una palabra de memoria?
El incremento de la dirección de cada elemento del array se produce según múltiplos de 1, 2 o 4 para bytes, media palabra y palabras respectivamente.
Existe una instrucción similar a “lw” que permite acceder a cada byte de una palabra de memoria y es “lb”.

5º) ¿Cómo se realiza una llamada al sistema para que muestre resultados por pantalla?
En el caso de MIPs, habrá que indicar donde se encuentra el valor a imprimir, p.e. el elemento 0 de array_byte, sito en s0 tras ejecutar los códigos anteriores, y a continuación guardar en v0 el valor numérico asociado a la llamada deseada, 1 para la impresión de un entero por pantalla y añadiendo las siguientes líneas al código anterior, se visualizará el primer elemento del array_byte en pantalla:
move $a0,$s0        # Mueve el contenido del registro s0, primer elemento, al registro $a0
li $v0,0x00000001   # La llamada asociada con imprimir por pantalla un entero es la 1
syscall             # Efectúa la llamada


FAQ PRÁCTICA 2


1) ¿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/

2) Mi circuito no funciona… aparecen cables azules. ¿A qué se debe y como se puede solucionar? 

Esto es debido a que dichos cables que aparecen azules no están conectados correctamente a la entrada o salida de algún componente en concreto. Asegúrate de que dicho cable, cuando toca con el componente termina en un punto. Si esto no es así, coloca nuevamente el cable para que este quede correctamente conectado y cuando esto ocurra, este aparecerá en color verde y estará correctamente conectado. 

3) Tengo cables de color naranja y me aparece un mensaje de “Anchos incompatibles”. ¿Cómo puedo arreglar esto? 

Cada componente tiene varias opciones de configuración y entre ellas está el poder configurar el número de bits de la entrada o de la salida del componente. Si dos componentes que conectamos mediante un cable tienen distintos bits en sus respectivas entradas o salidas, este nos dará un error. Siempre deben coincidir estos valores. Para cambiarlos basta con seleccionar el componente y cambiar el atributo de “bits de datos” para que ambos coincidan. 

4) Ya tengo el circuito completo y sin errores. ¿Cómo puedo probar que todo funciona correctamente? 

Tendremos que ir introduciendo los valores a las entradas de datos del circuito y luego, según lo que queramos hacer, ir dirigiendo esos datos por los buses a los componentes, apagando y encendiendo los triestados. Muchos componentes pueden compartir cableado y no pueden estar enviando datos a la vez al circuito, por lo que tendremos que controlar los distintos triestados para que esto no ocurra. Además una vez que tenemos un dato en el bus, para cargarlo por ejemplo en un registro, deberemos activar la señal de “Load” del mismo, para que el dato se cargue. 

5) Mi circuito solo tiene una salida, pero tengo varias operaciones que implementar. ¿Cómo puedo hacer que todas las operaciones usen esa misma salida? 

La respuesta es con un “Multiplexor”. Con él podremos seleccionar qué operación está usando la única salida en cada momento. Recuerda configurar el multiplexor editando sus atributos para cambiar el número de opciones u operaciones posibles.

FAQ DE LA PRÁCTICA Nº3


1. ¿Dónde puedo encontrar las tablas de equivalencia de las diferentes instrucciones de MIPS?
Las tablas de equivalencia se pueden encontrar en los apuntes del Campus Virtual, y también en la red.

2. ¿En qué consiste la secuencia de transferencias y acciones?
Consiste en indicar mediante una tabla, lo que sucede dentro de la CPU por medio de las transferencias.
Para que cada operación se realice hace falta activar una serie de señales de control que quedan reflejadas en las tablas de la práctica.

3. ¿Por qué se producen errores cuando hay más de un triestado activado?
Cuando se abre un triestado, es como una puerta que deja pasar la información hacia el destino.
Si se abren varios triestados, llega información de varias fuentes mezcladas, por lo que se produce un error.

4. ¿Cómo saber las señales que debemos activar?
Para saber las señales que debemos activar es necesario tener muy claras las operaciones y direccionamientos que queremos realizar en la secuencia de transferencia de acciones e ir mirando el circuito de la práctica, identificando los registros a utilizar. Lo más fácil es guiarte por la imagen de la “Estructura de una CPU” (que es la que tiene los elementos azules de la práctica 3).

5. ¿Es necesario realizar el circuito de la CPU en Logisim?
No, ya que el circuito se deja adjuntado en el Campus Virtual, debido a que sería muy tedioso hacerlo.

6. ¿Para qué sirve la señal de “RESET” situada en la esquina inferior derecha del circuito de la CPU?
Como su propio nombre indica, el RESET permite reiniciar todo el circuito, para así poder realizar nuevos cambios. Por ejemplo, si tras guardar una dirección en el registro MBR y el resultado no es el esperado, o nos hemos equivocado al activar alguna señal, le damos al RESET (lo ponemos a “1”) y automáticamente se pone todo a 0.

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


FAQ DE LA PRÁCTICA Nº5

1. Veo muchos ejercicios y disponemos de poco tiempo para la práctica, ¿cómo puedo meterle mano? ¿Por dónde empiezo?
El desarrollo de la práctica no es más que, en resumen, ir conectando elementos conforme pasan los ejercicios sobre un circuito principal. Por tanto, empezando por el ejercicio primero, diseñaremos un conversor de paralelo-serie-paralelo, e iremos avanzando paso a paso.

2. Al estar montando el circuito, observo que mi cableado aparece de color azul y esto no va, ¿qué puedo hacer?
Lo que ocurre es que dichos cables no están correctamente conectados a cualquier entrada o salida, por lo que observa que los extremos de los cables estén perfectamente unidos a cualquier punto de conexión de cualquier componente. Tras esto, los cables aparecen en verde, que indica la conexión correcta.

3. Ahora los cables son naranjas, ¿qué pasa aquí?
El ancho de banda es incompatible, esto quiere decir que la tasa de información intercambiada entre componentes no es la más correcta. Esto se arregla modificando el apartado "bits de datos" al nº más adecuado a la situación. Cliq izquierdo en el componente para abrir dicha ventana.

4. Para realizar el cuarto circuito,
¿cómo programo la memoria para poder visualizar el gráfico?
Asegurémonos de que cada fila de la matriz de 8x8 tiene un registro que retiene los datos a mostrar, es decir actúa como búffer.

5. En el último circuito me hablan de dos imágenes y de duplicar la memoria, ¿cómo se hace eso?
Eso se hace conectando dos o más módulos en paralelo y utilizando la entrada "sel" que activa la memoria. Así, si queremos una memoria de 256K palabras, podemos usar una combinación de 2 memorias de 128K palabras en las que la entrada sería la misma para las dos. Pero la señal de selección desactivaría un módulo cuando el otro estuviese activado. Activando el primer módulo accedemos a la primera mitad y con el segundo módulo accedemos a la segunda mitad.