Senhores,
Tenho o prazer de lhes apresentar a placa FPGA 101.
Fotos em:
https://plus.google.com/photos/11692822 ... 6570839633Detalhe importante, eu sou um péssimo fotógrafo e estou com pouca luz.
Basicamente se trata de um kit de desenvolvimento FPGA (desenvolvido por mim) com um Cyclone IV, um USB Blaster compatível embarcado, memoria flash de 16Mb, um transceiver USB para criação de interface USB Host e Device , leds, chaves tácteis e IOs de expansão compatíveis com shields de Arduino (desde que apenas digitais e com nível de tensão dos IOs de 3.3V). A ideia da placa é ser um kit para pessoas que estejam interessadas em entrar no mundo do FPGA sem muitas complicações.
Vão haver projetos de exemplos e um breve tutorial da placa com documentação em português.
Nas fotos vocês também pode ver uma pequena placa de expansão VGA que eu fabriquei para demonstrações.
O kit foi concebido em uma parceria com o Lab de Garagem e a principio eles serão responsáveis pela fabricação e comercialização da mesma.
A placa que está nas fotos é um primeiro protótipo e pode sofrer pequenas alterações na versão final.
A razão de não criar uma placa inicialmente com milhares de periféricos, um FPGA gigante e tudo mais é exatamente o custo. Quando eu fiz as escolhas iniciais de projeto eu coloquei para mim mesmo os seguintes requisitos críticos:
- A placa precisa ter um J-Tag com capacidade de Debug e já integrado com o software de desenvolvimento. Dai a razão do USB Blaster e não um J-Tag baseado em FTDI como muitas outras.
- A placa precisa ter um mínimo de funcionalidade "out-of-the-box". Por isso a existência dos Leds e das chaves tácteis.
- A placa precisa ter algum modo embarcado de realizar comunicação com um computador. Serial não existe mais e por isso a escolha do USB. Não foi utilizado um FTDI por questões de custo e flexibilidade. Com um transceiver USB e a PHY e a lógica do USB internos a possibilidades ficam muito maiores. Podem ser implementados qualquer endpoint (incluíndo isochronous é que essencial para trabalhar com streaming de audio e video). Além disso a porta USB pode servir como USB Host.
Fora esses requisitos críticos eu defini que a placa precisa de bastante IOs expostos para poder ser utilizada em diversas aplicações.
O FPGA que eu estou trabalhando tem um total de 144 pinos, mas muitos são utilizados para GND, VCCA, VCCIO, JTAG, interface serial com a Flash e ai vai. Com isto acabam sobrando apenas em torno de 87 IOs/Clocks. Para colocar uma SDRAM o preço da placa subiria marginalmente porém eu precisaria utilizar algo em torno de 36 pinos. Logo provavelmente os leds e a chave teriam que ser sacrificados, perdendo a funcionalidade dela "out-of-the-box".
Para implementar Softcores mais robustos ou uma interface de vídeo mais interessante uma SDRAM seria necessária. Muito provavelmente, se houver demanda será criada uma versão com uma SDRAM e possivelmente um FPGA com um pouco mais de recursos lógicos. Porém, para quem é realmente iniciante e nunca tocou em um FPGA, quer gastar pouco e aprender o básico de lógica programável criar alguns IP Cores, eu ainda acho que a placa atual seria mais indicada. Pessoalmente eu acho que pessoas que estejam começando na área devem ficar longe de softcores mais elaborados inicialmente.
Um aspecto interessante desta placa é que ela é "stackable". Existem dois jumbers de trilha que podem ser cortados desconectando a alimentação dos headers. Desta forma você pode conectar diversos FPGAs em paralelo. Se realmente nascer uma versão com SDRAM, a placa atual ainda poderia trabalham junto com a nova placa.
Para amantes de Softcore atualmente eu já fiz a implementação de um openMSP430 rodando um programa gerado pelo mspgcc. Depois eu implementei uma coisa que ficou interessante. Eu já havia implementado uma interface USB-Serial. Essa interface, no lado do FPGA, na verdade não é bem uma serial, mas sim duas FIFOs (entrada e saída) onde os dados enviados e recebidos são os mesmos que a aplicação no computador vê na porta COM.
O que eu fiz foi criar uma glue-logic, mapeando essa interface na memória como se fosse uma UART para o MSP. Ou seja, na visão do MSP existe apenas uma UART (nem todos os registradores tem alguma função, já que não existe efetivamente uma baud rate por exemplo), na visão do computador é uma COM, mas no fundo não acontece nada de serial, apenas USB. É como se fosse uma implementação de uma USB-serial em um ucontrolador com USB nativo, porém com uma abstração totalmente implementada em hardware. Logo o MSP430 não gasta um bit de flash ou de RAM para que isso aconteça.
Qualquer comentário é bem vindo.
Abraços,
Luís Filipe Rossi