Aller au contenu

FPGA et logique reconfigurable

Quand un microcontrôleur manque de débit ou de déterminisme, et qu'un ASIC est hors budget, le FPGA occupe un espace unique : du silicium programmable capable de traiter des millions d'événements en parallèle, reconfigurable à la volée.


Architecture interne d'un FPGA

Un FPGA (Field-Programmable Gate Array) est une matrice de blocs logiques reconfigurables interconnectés par un réseau de routage programmable. Contrairement à un processeur qui exécute des instructions séquentiellement, un FPGA réalise des fonctions en logique combinatoire et séquentielle câblées — tout s'exécute en parallèle.

Les blocs fondamentaux

CLB (Configurable Logic Block) — ou LAB (Logic Array Block) chez Intel : contient des LUT (Look-Up Tables), des bascules D (flip-flops) et de la logique d'arithmétique rapide (carry chain). C'est l'unité de base de tout circuit implémenté.

LUT (Look-Up Table) : une LUT-4 est une table de vérité à 4 entrées implémentée en SRAM. Elle peut réaliser n'importe quelle fonction booléenne de 4 variables. Une LUT-6 (standard actuel) couvre 6 entrées.

IOB (Input/Output Block) : gère les signaux d'entrée/sortie avec registres, buffers de pilotage, support des standards (LVDS, LVCMOS, LVPECL), terminaisons, DDR.

Block RAM (BRAM) : blocs de mémoire SRAM dédiés de 18 ou 36 Kbits, à double port, utilisables en FIFO, ROM, RAM simple/dual-port. Évitent d'utiliser les LUT pour le stockage.

DSP Slices : multiplicateurs câblés (18×18 ou 27×18 bits) avec accumulateur, optimisés pour les filtres numériques, FFT, PID, corrélateurs. Bien plus efficaces que les LUT pour le calcul.

PLL / MMCM : synthèse d'horloge, multiplication/division de fréquence, déphasage précis.

Diagramme d'architecture FPGA simplifiée

graph TB
    subgraph FPGA
        subgraph "Fabric reconfigurable"
            CLB1["CLB\nLUT + FF\n+ carry"] --- INT["Interconnect\nréseau de routage\nprogrammable"]
            CLB2["CLB\nLUT + FF\n+ carry"] --- INT
            CLB3["CLB\nLUT + FF\n+ carry"] --- INT
            INT --- BRAM["Block RAM\n18/36 Kbits\ndual-port"]
            INT --- DSP["DSP Slice\nMult 18×18\n+ Accum"]
        end
        subgraph "I/O"
            IOB1["IOB\nLVDS / LVCMOS\nDDR registers"]
            IOB2["IOB\nLVDS / LVCMOS\nDDR registers"]
        end
        subgraph "Ressources fixes"
            PLL["PLL/MMCM\nSynthèse horloge"]
            SERDES["SERDES\nGbps I/O"]
        end
        INT --- IOB1
        INT --- IOB2
        INT --- PLL
        INT --- SERDES
    end
    CONFIG["Fichier bitstream\n(.bit / .sof)"] -.->|"Configuration\nau démarrage"| FPGA

SoC FPGA : processeur + logique programmable

Le SoC FPGA combine un cœur processeur dur (non reconfigurable) avec de la logique FPGA sur le même die. Cette combinaison est particulièrement pertinente pour l'IoT industriel : le processeur gère les couches hautes (Linux, pile réseau, interface utilisateur) pendant que la partie FPGA réalise le traitement temps réel en accélérateur matériel.

Xilinx Zynq-7000 / Zynq UltraScale+

La famille Zynq (AMD-Xilinx) intègre :

  • PS (Processing System) : Cortex-A9 dual-core (Zynq-7000) ou Cortex-A53 quad-core (ZynqMP)
  • PL (Programmable Logic) : fabric FPGA Artix-7 ou UltraScale+
  • Interface PS↔PL : AXI4 haute performance (plusieurs Go/s de bande passante)
Zynq-7020 (Z-7020) :
  PS : Cortex-A9 dual @ 766 MHz, 1 Go DDR3
  PL : 85 000 CLB, 220 DSP slices, 4,9 Mbits BRAM
  Consommation : 1,5–2,5 W
  Prix : 15–40 € (volume)

Intel Cyclone V SoC

La famille Cyclone V SoC (Intel/Altera) offre un positionnement similaire avec Cortex-A9 dual-core et fabric FPGA. Elle est particulièrement répandue dans les applications vision industrielle et contrôle moteur.

