11.6.1.2 : Comment programmer un FPGA ?



La programmation d'un FPGA est d'abord une spécialité du domaine de la micro-électronique. Un projet FPGA commence avec la spécification exacte du type de FPGA~: nombres d'éléments logiques, nombre et emplacement des connecteurs,~etc. L'outil de programmation et de synthèse pour les FPGA fabriqués par Altera/Intel est Quartus et pour les FPGA de la marque Xilinx (la compagnie américaine inventeur du FPGA) Vivado. Dans ce document, référence sera faite principalement aux FPGA de la marque Altera (actuellement Intel), qui ont été testés pour des tâches de calcul, dans le cadre du projet Reprises.

Quartus s'installe également sous Windows et sous Linux (CentOS 7.4 et Ubuntu 18.1 pour ce rapport) et il est disponible sur le site Intel, sans (lite) ou avec licence (standard ou pro). Les licences Quartus sont mises à jour sur un serveur de licences flottantes au Centre de Calcul de l'IN2P3 et sont utilisé de cette manière dans tous les services de micro-électronique des laboratoires de l'IN2P3.

La programmation d'un FPGA va de pair avec la description du hardware sur lequel le code sera exécuté. Dans le design hardware d'un projet FPGA, on utilise aussi des bibliothèques de modules préfabriqués qu'on insère dans notre projet après une configuration et un paramétrage partiel (le catalogue de cœurs Intellectual Property, ou IP cores). Pour cette raison, ce type de langage s'appelle un langage de description de hardware (Hardware Description Language, HDL)~: Quartus offre des implémentations de Verilog et VHDL. Dans la partie software, la modélisation abstraite de la circulation des signaux dans des circuits numériques ainsi réalisés est faite dans un langage appelé RTL (pour Register Transfer Level). La compilation d'un projet comporte aussi une analyse temporelle du signal propagé dans le circuit et Quartus contient des outils de simulation de la réaction du système aux stimuli externes.

L'une des dernières étapes du design d'un projet FPGA est l'association des connecteurs externes du FPGA. Ainsi le FPGA communique avec d'autres périphériques, on injecte et on extrait des signaux,~etc. en fonction de la destination du projet. Dans le cas d'un système d'acquisition pour un détecteur de particules, le FPGA sera toujours monté avec plusieurs autres composantes électroniques sur la même carte, qui assureront l'alimentation, l'injection et l'extraction des données, les signaux horloge de synchronisation, le câble pour la mise à jour du firmware,~etc. La dernière étape, celle de la compilation, intègre toutes les étapes précédentes et synthétise l'image binaire qui sera transférée dans le FPGA (en général par une connexion JTAG) ou vers la mémoire flash attachée au FPGA. La compilation est un processus gourmand en CPU et mémoire vive et peut prendre plusieurs heures, principalement en fonction de la taille du FPGA. L'image est un fichier de plusieurs dizaines de méga-octets ou plus et on appelle ça le firmware, car c'est une combinaison de software et hardware.