Construcción de un Simulador de la Actividad Interna de un Microprocesador.

En este proyecto de fin de carrera se desarrollaron las siguientes tareas: - Se desarrolló una arquitectura de computadores tipo RISC, similar a MIPS - Se diseñó un microprocesador de microarquitectura moderna, construida sobre ideas de última generación como pipelining, y ejecución orientada a altas frecuencias de reloj - Se diseñó e implementó un simulador software capaz de ejecutar en varios modos de funcionamiento las instrucciones de la arquitecura, de una forma visual que permite comprobar cómo cambian los elementos internos del microprocesador mientras se ejecutan. En la memoria se detallan no solo los detalles de cada parte (arquitectura, microprocesador y simulador), sino también los procesos de desarrollo seguidos en cada fase del proyecto.

Extracto del documento

ESCUELA TÉCNICA SUPERIOR DE INGENIEROS
INDUSTRIALES Y DE TELECOMUNICACIÓN
Titulación :
INGENIERO TÉCNICO EN INFORMÁTICA DE GESTIÓN
Título del proyecto:
“CONSTRUCCIÓN DE UN SIMULADOR DE LAACTIVIDAD
INTERNA DE UN MICROPROCESADOR”
Alumno: Antonio Moreno Pérez
Tutor: Miguel de Achaerandio Alvira
Pamplona, Septiembre de 2005Agradecimientos
En primer lugar, este proyecto está dedicado a toda mi familia, por aguantarme
todos estos meses en la versión más desagradable de mí mismo, la de programador
desquiciado.
Quiero agradecer muy especialmente la inestimable ayuda de Javier Fermín Palacios,
por las innumerables horas que ha dedicado a probar cada aspecto, cada detalle, del
programa. Sin su generosa ayuda, hubiera sido muy difícil que Sim_IVY funcionara
correctamente en Windows.
También quiero agradecer la ayuda en el proceso de prueba de Javier Armendáriz y
Augusto Mauch.
Por último, quiero agradecer a Miguel de Achaerandio sus valiosos consejos, y toda
la ayuda que me prestó, proporcionándome bibliografía, y resolviendo todas mis dudas.
Las reuniones de horas y horas de duración y los correos electrónicos de varias páginas al
final sirvieron para algo...TABLA DE CONTENIDO
Capítulo 1: Introducción 1
Objetivos 4
Planificación y Desarrollo del Proyecto 5
Elección de las Herramientas Necesarias 8
Capítulo 2: Diseño de la Arquitectura 9
Principios generales 9
Progresión en el diseño 11
Limitaciones y características de la arquitectura 12
Registros de la arquitectura IVY 13
Tamaños de datos 15
Orden de los datos 16
La Pila 16
Instrucciones en la arquitectura IVY 17
Elección de los formatos de instrucción 21
Primera versión: cinco formatos de instrucción 21
Segunda versión: cuatro formatos de instrucción 23
Tercera versión: tres formatos de instrucción 23
Formatos definitivos de la arquitectura IVY 24
Conclusiones del diseño de la arquitectura 26
Capítulo 3: Diseño del Microprocesador 27
Breve introducción a la segmentación 28
La segmentación en el microprocesador IVY-1 30
Diseño exterior del microprocesador 32
Lógica de control y flujo de la ejecución 35
Modos de ejecución del micro 35
Breve descripción de los posibles problemas en la segmentación 37
Detección de fallos en la segmentación en el microprocesador IVY-1 38
Solución al problema de la compartición de recursos 38
Solución al problema de las dependencias de datos 39
Solución al problema de los saltos 43
Un problema singular: la sobreescritura de instrucciones 46Ejecución de instrucciones especiales 47
Conclusiones de la fase de diseño del microprocesador 48
Capítulo 4: Diseño del Programa Simulador 50
Progresión en el diseño y la implementación 51
Métodos y herramientas de desarrollo 52
Diseño general del programa 53
Clases de Interfaz 54
Clase VentanaInicio 54
Clase VisorMicroprocesador 55
Clase VisorControles 56
Clase EditorInstrucciones 57
Clases de Ejecución 58
Clase Microprocesador 58
Clase Instruccion 58
Clases de Datos 59
Clase Registro 59
Clase Signal 60
Clase Bus 61
Clase CSignal 61
Clase Posición 61
Clase Memoria 62
Almacenamiento de datos y operaciones aritméticas 62
Almacenamiento de los datos 62
Acceso a los datos 63
Operaciones aritméticas y lógicas 63
Suma 63
Resta 63
Multiplicación 63
División 64
Operaciones AND, OR, y NOT 65
Operaciones de desplazamiento y rotación 65
Acarreo y Overflow 66
Diseño del interfaz gráfico 67
La lógica de ejecución 70
Paralelismo en la ejecución de las etapas 71
Relaciones entre clases 74
Conclusiones del diseño del simulador 75Capítulo 5: La Arquitectura IVY 77
Banco de Registros en la arquitectura IVY 78
Registros conocidos por el programador 78
Registros no conocidos por el programador 79
Formato de la Palabra de Instrucción 79
Descodificación de las instrucciones. Asignación de opcodes. 80
Tamaños de datos 80
Orden de los datos 81
Juego de Instrucciones en la arquitectura IVY 81
Instrucciones de carga y de almacenamiento de datos en la memoria 82
Instrucción LOAD 82
Instrucción STORE 83
Instrucción LOADST 84
Instrucción STOREST 84
Instrucciones de movimiento de datos dentro del micro 85
Instrucción MOVE 85
Instrucción MOVEI 85
Instrucción MOVEIST 86
Instrucciones MOVEHI y MOVELO 86
Instrucciones Aritméticas 87
Instrucción ADD 87
Instrucción SUB 87
Instrucción ADDI 88
Instrucción SUBI 88
Instrucción MULU 89
Instrucción MULS 90
Instrucción DIVU 90
Instrucción DIVS 91
Instrucciones Lógicas 92
Instrucción AND 92
Instrucción OR 92
Instrucción NOT 93
Instrucción ANDI 93
Instrucción ORI 94
Instrucciones de desplazamiento y rotación 94
Instrucciones SHIFTL y SHIFTR 94
Instrucciones ROTL y ROTR 95
Instrucciones de Salto 96
Instrucciones JUMP y JSUB 96
Instrucciones JUMPR y JSUBR 96
Instrucciones JAC, JOV, JZ, JNEG, JSAC, JSOV, JSZ, y JSNEG 97
Instrucciones de Retorno 99
Instrucción RET 99
Instrucción RETE 99
Instrucciones de manejo de la pila 99
Instrucciones PUSH 99
Instrucciones POP 100
Instrucciones especiales 100
Instrucción NOP 100Capítulo 6: El Microprocesador IVY-1 101
Diseño exterior 102
Diseño general del pipeline 102
Primera etapa de ejecución 104
Segunda etapa de ejecución 105
Tercera etapa de ejecución 107
El registro de control ST2ControlST3 108
Selección del multiplexor del operando 1 108
Selección del multiplexor del operando 2 109
Selección del valor del registro de estado 110
La ALU 110
Ejecución final en la tercera etapa 112
Cuarta etapa de ejecución 112
El registro de control ST3ControlST4 114
Los registros RLO y RHI 114
Acceso a la memoria 114
Selección del multiplexor de direcciones 115
Selección del multiplexor de datos 115
El descodificador de la memoria 116
Final en la ejecución de la etapa 4 119
Quinta etapa de ejecución 120
El registro de control ST4ControlST5 120
Propósito de ciertas señales 121
Selección del multiplexor del valor resultado 121
Selección del multiplexor del registro de estado 122
Selección del multiplexor del registro de pila 122
Selección del multiplexor del contador de programa 123
Selección del multiplexor de la unidad de control 124
Bloque generador del registro de estado 125
Capítulo 7: Breve Manual del Programa Sim_IVY 126
Requisitos de funcionamiento del programa 127
Características principales del programa simulador 127
El interfaz de usuario 127
La ventana principal 129
El sistema de ayuda 130
Selección de registros y señales 130Representación de la ALU 130
Los colores 131
La ventana de controles 132
La pestaña de los registros de propósito general 132
La pestaña de los registros ocultos 133
La pestaña de las señales 134
La pestaña de Opciones 134
El visor de la memoria 135
El visor del pipeline 137
El botón de Insertar y la Ventana de Inserción de Instrucciones 138
El botón de Cargar Fichero 139
El botón de Ciclo Siguiente 140
El botón de Ciclo Anterior 140
Los menús de la aplicación 141
El menú Archivo 141
El menú Modo de Visualización 143
El menú Opciones Adicionales 143
Recomendaciones finales acerca de los modos de ejecución 144
Capítulo 8: Presupuesto 146
Capítulo 9: Líneas futuras 148
Líneas futuras en la arquitectura 148
Líneas futuras en el diseño del microprocesador 149
Líneas futuras en el diseño del programa 150
Bibliografía 151
Documentación para el diseño de la arquitectura y del microprocesador 151
Bibliografía de la parte de arquitectura de computadores 152
Documentación sobre la parte de programación 152
Bibliografía de la parte de programación 152

