Processador Nios II – Desenvolvimento: Final

Olá Galera,

Esta série teve como objetivo demonstrar como iniciar um projeto utilizando o softcore.

5. Gravando os arquivos .sof e .elf no FPGA Cyclone II do Kit DE1.

Neste último post referente ao Processador Nios II embarcados nos dispositivos FPGA da Altera iremos programar os arquivos .sof e .elf no FPGA.

A) SOF

Com o software Quartus II aberto, clique em “Tools => Programmer” conforme exibido na figura a seguir.

Figura 01
Figura 01: Programmer.

Em seguida será aberto a tela do Programmer, Clique em “Add File…” (1) para adicionar o arquivo .sof (2) e depois clique em “Open” (3) . 

Figura 03
Figura 02: Adicionando o arquivo .sof.

Utilizaremos o gravador “USB-Blaster” (1) disponível no Kit Altera DE1, selecione a caixa “Program/Configure” (2) em depois clicar em “Start” (3) e em “Progress” (4) informará o status da gravação.

Figura 03
Figura 03: Gravando o arquivo .sof.

Após o término da gravação aparecerá a a mensagem “Successful”. 

B) ELF

Após compilar o projeto do Nios II no Eclipse é gerado o arquivo .elf e conforme demonstrado na figura abaixo o primeiro passo é clicar em “Run => Run Configurations…”.

Figura 04
Figura 04: Run Configurations.

Na tela abaixo devemos selecionar a opção “Nios II Hardwre => New_configuration” (1) , selecionar a aba “Target Connection ” (2), marque as caixas em “System ID checks” (3), porque não acrescentamos o componente System ID no projeto do Qsys e clicar em “Refresh Connections” (4) para estabelecer a comunicação entre Eclipse e FPGA.

Figura 05
Figura 05: Configurando o processo de gravação.

O processo estabelecerá comunicação com o FPGA, perceba em “Connections” nos campos “Processors” e “Byte Stream Devices” foram detectados o USB-BLASTER, dispositivo FPGA, processador Nios II e JTAG UART (componente adicionado no Qsys), e a seguir clique em “Run” para gravar o processador.

Figura 06
Figura 06: Gravando o Nios II.

Neste momento FPGA ja está programado com os arquivos .sof e . elf . No vídeo abaixo está sendo demonstrado o funcionamento.

Obrigado a todos!

Processador Nios II – Desenvolvimento: Parte IV

Olá pessoal,

Continuando com o desenvolvimento do processador Nios II embarcado em FPGA neste tópico demonstraremos como criar projeto no Eclipse. Se você não leu o post anterior pode ser encontrado aqui.

4. Criando projeto no Eclipse

O software Nios II contém duas partes principais: aplicações e BSP (Board Support Package).  O primeiro são os programas do usuário e o segundo são códigos específicos de configurações  Nios II. Note-se que a BSP baseia-se na informação a partir do arquivo .sopcinfo. Os códigos das duas parte são compilado e integrado em uma única imagem (arquivo .elf) e carregado para a memória principal do sistema do Nios II. O primeiro passo é abrir a IDE Eclipse:

Figura 01
Figura 01: Eclipse.

A tela abaixo informa qual local será o Workspace dos projetos. O Workspace poderá conter vários projetos, ou seja, pode criar outros projetos utilizando o mesmo Workspace.

Figura 02
Figura 02: Local do Workspace.

Criamos a pasta “firmware” dentro do projeto do Quartus II. A seguir aparecerá a página inicial do Eclipse. Para iniciar um novo projeto clique em “File => Nios II Application and BSP from Template”.

Figura 03
Figura 03: Iniciando o projeto.

Então surge a janela de acordo com a figura abaixo:

Figura 04
Figura 04: Aplicações do Nios II.

No campo “SOPC Information File Name” devemos inserir o arquivo “nios2_project.sopcinfo” onde contém as informações do BSP gerado pelo Qsys. Após importar este arquivo no campo “CPU Name” informará o nome do processador Nios II e em “Project Name” deve inserir o nome do projeto. Veja o exemplo abaixo:

Figura 05:
Figura 05: Configurando as aplicações do Nios II.

