13
Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE Design Labs based on: Lab 7: Uso de coprocesadores y módulos Core Generator Targeting: EDK-Microblaze 13.2 & Spartan-3A Board

Uso de coprocesadores y modulos core generator

Embed Size (px)

DESCRIPTION

En este laboratorio se enseña el crear modulos , usando como sistema base el microblaze y codigo en C

Citation preview

Page 1: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE

Design Labs based on:

Lab 7: Uso de coprocesadores y

módulos Core Generator

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

Page 2: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-1 Core Generator IPN – 2012

Lab 7: Coprocesadores y módulos Core Generator

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 FSL para usarlo como co-procesador

• Instanciar un módulo hecho en Core Generator en un sistema Microblaze

• Aprender a crear aplicaciones para manejo de los co-procesadores

Descripción del diseño

Realizar un sistema base en BSB, después agregar un co-procesador (interfaz FSL) el cual trabaje

con una unidad de punto flotante (FPU) hecha con la herramienta Core Generator, además crear una

máquina de estados para poder leer/escribir datos a la FPU. Por otro lado se creará una aplicación

software en donde el usuario pueda hacer uso del co-procesador, específicamente de las funciones

put() y get().

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

lab7code.c

manejo de

co-

procesadores

FSL FPU (Core Generator)

Page 3: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Core Generator

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 co-procesador e instanciar un módulo Core Generator

3. Realizar la aplicación

4. Implementar el sistema en una tarjeta FPGA

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 diseño base usando BSB

Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realiza

base usando BSB.

� Abrir la herramienta XPS seleccionando

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

Lab7 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

oprocesadores y módulos 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

procesador e instanciar un módulo Core Generator

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

Crear un diseño base usando BSB

Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realiza

Abrir 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

System 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

7-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: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-3 Core Generator 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.5 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: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-4 Core Generator IPN – 2012

Paso 2. Agregar un co-procesador e instanciar un módulo Core Generator

El paso siguiente es crear e importar un core personalizado (hecho por el usuario) al

sistema. Xilinx ofrece herramientas software para que el usuario pueda crear sus

propios periféricos de una forma sencilla.

� Antes de comenzar el uso de co-procesadores. Primero se crea la unidad de punto flotante (FPU)

usando la herramienta Core Generator. Ir al Menú Inicio ���� Programas ���� Xilinx ISE Design Suite

13.2 ���� ISE Design Tools ���� Tools ���� Core Generator. Seguir los siguientes pasos

• Menú File ���� New Project. Crear un nuevo proyecto en el directorio

IPNEDK/Lab_user/lab7_cg con el nombre por defecto coregen.cgp

• En la siguiente ventana se configura el dispositivo. Seleccionar Spartan 3A ���� xc3s700a ����

fg484 ���� -4, click <OK>

• En la ventana IP Catalog, Ir a Math Functions ���� Floating Point, dar doble click en el módulo

Floating Point 5.0, con esto abrirá un wizard de configuración de parámetros para dicho core.

• Configurar los siguientes parámetros del wizard:

o Component Name: my_fpumult

o Function: Multiply, click <NEXT>

o Floating-point precision: Single, click <NEXT>

o Seleccionar: Full usage 4 x MULT18x18

o Use Maximum Latency: Deseleccionar

o Latency: 1, click <NEXT>

o Seleccionar: OPERATION_ND, OPERATION_RFD, RDY;

o click <GENERATE>

1. Enlistar los archivos generados por Core Generator en la carpeta “lab7_cg”. ¿Cuáles son los

archivos importantes que se deben incluir en el sistema Microblaze?

2. ¿Qué función realizan las directivas -- synthesis translate_off(on) en el archivo

my_fpumult.vhd?

� Una vez creado el core FPU en Core Generator, el siguiente paso es la creación del nuevo CO-

PROCESADOR. Ir a Xilinx Platform Studio y seleccionar Menú Hardware ���� Create Import

Peripheral…, Con esta opción se abre el wizard para crear/importar un periférico hecho por el

usuario; al final se tiene un core “template” que el usuario podrá modificar para que realice la

tarea deseada.

?

Page 6: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-5 Core Generator IPN – 2012

Figura 2-1. Abrir el Wizard para Crear/Importar un periférico

� Seguir el siguiente procedimiento para el Wizard de Create/Import Peripheral…

• Click <NEXT> en la ventana de bienvenida

• Seleccionar Create Template for new peripheral, click <NEXT>

• Seleccionar To an XPS Project, click <NEXT>

• Name: co_fpu, Version: 1.00.a, click <NEXT>

• Bus Type: Fast Simple Link (FSL), click <NEXT>

• Number of input: 2

• Number of output: 1; click <NEXT>

• Seleccionar únicamente Generate template driver files…, click <NEXT>

• Functional description: FPU Coprocesador

o Number of input arguments: 2

o Number of output arguments: 1; click <NEXT>

• Click <FINISH>

� El siguiente paso es modificar el código VHDL del nuevo coprocesador con la finalidad de

agregar las funcionalidades de escritura/lectura hacia la unidad de punto flotante. Abrir el archivo

co_fpu.vhd (generado en el directorio “pcores”) y realizar las siguientes modificaciones:

