Esta página tem como objetivo mostrar os passos para configurar o ambiente de desenvolvimento necessário para carregar um FPGA com uma imagem do processador Leon3 (ver diagrama de blocos), desenvolvido em VHDL pela empresa Gaisler, e programá-lo usando a linguagem C/C++ no ambiente Windows.

No caso de um ambiente Linux, o processo é semelhante (e mais fácil).


1 – FPGA e bitstream

Assumindo que será utilizada a plataforma Atlys da empresa Digilent, realizar o download do arquivo leon3mp.bit para seu computador e salvá-lo em uma pasta conhecida (ex. C:\Alunos\proj_leon).

Alguns arquivos e documentação relacionados ao LEON3 e plataforma Atlys:

  • [leon3mp.bit] – arquivo contendo o “bitstream” (arquivo de configuracao) do LEON3 para a plataforma Digilent Atlys.
  • [grlib_README] – README GRLIB/LEON3 para a placa Digilent Atlys.
  • [Digilent Atlys] – Informações sobre a Digilent Atlys.
  • [grlib.pdf] – Descrição das ferramentas e dicas de implementação utilizando a biblioteca GRLIB.
  • Para gerar sua propria versão do LEON3, seguir as instruções no site da Aeroflex/Gaisler: [LEON/GRLIB].
  • [LEON3_install_guide.pdf] – informações detalhadas sobre a configuração (criação) de um processador LEON3.

2 – Configurando o FPGA da Atlys

É necessário usar um gravador compatível com o FPGA. No caso da Atlys, que utiliza um FPGA da Xilinx, é possível usar as ferramentas da Xilinx (Impact) ou da própria Digilent.

A Digilent disponibiliza um executável para configuração do FPGA em linha de comando, denominado djtgcfg. Esse software faz parte das ferramentas Digilent ADEPT2, sendo que algumas dessas ferramentas estão listadas a seguir:

Executar o comando “cmd” (prompt) no windows e navegar até o diretório onde se encontra o bitstream e o djtgcfg (ex. C:\>cd Alunos\proj_leon).

Alimentar a placa, conectar o cabo USB na porta PROG, e ligar a placa.

Configurar o FPGA com o bitstream usando o comando a seguir no prompt do DOS:

C:\Alunos\proj_leon>djtgcfg prog -d Atlys -i 0 -f leon3mp.bit

Durante o envio do bitstream do LEON3 para o FPGA da placa, será apresentada a mensagem: “Programming device. Do not touch your board. This may take a few minutes…“.

Se a configuração do FPGA for realizada com sucesso, será apresentada a mensagem: “Programming succeeded“.

Se ocorrer um erro de falta de DLL no windows, instalar e executar o software disponivel em (versao atual é a v2.16.4):

http://store.digilentinc.com/digilent-adept-2-download-only/


3 – Compilando programas C/C++ para o processador LEON3

Para compilar códigos em C/C++ para o LEON3 é necessário usar o cross-compiler Bare-C Cross-Compiler System (bcc), que é disponibilizado pela Aeroflex/Gaisler:

  • [bcc] – Compilador C/C++ – versões para Linux e Windows.
  • [Cópia local] – Compilador C/C++ – versão para Windows.
  • [bcc.pdf] – documentação.

Exemplos de fontes em C++:

  • [hello.cpp] – Exemplo em c++ Hello World!
  • [leds.cpp] – Exemplo em c++ para acesso ao I/O da Atlys.

Descompactar o arquivo sparc-elf-*-minigw.zip em um local conhecido (ex. C:\Atlys_leon). Copiar o arquivo fonte a ser compilado para esse local conhecido.

Para compilar o arquivo hello.cpp utilize o comando (no prompt):

C:\Alunos\proj_leon> sparc-elf-*-minigw\bin\sparc-elf-g++.exe hello.cpp -o hello

Pode-se adicionar o caminho do compilador no PATH do sistema ou fazer um arquivo .bat para executar os comandos.


