Está en la página 1de 12

FACULTAD DE INGENIERA ELECTRNICA.

GRUPO SEDA SISTEMAS ELECTRNICOS DIGITALES AVANZADOS


PROFESOR: ING. JAVIER SOTO.

1.

OBJETIVO:

Implementacin de un proyecto que incluya componentes software y hardware en la tarjeta SPARTAN 3EStarter, mediante las herramientas de diseo de Xilinx.
ISE Project Navigator v14.7 e iMPACT (para descarga del bitstream).

2.

CONSIDERACIONES PREVIAS:

Para la implementacin de este proyecto se usar el ISE Design Suite 14.7, que incluye las siguientes
herramientas, que para esta aplicacin cumplirn con las funciones que se presentan a continuacin:
I.

ISE Project Navigator: Es el contenedor del sistema principal y del subsistema que implementa el
microprocesador microblaze.

II.

El paquete de desarrollo EDK (Embedded Development Kit) se utiliza para construir el sistema de
procesamiento embebido denominado MicroBlaze. La implementacin de este sistema incluye las
siguientes herramientas:
a. Xilinx Platform Studio (XPS): usado para el diseo y configuracin del sistema embebido de
procesamiento, que en este caso ser el MicroBlaze.
b. Xilinx Software Development Kit (SDK): Ambiente integrado de desarrollo (IDE) para la
programacin de aplicaciones (software) en el MicroBlaze.

III.

El proyecto que se implementar tendr como objetivo visualizar actividad en los leds de tarjeta
SPARTAN 3E-Starter. La tarjeta tiene ocho leds, cuatro de ellos sern controlados por hardware
mediante una descripcin en VHDL y los otros cuatro sern controlados por software mediante un
programa implementado en el MicroBlaze.

IV.

Es necesario estudiar previamente el manual de tarjeta sobre la cual se va a implementar el diseo, para
este tutorial se utilizar la tarjeta SPARTAN 3E-Starter, cuyo manual se encuentra disponible en:
http://www.digilentinc.com/Data/Products/S3EBOARD/S3EStarter_ug230.pdf. Debe tener en cuanta
esta manual para la configuracin de entradas y salidas del sistema.

V.

El Error! Reference source not found. al final de este documento muestra detalles sobre el archivo de
configuracin de pines sugerido por el fabricante. Este archivo ser utilizado en este tutorial.

3.
3.1.

4.

CONSIDERACIONES GENERALES:
Cree una carpeta denominada leds_onoff_project. Dentro de esta carpeta se crearn, a lo largo de este
tutorial, los proyectos necesarios para el desarrollo de este ejercicio.

CREACIN DEL SISTEMA DE PROCESAMIENTO EMBEBIDO (MICROBLAZE)

4.1.

Cree una carpeta denominada mb_system.

4.2.

Abra el XPS:
Windows All Programs Xilinx Design Tools ISE Design Suite 14.7 EDK Xilinx Platform Studio

4.3.

Cree un nuevo proyecto seleccionando la opcin Create New Project Using Base System Builder.

4.4.

Ingrese el nombre del proyecto como se muestra en la figura. En la seccin de seleccin del sistema de
interconexin seleccione la opcin PLB System. Haga click en OK para continuar.

4.5.

En este caso crearemos un nuevo diseo, seleccione: I would like to create a new design y haga click en
Next.

4.6.

En la siguiente venta se selecciona la tarjeta que va a trabajar, en este caso seleccione Spartan 3E Starter
Board. Haga click en Next para continuar.

4.7.

Seleccione la opcin Single-Processor System y haga click en Next.

4.8.

En la siguiente ventana podra configurar algunas opciones relacionadas con la frecuencia del reloj, el
tamao de la memoria o la habilitacin de Unidad de Punto Flotante. Para este ejemplo deje las opciones
que aparecen por defecto y haga click en Next.

4.9.

En la siguiente ventana puede aadir o remover perifricos del sistema. Para este ejemplo se dejarn
nicamente los perifricos necesarios, establezca la configuracin que se muestra en la siguiente figura:

4.10. En la siguiente ventana se puede configurar la Cache del procesador. Para este procesador no hay
memoria cache. Haga click en Next para continuar.
4.11. En la siguiente ventana (ver siguiente figura) aparecer un resumen del sistema que est creando. Haga
click en Finish para terminar el proceso.

4.12. Una vez que el asistente (BSB wizard) ha finalizado la creacin del sistema, se podran hacer las
modificaciones necesarias para cumplir con las especificaciones del diseo. Para este ejemplo no se
requieren modificaciones adicionales.
4.13. Generacin del Netlist (generacin del mdulo hardware que representa el MicroBlaze):
Hardware
Generate Netlist.
4.14. Cuando la generacin del Netlist haya finalizado contine con la siguiente seccin.

5.

CREACIN DEL PROYECTO GENERAL

5.1.

Abra el ISE Project Navigator.


Windows All Programs Xilinx Design Tools ISE Design Suite 14.7 ISE Desing Tools XX-bit ISE
Project Navigator.

