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)?
fonte
if(condition)
dissowhen(condition)
. A maioria dos IDEs de FPGA possui uma entrada de design gráfico, como se você a estivesse desenhando no papel.Respostas:
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.
fonte
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.
fonte
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.
fonte