Lab2, Sistemas embebidos, Agregando GPIOS

13
Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE Design Labs based on: Lab 2: Agregando un nuevo core al sistema (GPIOs), analizando el flujo de diseño Targeting: EDK-Microblaze 13.2 & Spartan-3A Board

description

Este laboratorio guia al asistente a travez del EDK, XPS y BSB para realizar un sistema empotrado para FPGA

Transcript of Lab2, Sistemas embebidos, Agregando GPIOS

Page 1: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE

Design Labs based on:

Lab 2: Agregando un nuevo core al

sistema (GPIOs), analizando el flujo

de diseño

Targeting: EDK-Microblaze 13.2 & Spartan-3A Board

Page 2: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-1 al sistema y flujo de diseño IPN – 2012

Lab 2: Agregando un nuevo core al sistema (GPIOs), analizando el flujo de diseño

Introducción

Este laboratorio guia al asistente a través de las herramientas EDK, XPS y BSB para realizar un

sistema empotrado para FPGAs

Objetivos

Después de completer este laboratorio, el asistente sera capaz de:

• Realizar un diseño base con la herramienta BSB

• Configurar la parte hardware y software del sistema empotrado

• Agregar un nuevo core al sistema (uso de GPIOs)

• Aprender cómo funciona el flujo de diseño para sistemas empotrados en FPGAs

Descripción del diseño

Realizar un sistema base en BSB, después agregar dos periféricos GPIO para el manejo de los

switches y LEDs; por otro lado se creará una aplicación 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 diseño 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

BRAM

LMB

BRAM

Cnttlr

LMB

BRAM

Cnttlr

Microblaze

UART

GPIO Buttons

Stdin/Stdout

GPIO Switches

GPIO LEDs

lab2_test.c

manejo de

drivers

GPIO

Page 3: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core al sistema y flujo de diseño

Procedimiento

En esta sección 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 aplicación software

4. Implementar el sistema en una tarjeta FP

Cada paso principal del procedimiento es

instrucciones específicas para alcanzar el objetivo final

Cuando se pida alguna información 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.

� Abrir la herramienta XPS

Suite 13.2 →→→→ EDK →→→→ Xilinx Platform Studio

� A continuación aparece una ventana indicando la forma de iniciar un nuevo proyecto. Seleccionar

Base System Builder wizard

���� New Project …

� 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 aplicación 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 específicas para alcanzar el objetivo final.

Cuando se pida alguna información 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 continuación 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 continuación 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

Page 4: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-3 al sistema y flujo de diseño IPN – 2012

� Posteriormente seleccionar I would create a new design, click <NEXT>. Después 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

� En estos momentos comienza la configuración 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/periféricos), seleccionar

los periféricos 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>

� 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

Page 5: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-4 al sistema y flujo de diseño IPN – 2012

De esta forma se ha creado el sistema base. A continuación 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.

� En la pestaña IP Catalog, buscar la categoría 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 más para

agregar otro GPIO. Al final el sistema deberá tener 2 nuevos GPIOs agregados

Figura 2-1. Agregar un core XPS_GPIO

� En el System Assembly View, en la pestaña Bus Interface, buscar la el core xps_gpio_0,

cambiar el nombre a LEDs. Después cambiar el nombre del core xps_gpio_1 a Switches. Para

cambiar el nombre de los cores, primero seleccione el core, después 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

Page 6: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-5 al sistema y flujo de diseño IPN – 2012

� 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

� Cambiarse a la pestaña Ports, desglosar el core LEDs, desglosar la opción (IO_IF) gpio_0 y

seleccionar en el campo GPIO_IO_O ���� Make external. Desglozar ahora el core Switches desglosar