4 – Conexão com o processador Leon3 via GRMON

Para estabelecer uma conexão com o LEON3 é necessário usar uma ferramenta que se comunica com o Debug Support Unit (DSU).

A Aeroflex/Gaisler disponibiliza o GRMON2, que pode ser utilizado para obtenção de informações sobre o sistema, e para enviar e executar binários no processador. Procurar usar sempre a versão mais recente disponível no link a seguir (ver “GRMON2 Evaluation/Academic version”):

[GRMON2] – [Cópia local – em caso de validade expirada, baixar uma nova versão do site oficial]

Descompactar o arquivo grmon-eval-*.tar.gz em um local conhecido (ex. C:\Atlys_leon).

Para se conectar ao DSU do LEON3, colocar a chave SW7 do kit Atlys em ‘1’ e, a seguir, executar no prompt do DOS o programa grmon com os seguintes parâmetros:

C:\Alunos\proj_leon> \Atlys_leon\grmon-eval-*\win32\bin\grmon.exe -u -digilent

Ao se conectar ao LEON3 carregado no FPGA, o computador hospedeiro irá receber via USB as mensagens recebidas do LEON3. As mensagens de depuração do grmon e do LEON3 serão apresentadas na tela do computador hospedeiro (ex. frequência de operação, …).

Para enviar um binário (programa executável), usar o comando load a seguir, assumindo que o grmon está sendo executado na mesma pasta do binário.

ATENÇÃO!! Antes de usar o comando load, posicionar todas as chaves (SW) da placa em 0.

grmon2> load hello

Serão apresentadas mensagens informando o progresso do download e, ao final, será apresentado:

Image C:/Alunos/proj_leon/hello loaded

Para executar no LEON3 o programa desenvolvido em C/C++, usar o comando “run“:

ATENÇÃO!! Após executar o comando run, posicionar chave 7 (SW7) da placa em 1.

grmon2> run

Na tela do computador hospedeiro (PC) deverá ser apresentada a mensagem indicada no “cout” do programa exemplo.


Exemplos de programas para o LEON3 na Atlys

  • [clocktest.cpp] – Exemplo de uso do <time.h> (compila com ambos, g++ e sparc-g++).
  • [OLED/] – Exemplo de uso do OLED.
  • [examples/] – Diversos exemplos: amba, uart, fpu, gpio, timer, i2c, irq, vga.
  • [examples/] – Mais exemplos: c-irq.c, clock, pthread, freertos.

Resumo

Considerando que na pasta C:\Alunos\proj_leon estejam os seguintes arquivos:

  • djtgcfg.exe
  • hello.cpp
  • leds.cpp
  • leon3mp.bit

e que na pasta C:\Atlys_leon estejam as seguintes pastas:

  • grmon-eval-2.0.56\
  • sparc-elf-4.4.2-mingw\

A sequencia de comandos a seguir deve ser executada para: carregar o bitstream do Leon3 no FPGA, compilar o fonte em C++, executar o programa monitor (grmon – para comunicação entre o computador hospedeiro e o kit Atlys), realizar o download do executável (programa do usuário) para o kit Atlys, e execução do programa no kit.

No prompt de comando:

  • cd C:\Alunos\proj_leon
  • djtgcfg prog -d Atlys -i 0 -f leon3mp.bit
  • \Atlys_leon\sparc-elf-4.4.2-mingw\bin\sparc-elf-g++.exe hello.cpp -o hello
  • \Atlys_leon\grmon-eval-2.0.56\win32\bin\grmon.exe -u -digilent

No prompt do grmon:

  • grmon2>load hello
  • grmon2>run

Esta pagina é um trabalho de Paulo Villa e Eduardo Bezerra. Dicas, sugestões e correções são sempre bem vindas, envie um email para: prcvilla at gmail dot com
Última atualização: 10-09-2015

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License.