Sistemas embebidos, comunicacion serial
-
Upload
mvictor619 -
Category
Documents
-
view
102 -
download
0
description
Transcript of Sistemas embebidos, comunicacion serial
Juan Carlos Moctezuma Eugenio Ciencias Computacionales – INAOE
Design Labs based on:
Lab 3: Interfaz serial MATLAB-
FPGA (uso del UART)
Targeting: EDK-Microblaze 13.2 & Spartan-3A Board
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-1 FPGA (uso del UART) IPN – 2012
Lab 3: Interfaz serial MATLAB-FPGA (uso del UART)
Introducción
Este laboratorio guia al asistente a través de las herramientas EDK, XPS, SDK 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
• Aprender a usar los drivers para crear una nueva aplicación software
Descripción del diseño
Realizar un sistema base en BSB, después agregar un periféricos UART para realizar la transferencia
de imagen desde MATLAB hacia el FPGA y viceversa. Por otro lado se creará una aplicación
software en donde se realice el manejo de los drivers para poder realizar esta transferencia, además el
FPGA realizará un procesamiento simple de modificación de brillo a la imagen de entrada,
posteriormente el FPGA devuelve la imagen hacia MATLAB. También se tendrá corriendo una
aplicación en MATLAB para poder realizar la transferencia de imágenes.
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 & MATLAB
lab3code.c
manejo de
drivers
UART
MPMC SDRAM
lab3.m
archivo M
MATLAB
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- FPGA (uso del UART)
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 diseño base usando BSB
Abrir la herramienta XPS (Xilinx Platform Studio) de EDK para realizar un sistema
base usando BSB.
� Abrir la herramienta XPS seleccionan
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
Lab3 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.
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 realizar un sistema
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
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
3-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
. 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 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-3 FPGA (uso del UART) 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
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-4 FPGA (uso del UART) IPN – 2012
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 Communication Low-Speed y dar doble click en
el core XPS UART (lite), click <YES>, con esto abre una ventana para configurar el core,
dejamos las opciones por defecto, click <OK>. Este nuevo core será el encargado de realizar la
transferencia de la imagen y al mismo tiempo será la entrada/salida estándar para el sistema.
Figura 2-1. Agregar un core XPS UART
� En el System Assembly View, en la pestaña Bus Interface, buscar el core xps_uartliteo_0,
cambiar el nombre a SERIAL_IMAGE. 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 el nuevo UART 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 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-5 FPGA (uso del UART) IPN – 2012
� Dar doble click sobre el core SERIAL_IMAGE y colocar las siguientes configuraciones
• Baud Rate: 115200
• Number of data bits : 8
• Use Parity: FALSE
Verificar en la pestaña System ���� PLB en el campo Clock Frequency of PLB Slave tenga el valor
de 62,500,000 Hz tal y como se muestra en la figura 2-3. Si no es así cambiar la frecuencia a 62.5
MHz, click <OK>.
Figura 2-3. Cambiar el reloj de frecuencia del bus a 62.5 MHz
� Cambiarse a la pestaña Ports, desglozar el core SERIAL_IMAGE ���� (IO_IF) y seleccionar en
el campo TX���� Make external. De igual manera el puerto RX���� Make External. Con estas
modificaciones estamos creando puertos externos para el transmisor y receptor del nuevo puerto
serial. Note que en la opción External Ports se han agregado estos dos puertos externos (figura 2-4).
Figura 2-4. 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 restricciones para el nuevo core
(figura 2-5). Corroborar esta asignación de pines en el archivo IPNEDK/Datasheet/Spartan3A.pdf
NET SERIAL_IMAGE_RX_pin LOC = E16 | IOSTANDARD = LVCMOS33;
NET SERIAL_IMAGE_TX_pin LOC = F15 | IOSTANDARD = LVCMOS33;
Figura 2-5. Asignación de pines para los nuevos cores
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-6 FPGA (uso del UART) IPN – 2012
� 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 15 min aproximadamente).
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\Lab3\SDK
como el directorio workspace (figura 3-2), click <OK>
Figura 3-2. Seleccionar el directorio Workspace
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-7 FPGA (uso del UART) IPN – 2012
� 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
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)
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-8 FPGA (uso del UART) IPN – 2012
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/Lab3, click <OK>
Seleccionar las casillas lab3code.c y lib_img.h, click <FINISH>
� En la ventana Project Explorer, click DERECHO en el proyecto TestApp1 y seleccionar
Generate Linker Script. En los campos Heap Size y Stack Size colocar el valor de 2048 (figura 3-
5). Click <GENERATE>, click <YES>
Figura 3-5. Configurando el Linker Script.
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
El proyecto completo automáticamente es compilado y el archivo ejecutable ELF que realiza un test
de memoria está listo en la carpeta Lab3/SDK/TestApp1/Debug/TestApp1.elf
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-9 FPGA (uso del UART) IPN – 2012
Figura 3-6. Entorno SDK para la parte software del sistema.
1. ¿Cuántas funciones se encuentran definidas en el archivo lib_image.h?, Defina brevemente la
funcionalidad de cada una
2. Describa brevemente los pasos que realiza el código lab3code.c, cabe mencionar que esta
aplicación interactúa con un archivo M de MATLAB que se estará corriendo en la PC. En
base a esto defina el “hand-shaking” entre el archivo MATLAB y la aplicación en C del
FPGA
3. ¿Cuál es el procesamiento que se realiza a la imagen de entrada?
?
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-10 FPGA (uso del UART) 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 115200 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>
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-11 FPGA (uso del UART) 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, se debe visualizar al final de
la ventana Terminal 1 el mensaje “Desconecte este Terminal y ejecute el programa de
MATLAB…”. Este mensaje indica que el programa en el FPGA está en espera de comenzar la
transmisión hacia MATLAB, pero como se está usando el mismo puerto serial tanto para las
entrada/salida estándar como para la transmisión de datos, es necesario DESCONECTAR primero el
Terminal 1 en SDK
Figura 4-4. Salida del Test en el Terminal
� Abrir MATLAB, seleccionar como Current Directory la carpeta work. Copiar de la carpeta
IPNEDK/Lab3/ los archivos lab3_edk.m y fun_CreaSerial.m a la carpeta work de MATLAB,
copiar también las imágenes de prueba. Este archivo sirve para “coordinar” la transferencia de datos
(imágen) entre MATLAB y el FPGA. Abrir el archivo M, click <RUN>. El resultado del programa se
puede observar en la figura 4-5
Juan Carlos Moctezuma Eugenio
Lab 3: Interfaz serial MATLAB- Sistemas Empotrados en EDK 3-12 FPGA (uso del UART) IPN – 2012
Figura 4-5. Imágenes de salida y resultado en el command window de MATLAB (archivo M de MATLAB)
4. En el archivo lab_edk.m. ¿En que parte del código se manda el tamaño de la imagen hacia el
FPGA?, ¿En la aplicación C del FPGA cual es la función que recibe el tamaño de la imagen?
5. ¿Cuales son los dos valores de ACK que MATLAB espera del FPGA?
6. Describa que es lo que hace la función fun_CreaSerial.
7. Defina el proceso ordenado de ejecución de la aplicación de MATLAB y la aplicación del
FPGA, de tal forma que se entienda como se coordinan estas dos aplicaciones.
?