Comment obtenir une conception de processeur sur FPGA

20

J'ai récemment entrepris un long voyage de conception logique d'auto-apprentissage. Le produit final de ceci est un CPU 16 bits fonctionnel qui fonctionne exactement comme conçu dans un simulateur . Maintenant, je viens de commencer à étudier la possibilité de le mettre en silicium au moyen d'un FPGA. Je sais que je devrai faire beaucoup d'ajustements dans l'arène d'entrée / sortie (le monde réel étant différent de l'environnement de simulation) et j'ai découvert que j'ai fait ma conception entièrement dans un programme qui n'exporte pas de netlists ou de code HDL donc tout ce que j'ai vraiment c'est un schéma.

Mais, en supposant que j'arrive à un point où j'ai une netliste ou un code HDL de ma conception, quelle est ma prochaine étape pour l'intégrer au silicium? Si loin de ce que j'ai lu, les FPGA semblent être ma solution, mais regarder les sites Web Xilinx et Altera me fait tourner la tête. Suis-je en train d'aboyer le mauvais arbre? Fondamentalement, je recherche une description en anglais simple de la prochaine étape pour un gars avec un schéma fonctionnel d'un CPU. Une fois que je sais dans quelle direction aller, je peux déchiffrer les livres et trouver tout ce que j'ai besoin de savoir pour y arriver. Remarque également, je suis sous Mac OS X, mais j'ai une boîte Windows XP que je peux brancher si je le dois absolument.

Rory O'Hare
la source
Quel programme avez - vous votre conception en? Il peut y avoir des convertisseurs tiers.
Connor Wolf

Réponses:

17

Félicitations pour la conception de votre CPU. Oui, le FPGA est définitivement votre prochaine étape. Mais vous ne savez pas très bien ce qui fait tourner la tête. Je suppose que c'est le grand nombre d'appareils différents proposés. Vous ne dites pas non plus quel simulateur vous utilisez.
Lorsque vous synthétisez une conception, le synthétiseur doit vous fournir un rapport sur les ressources utilisées , comme le nombre de portes et la RAM. Cela devrait vous donner une idée des pièces qui conviennent à votre conception. Assurez-vous que vous avez suffisamment de marge . Choisissez une partie qui a de la RAM supplémentaire , dont vous aurez besoin pour exécuter des programmes sur votre CPU.

modifier (votre commentaire)
Vous avez besoin d'un système de développement pour un fabricant spécifique. Altera et Xilinx sont les grands joueurs, et les deux ont leurs croyants. Lequel vous choisissez n'est pas si important, les deux ont suffisamment de pièces différentes pour satisfaire vos besoins.
Si vous choisissez Xilinx, il dispose de son logiciel de conception ISE WebPACK , qui est gratuit (grand téléchargement à 3,4 Go). Les limitations par rapport aux versions plus avancées du logiciel ne devraient pas vous déranger pour le moment.
Ensuite, vous avez besoin d'une carte de développement. Vous devez avoir une idée de ce FPGA dont vous aurez besoin pour en sélectionner un. Si vous optez pour Xilinx, je choisirais un Spartan, peut-être un Spartan-6, le Virtex est déjà trop haut de gamme IMO. Il y a encore beaucoup de choix, principalement différents dans les extras du tableau. Vous aurez besoin d'une carte avec un peu plus que quelques commutateurs et LED. Je chercherais un connecteur clavier et un module d'affichage.
Xilinx a un certain nombre de cartes, et pour les FPGA Xilinx, il y a aussi Digilent , Avnet , Xess et bien d'autres.

Comparez donc un certain nombre de cartes (le prix jouera également un rôle, je présume) et téléchargez le logiciel de développement pour le FPGA que vous prévoyez d'utiliser. Synthétisez votre conception pour vérifier qu'elle s'adaptera au FPGA choisi, puis vous êtes prêt à acheter une carte autour de ce FPGA.

J'ai oublié de parler un peu des FPGA. Un FPGA est essentiellement une grande collection de portes avec des connexions programmables entre elles, de sorte que vous pouvez créer presque n'importe quelle fonction / système logique avec elles. Sur plusieurs générations, les FPGA sont devenus plus avancés et ont maintenant des blocs optimisés pour créer efficacement des fonctions comme la RAM. Le synthétiseur de votre logiciel de développement crée le schéma de connexion entre les portes. Ce n'est pas stocké en permanence dans le FPGA, mais doit être chargé à la mise sous tension à partir d'une mémoire flash de configuration externe. C'est là que votre design sera stocké. Comme toute autre mémoire Flash, elle peut être effacée et réécrite un grand nombre de fois.

Stevenvh
la source
J'ai utilisé Logisim, ce qui est fantastique pour les schémas, mais il manque une méthode de sortie autre que des images (png, jpeg, etc.). Sur les confusions FPGA que j'ai, c'est en partie une question de la vaste gamme d'appareils, mais je ne trouve pas non plus de ressources qui expliquent les bases et les fondamentaux. Si j'y mets mon processeur, comment s'interface-t-il avec le monde extérieur? De quel équipement ai-je besoin? Puis-je reprogrammer le FPGA à plusieurs reprises? etc. etc. etc. C'est vraiment juste un manque total de familiarité avec le sujet. Je suppose que j'ai besoin d'un guide de démarrage, mais n'en trouve aucun nulle part.
Rory O'Hare
2
Vos questions, dans l'ordre: 1) L'interface FPGA avec le monde extérieur via des broches d'E / S. La différence est que vous pouvez choisir les broches, contrairement aux puces dédiées. 2) Vous pouvez commencer avec un kit de démarrage, un kit de développement ou similaire. Cela aura le FPGA, certains connecteurs pour les E / S et les alimentations à bord. La plupart incluent également le programmeur; si on n'oublie pas d'en avoir un. 3) Oui, vous pouvez reprogrammer le FPGA. Le programme est stocké sur puce dans ce qui est essentiellement un registre à décalage géant. Au démarrage, une machine d'état dédiée ou une source externe la charge dans la puce.
Mike DeSimone
9

Je ne connais pas les outils de Xilinx, mais je connais ceux d'Altera, je vais donc vous parler des leurs. Xilinx et les autres ne devraient pas être trop différents.

Verilog

La première chose que vous devrez faire est d'apprendre Verilog . Cela vous fera mal à la tête parce que Verilog (et le VHDL quelque peu similaire) a d'abord été conçu comme un langage de simulation , et de nombreuses constructions (comme #5ce qui signifie "attendre 5 pas de temps", un pas de temps étant généralement une nanoseconde). Il y a donc beaucoup de restrictions que vous devez garder à l'esprit pour rendre votre code Verilog synthétisable , c'est-à-dire compilable en un train de bits pour un FPGA.

Le plus grand choc, cependant, est que ce que vous écrivez dans Verilog (et VHDL) est le comportement que vous attendez du système , et le compilateur déduit la logique appropriée de votre description. Si vous ne faites pas attention, vous pouvez en tirer de nombreux bugs.

Par exemple, une bascule D ressemble à:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Cela décrit le fonctionnement d'un DFF, et le compilateur doit l'analyser et déterminer si vous voulez un DFF. La @(...)est appelée une liste de sensibilité , qui est une liste de signaux qui déclenchent une réévaluation du bloc de code; ainsi, dans ce bloc, Qne change que s'il y a un front montant sur RESETou CLK(c'est pour une réinitialisation active-haute). Si vous oubliez quelque chose dans la liste de sensibilité (qui devrait contenir toutes les variables de droite sans aucun modificateur posedgeou negedgepour un bloc logique combinatoire), le compilateur synthétisera les verrous selon les besoins plutôt que d'appeler une erreur. C'est fou, mais c'est comme ça, parce que Verilog était à l'origine un langage de simulation qui cachait (et donc ne nécessitait pas) les détails d'implémentation. VHDL est le même mais beaucoup plus verbeux.

Enfin, une nouvelle version de Verilog appelée SystemVerilog est sortie il y a quelques années, ce qui rend l'écriture de code synthétisable beaucoup plus facile . Si possible, apprenez cette langue, car Xilinx ISE et Altera Quartus II le supportent tous les deux. Le principal problème est le manque total de bons documents de référence.

La version SystemVerilog d'un DFF nettoie quelques petites choses:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Notez que les signaux de la liste de sensibilité sont séparés par des virgules. C'est parce que orc'était déroutant car andje ne pouvais pas y travailler. Notez également le remplacement de 1'b0(un seul 0bit) par '0(un symbole qui s'étend à autant de 0bits sont nécessaires en fonction de ce à quoi il est affecté; beaucoup plus flexible avec les modules paramétrés). Enfin, notez le remplacement de always(qui pourrait être utilisé pour n'importe quoi; logique combinatoire, verrous et bascules) avec always_fflequel le contenu doit être synthétisé en bascules. Il y a aussi un always_combqui élimine la liste de sensibilité, car il ne fait que calculer les sensibilités des entrées au bloc.

Le logiciel de conception d'Altera s'appelle Quartus II, et vous rechercherez l' édition Web . (Les éditions par abonnement sont assez chères et ne sont nécessaires que pour les modèles FPGA les plus rapides ou les plus récents.)

Le plus triste, c'est que je n'ai pas trouvé de bon livre sur le sujet. Ce que j'ai appris, je l'ai obtenu en rassemblant des choses à partir de plusieurs sources, telles que les livres Verilog qui ne font pas du bon travail pour vous dire ce qui est synthétisable et ce qui ne l'est pas, et un exemple de code. Quartus II dispose d'une commande "insérer un modèle" qui insère le code du modèle pour plusieurs structures courantes, des bascules D aux machines à états.

Matériel de démonstration

Une fois que vous avez implémenté votre processeur dans Verilog, vous devez le construire. Pour le moment, laissez Quartus choisir la puce (vous devez choisir la famille; je recommanderais le Cyclone IV) et les brochages. Une fois qu'il aura atteint sa vitesse de croisière, vous saurez de combien de puce vous avez besoin. Il vous indiquera le nombre d'éléments logiques, de bascules, de bits RAM, etc. que vous avez utilisés. Assurez-vous que vous n'êtes pas à plus de 50% sur aucun de ceux-ci; si vous l'êtes, regardez la puce choisie par le compilateur et sélectionnez manuellement la puce plus grande suivante (en éléments logiques) qui a au moins autant de broches, et répétez jusqu'à ce que vous obteniez une utilisation inférieure à 50%.

Ensuite, allez acheter une carte de démonstration qui a une puce au moins aussi grosse que celle avec laquelle vous avez finalement construit. Vérifiez qu'il dispose des périphériques et / ou connecteurs d'E / S dont vous aurez besoin. Il n'est pas rare de construire une carte fille qui se branche sur un connecteur d'extension pour fournir tout matériel manquant.

Maintenant que vous avez choisi votre matériel, déterminez les vrais brochages et utilisez le Pin Planner pour placer les bons signaux sur les bonnes broches. La carte de démonstration aura un guide de l'utilisateur qui vous indique quelles broches sont câblées à quels périphériques ou broches de connecteur sur la carte de démonstration.

Une fois que vous avez défini les brochages, reconstituez-le pour qu'il utilise les broches souhaitées. Gardez à l'esprit que certains signaux comme les horloges du système auront besoin de broches d'entrée dédiées (donc ils sont acheminés directement vers les PLL internes).

Utilisez le programmeur pour télécharger votre conception directement dans le FPGA (ce registre à décalage que j'ai mentionné tout à l'heure). Vous êtes maintenant dans le cycle de débogage familier d'édition-compilation-exécution. Battez dessus jusqu'à ce que cela fonctionne.

Une fois que cela fonctionne, vous pouvez utiliser le programmeur pour télécharger le code dans le périphérique de configuration intégré afin que votre programme se charge et s'exécute à la mise sous tension.

Ce fut assez long, et j'espère que cela a aidé certains. Il y a beaucoup à apprendre; ce n'est pas comme apprendre un nouveau langage de programmation autant que comme apprendre un nouveau paradigme de programmation, par exemple passer des langages procéduraux aux langages fonctionnels. Verilog est une langue simultanée; la plupart du code s'exécute toujours.

Bonne chance!

Mike DeSimone
la source
Super, c'est très utile. Pour vérifier une chose, j'ai entendu parler de la capture schématique. Est-ce une alternative réalisable à l'apprentissage du verilog? Je l'apprendrai si je le dois, mais si ce n'est pas nécessaire à 100%, je préfère ne pas l'ajouter à l'énorme liste de choses que j'ai déjà besoin de comprendre. Merci beaucoup.
Rory O'Hare,
Honnêtement, pas vraiment. Un gros problème est que vous êtes à la merci du programme de capture schématique: s'il prend votre schéma et génère un Verilog incorrect, que pouvez-vous faire? Tandis que l'écriture de Verilog vous donnera l'autorité nécessaire pour corriger tous les bugs. La grande raison, cependant, est qu'il y a des choses que la capture schématique ne fera jamais aussi bien que Verilog: les modules paramétrés et le fractionnement et la fusion de bus sont ceux qui nous viennent immédiatement à l'esprit.
Mike DeSimone
1
Existe-t-il des outils qui peuvent transformer un langage un peu plus "descriptif du matériel" en Verilog ou VHDL (par exemple, si je veux que net Z soit une bascule dont l'entrée de données est une combinaison de A, B et C, qui est réinitialisée de manière asynchrone pendant que C et D sont vrais, ce serait bien de pouvoir dire quelque chose comme Z:= A & (B # C); Z.ar = C & D;sans avoir à se soucier des listes de sensibilité et autres).
supercat
Altera Quartus vous permet de saisir votre conception en tant que schéma ou AHDL (la version d'Altera de VHDL), ou toute combinaison de ceux-ci, y compris probablement d'autres HDL. (étant démodé, j'ai principalement utilisé l'entrée schématique pour mes projets CPLD et FPGA, avec un peu d'AHDL.)
Peter Bennett
Pour être clair, AHDL n'est pas une version de VHDL. VHDL et Verilog sont des langages d' inférence , où votre code décrit le comportement du circuit souhaité, et le compilateur doit déduire l'implémentation de cette description de comportement. C'est un héritage du fait que les deux ont commencé comme des langages de simulation et ont été réutilisés pour la synthèse. AHDL est un langage déclaratif , où vous déclarez des primitives (par exemple des bascules, des tables de vérité), et comment elles sont connectées, de sorte que le compilateur n'a pas à deviner. AHDL remonte aux années 80 et est beaucoup plus proche d'ABEL.
Mike DeSimone
5

Oui, les FPGA sont presque certainement votre solution!

Vous certainement aurez besoin d'utiliser l' un des langages de description du matériel, ou d'entrer vos schémas dans un autre outil. Je recommanderais contre l'approche schématique comme

  1. les fournisseurs d'outils FPGA ne les soutiennent pas vraiment bien
  2. C'est non portable

Une fois que vous avez écrit HDL, tant que vous n'insérez pas directement des éléments de la bibliothèque des fournisseurs à l'aide de leurs différents "assistants IP" ou en collant directement des composants de leurs bibliothèques, vous aurez du code que vous pourrez porter sur d'autres puces de manière équitable facilement (beaucoup plus que par exemple le portage d'un IME C intégré)

De plus, vous disposez d'un environnement de test et de validation bien meilleur, car vous pouvez écrire des tests qui "comprennent" vos fonctionnalités et peuvent vérifier les résultats pour vous, plutôt que de regarder les formes d'onde pour voir si tout semble correct.

Les 2 gros HDL sont VHDL et Verilog. Vous aimerez peut-être lire cette réponse sur la façon dont ils diffèrent ...

VHDL ou Verilog?

Je dirais également que MyHDL vaut également le coup d'œil si vous connaissez déjà Python - vous donne une énorme capacité de vérification, mais toujours la plupart du contrôle de bas niveau qu'un HDL "normal" donne.

Une fois que vous avez choisi un HDL, puis que vous l'avez fait fonctionner (encore une fois, désolé!) Dans une simulation, vous serez alors dans un état où vous pourrez le pousser à travers les outils du fournisseur et apprendre le prochain gros morceau de la tâche - une fois qu'il simulera correctement, il y a toujours plus d'efforts que vous ne le pensez pour le synthétiser :)

Si vous êtes lié aux schémas et pouvez obtenir une licence, LabviewFPGA pourrait vous convenir.

Martin Thompson
la source
3

Obtenez une copie du prototypage rapide des systèmes numériques de Hamblen et al:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Il utilise principalement VHDL, que je préfère à Verilog.

Il comprend un processeur 8 bits très simple, l'uP3, que j'ai implémenté sur mon propre matériel Altera FLEX 10K il y a quelques années, en utilisant une édition antérieure du livre. Je le porterai sur cette carte Cyclone II à 25 $ lorsque je ferai ma carte de circuit imprimé "en face avant". Il comprend également un processeur MIPS et Altera NIOS II. Vous pouvez parcourir les exercices uP3 du livre avec les outils gratuits Altera Quartus II, réécrire votre code CPU en VHDL et le faire fonctionner sur une carte Cyclone II. Alternativement, Quartus II a une entrée schématique, et vous devriez pouvoir saisir votre schéma directement, le simuler et l'exécuter sur le Cyclone II.

Leon Heller
la source
1

Si la difficulté est une courbe d'apprentissage abrupte avec des compétences en outils, suivez le chemin le plus simple. Actel (maintenant Microsemi) a Libero , le paquet d'outils FPGA qui ne nécessitent aucune lecture et sont faciles à utiliser: immédiatement après l'avoir installé. Vous pouvez en fait créer des schémas à la main et en quelques clics le télécharger sur un FPGA physique, les écrans sur le chemin de le faire sont très explicites.

dext0rb
la source
0

Si vous choisissez d'apprendre un HDL, où vous vous trouvez peut influencer quelle est la meilleure langue. En Europe, le VHDL est plus populaire. Aux États-Unis, Verilog est plus populaire, à l'exception de l'industrie de la défense qui est VHDL. (Le département de la Défense des États-Unis a créé VHDL à l'origine) .Cela signifie seulement que les gens près de chez vous peuvent mieux aider dans une langue ou dans l'autre. Mais si vous cherchez de l'aide en ligne, cela peut ne pas être pertinent.

D'autres livres à considérer sont le prototypage rapide de systèmes numériques: édition SOPC qui fait référence aux cartes Altera DE1 et DE2. Il existe déjà un certain nombre d'ordinateurs différents portés sur DE1 et DE2, pour vous donner des idées sur leur fonctionnement. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), etc. sont portés sur cette carte pour voir des exemples.

Si vous allez à Xilinx, il y a deux livres dans lesquels je suis en ce moment. Prototypage FPGA par Verilog Exemples: Version Xilinx Spartan-3 Prototypage FPGA par VHDL Exemples: Version Xilinx Spartan-3 Bien que je ne connaisse pas de carte particulière à recommander avec ces derniers. Je suis enthousiasmé par un tableau qui devrait bientôt arriver, FPGA Arcade, mais j'oublie s'il aura un Xilinx ou autre chose.

billt
la source
0

J'ai trouvé cette variante qui poursuit le développement de Logisim, maintenant appelé Logisim Evolution. Ils ont implémenté une fonctionnalité pour exporter vers VHDL à partir des schémas d'un circuit logique intégré dans logisim.

Il peut être trouvé ici: https://github.com/reds-heig/logisim-evolution

Je sais que cette question est ancienne, mais elle m'a aidé un tas, et j'espère qu'elle aidera quelqu'un d'autre.

LaptonSpark
la source