ENTORNO DE DESARROLLO PARA SOC'S BASADOS EN EL MICROPROCESADOR LEON2 E. Ostúa, J. Viejo, M. J. Bellido, J. Juan, A. Millán, P. Ruiz-de-Clavijo y D. Guerrero Instituto de Microelectrónica de Sevilla – Centro Nacional de Microelectrónica Av. Reina Mercedes, s/n (Edificio CICA) – 41012 Sevilla (España) Tel.: +34 955056666 – Fax: +34 955056686 http://www.imse.cnm.es Departamento de Tecnología Electrónica – Universidad de Sevilla Av. Reina Mercedes, s/n (E.T.S. Ingeniería Informática) – 41012 Sevilla (España) Tel.: +34 954556161 - Fax: +34 954552764 http://www.dte.us.es { ostua ; julian ; bellido ; jjchico ; amillan ; paulino ; guerre } @dte.us.es coste, aumento de prestaciones, mayor velocidad y menor consumo, se suma el que este tipo de sistemas nos ofrece una combinación de software y hardware, para conseguir productos de altas prestaciones comparados con los sistema típicos en los que se combinan diferentes chips. ABSTRACT Se presenta en este documento una demostración práctica del entorno software para el desarrollo de aplicaciones SoPC basados en LEON2, un microprocesador libre de 32 bits conforme a la arquitectura SPARC v8 y diseñado con unas características que lo hacen ideal para su uso en aplicaciones empotradas. Se presentará tanto las herramientas de configuración, simulación y síntesis del hardware del micro, como las de diseño del software (compiladores de C/C++, kernels, debuggers/monitores y hasta un completo emulador). Al final de la demostración se podrá probar el funcionamiento del sistema en hardware real, gracias al empleo de una placa de desarrollo provista de una FPGA de Xilinx. Este tipo de sistema altera el flujo tradicional de diseño de circuitos integrados digitales ya que, en los SoPC, deben combinarse procesos de diseño de hardware con procesos de elaboración y depuración del software que ejecute el microprocesador. Esto básicamente nos lleva a que el microprocesador que pretendemos emplear para el SoPC no solo debe ser implementable en un chip, sino que además debe poseer todo un entorno de desarrollo y de verificación del software que, en la medida de lo posible, debe estar integrado con las herramientas de diseño hardware. 1. INTRODUCCIÓN Actualmente cuando se pretende implementar un SoPC en una FPGA existen algunas alternativas como son el caso, en las familias de Xilinx [1], de los microprocesadores MicroBlaze (familias Spartan y Virtex) o PowerPC (familia Virtex-II Pro). Para estos micros Xilinx ha desarrollado el entorno EDK (Embedded Development Kit). Este entorno permite la configuración del microprocesador para diseñarlo a medida de las necesidades de la aplicación. Además permite incluir el software para poder realizar una co-verificación hardware/software, ya que EDK se integra con el entorno ISE de diseño e implementación de hardware en FPGA's de Xilinx. Una de las restricciones importantes de estos dos microprocesadores, junto con EDK, es que no es El avance tecnológico en el campo de la microelectrónica permite implementar un sistema prácticamente completo en un único chip; estos son los denominados SoC (System-on-Chip). En el ámbito de los sistemas digitales son especialmente interesantes los SoC basados en microprocesadores, SoPC (System-on-a-ProgrammableChip). En ellos se 'empotra' en el chip una arquitectura típica de un computador, con lo que estamos dotando al sistema de la potencialidad que supone desarrollar software para las aplicaciones específicas que vaya a implementar el sistema. Es decir, a las ventajas que supone ya de por sí la integración de un sistema, esto es, la reducción del área, que lleva aparejado la reducción del 1 Figura 1 - Arquitectura del microprocesador LEON2 posible implementar el SoPC, diseñado y verificado sobre FPGA, en un ASIC. 2. EL MICROPROCESADOR LEON2 LEON2 [2] es un microprocesador de 32 bits de libre uso y modificación, diseñado completamente empleando VHDL sintetizable, es conforme a la arquitectura SPARCv8 [3] y resulta altamente configurable y facilmente extensible al usar un único bus onchip como es el standard AMBA-2.0 AHB/APB [4]. Todo esto le hace particularmente interesante para el desarrollo de aplicaciones SoPC (System-on-a-Programmable-Chip). En este trabajo vamos a analizar el caso de un microprocesador de código abierto como es el LEON2 [2], el cual si es posible implementarlo en cualquier tecnología. El objetivo del trabajo es mostrar cómo es la metodología de diseño de SoPC basados en LEON2. Así, el apartado siguiente está dedicado a presentar las características básicas de LEON2, para después, en el apartado 3, presentar la metodología de diseño basada en LEON2. En este apartado analizaremos los dos aspectos importantes del diseño de un SoPC como son el diseño de hardware y el de software, estableciendo la metodología en función de las distintas herramientas que actualmente están disponibles para trabajar con LEON2, la mayoría de ellas herramientas de libre distribución y, por tanto, accesibles a ellas de una forma asequible. El trabajo se plantea, en el apartado 4, como una demostración en la que se va a mostrar, de una forma práctica, la metodología presentada, haciendo uso de las herramientas descritas, y finalmente la verificación en hardware real de un sistema empotrado, implementandolo en una FPGA de Xilinx. Fue desarrollado inicialmente por la Agencia Espacial Europea [5] y actualmente es mantenido por Gaisler Research [6]. Posee licencia GNU LGPL [7] lo que da plena libertad de distribución, extensión y modificación. Desde el punto de vista de la arquitectura, LEON2 está diseñado pensando en las aplicaciones empotradas, y cuenta con las siguientes características principales: • • • • • • 2 arquitectura hardvard de 32 bits caches separados de instrucciones y de datos conforme con SPARCv8, con pipeline de 5 etapas multiplicador y divisor por hardware configurable unidad de gestión de memoria, MMU interfaz a memorias PROM, SRAM y SDRAM. Figura 2 - Flujo de Diseño de Aplicaciones SoPC basadas en LEON2 • • • • • • • • • • memoria RAM onchip controlador de interrupciones unidad de debug onchip, DSU dos timers de 24 bits controladores de UARTs watchdog y función de power-down puerto de E/S de 16 bits controlador ethernet 10 myspell-es openoffice.orghelp-es/100 MAC interfaz PCI interfaz con unidades de FPU y coprocesadores Compiler [8], Synopsys-DC [8] y Synplify [9], aunque es fácilmente adaptable a otras herramientas de síntesis. En esta demostración nos basaremos en la versión de LEON2 sintetizable sobre FPGA's (LEON2-XST [2]). El rendimiento que se alcanza con una configuración típica de LEON2 es de unos 0.85 dhrystone-MIPS/Mhz 3. METODOLOGÍA DE DISEÑO DE APLICACIONES SOPC CON LEON2 Para realizar nuestra aplicación SoPC (System-on-aProgrammable-Chip) basada en LEON2 nos plantearemos un flujo de diseño con un doble camino, por una parte la configuración y simulación del hardware, con su núcleo formado por el microprocesador LEON2 y los módulos y controladores adicionales que necesitemos, y por otra parte el diseño del software que ejecutará la aplicación concreta en este micro. La figura 2 muestra en detalle la metodología de diseño a emplear. En la figura 1 se puede observar un diagrama de bloques de LEON2 con sus módulos principales. Todas estas bloques funcionales son altamente parametrizables y muchos además son opcionales, por lo que en función de la aplicación que diseñemos obtendremos un soft core de distinto tamaño y complejidad. Se puede extender la funcionalidad con módulos que usen los buses AHB/APB de AMBA-2.0. A continuación describiremos un conjunto completo de aplicaciones que podemos utilizar para todos los pasos del proceso de diseño de nuestra aplicación SoPC basada en LEON2. La mayoría de ellas son de libre distribución bajo licencia GNU, salvo que se especifique lo contrario. Comenzaremos viendo las aplicaciones que incluye el propio paquete del LEON2, dónde a través de comandos 'make' podremos configurar y simular nuestro micro. El microprocesador LEON2 soporta ser simulado con la herramienta de Synopsys VSS [8], Cadence Ncsim [9], GNU GHDL [10] (experimental) o con Modelsim, de Mentor Graphics [11]. También trae unos testbenchs genéricos y programas de prueba para usar con estas herramientas de forma sencilla. LEON2 puede ser implementado tanto en FPGAs como en ASICs. Viene preparado para ser sintetizado con las herramientas de Xilinx XST [1], Synopsys FPGA- 3 3.1. Diseño del Hardware. Para configurar el microprocesador y elegir los módulos onchip que necesitaremos para nuestra aplicación, LEON2 se dispone de una herramienta gráfica desarrollada en TCL/TK y similar a la que se utiliza para configurar el kernel de Linux. Está disponible para Unix/Linux y Windows/CYGWIN [13]. A través de una serie de menús inteligentes podemos seleccionar cómo queremos parametrizar nuestro procesador. Como alternativa a esta herramienta, siempre se puede realizar esta configuración modificando un fichero de texto que contiene todos los parámetros del modelo VHDL. Si deseamos realizar una simulación del micro una vez configurado tenemos la opción de hacerlo a través del mismo Makefile y otros scripts que incluye LEON2, tanto para Unix/Linux cómo Windows. Están soportados la compilación del modelo para los simuladores VSS, NCsim, Vsim y GHDL. Es posible también realizar una simulación post-síntesis. Para realizar la síntesis debemos usar alguna herramienta comercial como Xilinx XST, Synopsys FPGACompiler, Synopsys-DC o Synplify. Figura 3 - Emulador de LEON2 enlazado con GNU gdb, corriendo sobre Eclipse. En nuestro caso usaremos la herramienta de Xilinx ya que SPARC v8, cualquier compilador y kernel que exista para pretendemos trabajar con FPGA's de esa compañía y este podrá ser utilizado. En cualquier caso Gaisler contamos con un presupuesto pequeño. Para esta Research [5] dispone de dos compiladores cruzados de herramienta disponemos de un fichero de proyecto que C/C++ de libre distribución, BCC y RCC. Ambos están podemos importar en Xilinx ISE 6.3 y trabajar cómo si de basados en las utilidades binutils y compiladores GNU de cualquier otro proyecto se tratase, al disponer de todos los C/C++, si bien BCC (Bare-C Cross Compiler) está más fuentes de LEON2 en formato VHDL sintetizable; aunque orientado a desarrollos sencillos y secuenciales mientras también podemos hacer toda la síntesis e implementación que RCC (Rtems Cross Compiler) está basado en el de forma más rápida mediante unos scripts que incluye el kernel en tiempo real RTEMS [14], lo que permite propio LEON2, que realizan todos los pasos necesarios. además el trabajar con aplicaciones multithread. Además hay una serie de placas de prototipado con FPGA's soportadas por LEON2 y con plantillas de diseño También es interesante destacar que existe un plugin para preconfiguradas. manejar estos compiladores desde Eclipse [15], un entorno de desarrollo integrado (IDE), de forma que 3.2. Diseño del Software. podemos trabajar con este entorno gráfico como si de un Para compilar al software que correrá en nuestro sistema completo compilador visual se tratase. empotrado, al ser LEON2 conforme a la arquitectura 4 placa de desarrollo, comprobándose así el funcionamiento de la aplicación SoC en hardware real. Es posible disponer también de Linux, con la distribución Snapgear [16], pensada para aplicaciones empotradas, corriendo un kernel 2.6 portado para LEON2 con el módulo gestor de memoria MMU. Si no nos interesa en nuestro diseño dicho gestor también podemos optar por utilizar el kernel de uClinux [17], basado en el 2.0. 5. AGRADECIMIENTOS Este trabajo ha sido parcialmente financiado por el proyecto MCYT META TEC 2004-00840/MIC y el proyecto MECD/SEEU/DGU PHB2002-0018-PC del Gobierno Español. En cualquier caso es posible utilizar para depurar nuestro código el debugger de GNU gdb, con o sin una interfaz gráfica como el DDD. Esta depuración es posible hacerla bien sobre el sistema real implementado en hardware, por ejemplo en una FPGA, o bien sobre un emulador. 6. REFERENCIAS [1] MicroBlaze, PowerPC, EDK, ISE, XST y familias Spartan y Virtex de FPGA's, de Xilinx Inc, http://www.xilinx.com/ Por último destacar que Gaisler Research ha desarrollado también un monitor para debugging, GRMON, y un completo emulador de LEON2, TSIM, ambos con versiones de evaluación disponibles para fines no comerciales. Con ellas se puede monitorizar al detalle un microprocesador LEON2 corriendo en un hardware real si incluimos un módulo de debug onchip DSU en la configuración del mismo, o bien un LEON2 corriendo en el emulador TSIM. Ambas herramientas poseen también una interfaz con el debugger de GNU gdb. Por último, GRMON dispone también de un plugin para Eclipse, para dotar de una interfaz gráfica al mismo. En la figura 3 se muestra una captura de pantalla del monitor de LEON2, GRMON, corriendo en Eclipse. [2] “LEON2 Processor User's Manual, XST Edition”, Gaisler Research, http://www.gaisler.com/doc/leon2-1.0.26-xst.pdf [3] “The SPARC Architecture Manual, v8”, Sparc International Inc. http://www.sparc.org/ [4] “Advanced Microcontroller Bus Architecture (AMBA) Specification, v2.0”, ARM Limited. http://www.arm.com/ [5] European Space Agency (ESA), http://www.esa.int/ [6] Gaisler Research, http://www.gaisler.com/ [7] LGPL: GNU Lesser General Public License. Versión al castellano en http://gugs.sindominio.net/licencias/lgpl-es.html [8] VHDL System Simulatiro (VSS), FPGA Compiler y Design Compiler (DC), de Synopsys Inc. http://www.synopsys.com/ 4. DEMOSTRACIÓN PRÁCTICA La demostración que se plantea en este trabajo es una visión práctica y rápida del flujo de diseño completo de aplicaciones empotradas en SoPC basadas en LEON2, y la comprobación instantánea del resultado obtenido en hardware real, gracias al empleo de una FPGA. [9] Ncsim, de http://www.cadence.com/ NC-VHDL de Cadence. [10] GHDL, GNU VHDL Simlator v1.6, http://ghdl.free.fr/ [11] Modelsim, de Mentor Graphics, http://www.model.com/ Para aprender la metodología de diseño de aplicaciones con LEON2 se propone trabajar en un PC con Linux con todas las herramientas descritas instaladas en el mismo y con una serie de ejemplos sencillos prediseñados. Se podrá, por una parte, realizar la configuración y simulación del hardware del microprocesador, y también realizar todo el flujo de diseño software, a partir de pequeños programas en C que servirán para comprobar el funcionamiento del sistema empotrado. [12] Synplify, de Synplicity Inc., http://www.synplicity.com/ [13] CYGWIN, GNU+Windows, http://www.cygwin.com/ [14] RTEMS: Real-Time Operating System for Multiprocessor Systems, http://www.rtems.com/ [15] Eclipse Platform Techincal Overview, http://www.eclipse.org/whitepapers/eclipse-overview.pdf Por último, una vez terminado el doble flujo diseño, se podrá comprobar su funcionamiento tanto en el emulador de LEON2 como mediante su programación en una FPGA de la familia Virtex-2 de Xilinx integrada en una [16] SnapGear Embedded Linux, http://www.snapgear.org/ [17] uClinux, Embedded http://www.uclinux.org/ 5 Linux/Microcontroller Project,