Tableau comparatif : familles SoC FPGA pour IoT

Produit Processeur FPGA Logic RAM int. Conso typique Prix (unité) Cas d'usage IoT
Xilinx Zynq-7010 A9 dual 667 MHz 28k LUT 512 Ko 1,0–1,5 W 20–35 € Gateway, vision légère
Xilinx Zynq-7020 A9 dual 766 MHz 85k LUT 2,1 Mo 1,5–2,5 W 30–55 € Contrôle moteur, RF
Intel Cyclone V SX A9 dual 800 MHz 40k LE 2,7 Mo 1,0–2,0 W 25–45 € Vision, contrôle
Lattice CrossLink-NX Aucun (soft) 17k LUT 1,3 Mo 0,3–0,8 W 5–15 € Vision IA edge low-power
Microchip PolarFire SoC RISC-V 4-core 254k LUT 2,0 Mo 2,0–4,0 W 40–80 € Edge computing sécurisé

FPGA vs MCU vs ASIC : quand choisir quoi ?

flowchart TD
    A[Besoin traitement\nspécialisé] --> B{Volume de\nproduction ?}
    B -- "> 100 000 / an" --> C{Modifications\naprès fabrication ?}
    C -- Non --> D[ASIC\nPerf max, coût NRE élevé\nPas de retour en arrière]
    C -- Oui --> E[FPGA en production\nou SoC FPGA]
    B -- "< 100 000 / an" --> F{Traitement\nparallèle requis ?}
    F -- "Oui — DSP, vision,\nprotocoles custom" --> G[FPGA ou SoC FPGA]
    F -- "Non — tâches\nséquentielles" --> H{Ressources CPU\nsuffisantes ?}
    H -- Oui --> I[MCU standard\nMoins cher, plus simple]
    H -- Non --> J[MCU haute perf\nCortex-M7 ou Cortex-A]

Tableau comparatif détaillé : FPGA vs MCU vs ASIC

Critère MCU (Cortex-M7) FPGA (Artix-7) SoC FPGA (Zynq) ASIC (28nm)
Flexibilité Logiciel Matérielle (reBuild) Logiciel + matériel Aucune
Performance DSP 100s MMAC/s 100s GMAC/s 100s GMAC/s + CPU TMAC/s
Consommation (typ.) 50–200 mW 0,5–2 W 1–4 W 10–100 mW (typ.)
Coût unitaire (1k) 2–15 € 10–80 € 20–100 € > 5 € (NRE > 1 M€)
NRE (Non-Recurring Eng.) Faible Faible Faible 500 k€ – 5 M€
Temps de mise sur marché Semaines Mois Mois 12–24 mois
Déterminisme µs (RTOS) Cycles (ns) Cycles (PL) + µs (PS) Cycles (ns)
Mises à jour terrain OTA firmware OTA bitstream OTA firmware + BS Impossible

Cas d'usage IoT industriel

Traitement du signal en temps réel

Un réseau de capteurs vibratoires sur une turbine nécessite d'échantillonner 32 voies à 200 kSa/s et d'appliquer une FFT 1024 points en temps réel sur chaque voie. Un MCU Cortex-M7 peut traiter 1–2 voies. Un FPGA Artix-7 traite les 32 voies en parallèle avec une latence de quelques microsecondes.

Vision industrielle embarquée

La détection de défauts sur ligne de production peut requérir l'analyse de 60 images/seconde à 1080p. Un FPGA implémente les algorithmes de convolution (sobel, canny) directement dans la logique câblée, avec un débit de pixels de plusieurs Gbps.

Protocoles de communication custom

Certains équipements industriels utilisent des protocoles propriétaires ou des variantes non standard (SERCOS III, EtherCAT slave, protocoles radio custom). Le FPGA implémente le contrôleur au niveau bit/symbole, là où un MCU ne peut pas tenir le timing.

Accélération cryptographique

AES-256 en software sur un Cortex-M4 : ~4 Mbps. Implémenté en FPGA (pipeline câblé) : > 1 Gbps. Pour les gateways IoT qui chiffrent des flux importants, la différence est rédhibitoire.


Langages et outils de développement FPGA

Développer pour FPGA n'est pas du développement logiciel classique — c'est de la description de matériel. Les langages HDL (Hardware Description Language) décrivent des circuits, pas des algorithmes séquentiels.

