Lab 2: Agregando un nuevo core al sistema (GPIOs), analizando el flujo de diseo
Targeting: EDK-Microblaze 13.2 & Spartan-3A Board Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-1 al sistema y flujo de diseo IPN 2012
Lab 2: Agregando un nuevo core al sistema (GPIOs), analizando el flujo de diseo Introduccin Este laboratorio guia al asistente a travs de las herramientas EDK, XPS y BSB para realizar un sistema empotrado para FPGAs Objetivos Despus de completer este laboratorio, el asistente sera capaz de: Realizar un diseo base con la herramienta BSB Configurar la parte hardware y software del sistema empotrado Agregar un nuevo core al sistema (uso de GPIOs) Aprender cmo funciona el flujo de diseo para sistemas empotrados en FPGAs
Descripcin del diseo Realizar un sistema base en BSB, despus agregar dos perifricos GPIO para el manejo de los switches y LEDs; por otro lado se crear una aplicacin software en donde se observe el manejo de los drivers para los cores tipo GPIO, el texto en verde de la figura A representa estas modificaciones. Al mismo tiempo que el sistema se va creando se analiza el flujo de diseo de la herramienta EDK, los archivos generados y como trabaja EDK under the hood.
Figura A. Diagrama conceptual para el sistema base y modificaciones a realizar
manejo de drivers GPIO Juan Carlos Moctezuma Eugenio Lab 2: Agregando un nuevo core al sistema y flujo de diseo
Procedimiento En esta seccin el alumno encontrar todos los pasos necesarios para realizar el laboratorio. El procedimiento incluye los siguientes pasos principales 1. Crear un sistema base usando BSB 2. Agregar un nuevo core 3. Realizar la aplicacin software 4. Implementar el sistema en una tarjeta FP Cada paso principal del procedimiento es instrucciones especficas para alcanzar el objetivo final Cuando se pida alguna informacin al asistente o que re cono Paso 1. Crear un sistema base usando BSB Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar base. O Abrir la herramienta XPS Suite 13.2 EDK Xilinx Platform Studio O A continuacin aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar Base System Builder wizard New Project O En la siguiente ventana, dar el nombre Lab2 y que se encuentre en el directorio de trabajo La ruta seleccionada NO debe tener espacios. Activar la casilla que se usar para estos laboratorios, Click <OK>
Figura 1-1. Crear un nuevo proyecto ? Juan Carlos Moctezuma Eugenio Sistemas Empotrados en EDK IPN 2012
encontrar todos los pasos necesarios para realizar el laboratorio. El procedimiento incluye los siguientes pasos principales: Crear un sistema base usando BSB Agregar un nuevo core Realizar la aplicacin software Implementar el sistema en una tarjeta FPGA Cada paso principal del procedimiento es indicado por el cono . Cada paso a su vez tiene instrucciones especficas para alcanzar el objetivo final. Cuando se pida alguna informacin al asistente o que responda ciertas preguntas aparecer el sistema base usando BSB Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar la herramienta XPS seleccionando Menu Inicio Programas Xilinx ISE Design Xilinx Platform Studio A continuacin aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar Builder wizard. Click <OK>. En caso de que no aparezca esta ventana ir al men En la siguiente ventana, dar el nombre system.xmp al proyecto. Crear una nueva carpeta llamada y que se encuentre en el directorio de trabajo Lab_user,tal y como se muestra en la La ruta seleccionada NO debe tener espacios. Activar la casilla PLB System, el cual es el tipo de bus que se usar para estos laboratorios, Click <OK>
Crear un nuevo proyecto
2-2
encontrar todos los pasos necesarios para realizar el laboratorio. El procedimiento indicado por el cono . Cada paso a su vez tiene ciertas preguntas aparecer el Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema Xilinx ISE Design A continuacin aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar . Click <OK>. En caso de que no aparezca esta ventana ir al men File al proyecto. Crear una nueva carpeta llamada tal y como se muestra en la figura 1-1. el cual es el tipo de bus Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-3 al sistema y flujo de diseo IPN 2012
O Posteriormente seleccionar I would create a new design, click <NEXT>. Despus seleccionar la tarjeta Spartan 3A Starter Kit como se muestra en la figura 1-2, click <NEXT>
Figura 1-2. Seleccionar el tipo de tarjeta FPGA que ser usada O En estos momentos comienza la configuracin de la plataforma hardware del sistema. Seguir el siguiente procedimiento:
Seleccionar Single Processor System, click <NEXT> Reference clock frequency: 50 MHz Processor : Microblaze System clock frequency: 62.50 MHz Local Memory: 16 KB Debug Interface: On Chip HW Debug Module, click <NEXT>
El siguiente paso es seleccionar los components hardware del sistema (cores/perifricos), seleccionar los perifricos de tal forma que en la columna Processor 1 (Microblaze) Peripherals queden nicamente los siguientes elementos: (Apoyarse de los botones ADD y REMOVE)
BTNs_4bit: Seleccionar (dejar valores por default) RS232_DCE: Seleccionar (dejar valores por default) dlmb_ctrl: Seleccionar (dejar valores por default) ilmb_ctrl: Seleccionar (dejar valores por default), click <NEXT> O Finalmente se abre la ventana donde se configura la memoria cache. En este caso NO se utiliza memoria cache, as que permanecen deseleccionadas las dos opciones. Click <NEXT>, click <FINISH> El sistema base ha sido construido usando el BSB, al final en el XPS se deber visualizar un sistema como el de la figura 1-3.
Figura 1-3. Sistema empotrado FPGA creado con BSB Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-4 al sistema y flujo de diseo IPN 2012
De esta forma se ha creado el sistema base. A continuacin se realiza el proceso de agregar un nuevo core al sistema.
Paso 2. Agregar un nuevo core al sistema base El paso siguiente es agregar un core de Xilinx al sistema base. Xilinx ofrece una gran variedad de cores que se encuentran disponibles para el usuario. O En la pestaa IP Catalog, buscar la categora General Purpose IO y dar doble click en el core XPS General Purpose IO, click <YES>, con esto abre una ventana para configurar el core, dejamos las opciones por defecto, click <OK>. Repetir este procedimiento una vez ms para agregar otro GPIO. Al final el sistema deber tener 2 nuevos GPIOs agregados
Figura 2-1. Agregar un core XPS_GPIO O En el System Assembly View, en la pestaa Bus Interface, buscar la el core xps_gpio_0, cambiar el nombre a LEDs. Despus cambiar el nombre del core xps_gpio_1 a Switches. Para cambiar el nombre de los cores, primero seleccione el core, despus dar un click extra sobre el mismo core y aparecer activado el cursor para cambiar el nombre. Posteriormente conectar ambos GPIOs al bus PLB. Al final el sistema debe quedar como en la figura 2-2.
Figura 2-2. Dar nombre a los nuevos cores y conectarlos al bus PLB Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-5 al sistema y flujo de diseo IPN 2012
O Dar doble click sobre el core LEDs y colocar las siguientes configuraciones
Data Channel Width: 8 Channel 1 Input Only : FALSE De igual forma dar doble click en el core Switches y colocar las siguientes configuraciones:
Data Channel Width: 4 Channel 1 Input Only : TRUE O Cambiarse a la pestaa Ports, desglosar el core LEDs, desglosar la opcin (IO_IF) gpio_0 y seleccionar en el campo GPIO_IO_O Make external. Desglozar ahora el core Switches desglosar la opcin (IO_IF) gpio_0 y seleccionar en el campo GPIO_IO_I Make external. Con estas modificaciones se est creando puertos externos tanto para los LEDs como para los Switches. Note que en la opcin External Ports se han agregado estos dos puertos externos (figura 2-3). Note adems que el campo Range tiene el formato (0 to 3) y (0 to 7)
Figura 2-3. Agregando puertos externos para los nuevos cores O Ir ahora a la pestaa Addresss y dar click en el botn Generate Addresses para generar automticamente el espacio de memoria para los nuevos perifricos. Por default asigna 64K a cada perifrico O El paso siguiente es realizar la asignacin de pines a los nuevos perifricos en el archivo UCF. En la pestaa Project dar doble click al archivo system.ucf. Capturar las siguientes restricciones. Corroborar esta asignacin de pines en el archivo IPNEDK/Datasheet/Spartan3A.pdf
Net LEDs_GPIO_IO_O_pin* IOSTANDARD = LVCMOS33; NET LEDs_GPIO_IO_O_pin<0> LOC = "R20"; NET LEDs_GPIO_IO_O_pin<1> LOC = "T19"; NET LEDs_GPIO_IO_O_pin<2> LOC = "U20"; NET LEDs_GPIO_IO_O_pin<3> LOC = "U19"; NET LEDs_GPIO_IO_O_pin<4> LOC = "V19"; NET LEDs_GPIO_IO_O_pin<5> LOC = "V20"; NET LEDs_GPIO_IO_O_pin<6> LOC = "Y22"; NET LEDs_GPIO_IO_O_pin<7> LOC = "W21";
Net Switches_GPIO_IO_I_pin* IOSTANDARD = LVCMOS33; NET Switches_GPIO_IO_I_pin<0> LOC = "V8"; NET Switches_GPIO_IO_I_pin<1> LOC = "U10"; NET Switches_GPIO_IO_I_pin<2> LOC = "U8"; NET Switches_GPIO_IO_I_pin<3> LOC = "T9"; Figura 2-4. Asignacin de pines para los nuevos cores O Hasta este momento finaliza la configuracin del hardware del sistema. El paso final es generar el archivo bitstream. ANTES de realizar este paso anote en una hoja cual es la estructura de carpetas dentro del directorio del proyecto. Despus seleccionar la opcin Men Hardware Generate Netlist (este proceso tarda de 15 min aproximadamente) Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-6 al sistema y flujo de diseo IPN 2012
1. En la ventana de Project, dar doble click en el archivo system.mhs. Encuentre la definicin para el core RS232_DCE y defina para que siven las instrucciones PARAMETER, BUS_INTERFACE y PORT. Qu tipo de dato o informacin definen estas instrucciones?
2. Note que ahora la estructura del directorio despus del Generate netlist ha agregado nuevas carpetas al proyecto Lab2 (figura 1-3). Cules son las carpetas nuevas?
Figura 1-1. Estructura del directorio despus del Generate Netlist
3. En la carpeta hdl enlistar los archivos VHDL wrapper e identificarlos con el sistema. Qu representan estos archivos?. Los archivos wrapper son arrojados por la herramienta PlatGen en el flujo de diseo hardware
4. En la carpeta Implementation enlistar los archivos NGC, Qu representan estos archivos?
O Seleccionar la opcin Men Hardware Generate Bitstream. Este paso constituye la segunda parte del flujo de diseo a nivel hardware para generar el archivo BIT. NOTA: Para las preguntas siguientes apoyarse de la hora y fecha de modificacin de los archivos para saber cules fueron creados en la etapa de Generate Bistream 5. Enliste los archivos NGD que arroja como salida la herramienta NGDBuild en la carpeta Implementation. Qu representan estos archivos? , Cules son los archivos de entrada para la herramienta NGDBuild?
? ? Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-7 al sistema y flujo de diseo IPN 2012
6. Cules son los archivos de entrada y de salida para el proceso de Mapeo?, ubicar estos archivos en la carpeta Implementation
7. Cules son los archivos de entrada y salida para el proceso de Place & Route? , ubicar estos archivos en la carpeta Implementation
8. Cual es el archivo de entrada y salida para el proceso BitGen? , ubicar estos archivos en la carpeta Implementation
Paso 3. Realizar la aplicacin software El siguiente paso es desarrollar la parte software del sistema. En esta parte se utiliza la herramienta SDK (Software Development Kit) y bsicamente se realizan 3 proyectos: la plataforma de informacin hardware, el BSP (board support package) y la aplicacin de usuario. O Exportar la informacin de la plataforma hardware hacia SDK. Click en el botn <EXPORT HARDWARE DESIGN TO EDK>. Despus se visualiza una ventana donde se selecciona Export & Launch SDK (figura 3-1)
Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-8 al sistema y flujo de diseo IPN 2012
Figura 3-1. Exportar la informacin hardware hacia SDK. O En el cuadro de dilogo que se muestra a continuacin seleccionar la ruta Lab_user\Lab2\SDK como el directorio workspace (figura 3-2), click <OK>
Figura 3-2. Seleccionar el directorio Workspace O Una vez que el entorno SDK es abierto, se crea automticamente un proyecto llamado hw_platform_0 (parte izquierda en Project Explorer), este proyecto contiene la informacin hardware necesaria y se conforma por 3 tipos de archivos: BMM, BIT y XML. Opcionalmente este proyecto hardware puede ser creado de forma manual desde el men File New Xilinx Hardware Platform Specification O El siguiente paso es crear un proyecto para crear el BSP. Ir al men File New Xilinx Board Support Package, despus aparece la ventana en donde se selecciona el tipo de BSP (o sistema operativo) a usar, en este caso ser un STANDALONE. Se dejan todas las opciones por defecto y dar click <FINISH> (figura 3-3) Despus se abre la ventana de configuracin del BSP en donde se pueden seleccionar algunas libreras y drivers para cada uno de los perifricos en el sistema. Explorar los diferentes campos y dejar todas las opciones por defecto, click <OK>. Nuevamente en el Project Explorer se puede visualizar el nuevo proyecto realizado llamado standalone_bsp_0 Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-9 al sistema y flujo de diseo IPN 2012
Figura 3-3. Configuracin del BSP. O El siguiente paso consiste en crear un proyecto para la aplicacin de usuario. Ir al Men New Xilinx C Project, dar como nombre de proyecto TestApp1 y seleccionar como template Empty Application. (figura 3-4). Click <NEXT> En la siguiente ventana seleccionar Target an existing Board Support Package standalone_bsp_0, click <FINISH>. (figura 3-4)
Figura 3-4. Creando el proyecto para la aplicacin de usuario en C. O En la ventana Project Explorer, Click DERECHO sobre la carpeta TestApp1 src y seleccionar Import
Ir a General File system, click <NEXT>
Click <BROWSE>, Seleccionar la carpeta IPNEDK/Codigos/Lab2, click <OK>
Seleccionar la casilla lab2code.c , click <FINISH>
Al final el entorno SDK se tiene que visualizar como en la figura 3-5. Note la creacin de los 3 proyectos en la ventana Project Explorer Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-10 al sistema y flujo de diseo IPN 2012
El proyecto completo automticamente es compilado y el archivo ejecutable ELF que realiza un test de memoria est listo en la carpeta Lab2/SDK/TestApp1/Debug/TestApp1.elf
Figura 3-5. Entorno SDK para la parte software del sistema.
9. Abrir el archivo lab2code.c, Cules son las operaciones que realizan los Buttons, Switches y LEDs en la aplicacin software?
10. Cuntas rutinas de secuencia de LEDs estn implementadas en el cdigo?, En que consiste cada una?
11. Qu recurso de la tarjeta FPGA define el tipo de operacin que se va a realizar?
12. Indique 3 pasos que consideres principales en el uso de GPIOs y enliste las funciones involucradas ?
? Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-11 al sistema y flujo de diseo IPN 2012
Paso 4. Implementar el sistema en una tarjeta FPGA El paso final consiste en juntar las partes hardware y software del sistema en un solo archivo de configuracin BIT para poder programar el FPGA. La herramienta que logra realizar la fusin es llamada BitInit O El primer paso es conectar y prender la tarjeta FPGA Spartan 3A para validar el sistema. Tener conectado tambin un cable serial-USB a la computadora y al conector serial de la tarjeta FPGA. O En la pestaa Terminal 1, dar click en <SETTINGS> y configurar la terminal para que se comporte como un puerto serial de 9600 Baud Rates, (figura 4-1). IMPORTANTE: Note que el nmero de puerto debe coincidir con el puerto al que est conectado el convertidor USB-SERIAL. Finalmente dar click en el botn <CONNECT>
Figura 4-1. Configurando el puerto serial que se comunica con la tarjeta FPGA O En el siguiente paso se programa la tarjeta FPGA, click en el botn <PROGRAM FPGA>.
En la ventana que aparece a continuacin se pude seleccionar con que aplicacin inicial ser programado el FPGA, seleccionar TestApp1.elf (figura 4-3), click <PROGRAM> Juan Carlos Moctezuma Eugenio
Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-12 al sistema y flujo de diseo IPN 2012
Figura 4-3. Programar el FPGA con una aplicacin inicial (bootloop o ELF)
O Despus que el FPGA es programado con la aplicacin de usuario el resultado debe visualizarse en la ventana Terminal 1 en SDK y tiene que ser como se muestra en la figura 4-3. Analice este resultado relacionndolo con el cdigo del Test de Memoria. Oprimir el botn de RESET en la tarjeta FPGA para volver a correr la aplicacin.