FPz8 – Microcontrolador Open Source em VHDL

Já pensou em construir o seu próprio microcontrolador? É claro que para grande maioria dos desenvolvedores, hobbistas e pequenos fabricantes o desenvolvimento de um chip é algo totalmente fora da realidade, mas e se ao invés de desenvolver um chip em silício desenvolvêssemos uma solução em lógica programável? Neste caso, praticamente qualquer pessoa poderia desenvolver um microcontrolador! Eu sei que o domínio da lógica programável (os famosos CPLDs e FPGAs) é algo ainda obscuro para muita gente e também era para mim (ou ainda é, já que não sou nenhum especialista)!

Foi por isso que, no início de 2016, decidi estudar um pouco mais sobre VHDL e para isso decidi focar num campo que me fascina e que é o das CPUs. Inicialmente eu portei o código VHDL que eu havia escrito para o Ahmes e implementei uma versão sintetizada (1) do mesmo num FPGA Cyclone IV da Altera.

Posteriormente eu decidi dar um passo além e desenvolver um novo projeto: implementar uma CPU comercial de um microcontrolador. A idéia seria desenvolver um softcore que pudesse executar código-objeto de uma plataforma conhecida e incluir funcionalidades adicionais, especialmente um debugger.

Inicialmente eu comecei a desenvolver um softcore baseado no HCS08, mas após alguns dias me dei conta de que a implementação do BDM no softcore seria mais complexa do que eu gostaria. Então eu parti para procurar outro core de microcontrolador que fosse relativamente fácil de implementar e com um debugger simples. Foi então que me lembrei dos Z8 Encore da Zilog: eles são microcontroladores com um conjunto de instruções CISC com arquitetura Harvard e um debugger muito interessante (chamado OCD – On-Chip Debugger) que opera por uma porta serial padrão! Além disso, a Zilog disponibiliza um IDE muito simples e eficiente (o Zilog Developer Studio II ou ZDS-II) que inclui um compilador ANSI-C, editor, simulador e depurador integrado!

Após cerca de um mês de trabalho surgiu a primeira versão totalmente funcional do FPz8, um softcore compatível com o código-objeto do Zilog Z8 Encore e que foi implementado num FPGA Altera Cyclone IV (modelo EP4CE6).

Figura 1 – Diagrama em blocos do FPz8 com um timer básico

O FPz8 foi projetado de forma a funcionar como um SoC (System on Chip), ou seja, ele não necessita de nenhum componente externo adicional (exceto a memória de configuração do FPGA) para poder funcionar (as implementações tradicionais de softcores normalmente utilizam memórias externas), por isso, é possível testar o FPz8 em praticamente qualquer kit de FPGA existente no mercado!

Figura 2 – O kit onde foi desenvolvido o FPz8

O softcore inclui toda a infraestrutura básica para a operação de um eZ8: o core com praticamente todas as instruções implementadas (exceto as instruções LDE e LDEI que manipulam memória externa de dados), um controlador de interrupções vetorizado de 8 entradas e com prioridade programável e um debugger OCD totalmente funcional! Chique não?

E sabe o que é mais legal do FPz8? Utilizando um chip conversor serial/USB (presenta na maioria dos kits de FPGA) é possível carregar e depurar um programa rodando na memória do FPGA através da IDE oficial da Zilog! Isto significa que você pode escrever um programa em Assembly ou C, montar/compilar, descarregar o código na memória do FPGA e acompanhar a execução do mesmo, executar passo-a-passo, verificar e alterar variáveis e registradores do microcontrolador! Não é legal?

Eu sei que isso tudo não é novidade, já existem outros softcores disponíveis gratuitamente, sendo provavelmente o Open430 e o NEO430 (ambos compatíveis com o MSP430 da Texas Instruments) os mais famosos. Mas o FPz8 possui uma arquitetura simples, compatível com um IDE simples e leve e que pode ser utilizado para o estudo de programação, arquitetura de computadores, sistemas embarcados, etc! Você pode alterá-lo, incluir novas instruções ou periféricos! E como tudo o que ele necessita é um kit muito simples, é muito barato utilizar o FPz8 no ensino de lógica programável, programação de microcontroladores e sistemas embarcados!

Na forma atual o FPz8 ocupa cerca de 4889 elementos lógicos e cerca de 522 registradores (cerca de 78% dos elementos lógicos do menor FPGA da linha Cyclone IV, o EP4CE6), um módulo de timer básico de 16 bits ocupa outros 120 elementos lógicos e 61 registradores. A velocidade máxima de clock é de 23.1MHz (o exemplo roda a 16.667MHz).

O código completo do FPz8, incluindo o projeto no Quartus II (versão 9.1SP2) pode ser encontrado na minha conta no GitHub ou no site Opencores.org! Lembre-se: o FPz8 é totalmente open source!

Eu também gravei um vídeo alguns meses atrás demonstrando o FPz8 (infelizmente a qualidade do vídeo não é das melhores) e em breve será publicado um artigo sobre ele na revista Norte-Americana Nuts & Volts.

Nos próximos artigos eu vou descrever algumas características internas da sua implementação e mostrar alguns exemplos. Até lá!

Referências

  1. Ahmes – Implementação em FPGA Cyclone IV
  2. FPz8 no GitHub
  3. FPz8 no OpenCores
  4. Website da Zilog
  5. Kit do Cyclone IV no Ebay
  6. Quartus II SP2
  7. Cyclone IV na Altera
  8. Revista Nuts & Volts

Leave a Reply