(...)

En realidad, las primeras semanas del proyecto efectivamente se dedicaron a
comparar diversas arquitecturas reales, y a diseñar la arquitectura IVY que se utilizaría
para el proyecto. Posteriormente, se inició el diseño del microprocesador. Es en esta fase
cuando se detectaron una serie de instrucciones que resultaban inútiles, o que
complicaban de forma muy importante el diseño del micro. Estas instrucciones fueron
eliminadas, dado que la claridad y la sencillez es uno de los objetivos fundamentales del
proyecto. Además, en esta fase, se detectaron problemas e incoherencias con los formatos
de instrucción elegidos, gracias en parte al proceso de desarrollo del micro, que fueron
corregidos.
Mientras se trabajaba en el diseño del microprocesador se empezó a trabajar
también en muchos de los componentes del programa, por razones de aprovechamiento
del tiempo, y porque por el modelo de desarrollo elegido era necesario realizar
periódicamente “prototipos” de las funcionalidades elegidas.
Simulador de la Actividad Interna de un Microprocesador
Este trabajo en paralelo fue útil en muchas situaciones. Por ejemplo, trabajando en
la implementación del programa se detectaron muchos problemas en el diseño del micro,
que hicieron necesario modificar varias partes del diseño. Como estos problemas fueron
detectados en fases no muy tardías, el coste del rediseño no fue muy alto.
Además, el desarrollo del programa desde etapas relativamente tempranas del
proyecto permitió discutir acerca de la facilidad de uso del interfaz gráfico y de las
funcionalidades del programa, desde fases tempranas. Este tipo de discusiones permiten
obtener mucha información extremadamente útil, que permite a su vez que el proyecto
sea mucho más sencillo de utilizar, y práctico para el usuario final.

