Hey,
On voit souvent sur les forums la question Arduino ou Raspberry, mais on croise plus rarement celle de microcontrôleur ou FPGA qui prend aussi un peu d'importance avec l'arrivée de FPGA abordables.
D'un côté, on a les microcontrôleurs que l'on a l'habitude de voir, on les programme facilement et ils exécutent le code qu'on leur donne ligne après ligne.
D'un autre coté, il y a les FPGA (Field Programmable Gate Array), ce sont des puces capables de reconfigurer leur logique interne en fonction de vos besoins. Il est possible de concevoir un schéma logique sur le logiciel et il sera automatiquement recréé dans la puce. La complexité du schéma peut aller d'une simple porte NAND à un microcontrôleur complet voir même un microprocesseur. Leurs avantages sont de pouvoir effectuer de nombreuses tâches en simultané lorsque l'on utilise une logique combinatoire (schéma à base de portes logiques uniquement) ou d'utiliser une architecture pipe-line pour faire plusieurs tâches en parallèle. Ils sont aussi utilisés pour tester les microprocesseurs avant de faire la première série de production.
Cela fait 3 ans que j'utilise des FPGAs lors de TP à la fac et je me suis souvent demandé si il existait une puce (SystemOnChip) qui comporterait à la fois un ASIC et un FPGA pour avoir le meilleur des 2 mondes. Et récemment, j'ai pu tester une carte SMF2000 (SmartFusion2) ainsi qu'une carte de développement à base de SmartFusion1. Pour le moment, je trouve encore leur utilisation plus complexe que si je disposai de 2 cartes séparées, malgré la HAL (Hardware Abstraction Layer, une couche entre la programmation haut niveau en C et le matériel). Celle-ci est plutôt bien documentée grâce à des programmes d'exemples pour les fonctions les plus utilisées ainsi qu'une description détaillée de chaque fonction de leurs bibliothèques.
Pour programmer la carte on commence par créer la partie FPGA sur le logiciel Libero SoC de MicroSemi qui contient aussi l'interface avec le Cortex-M3, il est possible de faire des simulations avec ModelSim avant de programmer la carte. Puis on génère les firmwares pour le programme C et on bascule sur un autre logiciel, SoftConsole, pour la compilation du code et le debug. C'est la première fois que j'utilise une fonction de debug et je dois avouer que c'est plutôt pratique, il permet de lancer le programme ligne après ligne et observer les différents états du microprocesseur.
Exemple:
J'ai fait un petit test simple à l'aide du bouton poussoir et d'une led sur la carte, le but de diviser l'horloge (programme fait en VHDL) pour qu'elle dispose d'un cycle d'une seconde puis de faire passer ce signal dans une porte logique ET pour compter le nombre de secondes pendant lequel le bouton est appuyé. Sur le microcontrôleur il y a une interruption qui détecte le changement d'état, incrémente le compteur et affiche la valeur sur le port Série. La partie logique ressemble à ceci :
libero_QD3qwAWrrJ.png 270,94 Ko
106 téléchargement(s)
B est le bouton, s la led, et Y est la connexion entre le FPGA et le microcontrôleur.
Prix :
On m'a aussi parlé d'une carte intéressante nommée QuickFeather qui comprend elle aussi un FPGA et un Cortex-M3 mais qui possède une toolchain entièrement opensource.
Niveau prix, le SMF2000 et la QuickFeather sont toutes les deux proposées à un peu plus de 40€.
Pour le moment je n'ai pas encore de projet précis avec cette carte (je ne m'attendais pas à en avoir une prochainement), mais je trouvais ces cartes intéressantes pour tenter d'obtenir des systèmes Low Power sans avoir à atteindre entièrement le SoC. J'aimerais aussi tester une FFT ou au moins un FIR sur le FPGA et utiliser le Cortex-M3 pour communiquer avec le PC.
Est-ce que vous avez déjà utiliser des cartes similaires ? Et si oui, sur quel type de projets ?