11.6.1.3 : Programmer des calculs sur le FPGA
Les fabricants de FPGA et leurs partenaires ont crée des catalogues de blocs IP d'une large variété, qui ont facilité, par exemple, le design de systèmes complets avec une architecture von Neumann, avec un processeur basique, beaucoup exploités dans une multitude d'applications embarqués (System on Programmable Chip, SoPC). La possibilité d'exécuter des tâches de calcul est évidente dans ce cas, mais c'est un autre avantage des FPGA qui est plus prometteur~: la possibilité de parallélisation des opérations arithmétiques et celle d'exécution en pipelines plus profonds que sur les architectures CPU classiques. Dans ce cas, le FPGA doit être d'abord interfacé avec un système hôte, par des blocs IP, par exemple pour contrôler la mémoire où les données seront échangées, ou autres interfaces physiques. Ensuite nous avons les blocs DSP (Digital Signal Processor) qui intègrent des fonctionnalités plus proches de la représentation des opérandes et des opérations arithmétiques, par exemple avec les formats flottants. Le tout sera dans ce cas décrit dans le langage VHDL, qui peut être considéré, dans ces circonstances, comme un langage de programmation parallèle.
L'écriture d'un programme en VHDL ou Verilog pour un FPGA présente certains aspects de la programmation directe en assembleur d'un processeur classique. Elle ressemble aussi à la programmation d'un micro-contrôleur, mais elle n'est en aucun cas un langage de haut niveau directement utilisable par des programmeurs non-spécialisés en micro-électronique. L'utilisation des langages de type HDL serait difficilement mise en accord avec l'idée de programmation en tant qu'outil accessoire de recherche pour les chercheurs avec une formation en physique, accompagnée d'une formation plus ou moins approfondie en programmation classique, avec les langages de haut niveau connus sur le marché, plus proches de l'expression mathématique et algorithmique que des détails de fonctionnement hardware de la machine de calcul.
Pour faire du FPGA un candidat populaire pour les utilisateurs de ressources de calcul, il a fallu créer le niveau d'abstraction qui cache les détails d'implémentation hardware et un compilateur qui supporte une interface de programmation confortable (similaire au langage C ou C++). Une différence reste pourtant, dans le fait qu'il n'existe pas de set d'instructions élémentaires pour un tel équivalent de processeur. Cela signifie que la compilation (ou la synthèse) de l'image FPGA est toujours basée sur une description (un projet) de support, où les prémisses de communication des données et de leur manipulation arithmétique ainsi que toutes les autres interfaces physiques nécessaires sont déjà synthétisées dans une image de base (une sorte de pilote). Cette image de base (Board Support Package, BSP) est spécifique au type de FPGA avec toutes ses caractéristiques ainsi qu'à l'environnement de montage du FPGA, car le FPGA est en général présenté sur une carte avec toute la connectique nécessaire et les périphériques adjacents. La réalisation de cette image de support reste à la charge des spécialistes, elle peut évoluer et s'améliorer avec les versions successives du logiciel de synthèse (Quartus pour les FPGA Altera/Intel) et représente un projet spécifique à un type précis de FPGA. Néanmoins, si certains FPGA seront mieux ciblés pour le calcul hybride (CPU + FPGA), une standardisation serait toujours possible et la production des BSP pourrait être organisée dans des conditions optimales.
Dans les sections suivantes nous allons détailler l'approche suivie dans le cadre du projet Reprises pour l'étude d'une carte équipée d'un FPGA utilisée comme accélérateur de calcul lorsqu'elle est connectée à un PC hôte.