(…)

Por supuesto, esta arquitectura no se ha diseñado totalmente de la nada. En su
diseño ha habido muchas influencias de arquitecturas reales. En particular, para su diseño
me he basado en dos arquitecturas RISC muy conocidas, MIPS y PowerPC, y en una
arquitectura CISC muy conocida, aunque ya algo anticuada, la del microprocesador
68000 de Motorola. Además, ha habido muchas influencias, no de una arquitectura en
concreto, sino de los principios generales que suelen tenerse en cuenta en todas las
arquitecturas RISC.
De MIPS, esta arquitectura hereda los formatos de instrucción (que son
prácticamente idénticos). Los saltos condicionales son similares a los del 68000, puesto
que utilizan el registro de estado para comprobar si la condición es verdadera, o no.
Durante el desarrollo del proyecto, se incluyeron varias instrucciones y algún formato de
instrucción muy similares a algunos de la arquitectura PowerPC, pero posteriormente
fueron desechados por diversas razones.
También hay varios aspectos de la arquitectura IVY que no aparecen en ninguna de
las tres arquitecturas anteriores, como muchos mnemónicos (por ejemplo PUSH y POP
para las instrucciones específicas de la pila), o el registro específico de pila.
Se decidió diseñar una arquitectura siguiendo muchos principios RISC debido
fundamentalmente a que el diseño de un microprocesador está fuertemente limitado por
la arquitectura, y siguiendo los principios marcados por las ideas RISC, el diseño de un
microprocesador segmentado puede realizarse de forma mucho más sencilla. En
particular, la regularidad en el tamaño de las instrucciones, la limitación a una operación
efectiva por instrucción, y la alineación en el acceso a la memoria simplifican
enormemente la división del proceso de ejecución de las instrucciones, y esto repercute
muy positivamente en el proceso de diseño del microprocesador.