VHDL vs Verilog vs SystemVerilog

Critère VHDL Verilog SystemVerilog
Origine DOD / IEEE 1987 Cadence / IEEE 1995 IEEE 2005 (extension Verilog)
Typage Fort, verbeux Faible, concis Fort + extensions OOP
Usage industrie FR Aérospace, défense, CNAM Telecom, ASIC Vérification, ASIC moderne
Simulation GHDL, ModelSim Icarus, ModelSim ModelSim, Questasim
Synthèse (Xilinx) Vivado Vivado Vivado
Synthèse (Intel) Quartus Quartus Quartus
Courbe apprentissage Élevée Modérée Modérée à élevée

Le VHDL est le langage enseigné au CNAM (UE ELE106, ELE119) et dominant dans l'industrie française (aéronautique, défense, spatial).

Chaîne d'outils FPGA

flowchart LR
    HDL["Code HDL\n(VHDL / Verilog)"] --> SIM["Simulation\nfontionnelle\n(GHDL, ModelSim)"]
    SIM --> SYNTH["Synthèse\nlogique\n(Vivado, Quartus)"]
    SYNTH --> IMPL["Implémentation\n(Place & Route)"]
    IMPL --> BIT["Bitstream\n(.bit / .sof)"]
    BIT --> PROG["Programmation\nJTAG / SPI Flash"]
    PROG --> HW["FPGA cible"]
    IMPL --> TIMING["Rapport timing\nSetup/Hold\nWNS / TNS"]
    TIMING --> IMPL

Le rapport de timing est critique : si la contrainte de timing n'est pas respectée (WNS — Worst Negative Slack — négatif), le circuit peut fonctionner de manière aléatoire en conditions réelles (variations de température, tension). Un FPGA qui "fonctionne sur le bureau" avec un timing marginal tombera en production à 85 °C.

HLS : synthèse de haut niveau

Les outils HLS (High-Level Synthesis) comme Vitis HLS (Xilinx) ou Intel HLS Compiler permettent de synthétiser du C/C++ annoté en logique FPGA. Ils réduisent considérablement le temps de développement pour les algorithmes DSP et ML, au prix d'une moins bonne optimisation manuelle.

// Exemple Vitis HLS : filtre FIR 8 taps synthétisable en FPGA
#include "ap_fixed.h"
typedef ap_fixed<16,4> data_t;
typedef ap_fixed<32,8> acc_t;

void fir_filter(data_t x, data_t *y) {
    static data_t shift_reg[8] = {0};
    static const data_t coeffs[8] = {0.1, 0.15, 0.2, 0.05, 0.05, 0.2, 0.15, 0.1};

    #pragma HLS PIPELINE II=1   // Directive : pipeline avec initiation interval = 1 cycle
    acc_t acc = 0;
    for (int i = 7; i > 0; i--) {
        shift_reg[i] = shift_reg[i-1];
    }
    shift_reg[0] = x;
    for (int i = 0; i < 8; i++) {
        acc += shift_reg[i] * coeffs[i];
    }
    *y = (data_t)acc;
}

La directive #pragma HLS PIPELINE II=1 indique au synthétiseur de créer un pipeline capable d'accepter un nouvel échantillon à chaque cycle d'horloge — ce qui est impossible en logique séquentielle C pure.


Ce qu'il faut retenir

  • Un FPGA réalise des fonctions en logique câblée parallèle — il ne "tourne" pas un programme, il est un circuit. Cette différence conceptuelle est fondamentale.
  • Les SoC FPGA (Zynq, Cyclone V SoC) combinent le meilleur des deux mondes : Linux sur le processeur dur, traitement déterministe sur la partie FPGA. Ils sont la base des gateways industrielles haute performance.
  • Le FPGA est justifié quand le MCU le plus puissant disponible n'a pas le débit ou le déterminisme requis, et que les volumes sont insuffisants pour amortir un ASIC.
  • Le NRE d'un ASIC dépasse 500 k€ pour un nœud 28 nm — réservé aux volumes supérieurs à 100 000 unités/an avec des exigences fixes.
  • L'énergie est le talon d'Achille du FPGA en contexte batterie : un FPGA consomme 0,5 à 4 W au minimum, ce qui le réserve aux applications alimentées sur secteur ou PoE.

Chapitre suivant : Gestion de l'énergie — comment dimensionner l'alimentation d'un nœud IoT pour des années d'autonomie.