Dans un endroit où je travaillais, il y avait deux camps de concepteurs FPGA. Un camp que j'ai appelé simuler, simuler, simuler ou être cubé. L'autre camp était entièrement dédié au design.
Les gars en cubes ont utilisé un simulateur comme modelsim, ils proposeraient une conception initiale via des méthodes de codage et / ou des blocs dans la suite de conception. Ensuite, ils le simulaient et trouvaient les choses qui ne fonctionnaient pas, puis changeaient le code. Ce processus a été répété plusieurs fois jusqu'à ce qu'ils trouvent une conception qui fonctionne.
Le camp de conception (que j'ai préféré) concevrait la forme d'onde sur papier (ou papier numérique comme visio), exactement ce qui était nécessaire. Venez ensuite avec un diagramme logique. Il s'agit d'un processus d'auto-documentation. Ensuite, le diagramme a été traduit en code (le code et le diagramme étaient 1: 1 s'il y avait quelque chose dans le diagramme, il y avait un processus pour cela dans le code). Ensuite, il a été simulé, et la forme d'onde de simulation a été comparée à la forme d'onde conçue sur papier, et devait être la même.
J'ai fini par faire les deux, parfois je passais en mode cube, et ce n'était pas très amusant. J'ai trouvé que j'avais parfois perdu de vue mon objectif. Par exemple, je changerais un état dans une machine d'état, et le changement se répercuterait sur l'état suivant, alors je devrais corriger cela. J'ai fini par passer plus de temps que d'y penser.
Dans quel camp préféreriez-vous être? Je pense qu'il faut une conception rigoureuse, faites ce qui fonctionne pour vous, mais je pense que plus vous êtes détaillé et rigoureux dans la conception, moins vous aurez de problèmes à long terme. J'ai donné quelques exemples de ce qui est possible, ils peuvent ne pas correspondre à la structure organisationnelle de votre lieu de travail. La raison pour laquelle les détails de conception et une planification minutieuse sont si utiles, c'est qu'ils vous obligent à réfléchir à ce que vous faites. Cela facilite le débogage. Développer un flux de travail de conception qui permet que cela se produise. De plus, familiarisez-vous vraiment avec les outils de simulation et écrivez de bons bancs de test qui testeront toutes les conditions que le dispositif simulé pourrait rencontrer. Bien sûr, cela doit être équilibré avec le temps. Par exemple, écrivez le code ADC HDL qui simulera l'appareil dans vos simulations.
L'outil le plus précieux à avoir dans la conception de FPGA (à mon avis) est une bonne procédure de test qui vous permettra de tester pleinement votre conception et de la mettre à l'épreuve. On ne peut pas s'attendre à ce qu'une conception FPGA "fonctionne juste", il faut des efforts pour s'assurer que toutes les pièces fonctionnent. Si vous repérez des erreurs, revenez à la simulation et à la conception et découvrez les différences entre un FPGA simulé et un RTL. Cela vient principalement de l'expérience, mais si la conception fonctionne en simulation mais pas en matériel, vous devez savoir pourquoi il y a une différence.
Quelques éléments clés que j'ai appris:
1) Désinfectez vos entrées, l'horloge et les circuits de réinitialisation doivent être propres ou vous pouvez obtenir une métastabilité se propageant à travers votre système. Sachez ce qu'est un synchroniseur à double rang. Il existe de nombreuses topologies différentes pour les circuits de réinitialisation, sachez comment les utiliser (il y a un excellent article sur le Web, je ne l'ai pas sous la main cependant).
2) Obtenez les exigences de la conception à l'avance, puis concevez-les. Si les gens autour de vous ne vous donneront pas d'exigences précises, alors créez-en vous-même.
3) La boîte à outils à point fixe Matlab est idéale pour simuler des systèmes de contrôle et des applications DSP, mais vous pourriez ne pas y avoir accès. C'est un excellent moyen de prouver une conception avant de coder.
4) La conception vient en premier, puis le codage, puis la simulation.
5) Fortement typé, gardez également les noms de signal cohérents sur le schéma de la carte PCB et le hdl. (c'est aussi pourquoi je préfère de loin le VHDL au verilog.