Está en la página 1de 6

Modelo VHDL del RSCPU+

Omar X. Avelar & Omar de la Mora


ARQUITECTURA DE COMPUTADORAS (ESI 031B)
Instituto Tecnolgico y de Estudios Superiores de Occidente (ITESO) Departamento de Electrnica, Sistemas e Informtica (DESI)

1. OBJETIVO
Extender la arquitectura del conjunto de instrucciones del procesador RSCPU agregando cuatro nuevas instrucciones para permitir el uso de un registro apuntador para direccionar la memoria. Agregar tambin a la arquitectura los elementos que se requieran para el soporte de estas instrucciones. Usar un simulador Lgico (Modelsim) para verificar la implementacin correcta. La prctica debe realizarse en equipos de 2 personas.

3. PRUEBAS A EFECTUAR
Calcular la serie de Fibonacci en el RSCPU. Desarrollar el programa en lenguaje ensamblador del RSCPU utilizando las cuatro instrucciones que se agregaron al CPU para proveer acceso a la memoria de datos. Los nmeros, o serie de Fibonacci, estn definidos por la siguiente recurrencia:

F o =0 F 1=1 F i =F i1 F i 2
, para

i2

2. ENUNCIADO
Modifica la Descripcin VHDL del RSCPU de tal forma que incluya la posibilidad de direccionar la memoria por medio de un registro apuntador denominado el Registro ndice IX. Los cambios requeridos para lograr esto son los siguientes: Agregar el registro apuntador IX (Registro Indice) de 16 bits. Este registro se podr utilizar para direccionar la memoria y hacer transferencias entre la memoria y el acumulador utilizndolo como registro apuntador. El CPU debe realizar las instrucciones LDIX [value], INIX, LDAI y STAI descritas en la tabla. La instruccin LDIX [value] carga el registro IX con un valor inicial de 16 bits definido en los bytes 2 y 3 de la instruccin. La instruccin INIX incrementa el valor de IX. La instruccin LDAI carga el Acumulador con el contenido de la localidad de memoria direccionada por IX. La instruccin STAI almacena el contenido del acumulador en la localidad de memoria direccionada por IX.

Por lo tanto, cada nmero de Fibonacci es la suma de los dos anteriores, generando la secuencia 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,

Los nmeros Fibonacci que ir calculando tu programa deben ser almacenados en la memoria a partir de una direccin inicial, llamemos a esa direccin A. De esta forma, el nmero 0 se almacenar en la localidad de memoria A, el primer 1 en la A+1, el segundo 1 en la A+2, el 2 en la A+3, y as sucesivamente hasta el nmero de Fibonacci mayor que quepa en 8 bits. Para ir moviendo el valor de la localidad de memoria en la que se van almacenando los nmeros de Fibonacci se utiliza el nuevo registro ndice IX, de tal forma que IX es inicializado con el valor de la direccin. para desplazarse a partir de esta direccin se incrementa el valor de IX.

Cabe sealar que las micro-operaciones separadas por puntos y comas ocurren secuencialmente y las micro-operaciones separadas por comas ocurren simultneamente.
Micro-operaciones que describen la instruccin despus de la obtencin del cdigo de operacin DR <-M[AR]; AR<-AR+1; IX[7..0]<-DR, DR<-M[AR]; IX[15..8]<-DR IX<-IX+1 AR<-IX; DR<-M[AR]; ACC<-DR AR<-IX, DR<-ACC; M[AR]<-DR

4. SUGERENCIAS
Antes de desarrollar tu programa en ensamblador, desarrolla tu programa en pseudo cdigo o en algn lenguaje de alto nivel para que ests seguro de haber entendido la secuencia. Ya que hayas comprendido el funcionamiento de la secuencia, utiliza una localidad de memoria para almacenar el valor de la variable i y utiliza otras localidades de memoria para ir guardando los valores de la serie de Fibonacci. Como hasta este instante este CPU es de 8 bits, el maximo nmero que puede calcularse debe ser menor a 256, as que calcula la serie de Fibonacci hasta el mximo nmero de 8 bits.

Instruccin

Cdigo de instruccin 10000100 Value Low Value High 10000101 10000110 10000111

LDIX [value] INIX LDAI STAI

DICIEMBRE 2009

ITESO

Modelo VHDL del RSCPU+


Por: Omar X. Avelar & Omar de la Mora

5. PLANTEAMIENTO
Siendo la siguiente figura un diagrama de la versin sencilla (Fig. 1)

IXOUT es una seal de control que se usa para mandar el dato de IX al AR, ya que el IX solo tiene comunicacin de lectura con AR de acuerdo a nuestra tabla de nuevas instrucciones. Micro-operaciones que describen la instruccin despus de la obtencin del cdigo de operacin DR <-M[AR]; AR<-AR+1; IX[7..0]<-DR, DR<-M[AR]; IX[15..8]<-DR IX<-IX+1 AR<-IX; DR<-M[AR]; ACC<-DR AR<-IX, DR<-ACC; M[AR]<-DR

Instruccin

Cdigo de instruccin 10000100 Value Low Value High 10000101 10000110 10000111

LDIX [value] INIX LDAI STAI

