tutorial edk – embedded development kit
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 PresentationTRANSCRIPT
![Page 1: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/1.jpg)
TutorialEDK – Embedded Development Kit
REVISADO POR MORAES
EM 31/maio/2012
![Page 2: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/2.jpg)
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
![Page 3: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/3.jpg)
Definição
• O XPS permite a criação de arquiteturas de hardware microprocessadas, disponibilizando dois IPs de processadores:
• Softcore MicroBlaze (Xilinx)
• Hardcore PowerPC405 (IBM)
![Page 4: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/4.jpg)
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
![Page 5: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/5.jpg)
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
![Page 6: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/6.jpg)
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/11.1
• Ir para o diretório de trabalho• mkdir tut_xilinx• cd tut_xilinx/
![Page 7: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/7.jpg)
I – Criação da arquitetura base, para uma dada placa de prototipação
![Page 8: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/8.jpg)
Criação do projeto
- Executar na linha de comando - Criar um novo projeto xps (pode demorar...)
![Page 9: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/9.jpg)
Criação do projeto – seleção da placa
![Page 10: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/10.jpg)
Criação do projeto – número de processadores
![Page 11: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/11.jpg)
Criação do projeto – memória do processador
![Page 12: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/12.jpg)
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)
![Page 13: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/13.jpg)
Escolha das aplicações de teste- São geradas duas aplicações exemplos – teste de memória e teste
de periféricos
![Page 14: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/14.jpg)
Resumo do projeto- Verifique as mensagens e Finish
![Page 15: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/15.jpg)
Gerado o sistema de base obtemos a seguinte janela
![Page 16: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/16.jpg)
II – Inserção de um periférico do usuário com suporte à interrupção
![Page 17: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/17.jpg)
Criar Periférico
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
![Page 18: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/18.jpg)
Nomear o periférico: sugiro usar o mesmo nome - interrupt
O periférico vai ser adicionado a estrutura do projeto atual
![Page 19: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/19.jpg)
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
O periférico gerará uma interrupção, sensível a nível
![Page 20: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/20.jpg)
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
![Page 21: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/21.jpg)
Depois: finish
Aqui tem muita informação útil
![Page 22: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/22.jpg)
Arquitetura do sistema
MicroBlaze periférico.vhd User_logic.vhd
OUTROSPERIFÉRICOS
OPB IPIF
PERIFÉRICO DO USUÁRIO
• O periferico.vhd é o wrapper entre o barramento OPB e a lógica do usuário. A princípio não precisa alterar.
• O user_logic é onde o usuário escreve seu hardware.
![Page 23: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/23.jpg)
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 239 – 269 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
![Page 24: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/24.jpg)
Importar o periférico ao projeto
Segunda etapa : inclusão do periférico no projeto
![Page 25: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/25.jpg)
Importar o periférico cujo template foi
modificado na etapa anterior
![Page 26: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/26.jpg)
Selecionar o periférico previamente criado
Identificar o periférico e a respectiva versão do driver (é interrupt – eu (Moraes) que esqueci do t)
Responder yes
![Page 27: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/27.jpg)
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.
![Page 28: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/28.jpg)
• A janela seguinte permite acrescentar novos arquivos• Olhar que os últimos dois arquivos VHDL compilados referem-se aos arquivos
VHDL editados nas etapas anteriores
![Page 29: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/29.jpg)
Indicar que este periférico irá se comunicar pelo barramento PLB, em modo escravo
![Page 30: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/30.jpg)
Definir sensitividade e prioridade da
interrupção
• Pino de interrupção: notar que foi detectado - indicar o que o mesmo é sensível ao nível lógico
Next Next Finish
![Page 31: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/31.jpg)
Adicione o periférico ao sistema e o conecte ao barramento PLB
Inserir o periférico(duplo clique ou arraste)
Terceira etapa: conexão do periférico
Conecte-o ao barramento
![Page 32: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/32.jpg)
1. Defina a rede de interrupção
selecionando new_conection – o nome é criado automaticamente
2. Defina o sinal que informará a Microblaze da interrupção
LIGANDO OS FIOS DE INTERRUPÇÃO ENTRE SI
![Page 33: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/33.jpg)
Gerar endereço para o novo periférico
![Page 34: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/34.jpg)
III – Geração do bitstreame software do usuário
![Page 35: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/35.jpg)
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!
![Page 36: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/36.jpg)
• Modifique o interrupt_handler
– <diretório>/drivers/interrupt_v1_00_a/src/interrupt.c
– Acrescente no final da função INTERRUPT_Intr_DefaultHandler (linha 66): 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)
![Page 37: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/37.jpg)
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
![Page 38: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/38.jpg)
Escrevendo o software com suporte a 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
• 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
![Page 39: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/39.jpg)
Ao final do código 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<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
![Page 40: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/40.jpg)
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
![Page 41: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/41.jpg)
IV – Utilização do Sistema
ir para um PCnão resolvida a questão do downloand
e serial no LINUX
![Page 42: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/42.jpg)
Trabalho a fazer
• Depois de validado o projeto, realizar no Linux com uma interface serial
![Page 43: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/43.jpg)
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
![Page 44: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/44.jpg)
Download do bitstream
• Device Configuration Download
• Ou pode-se utilizar o impact, arquivo download.bit (dentro do diretório implementation)
![Page 45: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/45.jpg)
Visualização dos resultados
Termina aqui – a outra seção não foi atualizada
![Page 46: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/46.jpg)
VI – Debug passo a passo(opcional)
![Page 47: Tutorial EDK – Embedded Development Kit](https://reader036.vdocuments.com.br/reader036/viewer/2022081421/56815a06550346895dc753b8/html5/thumbnails/47.jpg)
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”