5.2.

En la carpeta raz cree un proyecto con el nombre ise_project. Haga click en Next para continuar.

5.3.

Configure el dispositivo como se muestra en la figura. Haga click en Next y en Finish para terminar.

5.4.

Aada el procesador embebido. Haga click en: Project Add Source, seleccione el archivo
E:\leds_onoff_project\mb_system\ microblaze_system.xmp. Si le aparece un mensaje sugiriendo que el
Proyecto creado anteriormente en el XPS ser modificado, seleccione la opcin Always Reload. Haga
click OK para finalizar.

5.5.

Puede ver el cdigo sugerido por ISE para declarar e instanciar el componente relativo al microblaze, para
esto haga doble click sobre la opcin View HDL Instantiation Template.

5.6.

Cree una nueva fuente (VHDL Module) con el nombre hw_top_module y copie el siguiente cdigo.
----------------------------------------------------------------------------------- Creado por: Javier Soto. 24/04/2015
---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity hw_top_module is
port( clk_50M : in std_logic;
reset
: in std_logic;
leds
: out std_logic_vector(7 downto 0));
end hw_top_module;
architecture Behavioral of hw_top_module is
COMPONENT microblaze_system
PORT(
fpga_0_clk_1_sys_clk_pin : IN std_logic;
fpga_0_rst_1_sys_rst_pin : IN std_logic;
fpga_0_LEDs_8Bit_GPIO_IO_O_pin : OUT std_logic_vector(0 to 7)
);
END COMPONENT;
attribute box_type : string;
attribute box_type of microblaze_system : component is "user_black_box";
signal fpga_0_clk_1_sys_clk_pin : std_logic;

signal fpga_0_rst_1_sys_rst_pin : std_logic;


signal fpga_0_LEDs_8Bit_GPIO_IO_O_pin : std_logic_vector(0 to 7);
signal
cont_pulsos : integer range 0 to 24999999 := 0;
constant limit_pulsos : integer range 0 to 24999999 := 24999999;
signal leds_hw : std_logic_vector(3 downto 0) := "0000";
begin
Inst_microblaze_system: microblaze_system PORT MAP(
fpga_0_LEDs_8Bit_GPIO_IO_O_pin => fpga_0_LEDs_8Bit_GPIO_IO_O_pin,
fpga_0_clk_1_sys_clk_pin
=> fpga_0_clk_1_sys_clk_pin,
fpga_0_rst_1_sys_rst_pin
=> fpga_0_rst_1_sys_rst_pin
);
fpga_0_clk_1_sys_clk_pin <= clk_50M;
fpga_0_rst_1_sys_rst_pin <= reset;
leds(7 downto 4) <= leds_hw;
leds(3 downto 0) <= fpga_0_LEDs_8Bit_GPIO_IO_O_pin(4 to 7);
process(clk_50M)
begin
if(rising_edge(clk_50M))then
if (cont_pulsos = limit_pulsos) then
cont_pulsos <= 0;
leds_hw <= not leds_hw;
else
cont_pulsos <= cont_pulsos + 1;
end if;
end if;
end process;
end Behavioral;

5.7.

Cree un archivo de descripcin de pines (Project New Source Implementation Constaints File) con el
siguiente contenido:
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET

"CLK_50M" LOC
"RESET" LOC =
"LEDS<7>" LOC
"LEDS<6>" LOC
"LEDS<5>" LOC
"LEDS<4>" LOC
"LEDS<3>" LOC
"LEDS<2>" LOC
"LEDS<1>" LOC
"LEDS<0>" LOC

= "C9" | IOSTANDARD = LVCMOS33 ;


"K17" | IOSTANDARD = LVTTL | PULLDOWN ;
= "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
= "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;

5.8.

Asegrese que la propiedad FPGA start-Up Clock este en el valor JTAG Clock.
Para esto, en la ventana de procesos, haga click derecho sobre Generate programming file, seleccione
Process Properties, seleccione la categora Startup Options, en la propiedad FPGA start-Up Clock
seleccione el valor JTAG Clock.

5.9.

Genere el bitstream: haga doble click sobre Generate Programming File.

5.10. Abra el software de programacin iMPACT: haga doble click sobre Manage Configuration Project
(iMPACT).
5.11. Configuracin del iMPACT para programar el dispositivo (ver Figura 1).
a. Haga doble click sobre el cono Boundary Scan.
b. Haga click sobre el cono Initialize Chain.
c. Haga click derecho sobre el chip (xc3s500e) y seleccione la opcin Assign New Configuration File ,
donde asignar el archivo de configuracin o bitstream
(E:\leds_onoff_project\ise_projecthw_top_module.bit).
d. En la siguiente ventana haga click en No, debido a que no se han creado archivos de configuracin
para programar otros dispositivos disponibles en la tarjeta.
e. Haga nuevamente click derecho sobre el chip (FPGA) y seleccione la opcin Program, para descargar
el bitstream a la FPGA.
f. Haga click en OK en la ventana Device Programming Properties para continuar.
g. Si su circuito fue programado exitosamente aparecer el mensaje Program Succeeded y los leds que
han sido configurados por hardware parpadearn.

