INTEGRACIÓN DEL MULTIPROCESADOR BASADO EN LA ARQUITECTURA DE DETECCIÓN DE EVENTOS (MADE) Andrés UPEGUI (1), Iván HERRERA (2), Hernán SÁNCHEZ (3) Grupo de Microelectrónica U.P.B., Medellín-Colombia Email: [email protected] Dirección General de Investigaciones - Universidad Pontificia Bolivariana (U.P.B.) Emails: (1) [email protected] (2) [email protected] (3) [email protected] Resumen: El Multiprocesador basado en la arquitectura de detección de eventos (MADE), construido con base en una novedosa arquitectura de multiprocesadores multiprogramados, es diseñado para ser aplicado en sistemas de buses seriales de alta velocidad y aplicaciones que requieran grandes volumenes de operaciones matemáticas. En el presente artículo se describe el diseño del Multiprocesador descrito en [1] y [2], integrando en un solo encapsulado cuatro procesadores, un módulo detector de eventos y cada uno de los controladores necesarios para administrar la memoria de cada procesador. I. INTRODUCCIÓN Las redes industriales se han diseñando con el objetivo de controlar sistemas distribuidos en campo, donde existen grandes distancias entre las unidades de control y los diferentes actuadores o elementos finales del sistema. Hay dos parámetros a optimizar en dichas redes: mínima utilización de cableado y máxima velocidad. En la actualidad se tienen diferentes estándares de buses seriales de comunicación (i.e. ProfibusÒ , PCIÒ ) que cumplen con las condiciones descritas: sólo utilizan un cable para interconectar los elementos y pueden transmitir a velocidades del orden de hasta 66 MHz. El Multiprocesador MADE [1,2], ha sido diseñado con el objetivo de procesar la información que reciba por el bus de datos a una elevada velocidad. Su principio de funcionamiento está basado en una arquitectura de detección de eventos [3]. La metodología de funcionamiento de esta arquitectura consiste en ejecutar ciertos procesos como respuesta a la detección de uno o más eventos. De esta manera no se tiene un sistema sincrónico que dependa de una única señal de sincronismo, sino que cada nodo procesador actúa independientemente en función de los procesos que le correspondan y hayan sido activados. La aparición de un evento determinado libera la ejecución de un nuevo proceso. De esta manera se economiza tiempo y se maximiza la utilización del Multiprocesador. El MADE en su primera etapa utilizaba la técnica de memoria compartida [3], con dos microcontroladores 8031 como unidades básicas de proceso, una memoria de programa para cada módulo y una memoria de datos compartidos que permitía coherencia entre los dos módulos. En la segunda etapa se integran los nodos de procesamiento en una sola unidad, de modo que se puede lograr una mayor velocidad de trabajo, suprimiendo problemas de velocidad de transmisión entre buses externos. De igual forma, se busca optimizar el manejo de memoria con una técnica de memoria compartida distribuida, reemplazando la memoria centralizada de la versión anterior. El diseño electrónico utilizando arreglos lógicos programables por voltajes (FPGAs) constituye una alternativa muy económica y eficiente [5], que permite no sólo la integración de un gran número de lógica digital dentro de un mismo chip, sino que evita la necesidad de cableado y permite aumentar el rendimiento del sistema hasta frecuencias del orden de 100 MHz. II. ESTADO ACTUAL DEL MULTIPROCESADOR MADE A.) Arquitectura del MADE En su primera etapa el multiprocesador cuenta con dos microcontroladores 8031, cada uno con memoria propia de programa y de datos, y un sistema de memoria de datos compartida. Los bloques se encuentran interconectados por medio de un bus bidireccional (Figura #1), el cual dispone de 8 líneas destinadas a transmitir las direcciones y datos y cuatro líneas de control, distribuidas de la siguiente manera: - Línea de petición del bus - Línea de lectura / escritura - Líneas de asignación del bus - Línea de reloj del bus BP R/W_ LDA CK_BUS (El número de líneas LDA depende del número de nodos procesadores utilizados). forma: en su memoria propia dispone de 16 Kbytes para memoria de programa, y otros 16 Kbytes destinados a datos. Los 32 Kbytes sobrantes son destinados para direccionar memoria compartida. FIG. # 1. ARQUITECTURA DEL MADE B.) Estructura del Nodo de Procesamiento Cada nodo procesador cuenta con un microcontrolador 8031, una memoria RAM estática de 32 Kbytes y el controlador de la unidad de proceso (CODUP), implementado en una FPGA XC4010XL, la cual se encarga de administrar el acceso a la memoria externa propia y compartida (Ver Fig. #2). FIG. #3. BLOQUE DE MEMORIA DEL MADE E.) Manejo de Tiempos Para el manejo de tiempos del MADE es necesario monitorear las líneas de control del 8031 de modo que se pueda discriminar cuando se desea acceder a la memoria propia o memoria compartida. Igualmente es necesario garantizarle al microcontrolador que su esquema de tiempos será respetado en cada acceso a la memoria compartida, aún cuando la memoria ya esté siendo usada por otro nodo de procesamiento, teniendo en cuenta que para el acceso a la memoria compartida es necesario solicitar el uso del bus, recibir una confirmación, transmitir la dirección y enviar o recibir el dato deseado. Todo esto se debe realizar buscando lograr la menor latencia posible del sistema. Una descripción detallada se encuentra disponible en [1]. F.) Implementación del Sistema FIG. #2. NODO DE PROCESAMIENTO La memoria RAM compartida requiere el uso del administrador de memoria compartida (ADCOM) implementado en otra FPGA XC4010XL (Ver Fig.#3), con el fin de establecer las comunicaciones desde y hacia los nodos de procesamiento y para conmutar las señales de control de la memoria RAM. Este bloque ejecuta funciones tales como generar el reloj y administrar el uso del bus, asignando prioridades a cada uno de los nodos con las líneas LDA. C.) Administración de Memoria Cada microcontrolador 8031 tiene la capacidad de direccionar 64 KB, los cuales se distribuirán de la siguiente El multiprocesador está construido sobre tres tarjetas de desarrollo XS-40 de la compañía XESS (http://www.xess.com) las cuales contienen una FPGA XC4010XL, un microcontrolador Intel 8031, una memoria RAM estática de 32 KB y tiene la capacidad de almacenar la configuración de la FPGA usando una EEPROM serial de la familia AT17 de Atmel. Usando las tarjetas XS-40, se programan las FPGAs para que realicen una interconexión coherente entre los microcontroladores. La interconexión física se realiza usando una tarjeta especialmente diseñada para tal propósito con lo que se logra un mejor rendimiento del sistema. G.) Software de Prueba El software diseñado para probar el sistema consiste en un programa desarrollado para el microcontrolador 8031. La función básica del programa es encontrar el número mayor entre un conjunto de números de longitud definida (en principio se habla de 100 números). Para el multiprocesador, se envían serialmente los numeros a un 8031, el cual los almacena en la memoria compartida. Posteriormente, cada nodo de procesamiento realiza la comparación de la mitad de los números encontrando el mayor respectivo. Luego el primer microcontrolador que termine escribe su resultado en una dirección asignada en la memoria compartida, así como un registro designado para indicar que ha terminado la tarea. Cuando el otro nodo lee dicho registro, procede a capturar el dato arrojado por el primer microcontrolador y a realizar la comparación final entre los dos números y lo retorna por el puerto serial al PC. Esta tarea se repite indefinidamente generando un pulso cada vez que ésta se complete. A partir del programa realizado para el microcontrolador 8031 y del análisis de sistemas multiprocesados hermanos del MADE como el TORCH [7], se determinó teóricamente el número de ciclos de reloj que requiere el sistema para ejecutar toda la labor de comparación de datos y devolución del resultado. De acuerdo a la arquitectura del multiprocesador y a la estructura del programa se obtiene un resultado que denota mayor eficiencia para los programas que manejan grandes cantidades de información (Tabla # 1). TABLA # 1. COMPARACIÓN DEL NÚMERO DE CICLOS N um eros # Ciclos M ono # Ciclos M ulti Ganancia 10 1584 1095 1.44 100 15624 8250 1.89 1000 156024 79800 1.95 Los datos obtenidos son más satisfactorios a medida que el tamaño del conjunto aumenta. Se puede observar en la Tabla 1. que para el caso de n=1000 se obtuvo una ganancia de 1.95, muy cercana a la ganancia ideal 2 descrita en [7]. Cabe anotar que la ganancia que se obtiene para alguna tarea depende en gran parte de la habilidad del programador para aprovechar los recursos que ofrece el multiprocesador. III. MULTIPROCESADOR MADE II A.) Arquitectura La nueva versión del Multiprocesador Paralelo Basado en la Arquitectura de detección de Eventos (Figura # 4) consiste en 4 nodos de procesamiento independientes, cada uno consta de un procesador controlado por un Controlador de Unidad de Proceso (CODUP II). Adicionalmente hay un módulo detector de eventos (MODE), el cual se encarga de detectar los eventos configurados por el usuario y ejecutar las acciones necesarias para atender dicho evento. FIG. # 4. ARQUITECTURA DEL MADE II Cada nodo de procesamiento dispone de una memoria externa, formando un sistema de memoria compartida distribuida con cuatro memorias y en el cual un nodo de procesamiento puede direccionar cualquier unidad de memoria. El sistema cuenta con cuatro buses: • Bus de datos, el cual transmite direcciones y datos. • Bus de detección de eventos externos, el cual tiene como función interconectar al MODE con las interfaces de entrada y salida. • Bus de detección de eventos internos, el cual interconecta al MODE directamente con los procesadores. • Bus de control, que interconecta al módulo detector de eventos con los diferentes nodos de procesamiento. Como es evidente el sistema cuenta con una elevada cantidad de buses, lo cual implica un hardware más costoso, pero se justifica en la medida que disminuye la latencia del sistema. B.) Nodo de Procesamiento Cada nodo de procesamiento esta compuesto por un procesador, un CODUP II y una memoria externa (Fig. # 5). Dicha memoria esta destinada a almacenar programa y datos. El programa tan solo podrá ser accedido por el procesador correspondiente a su nodo, mientras que los datos estarán disponibles para cualquier procesador que requiera tanto escribir como leer. El procesador es un procesador RISC de 8 bits que cuenta con una interface de comunicación UART, un modulo detector de eventos y un banco de 16 registros. El CODUP II es un módulo controlado por una máquina de estados, que basicamente tiene tres estados principales. Tiene acceso al bus compartido y a la memoria correspondiente a su nodo, y tiene el control de la señal de reloj del procesador. A continuación se describen los tres estados basicos del CODUP II. FIG.# 6. PROCESADOR DE 4 BITS FIG.# 5. NODO DE PROCESAMIENTO DEL MADE II. El primer estado es considerado el estado normal de operación, en el cual el procesador esta leyendo su memoria de programa y bien esta leyendo o escribiendo datos en su propia memoria, en este caso el CODUP II actua como un puente que permite la interconección entre ambos. El segundo estado es de acceso a memoria de otro nodo de procesamiento. En este caso el CODUP II detiene el oscilador del procesador, solicita el uso del bus compartido para luego enviar la dirección deseada y el dato si es un ciclo de escritura o espera el dato si el ciclo es de lectura. El tercer estado se da cuando la memoria del nodo procesador es requerida por otro nodo. En este caso la prioridad la tiene el otro nodo, de modo que se recibe la dirección requerida (y el dato si el ciclo es de escritura), se verifica si dicho espacio de memoria le corresponde, se detiene el reloj del procesador, se ejecuta la operación de lectura o escritura y vuelve al estado normal de operación. Dado el caso que en el momento de la solicitud del otro procesador la memoria este siendo utilizada por el procesador perteneciente al nodo, tanto la dirección como el dato son almacenados en buferes para reponer los datos al culminar la operación. C.) Procesador Para efectos de prototipaje se implemento en un principio un procesador de 4 bits escalable a 4*n bits tipo RISC para procesamiento de datos seriales a una alta velocidad. En la primera versión del proyecto se desarrolló en 4 bits como un ejercicio para ser escalado posteriormente a un número mayor de bits según sea necesario. Se diseñó un procesador integrado en lenguaje VHDL (Figura # 6), con una cantidad de 5000 compuertas en un dispositivo de lógica programable FPGA de Xilinx. El procesador tiene actualmente una frecuencia de operación es de 25 MHz (100 Mhz es la frecuencia máxima de la FPGA XC4010XL de Xilinx) que consume 4 ciclos de reloj por instrucción. Las cuatro micro-operaciones que realiza el procesador por instrucción son: fetch, decode, execution y memory read and writeback. El procesador funcionará en dos posibles modos; el modo LOAD o de carga del programa, (por medio del cual se almacena el código en la memoria RAM externa), y el modo EXECUTE o de ejecución del programa previamente almacenado en la memoria RAM. La selección del modo de trabajo para el procesador se realiza mediante la señal de control Enable, así: (Enable = 0 => LOAD PROGRAM ; Enable = 1 ==> Modo EXECUTE). El bajo consumo de recursos del procesador permite multiplicar la cantidad de unidades procesadoras en un solo circuito integrado y construir de esta manera un solo sistema multiprocesador integrado en una única pastilla semiconductora. D.) Módulo Detector de Eventos Conforme con el principio de sincronía por medio de eventos externos al procesador, se diseñó un sistema de interrupciones programables por medio del software del procesador. El procesador incluye toda la lógica para que por medio de la instrucción PRG se permita accesar un modo especial de configuración de eventos, tales como diferentes tipos de datos y de valores en registros que al presentarse generan señales de sincronismo para los procesadores adyacentes. De esta forma se puede activar la ejecución de nuevos procesos hijos que no necesitarán información adicional del procesador padre ni ningún tipo de protocolo de arbitramento de buses. Aca se presenta una de las ventajas mas grandes del procesador, ya que con esta metodología de sincronismo, se logra tener varias unidades procesadoras funcionando simultáneamente, con el más bajo contenido de encabezados o de información no útil para el usuario externo. De esta forma, los módulos detectores de eventos de cada uno de los nodos de procesamiento, estan programados para atender de cierta forma ciertos eventos en forma programable. Mientras que el detector de eventos global del multiprocesador tiene como función informarle a cada uno de dichos módulos que tipo de eventos han ocurrido, bien sean externos o internos. E.) Administración de Memoria El procesador cuenta con un espacio total de memoria de 128 Kbytes, distribuido en 4 memorias RAM de 32 Kbytes. Cada memoria esta asignada a un procesador y es directamente manejada por el Controlador de Unidad de Proceso (CODUP), correspondiente al nodo. De estos 32 Kbytes, los 16 de menor peso están asignados a la memoria de programa, y solo puede ser accedida por el procesador correspondiente a dicho nodo. Los 16 de mayor peso están destinados a datos y pueden ser accedidos por cualquier procesador. El procesador a utilizar en cada nodo de procesamiento tiene la capacidad de direccionar 64 Kbytes de memoria de datos, los cuales son compartidos por los cuatro procesadores. El espacio de memoria de datos tiene un direccionamiento absoluto (Figura # 7), de modo que la memoria del nodo 0 almacena las direcciones desde la 0 hasta 16 Kbytes, la del nodo 1 va desde la dirección 16 K hasta 32 K, la del nodo 2 desde 32 K hasta 48 K y la del nodo 3 desde la dirección 48 K hasta 64 K FIG.# 7. DISTRIBUCIÓN DE MEMORIA DE DATOS Para cada nodo de procesamiento el espacio de memoria no será absoluto sino relativo, de modo que cuando cualquier procesador requiere una dirección de la 0 a la 16 K, se refiere a su propia memoria, de 16 a 32 K se refiere al nodo de procesamiento que le sucede y asi sucesivamente. Dicho direccionamiento se logra sumandole cierta cantidad (+0,+1,+2,+3) a los 2 bits de mayor peso del bus de direcciones (Figura # 7). Por ejemplo, el procesador 2 requiere el dato que se encuentra en la dirección 7 K de la memoria del nodo 1, dicha dirección es 16 K + 7 K = 23 K en el espacio de direccionamiento absoluto. Pero cada procesador tiene un direccionamiento relativo, de modo que para el procesador 2 es la dirección (16 K x 3) + 7 K = 55 K (16 K se multiplica por 3 debido a que el nodo 1 esta tres puestos mas adelante que el nodo 2). Asi que el procesador direcciona 55 K equivalente a “1101111111111111” al sumar 2 (“10“) a los dos bits de mayor peso (“11”) queda “10” + “11” = “01” (no se tiene en cuenta carry). Asi se obtiene la dirección absoluta “0101111111111111” equivalente a 23 K. Cabe anotar que el sumador viene incluido en el CODUP II y solo es usado para el acceso a datos. Las direcciones de programa no se ven modificadas por el sumador, ya que cada procesador tan solo lee programa de su propia memoria. El programa esta almacenado dentro del espacio de memoria de 0 a 16 K. El procesador cuenta con una linea de P/D (Program / Data) (Figura # 5) que va al CODUP, dicha linea indica si el acceso es a memoria de programa o de datos y simplemente habilita o deshabilita el sumador. F.) Manejo de Tiempos El acceso a memorias de diferentes nodos implica una latencia adicional, ya que el procesador debe esperar a que el CODUP II ejecute la comunicación con los otros nodos. Cada tipo de acceso (lectura o escritura) implicará una latencia diferente, cuando se realiza un ciclo de lectura de datos en otra memoria, el CODUP II se debe encargar de detener el procesador, comunicarse con el procesador deseado y enviarle la dirección, el otro CODUP II debe recibirla, leer el dato y devolverlo al solicitante. Para llevar a cabo dicha operación la latencia estará entre 5 y 8 ciclos de reloj dependiendo de la asignación del bus. Para un ciclo de escritura no habrá necesidad de detener el reloj, ya que el procesador no estará esperando respuesta, a menos que dicha operación este precedida por otro acceso a bus que no haya sido atendido. De igual forma, cuando una memoria va a ser accedida por otro nodo, se debe deshabilitar su procesador correspondiente. En este caso la latencia es de 2 ciclos tanto para el ciclo de lectura como de escritura. Se obtiene menor latencia del sistema, en general, con rutinas de escritura en memoria compartida, que con rutinas de lectura de memoria compartida, por lo tanto es virtud del programador y del compilador tratar de evitar al máximo las lecturas de memoria de otros nodos, ya que ademas de tomar mas ciclos de reloj, congestionan más el bus ya que tienen que enviar una dirección y esperar una respuesta. IV. CONCLUSIONES La característica de ser un sistema multiprocesado con nodos de proceso ejecutando programas independientes sugiere una plataforma de desarrollo muy novedosa para aplicaciones que requieran alta velocidad de ejecución y posibilidad de asignación de proceso concurrentes. El MADE presenta un modelo muy apropiado para los sistemas de comunicación serial, donde los requisitos de velocidad y volumen de información no permiten el uso de sistemas monoprocesados tradicionales. El sistema brinda la posibilidad de manejar grandes cantidades de información que requieran cierto tratamiento matemático, ya que el multiprocesador se presta para que cada nodo procese ciertos datos o realice ciertas operaciones arrojando varios resultados parciales. Y así lograr un sistema multitarea a nivel de hardware. La siguiente tarea del MADE será demostrar su capacidad de procesamiento al ser utilizado como unidad de proceso en un enlace con un sistema de comunicaciones PCI de 32 bits a 32 MHz. V. REFERENCIAS [1] I. Herrera, H. Sánchez, A. Upegui, L. Restrepo. “Multiprocesador Paralelo Basado en la Arquitectura de detección de Eventos (MADE)”, En: SE´99: 1er. Seminario Nacional de Investigación en Ingeniería Electrónica y Telecomunicaciones en Colombia. Universidad de los Andes. Bogotá. 1999. [2] I. Herrera, H. Sánchez, A. Upegui, L. Restrepo. “Modelo de Simulación y Prueba para el Multiprocesador Paralelo Basado en la Arquitectura de detección de Eventos (MADE)”, En: VI Workshop Iberchip. Sao Paulo, Brasil, Marzo, 2000. [3] R. Gerndt, “An Event-Driven Multi-Threading Architecture for Embedded Systems”, Proceedings of the codes/CASHE '97 [4] John D. Kubiatowicz. Integrated Shared-Memory and Message-Passing Communication in the Alewife Multiprocessor. PhD thesis, Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, February 1998. [5] S. Hauck. “The Roles of FPGA´s Reprogrammable Systems”. In Proceedings of theIEEE, Vol 86. No 4, Abr. 1998. p 615 – 635. [6] The Programmable Logic Data Book 1998. XILINX. [7] The Torchers. TORCH Architectural Specification. 1992. Stanford University. [8] K. Hwang, F. Briggs. Arquitecturas de computadores y procesamiento paralelo. 1ed. McGraw-Hill. Madrid, 1988. [9] M. Flynn, “Computer Architecture: Pipelined and Parallel Processor Design”. Ago. 1995. VI. CURRÍCULUMS Andrés E. Upegui Posada: Ingeniero Electrónico de la UPB, Coordinador del Grupo de Microelectrónica de la UPB, en el cual dirige varios proyectos de investigación de arquitecturas de procesadores, tratamiento de señales de audio y video y diseño y construcción de dispensadores inteligentes entre otros. Profesor de la materia Electrónica Integrada en la misma universidad. Miembro activo del grupo de Microelectrónica de la U.P.B. desde 1998. Ha asistido a eventos como el 37° Design Automation Conference en Los Angeles como expositor y como ponente al 1° Congreso Internacional de Ingenierías eléctrica y electrónica en Bucaramanga entre otros, además de una publicación en el VI Workshop de Iberchip en Sao Paulo. Ha asistido a cursos como al Xilinx University Workshop (San Jose, CA , USA) , y al Seventh Training on SoC Design Using Design and Prototyping Platforms (Santa Clara, CA, USA) entre otros. Áreas de Interés: Lenguajes HDL, Microelectrónica, Arquitecturas y programación de procesadores Iván Herrera: Ingeniero Electrónico de la Universidad Pontificia Bolivariana. Ingeniero de planta en Intel ( Costa Rica), fue profesor de tiempo completo en la Facultad de Ingeniería Electrónica, de la cual también fue coordinador del Grupo de Investigación en Microelectrónica. Desde 1997 se encuentra vinculado con investigaciones en el área de arquitectura de procesadores y el diseño de circuitos utilizando lógica reconfigurable. Entre 1998 y 1999 trabajó en el laboratorio de Profibus del Instituto de Microelectrónica Aplicada IAM FuE GmbH en Braunschweig - Alemania. Ha participado en varios eventos de microelectrónica entre los cuales figura el 37° Design Automation Conference en Los Angeles, el VI Workshop de Iberchip en Sao Paulo, Seventh Training on SoC Design Using Design and Prototyping Platforms en Santa Clara, California y los Workshop de Xilinx ITESM en Guadalajara y en San Jose, California. Hernán Sánchez: Ingeniero Electrónico de la U.P.B. Trabaja como profesor de la materia Electrónica Integrada desde 1995, en la cual introduce el diseño de lógica programable empleando lenguajes de descripción de hardware VHDL y dispositivos tipo FPGA's. Miembro fundador del grupo de microelectrónica U.P.B del cual es coordinador del área de investigaciones. Ha desarrollado conferencias y cursos especiales con la UPB desde 1997. Asistente a varios eventos de Microelectrónica, como el Workshop de Xilinx (Guadalajara, México) y el Curso Internacional de Técnicas de Diseño de Circuitos Integrados VLSI (Medellín, Colombia). Actualmente se desempeña como Analista de Telecomunicaciones en SURATEP.