Programação FPGA, por onde começar

29

Sou desenvolvedor de software (C, C ++, objetivo-c, java ...) e estou interessado em aprender a programar FPGAs. Agora, a pergunta pode parecer simples para você, mas, por favor, reserve um tempo para me ajudar nessa questão, pois estou meio que preso agora. Minha empresa me pediu para me familiarizar com a tecnologia e trabalhar em um produto de treliça. Minha pergunta é por onde começar? Após algumas pesquisas, descobri que podia escolher entre VHDL e Verilog, nunca usei nenhum deles. Existe algum especialista que poderia me sugerir por onde devo começar? Aprenda um idioma, aprenda sobre os componentes de hardware e depois sobre o produto de treliça? Ou comece diretamente com o produto Lattice (como li que os métodos de programação são muito diferentes entre os fornecedores de FPGA)?

Anila
fonte
3
Se você estiver familiarizado com a programação C / C ++, deverá escolher o Verilog , em vez de VHDL. Sintaxe de Verilog é semelhante ao C.
m.Alin
1
@ m.Alin Estou apenas começando e descobri que isso não importa, se parece com C, porque descobri que a parte mais difícil não era a sintaxe, mas a diferença de conceitos. A semântica não estão nem perto aos de C.
Edgar Klerks
A maior mudança que encontrei em C / C ++ / Java / etc. é que os módulos que você escreve (equivalente a unidades de tradução) são puramente orientados a eventos. Em C, simplificado para um princípio básico, um programa compilado executará a linha 1 do seu código, depois a linha 2, depois 3 e 4, etc. Não existe tal coisa no Verilog / VHDL, é como desenhar uma imagem : esse pino de entrada se conecta ao module1_input, module1_output alterna o estado toda vez que o module1_input fica alto. Em vez if(condition)disso when(condition). A maioria dos IDEs de FPGA possui uma entrada de design gráfico, como se você a estivesse desenhando no papel.
precisa

Respostas:

40

O design digital não tem muito em comum com o desenvolvimento de software (talvez, exceto que a sintaxe Verilog se pareça um pouco com a linguagem C, mas apenas com a aparência). Portanto, é muito difícil responder adequadamente a esse tipo de pergunta. Mas, como um cara que percorreu o caminho do desenvolvimento de software ao design de hardware, vou tentar. Olhando para mim mesmo, eis como eu teria me aconselhado naquela época se soubesse o que sei agora:

Começar do zero

Esqueça tudo sobre o desenvolvimento de software. Especialmente linguagens de programação. Esses princípios não se aplicam ao design digital. Provavelmente seria fácil para um cara que projetou uma CPU programá-la no assembler ou mesmo C, mas um programador de assembler não poderá projetar uma CPU.

No seu caminho de aprendizado, não tende a resolver o que parece ser um problema fácil com o conhecimento existente do software. Um dos exemplos clássicos é um "for loop". Mesmo que você possa escrever um loop for, digamos, verilog - ele serve a propósitos diferentes. É usado principalmente para geração de código. Também pode ser um loop for, como os desenvolvedores de software o veem, mas não serve para nada além de simulação (ou seja, você não poderá programar FPGA dessa maneira).

Portanto, para todas as tarefas que você deseja realizar, não pense que sabe fazer, faça uma pesquisa - verifique livros, exemplos, pergunte a pessoas mais experientes etc.

Aprenda hardware e linguagem HDL

As linguagens HDL mais populares são Verilog e VHDL. Também existem fornecedores específicos, como AHDL (Altera HDL). Como essas linguagens são usadas para descrever componentes de hardware, elas são praticamente usadas para expressar a mesma coisa de uma maneira semelhante, mas com uma sintaxe diferente.

Algumas pessoas recomendam aprender o Verilog porque ele se parece com C. Sim, sua sintaxe é uma mistura de C e Ada, mas não facilita a inclinação de um desenvolvedor de software. Na verdade, acho que pode até piorar, porque haverá uma tentação de escrever C em Verilog. Essa é uma boa receita para passar momentos muito ruins.

Tendo isso em mente, eu recomendo olhar para o VHDL. Embora o Verilog também seja bom, desde que o acima seja levado em consideração.

Uma coisa importante a ter em mente é que você deve entender o que está expressando com esse idioma. Que tipo de hardware está sendo "descrito" e como funciona.

Por esse motivo, eu recomendo que você compre um livro sobre eletrônica em geral e um bom livro como este - HDL Chip Design (também conhecido como livro azul).

Obtenha um simulador