b. Initialize Chain
a. Boundary Scan

e.

c.

d.

Figura 1. Configuracin del iMPACT para la programacin de la FPGA.

6.

EXPORTACIN DEL DISEO HARDWARE A SDK PARA PROGRAMACIN DEL MICROBLAZE.

6.1.

En el panel View, perspectiva Implementation, seleccione el archivo XMP.

6.2.

Haga doble click sobre Export Hardware Design To SDK with Bitstream.

6.3.

Es posible que el sistema le pregunte por la ubicacin del espacio de trabajo (o Workspace) donde
almacenar los proyectos software de su diseo. Para este ejemplo seleccione la ubicacin:
E:\leds_onoff_project\SDK_Workspace

6.4.

Cree un proyecto software. Haga click en: File NewApplication Project.

6.5.

En la siguiente ventana ingrese el nombre del proyecto que va a crear. Tenga en cuenta que este es un
proyecto de software que estar ligado al proyecto de hardware (microblaze_system_hw_platform)
creado anteriormente. Tenga en cuenta que en este caso tambin se crear un nuevo paquete de soporte
a la tarjeta o Board Support Package (BSP). Haga click en Next para continuar.

6.6.

Seleccione una plantilla para el nuevo proyecto que est creando. En este caso se escoger una aplicacin
vaca, como se muestra a continuacin. Haga click en Finish para continuar.

6.7.

Cree una nueva fuente en el proyecto software que acaba de crear: En el proyecto leds_onoff_swprj,
haga click derecho sobre la carpeta src y cree un nuevo archivo como se muestra en la figura. El nuevo
archivo se llamar led_onoff_code.c.

6.8.

Copie y pegue el siguiente cdigo:

/***************************** Include Files *********************************/


#include "xparameters.h"
#include "xgpio.h"
/************************** Constant Definitions *****************************/
#define LED 0x01
/* Assumes bit 0 of GPIO is connected to an LED */
//The following constant maps to the name of the hardware instances that
//were created in the EDK XPS system.
#define GPIO_EXAMPLE_DEVICE_ID XPAR_LEDS_8BIT_DEVICE_ID
//The following constant is used to wait after an LED is turned on to make
//sure that it is visible to the human eye. This constant might need to be
//tuned for faster or slower processor speeds.
#define LED_DELAY
3000000
//The following constant is used to determine which channel of the GPIO is
//used for the LED if there are 2 channels supported.
#define LED_CHANNEL 1
/**************************** Type Definitions *******************************/
/***************** Macros (Inline Functions) Definitions *********************/
#ifdef PRE_2_00A_APPLICATION
/*
* The following macros are provided to allow an application to compile that
* uses an older version of the driver (pre 2.00a) which did not have a channel
* parameter. Note that the channel parameter is fixed as channel 1.
*/
#define XGpio_SetDataDirection(InstancePtr, DirectionMask) \
XGpio_SetDataDirection(InstancePtr, LED_CHANNEL, DirectionMask)
#define XGpio_DiscreteRead(InstancePtr) \
XGpio_DiscreteRead(InstancePtr, LED_CHANNEL)

#define XGpio_DiscreteWrite(InstancePtr, Mask) \


XGpio_DiscreteWrite(InstancePtr, LED_CHANNEL, Mask)
#define XGpio_DiscreteSet(InstancePtr, Mask) \
XGpio_DiscreteSet(InstancePtr, LED_CHANNEL, Mask)
#endif
/************************** Function Prototypes ******************************/
/************************** Variable Definitions *****************************/
//The following are declared globally so they are zeroed and so they are
//easily accessible from a debugger
XGpio Gpio; /* The Instance of the GPIO Driver */
int main(void){
u32 Data;
int Status;
volatile int Delay;
//Initialize the GPIO driver
Status = XGpio_Initialize(&Gpio, GPIO_EXAMPLE_DEVICE_ID);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
//Set the direction for all signals to be inputs except the
//LED output
XGpio_SetDataDirection(&Gpio, LED_CHANNEL, ~LED);
int cont = 0;
while(1){
XGpio_DiscreteWrite(&Gpio, LED_CHANNEL, cont++);
if(cont==8) cont=0;
for (Delay = 0; Delay < LED_DELAY; Delay++);
}
return XST_SUCCESS;
}

6.9.

Para compilar el archivo debe guardarlo (Ctr+S). El archivo se compilar automticamente siempre y
cuando este habilitada esta opcin (Project Build Automatically).

6.10. Para descargar el programa en el microprocesador MicroBlaze, ejecute la opcin Run


opcin Launch on Hardware, como se muestra en la figura.

, y seleccione la

6.11. La secuencia programada por software debera verse simultneamente con la secuencia programada por
hardware.

También podría gustarte