André Castelan
"Em teoria não há diferença entre a pratica e a teoria, já na pratica..."

domingo, 25 de agosto de 2013

Simulando o Nios II. Processador softcore da Altera.

Olá pessoal,

Em um tutorial passado apresentei a vocês a ferramenta Modelsim, que possibilita simular o comportamento de circuitos descritos em linguagens de descrição de hardware, tais como VHDL e Verilog. O exemplo apresentado foi simples, mas possivelmente já serviu de ponto de partida para o aprendizado de linguagens de descrição de hardware , pois possibilita testar os conceitos sem a utilização de um FPGA físico.

 O tutorial de hoje dará mais um passo no mundo da simulação, e de quebra seremos apresentados ao processador softcore Nios II. Este tutorial fará parte de um conjunto de artigos onde pretendo apresentar a vocês o processador Nios. Neste conjunto de tutoriais pretendo apresentar:
  • Arquitetura do Nios II;
  • Simulação do Nios no Modelsim;
  • Implementação de Componentes customizados que fazem interface com o Nios;
  • Port do uClinux para o Nios.

Este primeiro artigo irá contemplar os dois primeiros itens da lista.

O Nios II

 

O Nios II é um processador softcore RISC de 32 bits com arquitetura Harvard desenvolvido pela Altera. Mas o que isso significa? Um processador softcore é uma implementação de um processador descrito em linguagem de hardware, que pode ser customizado e sintetizado em um FPGA ou ASIC. Uma vantagem evidente no uso de softcores está na flexibilidade, pois possibilita a fácil conexão com outros periféricos, alteração do conjunto de instruções e, o mais evidente, alteração das estruturas internas do processador, tais como tamanho do cache, priorização de interrupções, dentre outros. Já um processador com arquitetura Harvard é um processador que tem memórias separadas para alocar dados e instruções.

O Nios apresenta as seguintes características:
  • Processador RISC com pipeline;
  • 32 registradores de propósito geral;
  • 3 formatos de instrução;
  • Instruções de 32bits;
  • Endereçamento de 32bits;
  • Cache de dados e de instruções separados com tamanhos configuráveis;
  • Memória no chip;
  • Branch Prediction;
  • 32 interrupções priorizáveis;
  • On-chip hardware (Multiplicaçãos, shift, rotate...);
  • Memory Menagement Unit (MMU);
  • Memory Protection Unit (MPU);
  • Instruções customizadas em hardware;
  • Debug utilizando JTAG;
Arquitetura do Nios 2

A Altera disponibiliza o softcore em 3 "sabores":
  • Fast: voltado para o desempenho (maior consumo de espaço no FPGA);
  • Standard: equilíbrio entre consumo de lógica e velocidade;
  • Economy: voltado para a economia de lógica.
É interessante notar que o código compilado para a arquitetura Nios é compatível com as 3 implementações possíveis do processador.

O Nios é livre de Royalts e necessita apenas que você tenha uma licença comercial do Quartus II para que você possa embarcá-lo em suas aplicações, sem limitação quanto a quantidade. A figura a seguir apresenta a arquitetura de um design de referência utilizado em muitos dos kits de FPGAs da Altera.

Design de referência onde é possível observar o processador Nios2.
A figura apresenta dois tipos de componentes: implementados em linguagem de descrição de Hardware ("On-chip" - em laranja) e externos, possivelmente implementados em CIs presentes nas placas dos kits ("off-chip" - em azul). Pela figura, pode-se notar que o Nios se comunica com os demais componentes por meio das conexões criadas pelo Qsys (Qsys Interconnect). O Qsys, como veremos mais detalhadamente em outro tutorial, é uma ferramenta desenvolvida pela Altera para criação de SOPCs  (System on a Programmable Chip).

Colocando a Mão na Massa - Hello World Simulado 

Como havia dito, neste tutorial veremos um Hello World com o processador Nios simulado no Modelsim. O tutorial será feito em 3 partes:
  1. Primeiramente precisamos gerar o SOPC (System on a Programmable Chip) que irá conter o Nios e a infraestrutura para que ele interaja com o mundo externo. Este passo será feito nas ferramentas Quartus II e Qsys;
  2. Criação de um programa em C contendo o "Hello World", que será feito utilizando o Nios2 EDS;
  3. Simulação do design rodando o programa compilado. Será feito no Modelsim.
Para quem ainda não tem o Quartus e o Modelsim, eles podem ser encontrados no site da Altera, onde é possível baixar uma versão WebEdition, que tem algumas limitações, mas que é perfeita para o aprendizado.

http://dl.altera.com/?edition=web

Você pode baixar o arquivo contendo o conteúdo completo, ou somente os arquivos individuais:
  1. Quartus II Software (includes Nios II EDS)
  2. ModelSim-Altera Edition (includes Starter Edition)
  3. Cyclone II, Cyclone III, Cyclone IV device support (includes all variations)
