Programmation FPGA, par où commencer

29

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)?

Anila
la source
3
Si vous connaissez la programmation C / C ++, vous devez choisir Verilog , plutôt que VHDL. La syntaxe de Verilog est similaire à C.
m.Alin
1
@ m.Alin Je commence tout juste et j'ai découvert que cela n'a pas d'importance, si cela ressemble à C, parce que j'ai trouvé que la partie la plus difficile n'était pas la syntaxe, mais la différence de concepts. La sémantique n'est même pas proche de celle de C.
Edgar Klerks
Le plus grand changement que j'ai trouvé de C / C ++ / Java / etc. est que les modules que vous écrivez (équivalent je suppose aux unités de traduction) sont purement pilotés par les événements. En C, simplifié à un principe de base, un programme compilé exécutera la ligne 1 de votre code, puis la ligne 2, puis 3, puis 4, etc. Il n'y a rien de tel dans Verilog / VHDL, c'est un peu comme dessiner une image : cette broche d'entrée se connecte à module1_input, module1_output bascule l'état chaque fois que module1_input passe à l'état haut. Au lieu de if(condition)ça when(condition). La plupart des IDE FPGA ont même une entrée de conception graphique, comme si vous la dessiniez sur du papier.
CharlieHanson

Réponses:

40

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.

user8459
la source
Merci beaucoup pour cette réponse détaillée, cela m'a vraiment aidé à voir comment je peux procéder. Malheureusement, je n'ai pas d'amis qui pourraient m'aider non plus. Mais vous venez de me sauver de bien des ennuis et encore merci beaucoup !!!!
Anila
5
Excellente réponse.
Assad Ebrahim
De retour à l'école, nous avons appris le C ++ avant d'apprendre le VHDL. J'avais beaucoup de mal à le comprendre, mais le point où tout a cliqué était quand j'ai compris que tout se passait en temps réel et en parallèle (parallèle, pas asynchrone comme nodejs). Le développement logiciel suit un flux séquentiel, mais en HDL, tout se passe en même temps (la plupart du temps). Si vous avez quelque chose comme "x = 1; y = 2; y = x; x = y", en SW, à la fin y sera égal à 1, en HDL, vous avez une condition de concurrence car x et y essaieront de se changer les uns les autres en même temps. N'oubliez pas ceci et la vie pourrait être plus facile pour vous.
PGT
@PGT Vous devez vous attendre à ce que la valeur de y soit différente de 1 si «y» est accessible à plusieurs processus exécutés sur un seul cœur ou sur plusieurs cœurs, ce qui peut imposer son autorité à un processus plus faible.
Adithya
1

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.

troore
la source
-1

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.

Robin
la source
En Europe, le VHDL est utilisé, aux États-Unis, Verilog. Ce n'est pas vrai du tout ...
Matt Young
En effet, j'ai appris Verilog et je viens du Royaume-Uni. C'est aussi la langue enseignée dans l'un des modules que j'ai fait à uni (également au Royaume-Uni).
Tom Carpenter