Author
dexter
View
23
Download
0
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
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
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)
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 249 266 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 escravoNEXT NA JANELA SEGUINTE
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:
Total run time: 438.00 secondsRunning synthesis...bash -c "cd synthesis; ./synthesis.sh"xst -ifn system_xst.scr -intstyle silentRunning XST synthesis ...PMSPEC -- Overriding Xilinx file with local file
XST completedDone!
Modifique o interrupt_handler
/drivers/interrupt_v1_00_a/src/interrupt.c
Acrescente no final da funo INTERRUPT_Intr_DefaultHandler (linha 54): 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)
Usando o ambiente de software
Use esta opo
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("-- **** 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
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
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
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
Escolha das aplicaes de testeSo geradas duas aplicaes exemplos teste de memria e teste de perifricos