la opción (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 opción External Ports se han agregado estos dos puertos externos (figura 2-3). Note

además que el campo Range tiene el formato (0 to 3) y (0 to 7)

Figura 2-3. Agregando puertos externos para los nuevos cores

� Ir ahora a la pestaña Addresss y dar click en el botón Generate Addresses para generar

automáticamente el espacio de memoria para los nuevos periféricos. Por default asigna 64K a cada

periférico

� El paso siguiente es realizar la asignación de pines a los nuevos periféricos en el archivo UCF. En

la pestaña Project dar doble click al archivo system.ucf. Capturar las siguientes restricciones.

Corroborar esta asignación 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. Asignación de pines para los nuevos cores

� Hasta este momento finaliza la configuración 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. Después seleccionar la opción Menú Hardware ���� Generate

Netlist (este proceso tarda de 15 min aproximadamente)

Page 7: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-6 al sistema y flujo de diseño IPN – 2012

1. En la ventana de Project, dar doble click en el archivo system.mhs. Encuentre la definición

para el core RS232_DCE y defina para que siven las instrucciones PARAMETER,

BUS_INTERFACE y PORT. ¿Qué tipo de “dato” o “información” definen estas

instrucciones?

2. Note que ahora la estructura del directorio después del “Generate netlist” ha agregado nuevas

carpetas al proyecto Lab2 (figura 1-3). ¿Cuáles son las carpetas nuevas?

Figura 1-1. Estructura del directorio después 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 diseño hardware

4. En la carpeta Implementation enlistar los archivos NGC, ¿Qué representan estos archivos?

Seleccionar la opción Menú Hardware ���� Generate Bitstream. Este paso constituye la

segunda parte del flujo de diseño a nivel hardware para generar el archivo BIT.

NOTA: Para las preguntas siguientes apoyarse de la hora y fecha de modificación de los archivos

para saber cuáles 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? , ¿Cuáles son los archivos de entrada para

la herramienta NGDBuild?

?

?

Page 8: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-7 al sistema y flujo de diseño IPN – 2012

6. ¿Cuáles son los archivos de entrada y de salida para el proceso de Mapeo?, ubicar estos

archivos en la carpeta Implementation

7. ¿Cuáles 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 aplicación software

El siguiente paso es desarrollar la parte software del sistema. En esta parte se utiliza

la herramienta SDK (Software Development Kit) y básicamente se realizan 3

proyectos: la plataforma de información hardware, el BSP (board support package) y

la aplicación de usuario.

� Exportar la información de la plataforma hardware hacia SDK. Click en el botón <EXPORT

HARDWARE DESIGN TO EDK>. Después se visualiza una ventana donde se selecciona “Export &

Launch SDK” (figura 3-1)

Page 9: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-8 al sistema y flujo de diseño IPN – 2012

Figura 3-1. Exportar la información hardware hacia SDK.

� En el cuadro de diálogo que se muestra a continuación seleccionar la ruta Lab_user\Lab2\SDK

como el directorio workspace (figura 3-2), click <OK>

Figura 3-2. Seleccionar el directorio Workspace

� Una vez que el entorno SDK es abierto, se crea automáticamente un proyecto llamado

hw_platform_0 (parte izquierda en Project Explorer), este proyecto contiene la información 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

� El siguiente paso es crear un proyecto para crear el BSP. Ir al menú File ���� New ���� Xilinx

Board Support Package, después 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)

Después se abre la ventana de configuración del BSP en donde se pueden seleccionar algunas librerías

y drivers para cada uno de los periféricos 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

Page 10: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-9 al sistema y flujo de diseño IPN – 2012

Figura 3-3. Configuración del BSP.

� El siguiente paso consiste en crear un proyecto para la aplicación 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 aplicación de usuario en C.

� 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 creación de los 3

proyectos en la ventana Project Explorer

Page 11: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-10 al sistema y flujo de diseño IPN – 2012

El proyecto completo automáticamente 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, ¿Cuáles son las operaciones que realizan los Buttons, Switches y

LEDs en la aplicación software?

10. ¿Cuántas rutinas de secuencia de LEDs están implementadas en el código?, ¿En que consiste cada una?

11. ¿Qué recurso de la tarjeta FPGA define el tipo de operación que se va a realizar?

12. ¿Indique 3 pasos que consideres principales en el uso de GPIOs y enliste las funciones involucradas ?

?

Page 12: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-11 al sistema y flujo de diseño 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 configuración BIT para poder programar el FPGA. La herramienta que

logra realizar la fusión es llamada BitInit

� El primer paso es conectar y prender la tarjeta FPGA Spartan 3A para validar el sistema. Tener

conectado también un cable serial-USB a la computadora y al conector serial de la tarjeta FPGA.

� En la pestaña 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

número de puerto debe coincidir con el puerto al que está conectado el convertidor USB-SERIAL.

Finalmente dar click en el botón <CONNECT>

Figura 4-1. Configurando el puerto serial que se comunica con la tarjeta FPGA

� En el siguiente paso se programa la tarjeta FPGA, click en el botón <PROGRAM FPGA>.

En la ventana que aparece a continuación se pude seleccionar con que aplicación inicial será

programado el FPGA, seleccionar TestApp1.elf (figura 4-3), click <PROGRAM>

Page 13: Lab2, Sistemas embebidos, Agregando GPIOS

Juan Carlos Moctezuma Eugenio

Lab 2: Agregando un nuevo core Sistemas Empotrados en EDK 2-12 al sistema y flujo de diseño IPN – 2012

Figura 4-3. Programar el FPGA con una aplicación inicial (bootloop o ELF)

� Después que el FPGA es programado con la aplicación 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 relacionándolo con el código del Test de Memoria. Oprimir el botón de RESET en la tarjeta

FPGA para volver a correr la aplicación.

Figura 4-3. Salida del Test en el Terminal