• ELIMINAR todo el código únicamente de la arquitectura, al final se tiene un arquitectura

“vacía”, tal y como se muestra a continuación:

• Copiar el código del archivo IPNEDK/Codigos/lab7/FSL_CODE.txt dentro de la arquitectura

“vacía” del archivo co_fpu.vhd GUARDAR los cambios y cerrar el archivo

� Una vez que las modificaciones a los archivos VHDL fueron realizadas, el siguiente paso es

importar el periférico. Seleccionar nuevamente la opción Menú Hardware ���� Create Import

Peripheral…

Page 7: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-6 Core Generator IPN – 2012

Seguir el siguiente procedimiento para el Wizard de Create/Import Peripheral…

• Click <NEXT> en la ventana de bienvenida

• Seleccionar Import existing peripheral, click <NEXT>

• Seleccionar To an XPS Project, click <NEXT>

• Name: co_fpu, Seleccionar Use Version: 1.00.a, click <NEXT>. Indica que ya hay un

core con ese nombre y que si deseamos sobreescribirlo, click <YES>.

• Seleccionar las casillas : HDL Source files y Netlist files, click <NEXT>

• Seleccionar Use existing Peripheral Analysis Order (*.pao), click <BROWSE>; seleccionar el

archivo co_fpu_v1_00_a ���� data ���� co_fpu_v2_1_0.pao, click <OK>, click <NEXT>

• En la ventana de HDL Analysis Information; dar click <ADD FILES…> y seleccionar el

archivo creado por Core Generator IPNEDK/Lab_user/lab7_cg/my_fpumult.vhd.

Mover el archivo my_fpumult.vhd arriba del archivo co_fpu.vhd para respetar el orden de

jerarquía para sintetizar de manera correcta el nuevo core (figura 2-3); click <NEXT>.

Si existe algún error de sintaxis en los archive VHDL muestra una ventana de error, de lo

contrario pasa a la siguiente ventana del wizard. Si existe algún error, corregirlo y volver a

importar el periférico.

Figura 2-3. Ordenar jerárquicamente los archivos VHDL a sintetizar.

• Seleccionar Select Bus Interfaces, seleccionar FSL Master y FSL Slave (MFSL/SFSL); click

<NEXT>

• click <NEXT> DOS veces

• Deseleccionar Select and configure interrupts; click <NEXT>

• Ventana Port attributes, click <NEXT>

• Ventana Net File List, click <SELECT FILES>, buscar el archivo NGC

IPNEDK/Lab_user_lab7_cg/my_fpumult.ngc ; click <NEXT>

• Click <FINISH>

� Ir al menú Hardware ���� Configure Coprocessor. Seleccionar el coprocesador co_fpu; click

<ADD>; click <OK>. En este momento el coprocesador es conectado al procesador Microblaze

3. Realizar un diagrama esquemático donde muestre la interconexión entre Microblaze y el

coprocesador co_fpu. Ayudarse de las conexiones en el System Assembly View

?

Page 8: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-7 Core Generator IPN – 2012

4. En el archivo co_fpu.vhd. Dibujar la máquina de estados que controla el flujo de datos hacia

la unidad de punto flotante

5. Explicar que es lo que hacen las líneas

FSL_S_Read <= FSL_S_Exists when ((state=Read_Input1)or(state=Read_Input2)) else '0';

FSL_M_Write <= not FSL_M_Full when state=Write_Outputs else '0';

FSL_M_Data <= res;

� Ir al Menú Project ���� Project Options ���� Pestaña Design Flow, DESHABILITAR la opción “Treat

timing closure failure as an error”. Algunas veces las restricciones de tiempo no son logradas, esta

opción permite seguir con la implementación del diseño aún cuando estas restricciones no se logren.

� Hasta este momento finaliza la configuración del hardware del sistema. El paso final es generar el

archivo bitstream. Seleccionar la opción Menú Hardware ���� Generate Bitstream (este proceso

tarda de 15 min aproximadamente)

Page 9: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-8 Core Generator IPN – 2012

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)

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\Lab7\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

Page 10: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-9 Core Generator IPN – 2012

� Antes de crear el Board Support Package, es necesario incorporar los drivers del core ALU al

proyecto. Ir a Menú Xilinx Tools ���� Repositories. En el campo “Local Repositories”, click <NEW>,

buscar el directorio del proyecto IPNEDK/Lab_user/Lab7, click <APPLY>, click <OK>.

� 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

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.

Page 11: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-10 Core Generator IPN – 2012

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/Lab7, click <OK>

Seleccionar las casillas lab7code.c, click <FINISH>

6. Definir que es lo que realiza la función printFP

7. ¿En donde se encuentran definidas las funciones write_into_fsl y

read_from_fsl?, ¿A qué funciones equivalen?

8. ¿Cómo funciona un tipo de dato UNION?

?

Page 12: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-11 Core Generator 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: Uso de coprocesadores  y modulos core generator

Juan Carlos Moctezuma Eugenio

Lab 7: Coprocesadores y módulos Sistemas Empotrados en EDK 7-12 Core Generator IPN – 2012

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

� Después que el FPGA es programado el resultado de la aplicación se observa en la figura 4-4.

Figura 4-4. Salida del Test en el Terminal