Em seguida clica em “Next >”.

Figura 06:
Figura 06: Configurando o Nios II Board Support Package.

No campo “Project name” deverá conter o nome do projeto BSP. Por exemplo, “nios2_bsp” e em seguida clica em “Finish”.

Para organização do projeto é importante que as aplicações e os arquivos BSP estão contidos na mesma estrutura de pasta dentro do projeto.

Veja na figura abaixo os arquivos de aplicações e as configurações de hardware (BSP).

Figura 07
Figura 07: Criado os arquivos.

Na pasta de aplicações (nios2_app) possui um arquivo “hello_word_small.c” onde criaremos o nosso programa em Linguagem C.

Figura 08
Figura 08: Hello Word.

Veja que o Eclipse já criou um trecho de código que poderá ser utilizado pelo programador.

O nosso programa deverá ler o status da chave “i_sw0” e acionar o led (o_led) e o o_led_blink deverá ficar aceso/apagado por 500ms.

// Bibliotecas
#include "sys/alt_stdio.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"

// Rotina Principal
int main()
{ 
 // Loop Inifinito 
 while (1)
 {
    if (IORD_ALTERA_AVALON_PIO_DATA(I_SW0_BASE))        // Lê o status da chave
       IOWR_ALTERA_AVALON_PIO_DATA(O_LED_BASE,1);       // Atribui nível lógico alto para saída o_led
    else
       IOWR_ALTERA_AVALON_PIO_DATA(O_LED_BASE,0);       // Atribui nível lógico baixo para saída o_led

    IOWR_ALTERA_AVALON_PIO_DATA(O_LED_BLINK_BASE,0);    // Atribui nível lógico baixo para saída o_led_blink
    usleep(500000);                                     // Atraso de 500ms
    IOWR_ALTERA_AVALON_PIO_DATA(O_LED_BLINK_BASE,1);    // Atribui nível lógico alto para saída o_led_blink
    usleep(500000);                                     // Atraso de 500ms
 }

 return 0;
}

A arquivo “system.h” são os endereços base de cada componente inserido no projeto do Qsys, veja o exemplo para entrada “i_sw0”:

#define ALT_MODULE_CLASS_i_sw0 altera_avalon_pio
#define I_SW0_BASE 0x3000
#define I_SW0_BIT_CLEARING_EDGE_REGISTER 0
#define I_SW0_BIT_MODIFYING_OUTPUT_REGISTER 0
#define I_SW0_CAPTURE 0
#define I_SW0_DATA_WIDTH 1
#define I_SW0_DO_TEST_BENCH_WIRING 0
#define I_SW0_DRIVEN_SIM_VALUE 0
#define I_SW0_EDGE_TYPE "NONE"
#define I_SW0_FREQ 50000000
#define I_SW0_HAS_IN 1
#define I_SW0_HAS_OUT 0
#define I_SW0_HAS_TRI 0
#define I_SW0_IRQ -1
#define I_SW0_IRQ_INTERRUPT_CONTROLLER_ID -1
#define I_SW0_IRQ_TYPE "NONE"
#define I_SW0_NAME "/dev/i_sw0"
#define I_SW0_RESET_VALUE 0
#define I_SW0_SPAN 16
#define I_SW0_TYPE "altera_avalon_pio"

E o arquivo “altera_avalon_pio_regs.h”  contém as macros de leitura e escrita nos periféricos de IO, exemplo:


if (IORD_ALTERA_AVALON_PIO_DATA(I_SW0_BASE))     // Lê o status da chave 
   IOWR_ALTERA_AVALON_PIO_DATA(O_LED_BASE,1);    // Atribui nível lógico alto na saída o_led

Para compilar o projeto clica em “Project” em em seguida “Build Project”.

Figura 09
Figura 09: Compilar o Projeto.

Após compilar o projeto verifica na aba Console a mensagem “Build Finished”, caso apresenta algum erro o mesmo será informado pelo Console.

No próximo post estaremos gravando os arquivos .sof (FPGA) e .elf (NIOS) no kit de desenvolvimento DE1 demonstrando seu funcionamento.

Até mais!