Em um local em que trabalhei, havia dois campos de designers de FPGA. Um campo que chamei de simular, simular, simular ou é dividido em cubos. O outro campo era sobre design.
Os caras em cubos usavam um simulador como o modelsim; eles apresentavam um design inicial através de métodos de codificação e \ ou blocos no conjunto de design. Em seguida, eles simulavam e encontravam as coisas que não funcionavam, depois mudavam o código. Esse processo foi repetido várias vezes até que eles apresentassem um design que funcionasse.
O campo de design (que eu preferia) projetaria a forma de onda em papel (ou papel digital como visio), exatamente o que era necessário. Em seguida, crie um diagrama lógico. Este é um processo de auto-documentação. Em seguida, o diagrama foi convertido em código (o código e o diagrama eram 1: 1, se havia algo no diagrama, havia um processo para ele no código). Em seguida, foi simulada, e a forma de onda da simulação foi comparada com a forma de onda projetada no papel e esperava-se que fosse a mesma.
Acabei fazendo as duas coisas, às vezes entrava no modo s em cubos e não era muito divertido. Descobri que às vezes perdi de vista meu objetivo. Por exemplo, eu mudaria um estado em uma máquina de estado, e a mudança seria reduzida para o próximo estado, então eu teria que consertar isso. Acabei passando mais tempo do que pensando sobre isso.
Em que campo você prefere estar? Acho que precisa haver um design rigoroso, fazer o que funciona para você, mas acho que quanto mais detalhado e rigoroso você estiver no design, menos problemas você terá a longo prazo. Dei alguns exemplos do que é possível, eles podem não se encaixar na estrutura organizacional do seu local de trabalho. A razão pela qual os detalhes do projeto e o planejamento cuidadoso são tão úteis, é que o força a pensar no que está fazendo. Isso facilita a depuração. Desenvolva um fluxo de trabalho de design que permita que isso aconteça. Além disso, familiarize-se com as ferramentas de simulação e escreva boas bancas de teste que testarão todas as condições que o dispositivo simulado pode enfrentar. É claro que isso precisa ser equilibrado com o tempo. Por exemplo, escreva o código ADC HDL que simulará o dispositivo em suas simulações.
A ferramenta mais valiosa para ter no design de FPGA (na minha opinião) é um bom procedimento de teste que permitirá que você teste completamente seu design e execute-o em seus ritmos. Não se pode esperar que um projeto de FPGA "funcione" apenas, é necessário um esforço para garantir que todas as peças funcionem. Se você encontrar erros, volte à simulação e ao design e aprenda quais são as diferenças entre um FPGA e RTL simulados. Isso vem principalmente da experiência, mas se o design funciona em simulação, mas não em hardware, você precisa descobrir por que há uma diferença.
Algumas coisas importantes que aprendi:
1) Desinfetar suas entradas, o relógio e os circuitos de redefinição precisam estar limpos ou você pode obter a metastablidade propagando-se pelo seu sistema. Saiba o que é um sincronizador de classificação dupla. Existem muitas topologias diferentes para os circuitos de redefinição, sei como usá-los (há um ótimo artigo na Web, eu ainda não o tenho em mãos).
2) Obtenha os requisitos do design antecipadamente e, em seguida, faça o design em torno deles. Se as pessoas ao seu redor não fornecerem requisitos definidos, crie alguns por conta própria.
3) A caixa de ferramentas de ponto fixo da Matlab é ótima para simular sistemas de controle e aplicativos DSP, mas você pode não ter acesso a isso. É uma ótima maneira de provar um design antes de codificar.
4) O design vem primeiro, depois codifica e depois simula.
5) Fortemente digitado, também mantenha os nomes dos sinais consistentes nos esquemas PCB e HDL. (é também por isso que prefiro o VHDL ao verilog.