web-dev-qa-db-fra.com

Pouvez-vous programmer des FPGA dans des langages de type C?

À l'université, j'ai programmé un FPGA dans un langage de type C. Cependant, je sais aussi que l'on programme habituellement des FPGA en Verilog ou VHDL. Est-ce un choix de designer? Si oui, quels sont les inconvénients de performance?

Je voudrais idéalement programmer le FPGA dans un langage de type C, plutôt qu'en VHDL.

Je pensais me procurer un Xilinx Virtex-5 si cela fait une différence?

27
mezamorphic

La réponse courte est "oui, certainement".

Voici un excellent aperçu des compilateurs C pour les FPGA et les systèmes basés sur FPGA.

compilateur C vers matériel (synthèse HLL)

Les inconvénients et les considérations de performances se trouvent dans l'architecture du système et les bandes passantes de communication plutôt que dans l'utilisation de C par rapport à un langage de conception matérielle (HDL). Les considérations dans l'utilisation de C par rapport à un HDL résident dans le temps de programmation et les problèmes de maintenance logicielle, pas tant dans les performances.

12
David Pointer

Les FPGA ne sont pas des processeurs. C est un langage conçu pour les processeurs.

Oui, il existe des compilateurs C vers FPGA.

Est-ce une bonne idée? Je dirais que non. La conception avec laquelle vous allez vous retrouver est (d'après ce que j'ai vu) normalement une machine d'état qui a un état par ligne de code dans le C. La machine d'état se déplace ensuite à travers les états l'algorithme. Soit cela, soit un autre type de machine Turing est mis en place pour exécuter le code.

C'est pas comment une personne qualifiée dans la conception de FPGA aborderait généralement un problème. C'est une façon lente et potentiellement affamée de faire les choses.

De la même manière que l'anglais est une meilleure langue pour écrire un roman que Fortran, VHDL et Verilog sont de meilleures langues pour décrire les circuits logiques que C.

Si vous envisagez sérieusement d'utiliser des FPGA, utilisez un langage conçu pour décrire les circuits logiques. Ce pourrait être une courbe d'apprentissage abrupte, mais les résultats seront bien meilleurs à mon humble avis.

28
Paul S

Vous pouvez installer un noyau de processeur logiciel à l'intérieur la logique FPGA, et exécuter votre code C à l'intérieur du processeur virtuel. Xilinx possède des cœurs Microblaze (sous licence) et Picoblaze (gratuits). Il existe d'autres noyaux logiciels que vous pouvez également implémenter (MIPS, x86, 8051, etc.).

Cependant, ceci est largement considéré comme un "hack", car les cœurs sont très lents par rapport aux cœurs réels. Et je pense que tout la conversion C-vers-FPGA va finalement commencer à sentir comme exécuter un soft core, et ne vous donnera pas l'efficacité que vous méritez pour fonctionner sur un FPGA. Les FPGA ne sont pas des machines Turing, ils sont un sac de portes logiques. Vous pouvez construire une machine Turing à partir des portes, mais ce n'est pas pourquoi vous avez acheté le sac de portes.

C'est un peu comme acheter un sac de Legos, et construire un marteau et un ensemble de clous à partir des briques. Cela pourrait fonctionner, mais vous feriez mieux d'acheter un marteau pour marteler les ongles et mieux de construire des châteaux, des vaisseaux spatiaux et des casernes de pompiers avec les Legos.

6
Mark Lakata

Il existe en effet des compilateurs qui vous permettent de déduire (résoudre en utilisant une description incomplète) des circuits matériels en utilisant un langage de haut niveau comme C. "C-to-gates" est en fait un mot à la mode populaire. Les sociétés d'images annoncent que les programmeurs sont capables d'écrire du matériel si le langage qu'ils utilisent est celui qu'ils ont utilisé pour décrire les logiciels. C'est incroyablement faux pour un certain nombre de raisons, la principale d'entre elles étant les différences fondamentales entre le modèle d'exécution supposé par des langages comme C et les langages de description du matériel.

