2. Estudar a arquitetura SPARC V8 da qual é
derivado o processador de 32 bits LEON3 da
empresa Aeroflex Gaisler.
Elaboração do fluxo gravação do processador
LEON3 em kits de desenvolvimento da
ALTERA DE-2 e D0-nano.
Testar a versão de Linux SnapGear no LEON3.
3. O processador LEON3 é um modelo VHDL
sintetizável de um processador de 32-bits
compatível com a arquitetura SPARC V8. O
modelo é altamente configurável, e
particularmente apropriado para projetos do
tipo system-on-a-chip (SOC).
4. O processador tem as seguintes características:
Conjunto de instruções do SPARC V8;
Pipeline avançado de 7-estágios;
Multiplicação e divisão em Hardware;
Unidades de MAC;
FPU de alto desempenho;
Cache de instruções e de dados separadas
(Arquitetura Harvard);
AMBA-2.0 AHB bus interface;
5. Suporte a debug on-chip;
Symmetric Multi-processor support (SMP);
Até 125 MHz em FPGA e 400 MHz em ASIC
com tecnologia de 0.13µM;
Extremamente configurável;
Grande gama de ferramentas de software:
compiladores, kernels, simuladores e
monitores de debug.
6. O LEON3 é totalmente parametrizável através de
configurações em seu VHDL, sem alterar nenhum
pacote de configuração global. Assim, é possível
instanciar vários núcleos em um mesmo projeto, com
diferentes configurações. As características do LEON3
podem ser definidas através de uma ferramenta
gráfica, facilitando a configuração do processador. A
ferramenta de configuração pode alterar todas as
características do processador, e também periféricos
on-chip como memórias e interfaces de rede.
O processador LEON3 pode ser sintetizado com as
mais conhecidas ferramentas como Synplify,
Synopsys DC e Cadence RC. Este pode ser sintetizado
também com as ferramentas Xilinx XST e Altera
Quartus, tanto por scripts ou utilizando as interfaces
gráficas da própria ferramenta.
7.
8. A Aeroflex Gaisler desenvolve IPs em VHDL, A maioria dos
“cores” são distribuídos dentro da biblioteca de IPs GRLIB,
proporcionando uma plataforma de desenvolvimento de
SoCs. O uso da versão LEON3/GRLIB é feita sob licença
GPL.
A GRLIB traz scripts automáticos para as ferramentas de
projeto da Synopsys, Synplify, Cadence, Mentor, Actel,
Altera, Lattice, e Xilinx e para os simuladores Modelsim,
Ncsim, Aldec, Sonata e GHDL.
A GRLIB é centrada no barramento, ou seja, assume-se
que a maioria dos IP “cores” serão conectados através do
barramento on-chip. O barramento AMBA-2.0 AHB/APB
foi o escolhido como o barramento comum devido a sua
popularidade no mercado (ARM) e por causa da sua
documentação vasta e ausência de restrições de licença.
9.
10. O LEON3FT é uma versão tolerante a falhas do
processador LEON3. Ele foi projetado para
operações no ambiente espacial, e inclui
funcionalidades para detectar e corrigir erros do
tipo SEU ( single event upset) em memórias RAM
on-chip. O LEON3FT suporta a maioria das
funções do LEON3 e adiciona as seguintes
funcionalidades:
Register file SEU error-correction de até 4 errors
por 32-bit word;
Cache memory error-correction de até 4 errors
por 32-bit word;
Tratamento de erros autônomo e transparente ao
software;
Nenhum impacto no timing devido a detecção or
correção de erros.
11. As seguintes características do LEON3 não
são suportadas no LEON3FT:
RAM de rascunho local (instruções ou dados);
“Cache locking”.
LRR (least recently replaced).
O LEON3FT core é distribuído junto com uma
versão especial FT da GRLIB.
12. A implementação de um sistema com o
LEON3 é tipicamente feita usando uma das
“templates” de projetos fornecidas, e pode
ser dividida nas seguintes partes:
Configuração do projeto usando xconfig;
Simulação e “test-bench”;
Síntese e “place & route”;
Geração do “bitstream”;
Configuração da FPGA na placa.
13. As “templates” de projeto se localizam no
diretório designs/ da GRLIB e se baseiam em três
arquivos:
config.vhd: um pacote em VHDL contendo os
parâmetros de configuração do projeto, gerado
automaticamente pela ferramenta GUI xconfig.
leon3mp.vhd: contém a entidade “top-level” e
instâncias de todos IP cores.
testbench.vhd: testbench com memória externa,
emulando a placa FPGA.
14. Para ativarmos o GUI xconfig digitamos
make xconfig
na linha de comando. A seguir podemos ver
a ferramenta GUI xconfig:
15. Após a configuração do projeto, podemos
realizar as próximas etapas do processo
dentro da ferramenta de projeto Quartus da
ALTERA, ou digitarmos make quartus na
linha de comando.
16. Após a geração do “bit-stream” podemos
programar a FPGA através do Quartus ou
utilizando o comando make quartus-prog-
fpga. Esta etapa irá descarregar o arquivo
leon3mp.sof para a FPGA através da interface
JTAG.
17. Inicialmente trabalhamos com o kit DE-2 que possui as seguintes características:
- Altera Cyclone II 2C35 FPGA com 35000 LEs (elementos lógicos)
- Dispositivo de configuração serial Altera (EPCS16) para Cyclone II 2C35
- USB Blaster (built in on board) para programação e controle API
- Suporta modo JTAG e AS
- SDRAM de 8Mbyte (1M x 4 x 16)
- SRAM de 512K byte(256K X16)
- Memória flash de 4Mbyte (upgradeable to 4Mbyte)
- Socket para cartão SD
- 4 chaves tipo Push-button
- 18 chaves DPDT
- 9 LEDs cor verde
- 18 LEDs cor vermelho
- Módulo LCD 16 x 2
- Oscilador de 50MHz e 27MHz para fontes externas de clock
- CODEC de Áudio de 24-bit (Qualidade CD) com linha de entrada, saída e para
microfone
- VGA DAC (10-bit alta-velocidade triple DACs) com conector VGA de saída
- TV Decoder (NTSC/PAL) e conector de entrada para TV
- Controlador Ethernet 10/100 com socket. Controlador USB Mestre/Escravo com
conectores USB tipo A e tipo B.
- Transceiver RS-232 e conector de 9-pinos
- Conector PS/2 mouse/teclado
- Transceiver IrDA
- Dois Headers de expansão de 40-pinos com diodo de proteção
18.
19. O segundo kit é o DE0-nano, que possui as seguintes características:
- Cyclone® IV EP4CE22F17C6N FPGA
22,320 Logic elements (LEs)
594 Memória Embarcada (Kbits)
66 Multipliers Embarcados 18 x 18
4 PLLs
153 FPGA I/O
- Circuito USB-Blaster on-board
- EPCS16 - Dispositivo de configuração serial
- Dois Headers 40-pin (GPIOs) - Dois pinos de energia 5V, dois pinos de
energia 3.3V e quatro pinos de terra
- Um Header de 16-pin, fornece 16 pinos I/O digital e 8 de análogicos
- 32MB SDRAM
- 2Kb I2C EEPROM
- 8 Leds verdes
- 2 push-buttons
- 4 dip-swiches
- Acelerometro ADXL345 com alta resolução (13-bit)
- NS ADC128S022, 8 Canais, 12-bit Conversor A/D50 ksps para 200 ksps
- Oscilador de 500Mhz
- USB mini-AB port (5V)
- Dois pinos DC (5V)
- Dois pinos Energia Externa (3.6-5.7V)
20.
21. No desenvolvimento de aplicações em
linguagem C foi utilizado a IDE Eclipse
juntamente com o plugin fornecido pela
Aeroflex Gaisler que possui um cross-
compiler da linguagem C/C++ para LEON e
ERC32 e permite o debug e simulação do
hardware (GRMON).
22.
23. Uma outra maneira de debug do LEON3 é
utilizando a ferramenta GRMON stand-alone.
Ela se conecta através da porta JTAG dos kits
de desenvolvimento e promove a interação
com a FPGA. Para ativar o GRMON
digitamos:
grmon -altjtag -u -nb -nosram
24.
25. O GRMON é um monitor de depuração para o
processador LEON3. O GRMON se comunica com a
unidade de suporte a depuração (debug support unit
- DSU) do LEON3, permitindo depuração não intrusiva
do sistema. O GRMON tem as seguintes
características:
Leitura/Escrita em todos os registradores e
memórias;
Carregamento e execução de aplicações;
Gerencia de breakpoint e watchpoint;
Conexão remota com o depurador GDB;
Definições de comandos pelo usuário;
Suporte para interface plug-and-play LEON3/GRLIB;
Interfaces para depuração Serial, Ethernet, JTAG, PCI e
USB.
26. Dentro do GRMON podemos transferir um
código compilado para o processador LEON3
através do comando
load <arqbin>
e executá-lo através do comando:
run
27. Foram escritos códigos em linguagem C para
acessar alguns periféricos das placas DE-2 e
DE0-nano, tais como chaves ON/OFF, push-
buttons, LEDs, DISPLAY LCD e GPIO (32 bits).
A template de LEON3 para placa DE-2 possui
duas GPIO que estão conectadas via
barramento AMBA APB ao processador. A
seguir vemos uma parte do código que
acessa uma dessas portas:
28. printf("GPIO_0 ADDR = %08Xn",pio);
pio[2] |= 0x01FF; // Set direction of
line 1 to output
pio[1] &= ~0x1FF; // Set line 1 low
printf("pio_0 din = %08Xn",pio[0]);
printf("pio_1 dout = %08Xn",pio[1]);
printf("pio_2 dir = %08Xn",pio[2]);
printf("pio_3 imask = %08Xn",pio[3]);
printf("pio_4 level = %08Xn",pio[4]);
printf("pio_5 edge = %08Xn",pio[5]);
printf("pio_6 bypass = %08Xn",pio[6]);
printf("pio_7 reserved = %08Xn",pio[7]);
printf("pio_8 irqmap = %08Xn",pio[8]);
29. O Display LCD da placa DE-2 é compatível com
HD44780 e também foi utilizado, a seguir vemos
um pouco do código de uso do LCD:
/* * init display LCD * */
send_ctrl_LCD(0x38);
send_ctrl_LCD(0x0F);
send_ctrl_LCD(0x01);
send_ctrl_LCD(0x06);
/* * send data * */
send_data_LCD(' ');
send_data_LCD(' ');
send_data_LCD(' ');
send_data_LCD('D');
send_data_LCD('H');
30. Os push-buttons e os LEDs foram acessados
conforme o código abaixo:
while(key2 != 0x00){
pio[1] ^= 0x1FF;
// pisca LEDs
key2 = pio[0] & 0x0200;//testa
se foi pressionado
for(i = 0; i <= 1000000;i++){}
//delay
}
31. Nesta etapa vamos utilizar a versão 2.6.x do
kernel Linux SnapGear que tem suporte para
MMU, este kernel vem do kernel.org com
patches específicos para o LEON3 e drivers
adicionais para a GRLIB.
Nós baixamos e instalamos a toolchain do
LEON GLibC Cross-compiler (linux-x86 host)
do site:
32.
33. O processo de instalação deve ser feito no
diretório /opt e o path (/opt/sparc-[uc]-
linux-3.x.x/bin) deve ser adicionado para a
variável PATH do shell.
A instalação da distribuição SnapGear pode
ser feita em qualquer lugar dentro do
diretório home:
mkdir ~/SnapGear
cd ~/SnapGear
tar -xjf
/path/to/dist/snapgear-2.6p42.tar.bz2
34. O SnapGear traz uma interface GUI
semelhante aos utilitários do kernel Linux.
Nessa GUI é possível selecionar o
processador, versão de Linux, biblioteca C e
qual aplicações a serem incluídas no root file
system (imagem ROMFS). É também possível
configurar os parâmetros de boot loader e o
kernel Linux. Para ativar a GUI é só digitar:
make xconfig
35.
36. Após ter configurado o kernel e as aplicações,
é possível compilar o SnapGear usando o
comando:
make
37. Após a compilação e build do kernel, duas imagens
foram geradas:
image.flashbz : imagem PROM que irá descomprimir
o kernel e as aplicações na RAM e rodar tudo de lá.
image.dsu: imagem RAM para fins de download e
execução no hardware final usando o DSU ou os
simuladores.
38. Para transferir as imagens geradas para os
kits DE-2 e D0-nano, utilizamos o GRMON.
grmon -altjtag -u -nb -nosram