1 / 47

Tutorial EDK – Embedded Development Kit

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

dexter
Download Presentation

Tutorial EDK – Embedded Development Kit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TutorialEDK – Embedded Development Kit REVISADO POR MORAES EM 31/maio/2012

  2. Definição • O XPS é um ambiente com ferramentas de software para projetar sistemas embarcados • O XPS (Xilinx Plataform Studio) é uma interface gráfica que permite o projeto, debug e verificação de sistemas embarcados. • XPS possui repositórios de cores IPs e drivers

  3. Definição • O XPS permite a criação de arquiteturas de hardware microprocessadas, disponibilizando dois IPs de processadores: • Softcore MicroBlaze (Xilinx) • Hardcore PowerPC405 (IBM)

  4. Definição • Permite a criação de periféricos com lógica definida pelo usuário • Utiliza o barramento CoreConnect da IBM para conectar e comunicar processadores e periféricos. Duas interfaces são usadas: - PLB (Processor Local Bus) - OPB (On-chip Peripheral Bus) • Os periféricos da arquitetura de hardware do sistema são mapeados em memória

  5. Tutorial Passos para construção de um sistema embarcado • Criar um novo projeto no XPS • Escolher uma plataforma alvo • Escolher o processador • Configurar o processador • Configurar interfaces de I/O • Especificar periféricos internos • Projetar o software • Gerar bitstream • Fazer o download do bitstream

  6. Começando Iremos desenvolver este tutorial na máquina kriti • Logar-se na kriti • ssh -X kriti.inf.pucrs.br • Setar as variáveis de ambiente • source /soft64/source_gaph • module load ise • Ir para o diretório de trabalho • mkdir tut_xilinx • cd tut_xilinx/

  7. I – Criação da arquitetura base, para uma dada placa de prototipação

  8. Criação do projeto • Executar na linha de comando - Criar um novo projeto • xps (pode demorar...)

  9. Criação do projeto – seleção da placa

  10. Criação do projeto – número de processadores

  11. Criação do projeto – memória do processador

  12. Escolha dos periféricos • Escolha os periféricos, removendo DDR, Ethernet Flash • Escolher a interface serial DCE (as portas seriais são diferentes – atenção!) • Configure a serial para 57600 bps • Na sequência NÃO insira memórias cache (next)

  13. Resumo do projeto • Verifique as mensagens e Finish

  14. Gerado o sistema de base obtemos a seguinte janela

  15. II – Inserção de um periférico do usuário com suporte à interrupção

  16. A criação de um periférico é feita em três etapas: (1) criação do template; (2) inclusão do periférico no projeto; (3) conexão do periférico Criar Periférico

  17. O periférico vai ser adicionado a estrutura do projeto atual Nomear o periférico: sugiro usar o mesmo nome - interrupt

  18. Escolha do modo de comunicação – PLB Notar que pode-se usar FSL Seleção de suporte a reset, registradores mapeados em memória, interrupção Configuração da interrupção Next na janela de Slave Interface Desmarcar Operiférico gerará uma interrupção, sensível a nível

  19. Definição do número de registradores mapeados em memória (MUITO IMPORTANTE): neste exemplo utilizaremos 4 Interface com o barramento PLB - padrão Interface com o ModelSim – deixar em branco Marcar a geração de projeto e de auxílio para drivers

  20. Aqui tem muita informação útil Depois: finish

  21. Arquitetura do sistema • O periferico.vhd é o wrapper entre o barramento OPB e a lógica do usuário. A princípio não precisa alterar. • Ouser_logic é onde o usuário escreve seu hardware.

  22. INCLUSÃO DE FUNCIONALIDADES AO TEMPLATE CRIADO PARA O PERIFÉRICO Abrir o arquivo <diretório>\pcores\interrupt_v1_00_a\hdl\vhdl\user_logic.vhd Observar que foi incluída na entity o pino de interrupção (linha 118): IP2Bus_IntrEvent : out std_logic_vector(0 to C_NUM_INTR-1) Observar o código entre as linhas 249 – 266 que gera a interrupção. Só mudar o tamanho do COUNT_SIZE para 27 (interrupção mais rápida): Processo de geração de interrupção

  23. Segunda etapa : inclusão do periférico no projeto Importar o periférico ao projeto

  24. Importar o periférico cujo template foi modificado na etapa anterior

  25. Identificar o periférico e a respectiva versão do driver(é interrupt – eu (Moraes) que esqueci do t) Selecionar o periférico previamente criado Responder yes

  26. Dizer que o periférico está descrito em VHDL Indicar a ordem de compilação: Se o periférico tem mais códigos VHDL insere-se os novos fontes na próxima janela Recomenda-se olhar o conteúdo.

  27. A janela seguinte permite acrescentar novos arquivos Olhar que os últimos dois arquivos VHDL compilados referem-se aos arquivos VHDL editados nas etapas anteriores

  28. Indicar que este periférico irá se comunicar pelo barramento PLB, em modo escravo NEXT NA JANELA SEGUINTE

  29. Pino de interrupção: notar que foi detectado - indicar o que o mesmo é sensível ao nível lógico Definir sensitividade e prioridade da interrupção Next  Next  Finish

  30. Terceira etapa: conexão do periférico Adicione o periférico ao sistema e o conecte ao barramento PLB Conecte-o ao barramento Inserir o periférico(duplo clique ou arraste)

  31. LIGANDO OS FIOS DE INTERRUPÇÃO ENTRE SI 2. Defina o sinal que informará a Microblaze da interrupção 1. Defina a rede de interrupção selecionando new_conection– o nome é criado automaticamente

  32. Gerar endereço para o novo periférico

  33. III – Geração do bitstreame software do usuário

  34. Hardware  generate netlist  longo... Ao final: Total run time: 438.00 seconds Running synthesis... bash -c "cd synthesis; ./synthesis.sh" xst -ifn system_xst.scr -intstyle silent Running XST synthesis ... PMSPEC -- Overriding Xilinx file </soft64/Xilinx/13.2/ISE_DS/EDK/spartan3/data/spartan3.acd> with local file </soft64/Xilinx/13.2/ISE_DS/ISE/spartan3/data/spartan3.acd> XST completed Done!

  35. Modifique o interrupt_handler • <diretório>/drivers/interrupt_v1_00_a/src/interrupt.c • Acrescente no final da função INTERRUPT_Intr_DefaultHandler (linha 54): INTERRUPT_mWriteSlaveReg0(baseaddr, 0, 1); • O significado é: ao ocorrer a interrupção pelo hardware do usuário, a função interrupt_handler escreve o valor 1 no registrador 0 do periférico (ele será utilizado como semáforo)

  36. Usando o ambiente de software Use esta opção

  37. Abrir e editar o código fonte da aplicação Marcar a aplicação TestApp_Memory como Inativa Marcar a aplicação TestApp_Peripheral para inicializar BRAM (ou seja, vai ser carregada no bitstream) Abrir o código C

  38. Escrevendo o software com suporte a interrupção • Lembrar: já temos o interrupt_handler alterado • Inclua entre os includes e o main o seguinte código • Impressão dos 4 registradores internos do periférico de interrupção #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 ); } Protótipo em: <file>\microblaze_0\include\interrupt.h Endereço em: <file>\microblaze_0\include\xparameters.h

  39. Ao final do código main inclua: { int i, j, vet[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; print("-- **** 2011/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<20; i++) { INTERRUPT_EnableInterrupt((void*) XPAR_INTERRUPT_0_BASEADDR); j=i%10; // escreve nos 3 registradores iniciais do periférico (o primeiro reg é um semaforo) INTERRUPT_mWriteSlaveReg1(XPAR_INTERRUPT_0_BASEADDR, 0, vet[j]+10); INTERRUPT_mWriteSlaveReg2(XPAR_INTERRUPT_0_BASEADDR, 0, vet[j]+20); INTERRUPT_mWriteSlaveReg3(XPAR_INTERRUPT_0_BASEADDR, 0, vet[j]+30); // aguarda que a interrupo ocorra para imprimir os valores dos registradores while( ! (INTERRUPT_mReadSlaveReg0(XPAR_INTERRUPT_0_BASEADDR, 0))); // limpa o semaforo INTERRUPT_mWriteSlaveReg0(XPAR_INTERRUPT_0_BASEADDR, 0, 0); print_registers(); } } Inicializa o controlador de interrupção, escreve no periférico, aguarda a interrupção e imprime os valores escritos

  40. Compilação e geração do bitstream • Hardware  Generate Bitstream • Só a primeira vez, demora • Software  Build All User Application • Device Configuration  Update Bitstream • A cada alteração do software – update bitstream

  41. IV – Utilização do Sistemair para um PCnão resolvida a questão do downloand e serial no LINUX

  42. Conexão com a porta serial • Abrir o aplicativo HyperTerminal (do windows) e configurar a conexão como abaixo: (em accessories communication) Para determinar a velocidade da serial olhar em <diretório>/microblaze_0/include/xparameters.h os parâmetros 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

  43. Download do bitstream • Device Configuration  Download • Ou pode-se utilizar o impact, arquivo download.bit (dentro do diretório implementation)

  44. Visualização dos resultados Termina aqui – a outra seção não foi atualizada

  45. VI – Debug passo a passo

  46. Debug usando GDB e execução passo a passo • Seguir as instruções do documento (funciona da mesma forma para a versão 10) http://www.inf.pucrs.br/~moraes/prototip/lab3/EDK8.1_Spartan3.pdf das páginas 26 a 20, sessão “Debugging the Design”

  47. Escolha das aplicações de teste • São geradas duas aplicações exemplos – teste de memória e teste de periféricos

More Related