Un exemple illustratif: C suppose en son cœur une grande mémoire à adressage linéaire accessible au hasard - une hypothèse qui vaut rarement pour le matériel. Un compilateur C-to-gates fait face à une tâche difficile d'interpert comportement du programme décrit, et de concevoir un circuit matériel avec le même comportement.

Bien que les langages de type C soient un excellent outil de productivité dans des cas d'utilisation limités, ces compilateurs ne vous permettent certainement pas de savoir soudainement comment concevoir du matériel si vous êtes familier avec C.

J'espère que cela t'aides,

2
Ilia Lebedev

Vous devriez jeter un œil à SystemC. Les avantages d'utiliser un langage basé sur C sont nombreux. Surtout, du point de vue de la conception du système, vous pouvez utiliser le fait que vos autres logiciels (firmware et autres éléments de bas niveau) sont écrits en C. Par conséquent, votre équipe logicielle peut, à un stade très précoce, tester le code rtl.

En 2011, Xilinx a acheté la société AutoESL qui avait développé une synthèse de haut niveau avec SystemC. Xilinx a réutilisé le nom lors de la sortie de son produit "AutoESL". Surtout avec leur nouveau circuit Zynq, il y a un dual core ARM Cortex A9 intégré avec la logique FPGA, cela deviendra probablement un outil puissant pour le développement du système.

2
Karl Lunden

Je voudrais ajouter quelque chose qui, à mon avis, est la réponse la plus proche à la question du PO. Si vous recherchez un langage de type C (qui n'est pas le même que C), vous devriez absolument vérifier Synflow . L'idée est d'avoir un langage moderne qui vous permet de concevoir plus rapidement sans la courbe d'apprentissage de VHDL/Verilog et sans frais généraux. C'est aussi gratuit et open source!

Divulgation: je suis co-fondateur de Synflow :-)

2
Matthieu Wipliez

Vous voudrez peut-être jeter un œil à la technologie C-to-hardware, où vous pouvez écrire du code C et il sera compilé/traduit en VHDL ou Verilog. Cet article répertorie quelques compilateurs. Je ne l'ai pas utilisé moi-même, donc je n'en ai aucune expérience. J'espère que cela t'aides!

1
Carlito

Je suppose que vous avez utilisé Handel C. C'est un sous-ensemble de C. D'après ce que je sais, le résultat n'est pas très optimisé. Verilog et VHDL permettent plus d'optimisation. Je dis cela sur la base de mon expérience avec Handel C il y a quelques années

1
Josnidhin

De nombreux concepteurs écrivent VHDL/Verilog au lieu d'un langage de haut niveau, pour les mêmes raisons que de nombreux programmeurs avaient l'habitude (et le font encore dans certains cas) d'écrire Assembly au lieu de Java: vous pouvez régler l'utilisation et les performances des ressources à un niveau bas. VHDL et Verilog sont des langages conçus pour concevoir du matériel. C ne l'est pas. Avec suffisamment de temps, vous pouvez toujours écrire un programme en VHDL/Verilog qui surclassera un programme de langage de haut niveau. Ce qu'un HLL vous offre est 1) un développement plus rapide, 2) une facilité de maintenance et 3) une plus grande portabilité.

De nombreux efforts ont été déployés pour compiler les langages de programmation de haut niveau existants (C en est un) vers les cibles FPGA. La plupart d'entre eux génèrent en fait du code optimisé. Impulse C, par exemple, est un sous-ensemble de C avec quelques bibliothèques complémentaires qui prennent en charge le parallélisme au niveau du processus, plus un compilateur qui optimise également l'entrée C pour le parallélisme au niveau de l'instruction. Il achemine des boucles, mappe certaines opérations sur des primitives matérielles hautes performances qu'il connaît de la famille FPGA sous-jacente, etc. (Divulgation complète: J'ai aidé à construire la chaîne d'outils Impulse C.)

Le lien environnements C-vers-matériel liste Carlito et David Pointer est assez exhaustif. Xilinx Virtex-5 est pris en charge par beaucoup d'entre eux, et si vous utilisez une famille FPGA récente d'un fournisseur majeur, le choix du matériel ne devrait pas être un problème. Certains environnements HLL prennent en charge les processeurs intégrés (ou softcore) intégrés mieux que d'autres.

1
rkb