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.
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. |
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:
- 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;
- Criação de um programa em C contendo o "Hello World", que será feito utilizando o Nios2 EDS;
- Simulação do design rodando o programa compilado. Será feito no Modelsim.
http://dl.altera.com/?edition=web
Você pode baixar o arquivo contendo o conteúdo completo, ou somente os arquivos individuais:
- Quartus II Software (includes Nios II EDS)
- ModelSim-Altera Edition (includes Starter Edition)
- Cyclone II, Cyclone III, Cyclone IV device support (includes all variations)
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:
- Create simulation model: none;
- Create testbench Qsys system: Simple, BFMs for clocks and resets;
- Create testbench simulation model: VHDL;
- Create HDL design files for synthesis: none;
- Create blocks symbol file: unchecked;
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:
- Abra o Nios2 SBT para Eclipse; (Sim, é uma customização do eclipse assim como o Code Composer Studio)
- Vá em File > New > Nios II Application and BSP from Template;
- Escolha o template do projeto Hello World.
- Escolha um nome para o projeto.
- Selecione o design que geramos anteriormente no Qsys. Procure o SOPC Information File Name, que está na pasta an351_design, arquivo niosii_system.sopcinfo;
- Clique em Finish;
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/OEMB1110AN 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.
Qual é a versão do Quartus, do Modelsim, que você utiliza, e o sistema operativo também!
ResponderExcluirOlá 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