Quelles meilleures pratiques doivent être observées lors de la mise en œuvre du code HDL?
Quelles sont les points communs et différences par rapport aux champs de développement de logiciels plus courants?
Le meilleur livre sur ce sujet est Manuel de la méthodologie de réutilisation . Il couvre à la fois VHDL et Verilog.
Et en particulier certains problèmes qui n'ont pas de correspondance exacte dans les logiciels:
Certains qui sont les mêmes incluent
HDL est comme Verilog et VHDL semblent vraiment encourager le code des spaghettis. La plupart des modules consistent en plusieurs blocs "toujours" (Verilog) ou "processus" (VHDL) qui peuvent être dans n'importe quel ordre. L'algorithme global ou la fonction du module est souvent totalement masqué. Découvrez comment fonctionne le code (si vous ne l'avez pas écrit) est un processus douloureux.
Il y a quelques années, je suis tombé sur ce document qui décrit une méthode plus structurée pour la conception VHDL. L'idée de base est que chaque module n'a que 2 blocs de processus. Un pour le code combinatoire et autre pour synchrones (les registres). C'est génial de produire du code lisible et maintenu.
en HDL, certaines parties du code peuvent fonctionner en même temps, par exemple deux lignes de code "peuvent fonctionner" en même temps, c'est un avantage, à utiliser judicieusement. C'est quelque chose qu'un programmeur habitué à la ligne par ligne des langues peut trouver difficile à saisir au début:
Une attention particulière doit être accordée au processus de démarrage - une fois que votre puce est fonctionnelle, vous avez fait une manière immense.
Le débogage sur le matériel est généralement beaucoup plus difficile que le logiciel de débogage afin:
Le code simple est préféré, il existe parfois d'autres moyens d'accélérer votre code, après avoir déjà fonctionné, par exemple en utilisant une puce de vitesse supérieure, etc..
Évitez les protocoles "intelligents" entre les composants.
Un code de travail en HDL est plus précieux que sur d'autres logiciels, car le matériel est si difficile à déboguer, alors réutilisez-vous et envisagez également d'utiliser des "bibliothèques" de modules que certains sont libres et d'autres personnes vendues.
la conception doit prendre en compte non seulement des bugs dans le code HDL, mais également des défaillances sur la puce que vous programmez et sur d'autres périphériques matériels interfaces avec la puce, il faut donc vraiment penser à une conception facile à vérifier.
Quelques conseils de débogage:
Si une conception comprend plusieurs blocs de construction, on voudrait probablement créer des lignes à partir des interfaces entre ces blocs pour tester des points à l'extérieur de la puce.
Vous voudrez enregistrer suffisamment de lignes dans votre conception pour détourner des données intéressantes à inspecter avec des périphériques externes. Vous pouvez également utiliser ces lignes et votre code comme moyen de vous indiquer l'état d'exécution actuel - par exemple si vous recevez des données à un moment donné, vous écrivez une certaine valeur sur les lignes, à un stade ultérieur d'exécution, vous écrivez une autre valeur. , etc'
Si votre puce est reconfigurable, cela deviendra encore plus pratique, car vous pouvez adapter des tests spécifiques et reprogrammer les sorties pour chaque test que vous allez (cela a très bien l'air avec les LED :). )
Edit:
Par protocoles intelligents, je voulais dire que deux de vos unités physiques se connectent, elles doivent communiquer avec le protocole de communication le plus simple disponible. C'est-à-dire que vous n'utilisez aucun protocole domestique sophistiqué, entre eux.
La raison, est-ce que cela - Fidning Bugs "à l'intérieur" Un FPGA/ASIC est relativement facile que vous avez des simulateurs. Donc, si vous êtes sûr que les données se présentent que vous le souhaitez, et sortez lorsque votre programme l'envoie, vous avez atteint le matériel utopia - être capable de travailler au niveau du logiciel :) (avec le simulateur). Mais si vos données ne vous arrivent pas, comme vous le souhaitez, et vous devez déterminer pourquoi ... vous devrez vous connecter aux lignes et que ce n'est pas si facile.
Trouver un bogue sur les lignes est difficile, car vous devez vous connecter aux lignes avec des équipements spéciaux, qui enregistrent les états des lignes, à des moments différents, et vous devez vous assurer que vos lignes agissent selon le protocole.
Si vous devez connecter deux de vos unités physiques, ce "protocole" aussi simple que possible, jusqu'à ce qu'il ne soit pas appelé un protocole :) Par exemple, si les unités partagent une horloge, ajoutez X lignes de données entre eux et faire une unité écrit celles-ci et l'autre unité de lecture, passant ainsi un "mot" qui a des bits X entre eux sur chaque horloge tombe, par exemple. Si vous avez des FPGA, si le taux d'horloge d'origine doit être trop rapide pour des données parallèles - vous pouvez contrôler la vitesse de ceci, selon vos expériences, par exemple, rendre les données restez sur des lignes de cycles d'horloge au moins "T", etc.. Je suppose que le transfert de données parallèle est plus simple, car vous pouvez travailler avec des fréquences d'horloge inférieures et obtenir les mêmes performances, sans avoir besoin de diviser vos mots sur une seule unité et de remonter sur l'autre. (Espérons que, il n'y a pas de retard entre "l'horloge", chaque unité reçoit). Même ceci est probablement trop complexe :)
En ce qui concerne SPI, I2C, etc. Je n'ai impliqué aucun d'entre eux, je peux dire que j'ai connecté les jambes de deux FPGA allant de la même horloge, (je ne me souviens pas de la formation exacte de résistances au milieu), à beaucoup des taux plus élevés, donc je ne peux vraiment pas penser à une bonne raison d'utiliser celles-ci, comme le moyen principal de transmettre des données entre vos propres FPGA, à moins que les FPGA ne soient situés très loin d'un autre, ce qui est une raison pour utiliser une série plutôt qu'un bus parallèle.
JTAG est utilisé par certaines entreprises FPGA, pour tester/programmer leurs produits, mais pas sûr s'il est utilisé comme moyen de transporter des données à grande vitesse, et c'est Un protocole ... (toujours celui qui peut avoir un support intégré sur puce).
Si vous devez mettre en œuvre un protocole connu, envisagez d'utiliser un code HDL pré-établi pour cela - qui peut être trouvé ou acheté.
Pour les FPGA, Xilinx a cette page . Presque tous s'appliqueraient aux autres fournisseurs de FPGA ou auraient des règles équivalentes. Une bonne affaire est applicable à ASIC Designs.
Intel a recommandé des styles de codage HDL et des recommandations de conception (PDF) sous cette page .