(…)

El segundo objetivo del proyecto consistía en el diseño de un microprocesador, que
fuera capaz de ejecutar instrucciones diseñadas para la arquitectura propuesta. El diseño
debía ser lo suficientemente claro y sencillo como para que pudiera ser comprendido
fácilmente por personas no acostumbradas a analizar un diseño de este tipo, y a la vez lo
suficientemente potente como para cumplir las especificaciones iniciales.
La más importante de estas especificaciones es que el microprocesador debía ser
segmentado (debía ejecutar instrucciones en modo pipelining). Se decidió que el
microprocesador debía poseer esta característica por un motivo fundamental: la
segmentación es una característica presente en los microprocesadores modernos, y por
tanto muy conveniente en este proyecto, destinado a la docencia.

(…)

La tercera fase del proyecto consistió en diseñar e implementar un programa que
permitiese simular la ejecución de instrucciones por parte del microprocesador IVY-1,
previamente diseñado. Esta parte fue la más larga de todas, pero no resultó especialmente
compleja.
Simulador de la Actividad Interna de un Microprocesador
Básicamente, había que diseñar el interfaz gráfico del programa, de forma que fuera
fácil de utilizar. También había que implementar un subsistema gráfico, que permitiera
visualizar en pantalla todo el diseño del microprocesador, con los cambios que se iban
produciendo. Por último, había que implementar toda la lógica interna que permitiera
almacenar el estado y los datos del microprocesador, e implementar las funciones que
permitieran simular los distintos sucesos que transcurren en el interior del micro.

(…)

Existen dos botones, que permiten ejecutar el ciclo siguiente, o recuperar el estado
del microprocesador en el ciclo anterior. Además, existen otros dos botones que se
utilizan para insertar instrucciones en la memoria. El primero crea una instancia de la
ventana EditorInstrucciones, que permite insertar sobre la marcha en la memoria un
programa en lenguaje ensamblador para la arquitectura IVY. El segundo abre un cuadro
de diálogo que permite seleccionar un archivo de texto con instrucciones en ensamblador
de la arquitectura IVY, que a continuación es abierto, leído, traducido, e insertado en la
memoria del microprocesador actual.

(…)

La arquitectura IVY es una ISA (Instruction Set Architecture) diseñada siguiendo
algunos principios RISC, similar a otras arquitecturas como MIPS, que pretende resultar
lo más sencilla posible para una persona que no tenga experiencia previa con una
arquitectura de microprocesador.
Este capítulo presenta una descripción exhaustiva de todas sus características
(banco de registros, formatos de instrucción, conjunto de instrucciones). Además incluye
ejemplos de codificación de cada una de las instrucciones.
Este capítulo no describe ningún tipo de comportamiento propio del
microprocesador IVY-1, sino que se ciñe única y exclusivamente a la arquitectura. En
otras palabras, en este capítulo se describen los “resultados” de la ejecución de las
instrucciones, pero no se especifica “cómo se obtienen” dichos resultados, y también se
especifica qué registros deben obligatoriamente estar presentes en cualquier
implementación de la arquitectura, pero no especifica ningún tipo de requisito acerca de
registros “auxiliares”.