Otra consideracin previa al agregar estas instrucciones es que en LDIX al igual que LDAC carga una direccin de 16 Bits por lo que este se hace en dos tiempos haciendo uso del registro temporal TR para de ah sacarlo al bus de direcciones teniendo que en el tiempo LDIX3: Address Bus = TR (Direccin baja) + DR (direccin alta) En cuanto a las seales que se necesitan para cada micro-operacin. LDIX ---------------------------------------------------------------------------------------------------LDIX1: READ, DRLOAD LDIX2: ARINC* LDIX3:
Fig. 1: Sin instrucciones extras.

DRLOAD, READ, TRLOAD LDIX4: DRBUS, IXLOAD ---------------------------------------------------------------------------------------------------INIX ---------------------------------------------------------------------------------------------------INIX1: IXINC* ---------------------------------------------------------------------------------------------------LDAI ---------------------------------------------------------------------------------------------------LDAI1: ARLOAD, IXOUT LDAI2: READ, DRLOAD, MEMBUS LDAI3: ACLOAD, DRBUS ---------------------------------------------------------------------------------------------------STAI ---------------------------------------------------------------------------------------------------STAI1: ARLOAD, IXOUT, DRLOAD, ACBUS STAI2: DRBUS, WRITE, MEMBUS ----------------------------------------------------------------------------------------------------

Entonces para poder agregar el registro IX se hace lo siguiente (Fig. 2).

* Nota: Las seales de control marcados no vienen incluidas en la descripcin VHDL por lo que estas no sern tomadas en cuenta al aadirle nuestras instrucciones. Fig. 2: Diagrama modificado. Estas seales de control son activadas de manera didctica para entender el funcionamiento del RCSPU, sin embargo no influyen meramente en algunos procesos.

DICIEMBRE 2009

ITESO

Modelo VHDL del RSCPU+


Por: Omar X. Avelar & Omar de la Mora

6. MODIFICACIN EN LA DESCRIPCIN VHDL


Debemos comprender que hay cinco secciones clave a editar. (1) Arquitectura. (2) Registros. (3) Seales de control. (4) Maquina de estados (FSM) : Fase de decodificacin. (5) - Maquina de estados (FSM) : Fase de ejecucin. (6) Micro-operaciones y seales de control. (5)

(1)

(2)

(3)

(6)

(4)

DICIEMBRE 2009

ITESO

Modelo VHDL del RSCPU+


Por: Omar X. Avelar & Omar de la Mora

DICIEMBRE 2009

ITESO

Modelo VHDL del RSCPU+


Por: Omar X. Avelar & Omar de la Mora

7. SERIE DE FIBONACCI
----------------------------------------------------------------------------------------------------------------; ; ; ; ; ; ; Assembly program that calculates the Fibonacci numbers that fit on an unsigned 8 bit variable. Runs on a modified VHDL description of the RSCPU. Omar X. Avelar & Omar de la Mora Dec. 7th, 2009.

; Main loop INICIO: ORG LDIX LDAI INIX STAC LDAC MVAC LDAI STAC ADD INIX STAI MVAC LDAC XOR JPNZ JMP 0H 0020H 030H 030H 030H ; A_[n] + A_[n+1] ; A_[n+2] = A_[n] + A_[n+1] 031H LOOP STALL 0020H 0 ; First two values of 1 ; the Fibonacci sequence ; Compares for last number ; Loads first table index ; 1st val to temp. register ; To register

LOOP:

STALL:

; Fibonacci Table ORG A0: DB A1: DB A2: A3: A4: A5: A6: A7: A8: A9: A10: A11: A12: A13: ; Temporary backup data ORG temp: DB cmpv: DB

030H 0 E9H

; 233 ; (Last Finonacci ; 8-bit Number)

-----------------------------------------------------------------------------------------------------------------

DICIEMBRE 2009

ITESO
8. SIMULACIN
Con la ayuda de ModelSim de MentorGraphics pudimos simular nuestra descripcin modificada en VHDL para corroborar que el programa efecta lo pedido. Comenzando con el diagrama a tiempos de las seales de control.

Modelo VHDL del RSCPU+


Por: Omar X. Avelar & Omar de la Mora

Ya una vez incrementado el apuntador IX entonces se guarda este valor de la suma (Fig. 7).

Fig. 3: LDIX.

Fig. 7: Guardando en la tabla.

El primer LDIX (Fig. 3) nos carga el valor de IX con 0x20, este es la direccin inicial de nuestra tabla para generar la secuencia de Fibonacci.

De esta manera se va generando nuestra serie de Fibonacci con un lazo de control el cual har una XOR con el ltimo valor que cabe en 8 Bits (siendo este 233) y detectar el encendido de la bandera Z.

Fig. 4: Primer valor de la serie.

Fig. 8: El ultimo valor de Fibonacci calculado y guardado.

Donde despus se encuentra que nos carga el primer valor de la serie para iniciar con 0 (Fig. 4).

A continuacin de muestra la corrida general del programa con los resultados de la tabla localizada en memoria (Fig. 9) a partir de la direccin 0x20 (30 en decimal).

Fig. 5: Incrementando el apuntador IX.

Ya una vez incrementado el apuntador IX con la instruccin INIX, se prosigue a efectuar la suma (Fig. 6) despus de guardar este valor en la nueva direccin de la tabla y as ir construyendo nuestra tabla con la secuencia de Fibonacci.

Fig. 9: Tabla con la serie de Fibonacci.

Fig. 6: La primer suma, la cual es 0+1.

DICIEMBRE 2009

También podría gustarte