s1e01

Upload: mario-escobar

Post on 14-Jan-2016

220 views

Category:

Documents


0 download

DESCRIPTION

microprocesador risk

TRANSCRIPT

  • MICROPROCESADOR RISC SINTETIZABLE EN FPGA PARA FINES DOCENTES

    J.D. MUOZ1, S. ALEXANDRES1 Y C. RODRGUEZ-MORCILLO21Departamento de Electrnica y Automtica. Escuela Tcnica Superior de Ingeniera ICAI. Universidad

    Pontificia Comillas. Espaa.2Instituto de Investigacin Tecnolgica. Escuela Tcnica Superior de Ingeniera ICAI. Universidad

    Pontificia Comillas. Espaa.

    En esta comunicacin se presenta una arquitectura RISC de 16 bits lo suficientemente simple como para poder ser abordada en un curso introductorio de diseo de sistemas digitales, pero lo suficientemente compleja como para poder desarrollar aplicaciones reales con ella. Adems es posible implantar esta arquitectura usando una FPGA de bajo coste, como por ejemplo una Flex 10k30 de Altera, lo que facilita su uso en el laboratorio por el alumno.

    1. IntroduccinEs frecuente encontrar en la literatura arquitecturas diseadas con fines docentes que se han

    simplificado tanto que estn muy lejos de los diseos actuales. Incluso existen an diseos basados en acumulador, cuando este tipo de CPUs hace aos que estn en desuso. Por otro lado, las arquitecturas actuales de 32 bits como IA-32, PowerPC o MIPS son demasiado complejas para ser implantadas en un tiempo razonable en un laboratorio. Adems, es deseable que una arquitectura de este tipo no requiera una FPGA con muchos recursos, dado el limitado presupuesto con el que suelen contar las universidades.

    Por todo ello, en esta comunicacin se presenta una arquitectura simple de 16 bits, pero muy similar al MIPS, por lo que se consigue por un lado el objetivo de tener una arquitectura que necesita pocos recursos hardware para implantarse en una FPGA de bajo coste, pero sin que est alejada de las arquitecturas reales usadas por la industria en la actualidad.

    La arquitectura aqu presentada est basada en el Ridiculously Simple Computer [1] desarrollado por el profesor Bruce Jacob. No obstante, esta arquitectura, denominada RiSC-16, aunque similar al MIPS [2], difiere un poco en su estructura, lo que incluso dificulta un poco la implantacin del camino de datos. La aproximacin llevada a cabo en este trabajo ha consistido en redisear el juego de instrucciones del MIPS para usar palabras de 16 bits, al igual que en RiSC-16, pero manteniendo la misma estructura usada por el MIPS. Esto permite usar el mismo camino de datos expuesto en [2] sin ms que cambiar los anchos de los buses, por lo que el alumno en realidad est aprendiendo a usar una arquitectura real expuesta en uno de los libros de texto clsicos de la materia.

    2. La arquitectura ICAI-RiSC-16En esta seccin se presenta la arquitectura diseada. Tal como se ha expuesto en la

    introduccin, esta arquitectura es una versin de 16 bits del MIPS, con algunos cambios orientados a facilitar su integracin en lgica programable. Sus caractersticas son:

    Arquitectura Harvard. Para facilitar el diseo, el programa se almacena en una memoria interna de la FPGA configurada como ROM y los datos en otra memoria RAM interna.

    Bus de datos de 16 bits. Buses de direcciones de 16 bits. El acceso a memoria se realiza siempre en palabras de 16 bits, por lo que las direcciones

    representan direcciones de palabra, no de byte. 8 registros de datos. Al igual que todos los procesadores RISC, el registro 0 es la constante 0, por lo que cualquier

    escritura en este registro se pierde y cualquier lectura devuelve un cero. Instrucciones de tres direcciones: dos operandos y un destino.

  • Todas las operaciones aritmticas se realizan entre registros (mquina load/store).

    2.1. Instrucciones y formatosLa arquitectura dispone tan solo de tres formatos de instruccin, los cuales se detallan en la

    Figura 1. El primer formato, RRR (Registro, Registro, Registro), se usa para codificar las instrucciones aritmticas. En todas ellas el cdigo de operacin (codop) vale cero y la operacin aritmtica a realizar se codifica en el campo cod_func. Todas estas instrucciones usan dos registros como operandos, especificados en los campos rs y rt, y un registro destino, especificado en el campo rd; a excepcin de las instrucciones de desplazamiento, que slo usan el registro rs como fuente y el registro rd como destino (el campo rt se deja a 0 en este caso). Todas estas instrucciones, as como su codificacin, se muestran en la Tabla 1. Conviene destacar que se podran implantar menos instrucciones aritmticas. En teora bastara con la instruccin NAND y la suma para poder realizar cualquier operacin aritmtica, tal como se expone en [1]. No obstante se complica demasiado la programacin, por lo que para hacer la arquitectura ms real se ha optado por incluir algunas instrucciones adicionales para facilitar la programacin del microprocesador.

    Adems de estas instrucciones aritmticas, que trabajan slo con registros, existe una instruccin adicional que permite sumar una constante a un registro y almacenar el resultado en otro registro. Dicha instruccin, denominada addi, se muestra en la Tabla 2. Como se puede apreciar, el formato usado para codificar esta instruccin es el RRI (Registro, Registro, Inmediato).

    Si se usa el registro cero (constante cero) como operando (rs), la instruccin addi tambin sirve para cargar una constante en un registro, solo que dicha constante est limitada a 7 bits (-64 a

    63). Si se desea cargar una constante mayor, ha de hacerse en dos pasos: en primer lugar se cargan los 10 bits ms significativos de la constante y a continuacin se usa la instruccin addi para sumar los 6 bits menos significativos de la constante. Para cargar los bits ms significativos existe la instruccin

    Ensamblador Formato Descripcinadd rd, rs, rt 0 rs rt rd 0 rd

  • lui (Load Upper Immediate), la cual se describe en la Tabla 3. Para codificar esta instruccin se usa el formato RI (Registro, Inmediato).

    Como se ha mencionado antes, la arquitectura ICAI-RiSC-16 es una arquitectura load-store. Esto significa que todas las operaciones aritmticas se realizan sobre registros y que los nicos accesos a memoria se realizan mediante dos instrucciones, una para cargar un dato en un registro, denominada lw, y otra para guardar un registro en la memoria, denominada sw. En ambas instrucciones se usa un direccionamiento relativo a registro base, es decir, la direccin se calcula sumando un desplazamiento, especificado en el campo inmediato de la instruccin, a un registro que contiene la direccin base. Esto permite acceder fcilmente a vectores y a estructuras de datos. La codificacin de ambas instrucciones se muestra en la Tabla 4, donde se puede apreciar que ambas instrucciones usan el formato RRI.

    La arquitectura ICAI-RiSC-16 slo dispone de una instruccin de salto condicional denominada beq (Branch on EQual). Esta instruccin compara dos registros y salta si ambos son iguales. La direccin de salto se calcula como PC + 1 + Inm, en donde PC es la direccin en la que est situada la instruccin beq. Obviamente el ensamblador se encarga de calcular el desplazamiento correcto a partir de la etiqueta de salto especificada en la instruccin. Ntese tambin que esta instruccin puede ser usada para realizar un salto incondicional comparando un registro con l mismo. La codificacin de la instruccin se muestra en la Tabla 5.

    Los saltos a subrutina se realizan mediante la instruccin jalr (Jump And Link Register). Esta instruccin salta a la direccin almacenada en el registro rs y almacena la direccin de retorno (PC+1) en el registro rt. La codificacin de la instruccin se muestra en la Tabla 5. Otra utilidad de esta instruccin es la de poder realizar un salto absoluto a cualquier parte de la memoria, cargando previamente la direccin de destino del salto en un registro y usando el registro r0 para descartar la direccin de retorno.2.2. Convencin sobre el uso de registros

    Ensamblador Formato Descripcinaddi rt, rs, Inm 1 rs rt Inmediato (-64 a 63) rt

  • Aunque desde el punto de vista del hardware todos los registros son iguales (salvo el cero), es conveniente adoptar una convencin sobre su uso para que las funciones sean interoperables. En la Tabla 6 se muestra la convencin adoptada. Como se puede apreciar, siguiendo la filosofa RISC, no existe un registro especial para el puntero al tope de la pila, sino que se reserva el registro r7 para ello. Adems la instruccin de salto a subrutina no guarda la direccin de retorno en la pila, sino en un registro. Esto tiene dos ventajas: por un lado se simplifica el hardware, pues la misma instruccin jalr puede ser usada para saltar a subrutina y para retornar de ella (saltando al registro r6 y usando el registro r0 para descartar la direccin de retorno). Por otro lado, si una funcin no llama a otra funcin, se ahorra tiempo al no ser necesario acceder a memoria, tanto al llamar a la funcin como al retornar. Por ltimo, como se ha dicho en el apartado 2, slo hay dos instrucciones para acceder a memoria (mquina load/store), por lo que si jalr accediese a memoria se estara violando este principio (adems de complicar el hardware).

    3. Organizacin del ICAI-RiSC-16La arquitectura presentada en la seccin anterior admite varias organizaciones, desde una

    sencilla organizacin uniciclo, la cual tiene como ventaja principal la sencillez de su unidad de control; hasta una organizacin con pipeline. No obstante, en este trabajo se usa una organizacin tradicional multiciclo, la cual se considera que es la ms apropiada para ser desarrollada por un alumno en el laboratorio de un curso introductorio. El alumno parte de una ruta de datos y una mquina de estados de control que se exponen en clase y su labor es implantarla en una FPGA. En esta seccin se presenta brevemente la ruta de datos y el circuito de control usado.

    3.1 Ruta de datosEn la Figura 2 se muestra la ruta de datos usada para implantar la arquitectura. Como se puede

    observar, los elementos de la ruta de datos son:

    Figura 2: Diagrama de bloques de la ruta de datos del ICAI-RiSC-16

    Registro Usor0 Constante ceror1 Devolucin de resultados / registro temporalr2 Argumento 1r3 Argumento 2r4 Temporalr5 Variablesr6 Direccin de retornor7 Puntero de Pila

    Tabla 6. Convencin sobre el uso de registros

  • Un registro (PC) para almacenar el contador de programa. Una memoria ROM para almacenar el programa. Un registro (IR) para almacenar la instruccin. Un banco de 8 registros de propsito general. Una ALU de 16 bits. Un registro para almacenar temporalmente el resultado de la ALU. Una memoria RAM para almacenar los datos del programa. Una serie de multiplexores para encaminar la informacin entre los distintos elementos del

    camino de datos en funcin de la instruccin que se est ejecutando en cada momento.

    Ntese que todos los registros de la ruta de datos se sincronizan con el flanco de subida del reloj.

    3.2 Etapas de ejecucin de las instruccionesLa ejecucin de una instruccin se divide en una serie de etapas, cada una con una duracin de

    un ciclo de reloj. Aunque no todas las instrucciones se ejecutan de la misma forma, todas ellas son bastante similares. Para empezar, las dos primeras etapas son idnticas para todas las instrucciones. El resto de etapas son distintas, aunque como se ver a continuacin, son bastante similares. En primer lugar se estudian las dos etapas comunes a todas las instrucciones y a continuacin, se expondrn las siguientes etapas para cada una de las instrucciones.

    Para cada una de las etapas se muestra una figura con las unidades activas en la etapa. Para representar el estado de las seales en el diagrama se ha usado un cdigo de colores. As, las seales en color negro estn inactivas, las seales de color verde estn "transportando" datos y las seales en color rojo son seales de control que estn activas en esta etapa. Si la seal de control es de un solo bit, el color rojo indica que est activa (y el negro que est inactiva). Si por el contrario la seal de control es de varios bits, entre parntesis se indica su valor.

    3.3 Etapa 1: Carga de la instruccinEn esta etapa, mostrada en la Figura 3, se carga de memoria ROM la instruccin a la que apunta

    el PC y se almacena en el registro IR, pues se necesita para el resto de etapas. Adems se usa la ALU para incrementar el PC en 1 y as apuntar a la siguiente instruccin.

    3.4 Etapa 2: Decodificacin y clculo de la direccin de saltoEn esta etapa, mostrada en la Figura 4, mientras la unidad de control decodifica la instruccin,

    se usa la ALU para calcular la direccin de destino del salto, pues los datos necesarios para ello ya estn disponibles. Esto permite ahorrar un ciclo en el caso de que la instruccin sea efectivamente un salto condicional. Si al decodificar la instruccin, sta es de otro tipo, simplemente se descarta el valor calculado por la ALU.

    Las siguientes etapas dependen del tipo de instruccin decodificada en esta etapa.

    Figura 3. Etapa 1: carga de la instruccin

  • 3.5 Etapa 3 de beq: salto condicionalLa tercera etapa de la instruccin beq, mostrada en la Figura 5, se comparan los dos registros

    especificados en la instruccin y si estos son iguales se cargar en el PC la direccin de destino del salto, que se almacen en la etapa anterior en el registro ALUOut. En la figura se muestran en color azul las seales que dependen de la comparacin de los dos registros. Esta instruccin finaliza en esta etapa.

    3.6 Etapa 3 de las instrucciones aritmticasEn la tercera etapa de las instrucciones aritmticas, se realiza en la ALU la operacin

    especificada en la instruccin mediante el campo cod_func. Para ello la ALU ha de haberse diseado de acuerdo con la codificacin del campo cod_func, mostrado en la Tabla 1. El funcionamiento de la etapa se ilustra en la Figura 6.

    Figura 4. Etapa 2: decodificacin y clculo de la direccin de salto

    Figura 5. Etapa 3 de beq: salto condicional

    Figura 6. Etapa 3 de las instrucciones aritmticas

  • 3.7 Etapa 4 de las instrucciones aritmticasEn esta ltima etapa, el resultado de la operacin de la ALU calculado en la etapa anterior y

    almacenado en el registro temporal ALUOut, se guarda en el banco de registros. La Figura 7 ilustra el funcionamiento de la etapa.

    3.8 Etapa 3 de las instrucciones de carga y almacenamientoEn la tercera etapa, estas instrucciones calculan la direccin de memoria del dato a leer o a

    escribir en memoria. Para ello se suma el contenido del registro base, especificado en el campo rs al campo inmediato de la instruccin con el signo extendido. Las unidades del camino de datos activas en esta etapa se muestran en la Figura 8.

    3.9 Etapa 4 de la instruccin de cargaEn esta etapa se carga de memoria la palabra almacenada en la direccin calculada en la etapa

    anterior, la cual est almacenada en el registro temporal ALUOut. El dato ledo de memoria se almacena en el registro indicado en el campo rt, tal como se ilustra en la Figura 9.

    Figura 7. Etapa 4 de las instrucciones aritmticas

    Figura 8. Etapa 3 de las instrucciones lw/sw

    Figura 9. Etapa 4 de la instruccin lw

  • 3.10 Etapa 4 de la instruccin de almacenamientoEn esta etapa. Mostrada en la Figura 10, se guarda el contenido del registro indicado en el

    campo rt en la posicin de memoria cuya direccin se ha calculado en la etapa 3 y que est almacenada en el registro ALUOut.

    3.11 Resto de instruccionesPor motivos de espacio, no se ha incluido en la comunicacin el funcionamiento del resto de

    instrucciones, addi, lui y jalr, aunque es fcil deducirlo a partir de las instrucciones bsicas expuestas. Tampoco se especifican estas instrucciones en la documentacin de prcticas aportada al alumno, dejndolas como ejercicio para que profundice en la arquitectura.

    3.12 Circuito de controlEl circuito de control de la CPU, se encarga de generar las seales de control de la ruta de datos

    para cada una de las fases de ejecucin de las instrucciones. Aunque existen varias tcnicas para realizar este tipo de circuitos, en esta CPU tan simple lo ms apropiado es usar una mquina de estados. El diagrama de estados de dicha mquina se muestra en la Figura 11. Como se puede apreciar, en cuanto se desactiva la seal de reset, la mquina de estados empieza a ejecutar instrucciones. As, el primer estado es el de carga de la instruccin de memoria (FETCH) y el siguiente el de decodificacin (DECOD). El estado siguiente se elige en funcin del cdigo de operacin de la instruccin. As, por ejemplo, si el cdigo de operacin es 0 (instruccin aritmtica) se pasar al estado ARIT3 para ejecutar la tercera fase de la instruccin y luego al estado ARIT4 para ejecutar la ltima fase. Como se puede observar, desde el ltimo estado de todas las instrucciones se pasa siempre de nuevo al estado de carga (FETCH), para pasar as a ejecutar la siguiente instruccin.

    Ntese que al desactivar la seal de reset, la mquina de estados cargar la primera instruccin del programa. Esta instruccin se cargar desde la direccin a la que apunte el PC, por lo que el valor inicial de este registro definir dnde empieza el programa. Por ejemplo, si el valor inicial vale 0, la primera instruccin del programa ha de estar al principio de la memoria ROM de programa.

    4. Implantacin de la arquitectura ICAI-RiSC-16El procesador descrito en esta comunicacin ha sido implantado por los autores en una

    plataforma de desarrollo basada en la FPGA Flex10k30 de la firma Altera, ocupando un 36% del chip (629 bloques lgicos). Esto demuestra los pocos recursos que son necesarios para implantar la arquitectura descrita, por lo que puede usarse prcticamente con cualquier plataforma de lgica programable. El circuito ha sido implantado usando el programa Quartus II de Altera. La mayora de los bloques se han especificado en VHDL. No obstante, elementos como las memorias han sido diseados usando los asistentes proporcionados por la herramienta. A pesar de ello el diseo es fcilmente migrable a otras arquitecturas, sin ms que modificar estos bloques de memoria.

    Figura 10. Etapa 4 de la instruccin sw

  • 5. Desarrollo del laboratorioEsta arquitectura se ha usado para la docencia de la asignatura Sistemas Electrnicos

    Digitales de 1 de la titulacin de segundo ciclo Ingeniero en Automtica y Electrnica Industrial. En esta asignatura se afianzan los conocimientos de electrnica digital adquiridos por el alumno en un curso introductorio realizado en el primer ciclo. En la asignatura se hace especial nfasis en la implantacin con lgica programable y en la descripcin de circuitos usando VHDL.

    La asignatura consta de un laboratorio en el que el alumno pone en prctica los conocimientos adquiridos en la teora, usando para ello una herramienta CAD (Quartus II) y una placa de desarrollo basada en una FPGA de la familia Flex 10k de Altera. El laboratorio consta de las siguientes prcticas [3]:

    1. Introduccin al sistema de desarrollo. En esta prctica el alumno disea la ALU de microprocesador ICAI-RiSC-16. Este diseo sencillo le permite familiarizarse con la herramienta CAD.

    2. Comunicacin Serie. En esta prctica el alumno disea una UART bsica para comunicar la placa con un PC. Lo que se pretende en esta prctica es que el alumno utilice tcnicas de diseo jerrquico para abordar un diseo complejo. Adems esta prctica no requiere grandes conocimientos previos, por lo que puede realizarse mientras que en la teora se expone la arquitectura ICAI-RiSC-16.

    3. Arquitectura ICAI-RiSC-16. En esta prctica el alumno disea la arquitectura expuesta en esta comunicacin. El trabajo se divide en dos partes: en primer lugar se disea el camino de datos

    Figura 11: Diagrama de estados del circuito de control

  • y en segundo lugar el circuito de control. Al alumno se le proporciona un programa ensamblador bsico que le permite generar programas de prueba.

    5.2. Resultados obtenidosAl ser este el primer ao en usar la arquitectura, se ha sido demasiado optimista en cuanto a la

    estimacin del tiempo necesario para la realizacin de la prctica. De los 8 grupos de alumnos que han cursado el laboratorio, slo tres de ellos tuvieron tiempo suficiente para finalizar la prctica en cuatro sesiones de 2 horas. No obstante, el resto de alumnos fueron capaces de implantar tanto la ruta de datos como el control, aunque no tuvieron tiempo suficiente para realizar la depuracin y puesta en marcha del circuito.

    A pesar de todo ello, la experiencia ha sido positiva por las siguientes razones:

    El concepto de microprocesador ha sido desmitificado. Al ser capaz de construir un microprocesador, aunque sea bsico, el alumno comprende que una CPU no es algo ultrasofisticado, sino slo un circuito complejo.

    El alumno ha comprendido conceptos claves de arquitectura de ordenadores: cmo se codifica un programa en lenguaje mquina, cmo se lee una instruccin, se decodifica y se ejecuta; qu es un banco de registros y cmo se implanta, etc.

    El diseo de un circuito de la complejidad de un microprocesador le obliga al alumno a dividir su implantacin en ruta de datos + circuito de control, lo cual no es tan estrictamente necesario cuando se disean circuitos ms simples.

    En este diseo complejo es necesario usar todos los bloques bsicos estudiados en electrnica digital: multiplexores, registros, sumadores, etc. Por tanto, es una buena prctica final de laboratorio que sintetiza lo aprendido en ste y en los cursos anteriores.

    6. ConclusionesEn esta comunicacin se ha presentado una arquitectura de un procesador RISC que es lo

    suficientemente sencilla como para ser usada con fines docentes, pero lo suficientemente compleja como para que pueda usarse en aplicaciones reales.

    En la comunicacin se ha expuesto en detalle la arquitectura propuesta, as como su implantacin mediante una organizacin multiciclo. La exposicin realizada es un resumen del material proporcionado al alumno para la realizacin de la prctica, la cual se encuentra al completo en la pgina web del laboratorio [3].

    Se ha mostrado tambin que la arquitectura diseada requiere muy pocos recursos, ocupando tan solo 629 bloques lgicos de una FPGA de la familia Flex 10k.

    La arquitectura descrita ha sido usada para la docencia de la asignatura Sistemas Electrnicos Digitales de 1 de IAEI. La arquitectura ha sido expuesta en la clase terica para que el alumno la implante en el laboratorio usando una organizacin multiciclo. Al ser este el primer ao en el que se ha usado esta prctica, el tiempo asignado no ha sido suficiente para la mayora de los alumnos, habiendo finalizado la prctica slo el 37,5 % de los alumnos. No obstante, los objetivos docentes perseguidos si se han obtenido, ya que todos los alumnos han aprendido el funcionamiento de una CPU, as como el proceso de diseo de un circuito complejo, dividiendo su implantacin en ruta de datos + circuito de control.

    Referencias[1] Jacob, B. The RiSC-16 Architecture. Disponible Online en: http://www.eng.umd.edu/~blj/RiSC/ ( ltima

    visita 30/04/08)[2] D. A. Patterson y J. L. Hennessy. Computer Organization and Design. The Hardware/Software Interface.

    3 Edicin. Editorial Morgan Kaufmann/Elsevier. San Francisco (2005).[3] J. D. Muoz Fras. Pgina web del Laboratorio de Sistemas Electrnicos Digitales. Disponible Online en:

    http://www.dea.icai.upcomillas.es/daniel/asignaturas/SisEleDig_1_IAEI/ (ltima visita 30/04/08)