Targeting: EDK-Microblaze 13.2 & Spartan-3A Board Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-1 personalizado IPN 2012
Lab 5: Creacin de un core personalizado: ALU 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 personalizado al sistema Aprender a crear drivers para en la aplicacin software
Descripcin del diseo Realizar un sistema base en BSB, despus agregar un perifrico personalizado que realice la funcin de una ALU. Por otro lado se crear una aplicacin software en donde se escriban valores de entrada a la ALU y se lea el resultado. Este core tambin tendr el objetivo de leer el estado de los switches para seleccionar la operacin a realizar de la ALU.
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 ALU Switches lab5code.c
manejo de drivers ALU Juan Carlos Moctezuma Eugenio Lab 5: Creacin de un core ALU personalizado
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 e importar un 3. Realizar la aplicacin software 4. Implementar el sistema en una tarjeta FPGA 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 diseo base usando BSB Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema base usando BSB. O Abrir la herramienta XPS seleccionando 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, Lab5 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 guientes pasos principales: Crear un sistema base usando BSB Agregar e importar un core personalizado 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 Crear un diseo base usando BSB Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema Abrir 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 Base 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
5-2 encontrar todos los pasos necesarios para realizar el laboratorio. El procedimiento 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 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-3 personalizado 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 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-4 personalizado IPN 2012
Paso 2. Agregar e importar un core personalizado al sistema El paso siguiente es crear e importar un core personalizado (hecho por el usuario) al sistmade. Xilinx ofrece herramientas software para que el usuario pueda crear sus propios perifricos de una forma sencilla. O El primer paso es la creacin del nuevo perifrico personalizado. Seleccionar Men Hardware Create Import Peripheral, Con esta opcin se abre el wizard para crear/importar un perifrico hecho por el usuario; al final se tiene un core template que el usuario podr modificar para que realice la tarea deseada.
Figura 2-1. Abrir el Wizard para Crear/Importar un perifrico O 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: my_alu, Version: 1.00.a, click <NEXT> Seleccionar: Processor Local Bus (PLB) Seleccionar SOLAMENTE los servicios: User Logic Software Registers y Sofware Reset, los dems servicios deben estar deseleccionados; click <NEXT> Ventana Slave Interface, click <NEXT> Number of software registers: 4 ; click <NEXT> Ventana IP Interconnect, click <NEXT> Ventana Peripheral Simulation Support, click <NEXT> Seleccionar nicamente Generate template driver files, click <NEXT> Click <FINISH>
1. Notar el contenido de las carpetas pcores y drivers dentro del directorio del proyecto Qu informacin contienen estas dos carpetas?
2. Cules son los archivos VHDL templates creados para el nuevo perifrico?, Cules son los drivers o funciones software que manejan el nuevo perifrico?
? Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-5 personalizado IPN 2012
O El siguiente paso es realizar las modificaciones al archivo user_logic.vhd y my_alu.vhd, esto con la finalidad de agregar las funcionalidades que requiere el core. Abrir el archivo user_logic.vhd localizado en la carpeta pcores\my_alu_v1_00_a\hdl\vhdl y realizar las siguientes modificaciones:
Localizar la declaracin de puertos (lnea 100 aprox.) y declarar un puerto de entrada op, este puerto es para poder conectar los switches. Note que en el archivo VHDL se indica donde el usuario puede aadir lneas de cdigo (por ejemplo USER ports added here)
Localizar el comienzo de la arquitectura (lnea 130 aprox.) y declarar las seales internas ent1, ent2 y res, las cuales representan las dos entradas y salida de la ALU respectivamente. Note que la ALU ser de 4 bits.
Ir al final de la arquitectura (lnea 243 aprox.) y capturar el cdigo VHDL que implementar la ALU. Las operaciones que realiza la ALU son: suma, resta, AND y OR. De los 4 registros software seleccionados en el wizard, el registro slv_reg1 ser para el primer operando y el registro slv_reg2 ser para el segundo operando de la ALU, mientras que el resultado se guarda en la seal res.
Localizar el proceso de lectura de registros (lnea 220 aprox.) y modificar el proceso agregando a la lista de sensitividad las seales op y res; adems cambiar el cdigo para que cuando en la aplicacin software se lea el reg0 de el valor de la seal res y cuando se lea el reg3 de el valor de la seal op (switches). GUARDAR los cambios realizados. Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-6 personalizado IPN 2012
Abrir el archivo my_alu.vhd . Localizar la parte de declaracin de puertos (lnea 165 aprox.) y declarar el puerto op, que ser el puerto que ir conectado a los switches.
Localizar la parte donde se mapea el componente user_logic (lnea 432 aprox.) y mapear el puerto op de my_alu con el puerto op del user_logic. GUARDAR los cambios realizados. Con esto finaliza la modificacin de los templates VHDL creados. Ahora el nuevo core est personalizado por el usuario.
3. Realice un diagrama esquemtico en donde se muestre la funcionalidad del nuevo perifrico, as como la interaccin de los registros a nivel software ? Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-7 personalizado IPN 2012
Figura 2-2. Diagrama esquemtico para el core personalizado O Una vez que las modificaciones a los archivos VHDL fueron realizadas, el siguiente paso es importar el perifrico. Seleccionar nuevamente la opcin Men Hardware Create Import Peripheral O 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: my_alu, Seleccionar Use Version: 1.00.a, click <NEXT>. Indica que ya existe un core con ese nombre y que si deseamos sobreescribirlo, click <YES>. Seleccionar SOLAMENTE: HDL Source files, click <NEXT> Seleccionar Use existing Peripheral Analysis Order (*.pao), click <BROWSE>; seleccionar el archivo my_alu_v1_00_a data my_alu_v2_1_0.pao, click <OK>, click <NEXT> En la ventana de HDL Analysis Information; click <NEXT>. Si existe algn error de sintaxis en los archive VHDL muestra una ventana de error, de lo contrario pasa a la siguiente ventana del wizard. Si existe algn error, corregirlo y volver a importar el perifrico. Seleccionar Select Bus Interfaces, seleccionar PLB Slave (SPLB); lick <NEXT> Ventana SPLB: port, click <NEXT> Ventana SPLB: parameter, Seleccionar C_BASEADDR y C_HIGHADDR respectivamente, click <NEXT> Deseleccionar Select and configure interrupts; click <NEXT> Ventana Port attributes, click <NEXT> Click <FINISH>
4. Abrir el archivo my_alu_v2_1_0.pao, indicar que representa este archivo
O Ir al Men Project Rescan user repositories. Ir a la pestaa IP Catalog, desglozar la categora USER y aadir el nuevo perifrico dando doble click sobre el core my_alu. Conectar el ? Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-8 personalizado IPN 2012
core al bus PLB y en este caso no hay nada que configurar en su cuadro de dilogo, el sistema con el nuevo core debe quedar como en la figura 2-3
Figura 2-3. Agregando el core hecho por el usuario. O Cambiarse a la pestaa Ports, desglozar el core my_alu_0 y seleccionar en el campo op Make external. Con estas modificaciones se esta creando puertos externos para los switches. Note que en la opcin External Ports se han agregado estos puertos externos (figura 2-4).
Figura 2-4. 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 restricciones para el nuevo core (figura 2-5). Corroborar esta asignacin de pines en el archivo IPNEDK/Datasheet/Spartan3A.pdf
NET my_alu_0_op_pin<0> LOC = U10 | IOSTANDARD = LVCMOS33; NET my_alu_0_op_pin<1> LOC = V8 | IOSTANDARD = LVCMOS33; Figura 2-5. Asignacin de pines para los nuevos cores G Hasta este momento finaliza la configuracin del hardware del sistema. El paso final es generar el archivo bitstream. Seleccionar la opcin Men Hardware Generate Bitstream (este proceso tarda de 15 min aproximadamente)
Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-9 personalizado IPN 2012
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)
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\Lab5\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 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/Lab5, click <APPLY>, click <OK>. Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-10 personalizado IPN 2012
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
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> Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-11 personalizado IPN 2012
Click <BROWSE>, Seleccionar la carpeta IPNEDK/Codigos/Lab5, click <OK>
Seleccionar las casillas lab5code.c, click <FINISH>
5. Definir las funciones que se encuentran definidas en el archivo my_alu.h, Cules son las instrucciones que se utilizan para leer y escribir a los registros hardware?
6. Defina el valor de las constantes REG0, REG1, REG2 y REG3, Por qu se asignan valores que aumentan de cuatro en cuatro?
7. Que instrucciones se usan para mandar datos a la ALU?, Qu instrucciones se usan para leer el resultado de la ALU?
8. Cmo es que la ALU realiza la operacin seleccionada de los switches?
? Juan Carlos Moctezuma Eugenio
Lab 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-12 personalizado 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 5: Creacin de un core ALU Sistemas Empotrados en EDK 5-13 personalizado IPN 2012
Figura 4-3. Programar el FPGA con una aplicacin inicial (bootloop o ELF) O Despus que el FPGA es programado el resultado de la aplicacin se observa en la figura 4-4. Ir girando el sensor de forma horizontal y verificar las lecturas obtenidas.
Figura 4-4. Salida del Test en el Terminal
9. Qu modificaciones habra que hacer para que el usuario pueda dar los operandos 1 y 2 desde el Hyperterminal?