Antes de começar a fazer qualquer coisa no hardware e usar quaisquer recursos específicos do fornecedor, etc., faça um simulador. Eu estava começando com um Verilog e usei o Icarus Verilog junto com o GTK Wave. Esses são projetos de código aberto gratuitos. Execute exemplos que você vê nos livros, pratique projetando seus próprios circuitos para ter um gostinho disso.

Obter uma placa de desenvolvimento

Quando você quiser seguir em frente, obtenha uma placa de desenvolvimento. Se você sabe que seu empregador quer ir com a Lattice, obtenha o conselho da Lattice.

Os métodos de programação são muito semelhantes, mas há detalhes diferentes. Por exemplo, ferramentas diferentes, opções diferentes, interfaces diferentes. Normalmente, se você tem experiência com um fornecedor, não é difícil mudar. Mas você provavelmente deseja evitar essa curva extra de aprendizado.

Eu também garantiria que a placa fosse fornecida com componentes que você planeja usar ou é extensível. Por exemplo, se você deseja projetar um dispositivo de rede como um roteador, verifique se a placa possui Ethernet PHY ou se ela pode ser estendida através, por exemplo, do conector HSMC, etc.

As placas geralmente vêm com uma boa referência, guia do usuário e exemplos de design. Estude-os.

Leia livros

Você precisará ler livros. No meu caso, eu não tinha amigos que conheciam design digital, e este site não foi muito útil por causa de uma coisa simples: eu nem sabia como formular minha pergunta. Tudo o que eu pude pensar foi: "Uhm, pessoal, há uma coisa que dcfifo e eu ouvi algo sobre desafios de atravessar domínios de clock, o que é e por que meu design não funciona?".

Eu, pessoalmente, comecei com estes:

Os fornecedores de FPGA têm muitos livros de receitas com práticas recomendadas. Estude-os junto com desenhos de referência. Aqui está um de Altera, por exemplo.

Volte com perguntas mais específicas

Enquanto você lê seus livros, simula um design, pisca alguns LEDs em sua placa de desenvolvimento, você provavelmente terá muitas perguntas. Certifique-se de não encontrar uma resposta para as respostas na próxima página do livro ou on-line (por exemplo, no fórum específico do Lattice) antes de perguntar aqui.

user8459
fonte
Muito obrigado por esta resposta detalhada, ele realmente me ajudou a ver como posso proceder. Infelizmente eu também não tenho amigos que possam me ajudar. Mas você acabou de me salvar de muitos problemas e mais uma vez muito obrigado !!!!
Anila
5
Excelente resposta.
Assad Ebrahim
De volta à escola, aprendemos C ++ antes de aprendermos VHDL. Estava com muita dificuldade para entender, mas o ponto em que tudo clicou foi quando eu entendi que tudo acontece em tempo real e em paralelo (paralelo, não assíncrono como o nodejs). O desenvolvimento de software segue um fluxo seqüencial, mas no HDL, tudo acontece ao mesmo tempo (na maioria das vezes). Se você tiver algo como "x = 1; y = 2; y = x; x = y", em SW, no final, y será igual a 1, em HDL, você terá uma condição de corrida, pois x e y tentarão mudar um para o outro ao mesmo tempo. Lembre-se disso e a vida pode ser mais fácil para você.
PGT 13/11
@PGT Você deve esperar que o valor de y seja diferente de 1 se 'y' estiver acessível a vários processos em execução em um único núcleo ou em vários núcleos, o que pode impor sua autoridade a um processo mais fraco.
Adithya
1

Como alternativa, você pode usar algumas técnicas de síntese de alto nível, como o Vivado HLS da Xilinx e a solução OpenCL da Altera. Talvez isso alivie sua curva para aprender as linguagens de descrição de hardware, considerando o histórico de seu software.

Troore
fonte
-1

Aprenda primeiro os conceitos básicos de design digital. Máquina Mealy / Moore, lógica combinatória, tabela da verdade, mapa de Karnaugh e assim por diante. Comece a criar um design simples em esquemas (contador de 7 segmentos) e aprenda um HDL. Na Europa, é usado o VHDL, nos EUA Verilog. Finalmente, o tempo é importante, esteja ciente de que os sinais têm atrasos que dependem do componente instantâneo e da temperatura e que cada sinal tem outro atraso.

Livro para ler: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

O conhecimento da sintaxe do Perfect Language é para, posteriormente, entender primeiro o design digital e os problemas.

Robin
fonte
Na Europa, é usado o VHDL, nos EUA Verilog. Não é verdade ...
Matt Young
Na verdade, eu aprendi Verilog e sou do Reino Unido. É também o idioma ensinado em um dos módulos que fiz na uni (também no Reino Unido).
Tom Carpenter