Isso é o suficiente para rodarmos o tutorial. Instale o software e requisite uma licença Web Edition. Isso será sugerido quando você abrir o Quartus pela primeira vez.

Baixe o arquivo de exemplo, AN351_design.zip da app note  da Altera, em que este tutorial é baseado:
http://www.altera.com/support/examples/nios2/exm-simulating-niosii.html

Descompacte este arquivo em algum local. O Quartus, por algum motivo, não gosta de diretórios que contém espaços no nome, então descompacte o arquivo para um diretório que possua um caminho sem espaços na nomeação.

Abra o Quartus e vamos começar.

 

Configurando o Ambiente de Simulação no Qsys.

 

Com o Quartus aberto, clique em File > Open Project;
Procure pelo diretório onde você descompactou o design do appnote, e selecione o an351_project.qpf. Clique em Open. O projeto será aberto.

Para visualizarmos o SOPC que já está pronto neste appnote, clique em Tools > Qsys. Se um formulário de procura de arquivo aparecer, selecione o arquivo niosii_system.qsys. A seguinte janela irá se abrir:

SOPC do appnote

Nela podemos observar o SOPC disponibilizado no appnote. Este SOPC é composto por uma fonte de clock de 50 MHz, o processador Nios2, modalidade standard, memória ram do tipo on-chip de 65 KB e um JTAG Uart, utilizado para fazer o debug.

Para gerarmos os arquivos da simulação, clique na aba Generation.

Configure o formulário da seguinte maneira:
  1. Create simulation model: none;
  2. Create testbench Qsys system: Simple, BFMs for clocks and resets;
  3. Create testbench simulation model: VHDL;
  4. Create HDL design files for synthesis: none;
  5. Create blocks symbol file: unchecked;
Por fim clique em Generate. O Qsys irá gerar os arquivos que descrevem as interconexões para a comunicação entre os módulos. 

Por fim, clique em File > Save;

 

Criando o Software para o Nios2

 

O software que irá rodar no Nios é um simples Hello World. A mensagem de hello world será enviada para o console via JTAG UART. Para isso, seguiremos os seguintes passos:
  1. Abra o Nios2 SBT para Eclipse; (Sim, é uma customização do eclipse assim como o Code Composer Studio)
  2. Vá em File > New > Nios II Application and BSP from Template
  3. Escolha o template do projeto Hello World.
  4. Escolha um nome para o projeto.
  5. Selecione o design que geramos anteriormente no Qsys. Procure o SOPC Information File Name, que está na pasta an351_design, arquivo niosii_system.sopcinfo;
  6. Clique em Finish;
Como podemos observar, o arquivo .c gerado é bem simples. Iremos compilar o projeto clicando em Project > Build All;
Em seguida, iremos rodar o projeto no Modelsim, clicando em Run > Run as > Nios II Modelsim;

Se tudo estiver configurado corretamente, a janela do Modelsim irá se abrir.

Rodando a Simulação no Modelsim

 

Devemos então inserir as formas de onda de interesse no Modelsim. Estas formas de onda já foram salvas no appnote que estamos usando como referência. Para importar estas formas de onda, no Modelsim vamos em File > Import > Column Configurations e iremos selecionar o arquivo wave.do que está localizado no diretório onde estão os arquivos do appnote.

Por fim, iremos escolher o tempo da simulação de 2ms e clicar em Run.

A simulação irá tomar algum tempo para ser feita, mas se você quiser acompanhar o desenvolvimento da mesma, é só observar na barra de status o instante que estamos na simulação em "Now".

O resultado da simulação pode ser observado na figura abaixo:



Podemos observar o "singelo resultado" que é o "Hello World" exibido no console. Apesar do resultado ser básico, este tutorial serve como base para aqueles que quiserem experimentar a API do Nios (HAL - Hardware Abstraction Layer), bem como desenvolver SOPCs mais complexos, com outros periféricos, assunto que ficará para outros artigos.

Referências:

Using the Nios II Processor - Altera Training Course - http://www.altera.com/education/training/courses/OEMB1110

AN 351 Simulating Nios II Embedded Processor Designs - http://www.altera.com/support/examples/nios2/exm-simulating-niosii.html

obs.: Este tutorial foi escrito por Raphael Silva.

2 comentários:

  1. Qual é a versão do Quartus, do Modelsim, que você utiliza, e o sistema operativo também!

    ResponderExcluir
    Respostas
    1. Olá Andrés Rodriguez, windows 7 64 bits e o Modelsim 10.1d, este esta disponível para download no site da Altera junto da Versão do Quartus II 13.0 SP1

      Excluir