of 47/47
Tutorial EDK – Embedded Development Kit REVISADO POR MORAES EM 31/maio/2012

Tutorial EDK – Embedded Development Kit

  • View
    39

  • Download
    1

Embed Size (px)

DESCRIPTION

Tutorial EDK – Embedded Development Kit. REVISADO POR MORAES EM 31/maio/2012. Definição. O XPS é um ambiente com ferramentas de software para projetar sistemas embarcados - PowerPoint PPT Presentation

Text of Tutorial EDK – Embedded Development Kit

  • TutorialEDK Embedded Development KitREVISADO POR MORAES EM 31/maio/2012

  • DefinioO XPS um ambiente com ferramentas de software para projetar sistemas embarcados

    O XPS (Xilinx Plataform Studio) uma interface grfica que permite o projeto, debug e verificao de sistemas embarcados.

    XPS possui repositrios de cores IPs e drivers

  • DefinioO XPS permite a criao de arquiteturas de hardware microprocessadas, disponibilizando dois IPs de processadores:

    Softcore MicroBlaze (Xilinx)

    Hardcore PowerPC405 (IBM)

  • DefinioPermite a criao de perifricos com lgica definida pelo usurio

    Utiliza o barramento CoreConnect da IBM para conectar e comunicar processadores e perifricos. Duas interfaces so usadas: - PLB (Processor Local Bus)- OPB (On-chip Peripheral Bus)

    Os perifricos da arquitetura de hardware do sistema so mapeados em memria

  • TutorialPassos para construo de um sistema embarcado

    Criar um novo projeto no XPSEscolher uma plataforma alvoEscolher o processadorConfigurar o processadorConfigurar interfaces de I/OEspecificar perifricos internosProjetar o softwareGerar bitstreamFazer o download do bitstream

  • ComeandoIremos desenvolver este tutorial na mquina kriti

    Logar-se na kritissh -X kriti.inf.pucrs.br

    Setar as variveis de ambientesource /soft64/source_gaphmodule load ise/11.1

    Ir para o diretrio de trabalhomkdir tut_xilinxcd tut_xilinx/

  • I Criao da arquitetura base, para uma dada placa de prototipao

  • Criao do projeto Executar na linha de comando - Criar um novo projeto xps (pode demorar...)

  • Criao do projeto seleo da placa

  • Criao do projeto nmero de processadores

  • Criao do projeto memria do processador

  • Escolha dos perifricosEscolha os perifricos, removendo DDR, Ethernet Flash

    Escolher a interface serial DCE (as portas seriais so diferentes ateno!)

    Configure a serial para 57600 bps

    Na sequncia NO insira memrias cache (next)

  • Escolha das aplicaes de testeSo geradas duas aplicaes exemplos teste de memria e teste de perifricos

  • Resumo do projetoVerifique as mensagens e Finish

  • Gerado o sistema de base obtemos a seguinte janela

  • II Insero de um perifrico do usurio com suporte interrupo

  • Criar Perifrico

  • Nomear o perifrico: sugiro usar o mesmo nome - interruptO perifrico vai ser adicionado a estrutura do projeto atual

  • Escolha do modo de comunicao PLB

    Notar que pode-se usar FSLSeleo de suporte a reset, registradores mapeados em memria, interrupoConfigurao da interrupoNext na janela de Slave InterfaceDesmarcarO perifrico gerar uma interrupo, sensvel a nvel

  • Definio do nmero de registradores mapeados em memria (MUITO IMPORTANTE): neste exemplo utilizaremos 4Interface com o barramento PLB - padroInterface com o ModelSim deixar em brancoMarcar a gerao de projeto e de auxlio para drivers

  • Depois: finishAqui tem muita informao til

  • Arquitetura do sistemaO periferico.vhd o wrapper entre o barramento OPB e a lgica do usurio. A princpio no precisa alterar.O user_logic onde o usurio escreve seu hardware.

    MicroBlaze

    perifrico.vhd

    User_logic.vhd

    OUTROS PERIFRICOS

    OPB

    IPIF

    PERIFRICO DO USURIO

  • INCLUSO DE FUNCIONALIDADES AO TEMPLATE CRIADO PARA O PERIFRICO

    Abrir o arquivo \pcores\interrupt_v1_00_a\hdl\vhdl\user_logic.vhdObservar que foi includa na entity o pino de interrupo (linha 118):IP2Bus_IntrEvent : out std_logic_vector(0 to C_NUM_INTR-1)

    Observar o cdigo entre as linhas 239 269 que gera a interrupo. S mudar o tamanho do COUNT_SIZE para 27 (interrupo mais rpida): Processo de gerao de interrupo

  • Importar o perifrico ao projeto

  • Importar o perifrico cujo template foi modificado na etapa anterior

  • Selecionar o perifrico previamente criado Identificar o perifrico e a respectiva verso do driver ( interrupt eu (Moraes) que esqueci do t)Responder yes

  • Dizer que o perifrico est descrito em VHDLIndicar a ordem de compilao:

    Se o perifrico tem mais cdigos VHDL insere-se os novos fontes na prxima janela

    Recomenda-se olhar o contedo.

  • A janela seguinte permite acrescentar novos arquivosOlhar que os ltimos dois arquivos VHDL compilados referem-se aos arquivos VHDL editados nas etapas anteriores

  • Indicar que este perifrico ir se comunicar pelo barramento PLB, em modo escravo

  • Definir sensitividade e prioridade da interrupoPino de interrupo: notar que foi detectado - indicar o que o mesmo sensvel ao nvel lgicoNext Next Finish

  • Adicione o perifrico ao sistema e o conecte ao barramento PLBInserir o perifrico (duplo clique ou arraste)Conecte-o ao barramento

  • 1. Defina a rede de interrupo selecionando new_conection o nome criado automaticamente2. Defina o sinal que informar a Microblaze da interrupoLIGANDO OS FIOS DE INTERRUPO ENTRE SI

  • Gerar endereo para o novo perifrico

  • III Gerao do bitstreame software do usurio

  • Hardware generate netlist longo...

    Ao final:

    ------------------------------- No Partitions were found in this design.-------------------------------NGCBUILD Design Results Summary: Number of errors: 0 Number of warnings: 0Writing NGC file "../implementation/system.ngc" ...Total REAL time to NGCBUILD completion: 1 secTotal CPU time to NGCBUILD completion: 1 secWriting NGCBUILD log file "../implementation/system.blc"...NGCBUILD done.Done!

  • Modifique o interrupt_handler

    /drivers/interrupt_v1_00_a/src/interrupt.c

    Acrescente no final da funo INTERRUPT_Intr_DefaultHandler (linha 66): INTERRUPT_mWriteSlaveReg0(baseaddr, 0, 1);

    O significado : ao ocorrer a interrupo pelo hardware do usurio, a funo interrupt_handler escreve o valor 1 no registrador 0 do perifrico (ele ser utilizado como semforo)

  • Abrir e editar o cdigo fonte da aplicaoMarcar a aplicao TestApp_Memory como InativaMarcar a aplicao TestApp_Peripheral para inicializar BRAM (ou seja, vai ser carregada no bitstream)Abrir o cdigo C

  • Escrevendo o software com suporte a interrupo#include "interrupt.h"

    void print_registers(){ Xuint32 r1, r2, r3, r4;

    r1 = INTERRUPT_mReadSlaveReg0(XPAR_INTERRUPT_0_BASEADDR, 0); // copiar os defines do .h r2 = INTERRUPT_mReadSlaveReg1(XPAR_INTERRUPT_0_BASEADDR, 0); r3 = INTERRUPT_mReadSlaveReg2(XPAR_INTERRUPT_0_BASEADDR, 0); r4 = INTERRUPT_mReadSlaveReg3(XPAR_INTERRUPT_0_BASEADDR, 0); xil_printf("%d %d %d %d\n\r", r1, r2, r3, r4 );

    }Prottipo em: \microblaze_0\include\interrupt.hEndereo em: \microblaze_0\include\xparameters.hLembrar: j temos o interrupt_handler alteradoInclua entre os includes e o main o seguinte cdigoImpresso dos 4 registradores internos do perifrico de interrupo

  • Ao final do cdigo main inclua: { int i, j, vet[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    print("-- **** 2012/1 ** prototipacao - teste de interrupcao -----\r\n"); microblaze_enable_interrupts(); INTERRUPT_Intr_DefaultHandler( (void*) XPAR_INTERRUPT_0_BASEADDR); INTERRUPT_EnableInterrupt((void*) XPAR_INTERRUPT_0_BASEADDR); for(i=0; i

  • Compilao e gerao do bitstreamHardware Generate BitstreamS a primeira vez, demora

    Software Build All User Application

    Device Configuration Update BitstreamA cada alterao do software update bitstream

  • IV Utilizao do Sistema

    ir para um PCno resolvida a questo do downloand e serial no LINUX

  • Trabalho a fazerDepois de validado o projeto, realizar no Linux com uma interface serial

  • Conexo com a porta serialAbrir o aplicativo HyperTerminal (do windows) e configurar a conexo como abaixo: (em accessories communication)Para determinar a velocidade da serial olhar em /microblaze_0/include/xparameters.h os parmetros da UART:

    /* Definitions for peripheral RS232_DCE */#define XPAR_RS232_DCE_BASEADDR 0x84000000#define XPAR_RS232_DCE_HIGHADDR 0x8400FFFF#define XPAR_RS232_DCE_DEVICE_ID 0#define XPAR_RS232_DCE_BAUDRATE 57600#define XPAR_RS232_DCE_USE_PARITY 0#define XPAR_RS232_DCE_ODD_PARITY 0#define XPAR_RS232_DCE_DATA_BITS 8

  • Download do bitstreamDevice Configuration Download

    Ou pode-se utilizar o impact, arquivo download.bit (dentro do diretrio implementation)

  • Visualizao dos resultadosTermina aqui a outra seo no foi atualizada

  • VI Debug passo a passo(opcional)

  • Debug usando GDB e execuo passo a passoSeguir as instrues do documento (funciona da mesma forma para a verso 10) http://www.inf.pucrs.br/~moraes/prototip/lab3/EDK8.1_Spartan3.pdf das pginas 26 a 20, sesso Debugging the Design