Simulación de un Procesador RISC (SRC)
INEL 4215: Arquitectura y Organización de Computadoras
20 de febrero de 2004
En el libro de texto del curso, “Computer Systems Design and Architecture” se describe la arquitectura de un procesador RISC sencillo (SRC por sus siglas en inglés). Este procesador se utiliza como ejemplo a través de todo el texto para describir características, funciones y aplicaciones de los procesadores.
Para comprender mejor el comportamiento de este procesador y varias de las consideraciones en su proceso de implementación, se requiere el diseño e implementación de un simulador para una versión simplificada del mismo. Los/as estudiantes del curso formarán grupos de trabajo, para desarrollar, cada grupo, su versión del simulador. La descripción del simulador se muestra a continuación:
La memoria a la que puede acceder el procesador tiene un máximo de 1 KB organizado en 1024 localizaciones de 1 byte cada una.
Internamente el procesador tiene 8 registros de propósito general de 8 bits cada uno. Los nombres de los registros van de r0 a r7.
En adición a estos registros el procesador posee un PC (program counter) de 10 bits y un IR (instruction register) de 24 bits. El formato del IR se muestra en la siguiente figura:
Op : Código de 5 bits que representa la acción (instrucción) que se ejecutará
ra: Tres bits que indican cuáles de los ocho
registros se utilizará como registro a
rb: Tres bits que indican cuáles de los ocho
registros se utilizará como registro b
rc: Tres bits que indican cuáles de los ocho
registros se utilizará como registro c
c: 10 bits que realizan la misma función que los campos c1, c2 y c3 del procesador
SRC mostrado en el texto
La descripción del set de instrucciones del procesador se muestra en las secciones 2.3 a 2.5 del texto y en el apéndice B del libro. Un resumen del set de instrucciones del procesador se muestra en la siguiente tabla.
En adición tenemos dos instrucciones adicionales: mult y xor. Ambas instrucciones siguen el formato de la instrucción add.
op |
nombre |
operandos |
operaciones |
Comentarios |
0 |
NOP |
|
Does nothing |
|
1 |
LD |
RA,RB,C |
If rb = 0 R[ra] = M[c] Else R[ra] =
M[c+R[rb]] |
|
2 |
LDR |
RA,C |
R[ra] = M[pc + c] |
|
3 |
ST |
RA,RB,C |
If rb = 0 M[c2] =
R[ra] Else M[c2+R[rb]] =
R[ra] |
|
4 |
STR |
RA,C |
M[pc+c] = R[ra] |
|
5 |
LA |
RA,RB,C |
If rb = 0 R[ra] = c Else R[ra] = c +
R[rb] |
|
6 |
LAR |
RA,C |
R[ra] = PC + c |
|
8 |
BR |
RB,RC,cond |
If cond is true PC = R[rb] |
Conditions 000 don’t jump 001 jump always 010 R[rc] = 0 011 R[rc] <> 0 100 R[rc] >= 0 101 R[rc] < 0 |
9 |
BRL |
RA,RB,RC,cond |
R[ra] = pc If cond is true PC = R[rb] |
Conditions are the same as above |
12 |
ADD |
RA,RB,RC |
R[ra] = R[rb] + R[rc] |
|
13 |
ADDI |
RA,RB,C |
R[ra] = R[rb] + c |
|
14 |
SUB |
RA,RB,RC |
R[ra] = R[rb] – R[rc] |
|
15 |
NEG |
RA,RC |
R[ra] = -R[rc] |
|
16 |
MULT |
RA,RB,RC |
R[ra] = R[rb] * R[rc] |
|
17 |
XOR |
RA,RB,RC |
R[ra] = R[rb] (xor) R[rc] |
|
20 |
AND |
RA,RB,RC |
R[ra] = R[rb] ^ R[rc] |
|
21 |
ANDI |
RA,RB,C |
R[ra] = R[rb] ^ c |
|
22 |
OR |
RA,RB,RC |
R[ra] = R[rb] v R[rc] |
|
23 |
ORI |
RA,RB,C |
R[ra] = R[rb] v c |
|
24 |
NOT |
RA,RC |
R[ra] = |
|
26 |
SHR |
RA,RB,RC,count |
If count = 0 R[ra] =
R[rb] shr R[rc] Else R[ra] =
R[rb] shr count |
Only 5 lsb of
RC are considered |
27 |
SHRA |
RA,RB,RC,count |
If count = 0 R[ra] =
R[rb] shra R[rc] Else R[ra] =
R[rb] shra count |
Only 5 lsb of
RC are considered |
28 |
SHL |
RA,RB,RC,count |
If count = 0 R[ra] =
R[rb] shl R[rc] Else R[ra] = R[rb]
shl count |
Only 5 lsb of
RC are considered |
29 |
SHC |
RA,RB,RC,count |
If count = 0 R[ra] =
R[rb] shc R[rc] Else R[ra] =
R[rb] shc count |
Only 5 lsb of
RC are considered |
31 |
STOP |
|
Stop flag is set |
|
Las operaciones aritméticas que realiza el procesador utilizan el formato de complemento de dos para representar números con signos. El formato se utiliza además para calcular las localizaciones de memorias cuando se hace acceso a la misma.
El procesador operará en un sistema con 512 localizaciones de memoria RAM que ocupará las localizaciones 0 a la 511. Cuando el sistema arranca el procesador comienza a ejecutar la instrucción que se encuentre en los primeros tres bytes de memoria.
El sistema también contará con varios dispositivos de I/O conectados al procesador utilizando las siguientes localizaciones de memoria:
512-513: 16 bits, teclado
514-515: 16 bits, entrada paralela
516-517: 16 bits, salida paralela
520 – 523: despliegue hexadecimal, cada byte se utiliza para representar un dígito.
La información proveniente del teclado se entrará por el teclado de la computadora en donde se corra la simulación. La entrada y la salida paralela se simulará utilizando archivos secuenciales y el despliegue hexadecimal se presentará en la pantalla de la computadora. La siguiente figura muestra un ejemplo de una posible configuración para la interfaz del programa.
Los grupos de trabajo deberán tener de dos a cuatro integrantes quienes re repartirán las tareas de la forma más equitativa posible, tomando en consideración las preferencias, destrezas y habilidades particulares de cada integrante.
El grupo debe presentar, como parte de su reporte, un documento en donde describa las responsabilidades y contribuciones de cada una las personas que integraron el grupo de trabajo.
El simulador debe implementar todas las instrucciones (en lenguaje de máquina) del procesador con sus respectivos modos de direccionamiento. El simulador correrá los programas que se encuentran en la memoria comenzando por la que se encuentre en la localización cero (PC = 0). El contenido de la memoria se podrá cargar de archivos almacenados en el disco duro o disquetes. El formato de los archivos será de una línea por cada instrucción/dato representada por seis dígitos hexadecimales.
Se muestra un ejemplo a continuación:
2B001E
2C0004
1B8204
627000
El simulador debe permitir que los programas se puedan ejecutar completos de principio a fin (run) o una instrucción a la vez (step). En adición, en todo momento se podrá ver el contenido de los registros (incluyendo el PC y el IR) y el estado de los dispositivos de I/O. El programa debe permitir que se pueda ver el contenido de cualquier sección de memoria. La dirección de memoria se debe indicar en hexadecimal.
Los programas pueden utilizar una interfaz gráfica o de tipo texto y se pueden implementar en cualquier lenguaje de programación.
Esta información se proveerá más adelante.
Esta información se proveerá más adelante.
Se ofrece un bono de 10puntos para aquellos grupos que implementen un desensamblador para el simulador. Esto es, que el programa, indique en lenguaje del ensamblador (no en lenguaje de máquina) o en formato de contenido de registros y memoria, el significado de la instrucción que se encuentra en el registro IR.
La fecha límite para entregar el trabajo con todas sus partes es el 12 de marzo de 2004 al comienzo de la clase.