(…)

• Instrucciones JUMP y JSUB
Estas dos instrucciones modifican el registro contador de programa, añadiéndole un
desplazamiento, provocando así un salto no condicional en la ejecución. El valor sobre el
que se realiza el desplazamiento es la dirección de la instrucción siguiente al salto.
La instrucción JUMP realiza únicamente el salto, y la instrucción JSUB, además,
introduce la dirección siguiente a la actual en la pila, para poder recuperarla con una
instrucción RET, y así utilizarla como dirección de retorno.
El desplazamiento final debe ser múltiplo de cuatro (dado que las instrucciones siempre
deben empezar en una dirección múltiplo de cuatro), por lo que el microprocesador
realiza internamente un desplazamiento de dos bits hacia la izquierda (en definitiva, una
multiplicación por cuatro) del valor del desplazamiento incorporado en la instrucción.
El desplazamiento es un valor, representado en complemento a dos, que se multiplica por
cuatro, y se añade al valor de la dirección siguiente a la actual, para calcular la dirección de
salto.

(…)

Este capítulo presenta un análisis detallado del diseño del microprocesador IVY-1.
Se presenta, desde el diseño del pipeline, hasta los códigos internos que utilizan la ALU,
los multiplexores, los registros de etapa, etc...
Este capítulo no es necesario para comprender el funcionamiento general del
microprocesador a la hora de ejecutar instrucciones. Sin embargo, si se desea conocer
algún detalle específico del diseño (“¿qué significa el código 01 en el segundo
multiplexor?”), este capítulo incluye toda la información disponible al respecto.

(…)

Primera etapa de ejecución
En esta primera etapa se lee la palabra de la instrucción que se encuentra en la
dirección a la que apunta el registro contador de programa.
En esta etapa existen varios elementos diferentes. Lógicamente, está presente el
registro contador de programa, que necesitamos para saber la dirección a la cual
queremos acceder. También están dos registros que sirven de bufferes intermedios, el
registro de dirección y de datos, que almacenan el dato presente en los buses de
direcciones y de datos, respectivamente. Además, hay un pequeño sumador, que permite
sumar cuatro unidades al contador de programa. Este sumador permite calcular la
dirección siguiente a la que apunta actualmente el contador de programa.

(…)

Ejecución final en la tercera etapa
Hemos visto cómo funciona la ALU, qué entradas posee, y qué códigos utiliza. Una
vez ejecutada la operación, el resultado se deposita en un subregistro llamado
ST3ALUResul. El resultado obtenido en el multiplexor de selección del valor del registro
de estado se lleva al subregistro ST3RegEstado.
Estos dos son los valores principales obtenidos en esta etapa. Sin embargo, además,
se propagan otros valores que necesitamos para etapas posteriores. El valor de ST2PC,
ST2Op2, ST2OpInmediato, ST2Tamaño, ST2RegPila, y ST2RegResul, se llevan a ST3PC,
ST3Op2, ST3OpInmediato, ST3Tamaño, ST3RegPila, ST3RegResul, respectivamente.
Además, también se propaga el control necesario para las otras dos etapas, llevando
los registros ST2ControlST4 y ST2ControlST5 a ST3ControlST4 y ST3ControlST5.
Cuarta etapa de ejecución
Esta es la etapa de acceso a la memoria. En esta etapa, algunas instrucciones leen un
valor de la memoria caché de datos, y otras escriben.
La caché de datos está construida de tal forma que, por defecto, siempre se lee un
valor (igual que la memoria caché de instrucciones). Por tanto, aunque habrá muchas
instrucciones que no necesiten realmente acceder a la memoria para ser ejecutadas, en
todas y cada una de las instrucciones se produce un acceso (por defecto, una lectura).
Además, en esta etapa se puede leer o escribir en los registros especiales RLO y
RHI. Estos registros sirven para almacenar el resultado de ciertas operaciones
aritméticas. El acceso a ellos se produce en esta etapa, porque su valor puede modificarse
una vez finalizada la ejecución de la operación.

