Je suis développeur de logiciels (C, C ++, objective-c, java ...) et je suis intéressé à apprendre à programmer des FPGA. Maintenant, la question peut vous sembler simple, mais prenez le temps de m'aider sur ce point, car je suis un peu coincé en ce moment. Mon entreprise m'a demandé de me familiariser avec la technologie et de travailler sur un produit en treillis. Ma question est par où commencer? Après quelques recherches, j'ai découvert que je pouvais choisir entre VHDL et Verilog, je n'en ai jamais utilisé. Y a-t-il un spécialiste qui pourrait me suggérer par où commencer? Apprendre une langue, en savoir plus sur les composants matériels puis sur le produit en treillis? Ou commencer directement avec le produit Lattice (si je lis que les méthodes de programmation sont très différentes entre les fournisseurs de FPGA)?
la source
if(condition)
çawhen(condition)
. La plupart des IDE FPGA ont même une entrée de conception graphique, comme si vous la dessiniez sur du papier.Réponses:
La conception numérique n'a pas grand-chose en commun avec le développement de logiciels (peut-être sauf que la syntaxe Verilog ressemble un peu au langage C mais elle semble juste). Il est donc très difficile de répondre adéquatement à ce type de question. Mais en tant que gars qui a parcouru un chemin allant du développement logiciel à la conception matérielle, je vais essayer. En me retournant, voici comment je me serais conseillé à l'époque si j'avais su ce que je sais maintenant:
Commencer à partir de zéro
Oubliez tout sur le développement de logiciels. Surtout les langages de programmation. Ces principes ne s'appliquent pas à la conception numérique. Il serait probablement facile pour un gars qui a conçu un CPU de le programmer en assembleur ou même en C, mais un programmeur assembleur ne pourra pas concevoir un CPU.
Sur votre chemin d'apprentissage, vous n'avez pas tendance à résoudre ce qui semble être un problème facile avec vos connaissances existantes à partir d'un logiciel. Un des exemples classiques est une boucle "for". Même si vous pouvez écrire une boucle for, par exemple, verilog - cela sert à des fins différentes. Il est principalement utilisé pour la génération de code. Cela peut aussi être une boucle for comme les développeurs de logiciels le voient, mais ce ne sera bon que pour la simulation (c'est-à-dire que vous ne pourrez pas programmer FPGA comme ça).
Donc, pour chaque tâche que vous souhaitez entreprendre, ne pensez pas savoir comment le faire, faites plutôt une recherche - consultez les livres, les exemples, demandez à des personnes plus expérimentées, etc.
Apprenez le matériel et le langage HDL
Les langues HDL les plus populaires sont Verilog et VHDL. Il existe également des solutions spécifiques aux fournisseurs comme AHDL (Altera HDL). Étant donné que ces langages sont utilisés pour décrire les composants matériels, ils sont tous à peu près utilisés pour exprimer la même chose de la même manière mais avec une syntaxe différente.
Certaines personnes recommandent d'apprendre Verilog car il ressemble à C. Oui, sa syntaxe est un mélange de C et d'Ada mais cela ne facilite pas la tâche d'un développeur de logiciels. En fait, je pense que cela peut même aggraver la situation car il y aura une tentation d'écrire C dans Verilog. C'est une bonne recette pour passer un très mauvais moment.
Ayant cela à l'esprit, je recommanderais de regarder du VHDL. Bien que Verilog soit également OK tant que ce qui précède est pris en compte.
Une chose importante à garder à l'esprit est que vous devez comprendre ce que vous exprimez avec cette langue. Quel type de matériel est "décrit" et comment il fonctionne.
Pour cette raison, je vous recommande de vous procurer un livre sur l'électronique en général et un bon livre comme celui-ci - HDL Chip Design (alias comme un livre bleu).
Obtenez un simulateur
Avant de commencer à faire quoi que ce soit dans le matériel et à utiliser des fonctionnalités spécifiques au fournisseur, etc., procurez-vous un simulateur. Je commençais avec un Verilog et utilisais Icarus Verilog avec GTK Wave. Ce sont des projets open source gratuits. Exécutez des exemples que vous voyez dans les livres, entraînez-vous en concevant vos propres circuits pour en avoir un avant-goût.
Obtenez une carte de développement
Lorsque vous avez envie d'aller de l'avant, procurez-vous un tableau de développement. Si vous savez que votre employeur souhaite utiliser Lattice, procurez-vous le tableau Lattice.
Les méthodes de programmation sont très similaires, mais certains détails sont différents. Par exemple, différents outils, différentes options, différentes interfaces. Habituellement, si vous avez de l'expérience avec un fournisseur, il n'est pas difficile de changer de fournisseur. Mais vous voulez probablement éviter cette courbe d'apprentissage supplémentaire.
Je m'assurerais également que la carte est livrée avec des composants que vous prévoyez d'utiliser ou est extensible. Par exemple, si vous souhaitez concevoir un périphérique réseau comme un routeur, assurez-vous que la carte a Ethernet PHY ou qu'elle peut être étendue via, disons, un connecteur HSMC, etc.
Les tableaux sont généralement accompagnés d'une bonne référence, d'un guide d'utilisation et d'exemples de conception. Étudiez-les.
Lire des livres
Vous devrez lire des livres. Dans mon cas, je n'avais pas d'amis qui connaissaient le design numérique, et ce site n'était pas très utile non plus à cause d'une chose simple - je ne savais même pas comment formuler ma question. Tout ce que j'ai pu trouver était comme "Uhm, les gars, il y a une chose dcfifo et j'ai entendu quelque chose sur les défis de franchissement de domaine d'horloge, qu'est-ce que c'est et pourquoi ma conception ne fonctionne pas?".
J'ai personnellement commencé avec ceux-ci:
Les vendeurs de FPGA ont beaucoup de livres de cuisine avec les meilleures pratiques. Étudiez-les avec des modèles de référence. Voici un exemple d'Altera.
Revenez avec des questions plus spécifiques
Pendant que vous parcourez vos livres, simulez une conception, faites clignoter quelques LED sur votre carte de développement, vous auriez très probablement beaucoup de questions. Assurez-vous que vous ne voyez pas de réponse à ceux sur la page suivante du livre ou en ligne (c'est-à-dire dans le forum spécifique à Lattice) avant de les poser ici.
la source
Comme alternative, vous pouvez utiliser certaines techniques de synthèse de haut niveau telles que Vivado HLS de Xilinx et la solution OpenCL d'Altera. Peut-être que cela allégera votre courbe pour apprendre les langages de description du matériel, compte tenu de votre expérience logicielle.
la source
Apprenez d'abord les bases du design numérique. Machine de Mealy / Moore, logique combinatoire, table de vérité, carte de karnaugh et ainsi de suite. Commencez à créer une conception simple dans des schémas (compteur à 7 segments), puis apprenez un HDL. En Europe, le VHDL est utilisé, aux États-Unis, Verilog. Enfin, le timing est important, sachez que les signaux ont des retards qui sont instantanés et dépend de la température et que chaque signal a un autre retard.
Livre à lire: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379
La connaissance parfaite de la syntaxe du langage est pour plus tard, commencez par comprendre la conception numérique et les problèmes.
la source