Altera Excalibur. DOCUMENTAÇÃO!!!! Ambiente de Simulação Ambiente de Hardware Ambiente de...
Transcript of Altera Excalibur. DOCUMENTAÇÃO!!!! Ambiente de Simulação Ambiente de Hardware Ambiente de...
Altera Excalibur
DOCUMENTAÇÃO!!!!
Ambiente deSimulação
Ambiente de Hardware
Ambiente de Software
Sistema de Prototipação Excalibur
Placa de desenvolvimento Excalibur
Dispositivo APEX
Características
• nº de portas - 211.000
• 13KB de RAM
• nios ocupa entre 25% e 35% da lógica do dispositivo
Modo de programação
• conexão JTAG (Quartus II)
• memória flash
Placa de desenvolvimento Excalibur
Memória Flash
Características
• 1Mbyte (512Kb x 16 bits)
Propósito
• usada como memória não volátil pelo Nios (w/r)
• configuração do APEX (controle de configuração)
Placa de desenvolvimento Excalibur
Memória SRAM
Características
• 256Kb (64Kb x 16 bits) em cada chip
• Nios pré-carregado (64Kb x 32 bits)
Placa de desenvolvimento Excalibur
Conectores SODIMM
Características
• socket de 144 pinos SODIMM
• módulo SDRAM (64bits)
• Conectada ao APEX
• nios pré-carregado não faz uso desta memória
Placa de desenvolvimento Excalibur
Pinos de expansão
Características
• 3.3 V e 5 V
• O APEX esta protegido dos pinos de 5V por chaves analógicas
• Para conexão de placas filhas, como Ethernet
Placa de desenvolvimento Excalibur
Conectores PCI (PMC)
Características
• APEX PCI
•padrão IEEE 1386
Placa de desenvolvimento Excalibur
Conectores JTAG
Características
• compatível com ByteBlaster e MasterBlaster
Propósitos
• programar o APEX (Quartus II)
• reprogramar o EPM7064 (Quartus II ou MAX+PLUS II)
Placa de desenvolvimento Excalibur
Chaves
Características
• compatível com ByteBlaster e MasterBlaster
Propósitos
• programar o APEX (Quartus II)
• reprogramar o EPM7064 (Quartus II ou MAX+PLUS II)
• PCM software (host)
Placa de desenvolvimento Excalibur
Controlador de Configuração
Propósito
• configurar o APEX
Dados de configuração
• Quartus hexout flash (ocupa 1/4 da mem. Flash)
• GERMS flash
Configuração de usuário x fábrica
• 512Kb - instruções do Nios e espaço de dados não volátil
• 256Kb - configuração do usuário
•256Kb - configuração de fábrica
Placa de desenvolvimento Excalibur
Entrada/Saída básica
Elementos
• push-button switches
• dip switch
• display de 7 segmentos
Placa de desenvolvimento Excalibur
Chaves especiais
Sw2 (reset)
• flash APEX
Sw3 (clear)
• depende da configuração do APEX
• Nios pré-carregado passa a executar o código a partir do endereço 0
Placa de desenvolvimento Excalibur
Circuito de clock
Elementos
• oscilador (33.333 MHz)
• distribuidor de clock
Placa de desenvolvimento Excalibur
Circuito de clock
Elementos
• oscilador (33.333 MHz)
• distribuidor de clock
Dispositivos com clock
• APEX
• pinos de expansão
• conectores PCM
• conectores SODIMM
Placa de desenvolvimento Excalibur
Processador Nios e Periféricos
Fluxo de projeto
Projeto do processador
(Verilog / VHDL)
Test Bench para simulação
C Header files
Custom Library
Boot monitor
SíntesePlace & Route
Cygnus/Red HatGNUPro
AlteraPLD
JTAGSerial
Ethernet
Projeto do usuário
IP proprietários
Códigoexecutável
Arquivode configuração
de hardware
Configuração do processador
Seleção dos periféricos
Generate
Hardware Software
Download& Debug
Código do usuário
Biblioteca S/W
RTOS
Biblioteca de periféricos
Processador Nios
Processador Nios
• Processador Soft Core Configurável (Firm Core)
• Arquitetura RISC 32-Bit – Instruções de 16-Bit– Maioria das instruções executadas
em1 ciclo de clock– Pipeline de 5 estágios
• Grande Banco de Registradores Internos– 128, 256 or 512 registradores– 32 registradores por janela
• Bloco de Dados Configurável– 16 bits– 32 bits– inclusão ou não de multiplicação
Timer
IRQ
PB
M CPU
UART
Nosso projeto aqui
FLASH
SRAM
Porta Serial
Altera PLD
Processador Nios• Faixa de endereçamento
– 128 kbytes (16 bits)
– 4 Gbytes (32 bits)
• Desempenho : até 50 MIPS
• Otimizado para PLD APEX
– 13% do APEX EP20K200E - 16 bits
– 20% do APEX EP20K200E - 32 bits
• Freqüência Máxima de 50 MHz
• Endereço Base do Vetor de Exceções
– 64 endereços de manipuladores de exceções
– Nios 32 bits = 4 bytes
– Nios 16 bits = 2 bytes
• Operações de deslocamento com número de ciclos parametrizável
– 1, 3, 7, 15 or 31 Bits/Clock
Parâmetros do Nios
• Data Path (32 or 16)• Tamanho do Barramento de Endereços (10 a 33-bits)• Tamanho do Bloco de Registradores (128, 256 or 512)• Endereço de Reset• Endereço Base do Vetor de Exceções
– 64 endereços de manipuladores de exceções– Nios 32 bits = 4 bytes– Nios 16 bits = 2 bytes
• Bit Shift Speed (1, 3, 7, 15 or 31 Bits/Clock)• Opções de Multiplicação
Diagrama de Blocos do Nios
Banco de Registradores por Janela• Até 512 registradores de propósito geral
• Janela móvel permite acesso a 32 registradores por janela
– 8 registradores globais (fixos)
– 24 registradores (móveis)
• Automaticamente usado pelo compilador (C)
• Vantagens:
– passagem de parâmetros
– chamada rápida a subrotinas
• Múltiplos deslocamentos em um único ciclo de clock
– Incrementos de até 3, 5, 7, 15, ou 31 Bits por clock
– Caro (área ocupada)
• Exemplo:
– Bit Shift Speed configurado para 7:
i << 9; /* Shift Left by 9 Bits */
– Executa em 2 Clocks
Bit Shift Speed
0
Clock 1 (Shift 7 bits)
Clock 2 (Shift 2 bits)
• Software – Usa a biblioteca matemática do GNU
• MSTEP– Hardware Multiplicador– multiplicação de 1 bit por clock– Aumento de ~ 4X sobre a rotina de multiplicação (software)
• MUL– Hardware Multiplicador– 16 x 16 32 em 2 Clocks
Multiplicador
Software
MSTEP
MUL
Ciclos de Clock16x16>32
Ciclos de Clock32x32>32
LEs Adicionais
80
18
2
0
+200
+400
250
80
16
Opções de Multiplicação
Avalon:Especificação do
Barramento
Hardware Externo
Introdução
• Objetivos do Avalon:
– simplicidade
– operações síncronas
– baixo consumo de área (LE)
• Para uso “on-chip”
• Barramento multimestre mestre (nios 2.0)
• Periféricos mapeados em memória
Funções do Barramento
• Decodificação de endereço
– Geração de chip-select
• Multiplexação de barramento de dados
– Transferência de dados do mestre para o periférico escolhido
• Geração de wait-state
– Ciclos de clock extra
• Dimensionamento dinâmico de barramento
– Suporta periféricos com barramento de dados menor que o tamanho do
barramento de dados do avalon
• Controle de interrupção
– Com prioridade
Sistema
Nios
CPUA
valo
n B
us
User
I/FNios System
Module
I/O
I/O
Altera PLD
User
HW
User
I/F
Perif. Interno (timer)
Perif. Interno (UART)
Perif. Externo (memória)
Perif. Externo (hardware do usuário)
Temporização do Barramento
• Sinais “registered” (sem atraso comb.)
• Sinais combinacionais (com atraso comb.)
• Informações IMPORTANTES para construção de um wrapper entre avalon e HW do usuário
Lógica D Q
clock
D Q
clock
Lógica
Cíclos de Leitura do Nios• 0 wait-state, 0 setup/hold time (asinc. perif)
• 1 wait-state, 1 setup/hold time (sinc. perif)
NIOS
HW
Nios
Avalon
Hw
Address, readn
CS Data
Cíclos de Escrita do Nios• 0 wait-state, 0 setup/hold time (asinc. perif)
• 0 wait-state, 1 setup/hold time (sinc. perif)
Nios
CPUA
valo
n B
us
User
I/FNios System
Module
I/O
I/O
Altera PLD
User
HW
User
I/F
User-Defined Interface• Criação de portas para interface com outros periféricos
– On-Chip & Off-Chip
• Configuração de temporização do barramento
Criando um Projeto• Agora vamos criar um projeto com uma
interface para ligar um hardware do usuário• Copie o projeto minimal_32 do diretório de
exemplos do excalibur para o seu diretório• Abra o seu projeto• Dê um duplo click em no bloco
nios_system_module
Adicionando um Novo Periférico
Interface do Usuário
1. Código do usuário mais wrapper2. Seleciona o top3. Varre o VHDL para as portas - scan files4. Manualmente escolhe o tipo da porta no
barramento Avalor (Type)5. Finish
1
23
4
Temporização
• Neste caso, 1 wait state
Gerar o hw
Finalizando a integração• Atualize o símbolo do processador com os sinais recém-
criados – selecione o símbolo e com o botão da direita “update symbol
or block”
– crie um símbolo para o hw externo
• file--> open para abrir o VHDL e depois em tools criar o símbolo– selecione wr_880
• conecte o wr_880 ao processador
SintetizandoSintetize o SOC!
Realizando o download1
2
3
4
Executando o Nios SDK• Ir para o diretório do projeto (...minimal_32/cpu_sdk/src)• Coloque o fonte • Compile o fonte “nb lfsr32.c”• Execute nr lfsr32.srec