(…)

Este capítulo consiste en un breve manual de usuario del programa diseñado en este
proyecto. En general, consideramos que el uso del programa es relativamente sencillo e
intuitivo. Sin embargo, hay algunas funcionalidades que pueden permanecer más ocultas
al usuario al principio, y si esas funciones se mencionan en un manual de uso, pensamos
que los usuarios sabrán que existen desde el principio, y les será más fácil acostumbrarse
al programa
Simulador de la Actividad Interna de un Microprocesador
En este capítulo, primero se describen los requisitos de funcionamiento del
programa. Posteriormente, se presentan todas las funcionalidades del programa.
Finalmente, se van describiendo, una por una, con ejemplos de uso, e imágenes reales del
programa.

(…)

Es extremadamente difícil (y en algunos casos,
imposible) deducir cuál fue el estado anterior del
microprocesador a partir de un estado conocido. Por
consiguiente, este programa no elige esa aproximación
para resolver el problema. Por el contrario, lo que hace
es almacenar, en forma de ficheros temporales, el estado
del microprocesador cada vez que se inicia una
simulación de ciclo.
Cada vez que se pulsa el botón de Ciclo Anterior, lo
que hace el programa es simplemente recuperar, del
fichero temporal correspondiente, el estado que tenía el
micrprocesador en el ciclo anterior.
Los ficheros temporales generados se eliminan
automáticamente al cerrar el programa.
Los menús de la aplicación
El interfaz gráfico de la aplicación se diseñó con la
idea de que los menús son incómodos en muchas
situaciones, ya que las opciones no están disponibles a la
vista, y muchos usuarios pierden mucho tiempo
“navegando” por los menús en busca de la opción que
necesitan.

(…)

Está claro que el más avanzado de ellos es el modo pipelining con detección de fallos,
puesto que es el que más se acerca a cómo funcionan los microprocesadores actuales. Sin
embargo, precisamente por ser el más avanzado, no es el más recomendable para empezar
con personas que todavía desconocen la función de cada parte del micro.
A nivel inicial, el modo más recomendable para personas que se están iniciando en
el funcionamiento del IVY-1 es el modo multiciclo. Este modo permite ver, fase a fase,
ciclo a ciclo, cómo se ejecuta una instrucción. Precisamente por esto es el más adecuado
para explicar la función exacta de cada una de las etapas del pipeline, de cada uno de los
multiplexores, etc.
Una vez explicado con este método la función de cada una de las partes del micro,
puede pasarse a usar el modo pipelining sin detección de fallos. Este modo permite
introducir el modo de ejecución con pipelining, y al mismo tiempo, descubrir los
problemas que se producen si se trata de ejecutar cualquier combinación de instrucciones
(dependencias, saltos, ...). Cuando se han explicado a grandes rasgos los fallos que se
producen, puede pasarse, finalmente, al modo de ejecución con pipelining con
detección de fallos, y mostrar posibles soluciones para estos fallos.
Este es el orden que recomendamos seguir. Así, se explica inicialmente las partes del
micro, luego se pasa a explicar inicialmente el modo con pipelining, y finalmente se
terminan de explicar los fallos y las soluciones a este modo avanzado de ejecución.

(…)

Para el cálculo del presupuesto total que requeriría este proyecto, se han tenido en
cuenta las siguientes cuestiones:
• El proyecto ha sido realizado por un solo programador, trabajando en un solo
puesto de trabajo, con un solo equipo.
• Se ha utilizado un equipo informático principal, en el cual se ha realizado todo el
trabajo de diseño, programación, y documentación.
Por tanto, para averiguar el presupuesto total del proyecto, hay que contabilizar el
sueldo del programador y el coste del equipo utilizado.

(…)

Aunque este proyecto es totalmente funcional, y cumple los objetivos marcados
inicialmente, existen varias posibilidades de desarrollo futuro. Estas posibles extensiones
podrían darse tanto en el área de la arquitectura, como en el diseño del microprocesador,
como incluso en el programa simulador. A continuación, vamos a describir brevemente
algunas líneas que podrían seguirse para continuar el desarrollo del proyecto.
Líneas futuras en la arquitectura
La arquitectura IVY está diseñada siguiendo varios principios RISC, por lo que
pensamos que puede considerarse razonablemente moderna. Sin embargo, es cierto que
podría extenderse, si nuestro objetivo es lograr mayor potencia, de varias formas distintas

(…)

Para la realización de este proyecto, se han utilizado varios libros y abundante
documentación disponible en la web. Voy a distribuir la bibliografía utilizada por áreas de
conocimiento.
Documentación para el diseño de la arquitectura y del microprocesador
Para el diseño de la arquitectura, primero se utilizaron dos libros, “Fundamentos de
los Computadores”, de Pedro de Miguel, y “Computer Organization & Design”, de
William Stallings Estos dos libros sirvieron para asentar las bases, y para decidir algunos
principios fundamentales.
Además, se consultó documentación sobre dos arquitecturas RISC bastante
conocidas, MIPS y PowerPC. La documentación sobre PowerPC la proporciona
fundamentalmente IBM, principal impulsora de la arquitectura. La documentación sobre
MIPS puede encontrarse en muchas webs de universidades estadounidenses.
Simulador de la Actividad Interna de un Microprocesador Antonio Moreno Pérez 151ara el diseño del microprocesador, se usó fundamentalmente el libro “Computer
Organization & Design”, de Patterson y Hennessy.
Bibliografía de la parte de arquitectura de computadores
David A. Patterson y John L.Hennessy. “Computer Organization & Design - The Hardware/Software Interface”.
Morgan Kaufmann Publishers, Inc. San Francisco, California. 1998.
William Stallings. “Computer Organization & Design - Designing for Performance”. Prentice Hall. Pearson Education,
Inc. Upper Saddle River, New Jersey. 2003.
Pedro de Miguel Anasagasti. “Fundamentos de los Computadores”. Thomson Editores Spain. Madrid. 2004.
Brett Olson y Anthony Marsala. “A developer’s guide to the POWER architecture”. IBM. 2004
http://www-128.ibm.com/developerworks/linux/library/l-powarch/
Charles Price. “MIPS IV Instruction Set”. Mips Technologies Inc. 1995
http://techpubs.sgi.com/library/manuals/2000/007-2597-001/pdf/007-2597-001.pdf
Documentación sobre la parte de programación
En el proyecto no sólo se diseñó una arquitectura, sino también un programa
simulador. El programa simulador se construyó utilizando el entorno de desarrollo Java,
de Sun, y se utilizó de forma exhaustiva la documentación que incluye Sun en su propia
página web.
Además, se utilizaron varios tutoriales que proporciona Sun para el diseño de
interfaces de usuario, y el manejo de gráficos en dos dimensiones.
Bibliografía de la parte de programación
Java 2 Platform, Standard Edition, v 1.4.2 API Specification. Sun Microsystems.
http://java.sun.com/j2se/1.4.2/docs/api/
The Java Tutorial. Sun Microsystems. Using Text Components.
http://java.sun.com/docs/books/tutorial/uiswing/components/text.html
The Java Tutorial. Sun Microsystems. Trail: 2D Graphics.
http://java.sun.com/docs/books/tutorial/2d/
The Java Tutorial. Sun Microsystems. How to Make Frames
http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
The Java Tutorial. Sun Microsystems. How to Use Buttons, Check Boxes, and Radio Buttons
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html