Cours FPGA Complet

Cours FPGA Complet

Circuits Logiques Programmables

🔲 FPGA Xilinx Intel/Altera
🎯

Chapitre 1 : Introduction aux FPGA

Circuits logiques reconfigurables

1.1 Definition

📖
FPGA - Field Programmable Gate Array Un FPGA est un circuit integre compose d'une matrice de blocs logiques configurables interconnectes. Il peut etre programme "sur le terrain" (field) pour realiser n'importe quelle fonction logique.

Historique

  • 1984 : Premier FPGA par Xilinx (XC2064)
  • 1992 : Introduction des LUT 4 entrees
  • 2000 : Integration de blocs DSP et memoire
  • 2010 : SoC FPGA (ARM + FPGA)
  • 2020 : FPGA haute performance (Versal, Agilex)

1.2 FPGA vs Autres Technologies

Critere FPGA ASIC Microcontroleur
Cout NRE Faible Tres eleve Nul
Cout unitaire Moyen-Eleve Tres faible Faible
Performance Elevee Maximale Moderee
Consommation Moyenne Optimisee Faible
Flexibilite Totale Nulle Logicielle
Time-to-market Court Long (12-18 mois) Tres court
Parallelisme Massif Massif Limite

1.3 Applications des FPGA

📡

Telecom

5G, stations de base, SDR

🚀

Aerospatial

Satellites, avionique

🏥

Medical

Imagerie, echographie

🚗

Automobile

ADAS, conduite autonome

🤖

IA/ML

Acceleration inference

💰

Finance

Trading haute frequence

🏗️

Chapitre 2 : Architecture des FPGA

Structure interne et ressources

2.1 Architecture Generale

┌─────────────────────────────────────────────────────────────┐
│                        FPGA                                  │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                    I/O Blocks                        │    │
│  └─────────────────────────────────────────────────────┘    │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐           │
│  │ CLB │ │ CLB │ │ CLB │ │BRAM │ │ CLB │ │ CLB │           │
│  └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘           │
│     │       │       │       │       │       │    Routing    │
│  ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐           │
│  │ CLB │ │ DSP │ │ CLB │ │ CLB │ │ DSP │ │ CLB │           │
│  └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘           │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │     PLL      │  │   Clock      │  │    PLL       │       │
│  │   (CMT)      │  │   Tree       │  │   (CMT)      │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘

CLB  = Configurable Logic Block
BRAM = Block RAM
DSP  = Digital Signal Processing
PLL  = Phase-Locked Loop
CMT  = Clock Management Tile

2.2 Bloc Logique Configurable (CLB)

Le CLB est l'element de base du FPGA. Il contient des LUT (Look-Up Tables), des bascules et de la logique de retenue.

Structure d'une LUT

        LUT 4 entrees (16 bits de configuration)
        
        A ──┐
        B ──┼──► ┌────────────┐
        C ──┼──► │   SRAM     │ ──► Sortie
        D ──┘    │  16 bits   │
                 └────────────┘
                 
        Peut implementer N'IMPORTE quelle fonction de 4 variables:
        - AND, OR, XOR, NAND, NOR, XNOR
        - Multiplexeur 2:1
        - Comparateur
        - Addition (avec chaine de retenue)

Slice (Xilinx 7-series)

  • SLICEL : 4 LUT6, 8 Flip-Flops, carry chain
  • SLICEM : + RAM distribuee + registres a decalage

2.3 Ressources Speciales

Ressource Fonction Capacite typique
Block RAM (BRAM) Memoire embarquee 18Kb ou 36Kb par bloc
DSP48 Multiplieur-accumulateur 25x18 bits, 48 bits acc
IOB Interface E/S LVDS, LVCMOS, DDR
PLL/MMCM Generation d'horloge Multiplication, division
GTx Transceiver haute vitesse Jusqu'a 28 Gbps
PCIe Interface bus rapide Gen3/Gen4
🔧

Chapitre 3 : Technologies de Configuration

SRAM, Flash et Antifuse

3.1 Comparaison des Technologies

Technologie Volatile Reprogrammable Fabricants
SRAM Oui Infini Xilinx, Intel
Flash Non ~1000 cycles Microchip, Lattice
Antifuse Non Non (OTP) Microchip

FPGA base SRAM

  • Configuration perdue a la mise hors tension
  • Necessite une memoire externe (Flash, EEPROM)
  • Temps de configuration : quelques ms a quelques secondes
  • Avantage : derniere technologie, haute densite
📐

Chapitre 4 : Flot de Conception FPGA

Du code au bitstream

4.1 Etapes du Flot

    ┌─────────────────┐
    │   Specification │
    │    (Cahier des  │
    │     charges)    │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │   Description   │  ◄── VHDL / Verilog / Schematique
    │     HDL         │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │   Simulation    │  ◄── Testbench, verification fonctionnelle
    │  Fonctionnelle  │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │    Synthese     │  ◄── Traduction en primitives (LUT, FF)
    │                 │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │  Implementation │  ◄── Placement + Routage
    │  (Place & Route)│
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │   Simulation    │  ◄── Timing, verification post-implementation
    │    Temporelle   │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │   Generation    │  ◄── Fichier de configuration (.bit)
    │    Bitstream    │
    └────────┬────────┘
             │
             ▼
    ┌─────────────────┐
    │  Programmation  │  ◄── Chargement dans le FPGA
    │     FPGA        │
    └─────────────────┘

4.2 Synthese

La synthese transforme le code HDL en un netlist de primitives FPGA.

Optimisations

  • Area : Minimiser les ressources utilisees
  • Speed : Maximiser la frequence d'horloge
  • Power : Reduire la consommation
💡
Conseil Verifiez toujours les rapports de synthese pour detecter les inferences non desirees (latches, ROM, RAM).

4.3 Implementation

Placement

Attribution des elements logiques aux ressources physiques du FPGA.

Routage

Connexion des elements places via les ressources d'interconnexion.

Rapports importants

  • Utilization Report : Ressources utilisees
  • Timing Report : Respect des contraintes temporelles
  • Power Report : Estimation de consommation
💻

Chapitre 5 : Outils de Developpement

Environnements et simulateurs

5.1 Outils par Fabricant

Fabricant Outil Familles FPGA
AMD/Xilinx Vivado 7-series, UltraScale, Versal
AMD/Xilinx ISE (legacy) Spartan-6, Virtex-6
Intel Quartus Prime Cyclone, Arria, Stratix, Agilex
Lattice Diamond, Radiant iCE40, ECP5, Nexus
Microchip Libero SoC PolarFire, SmartFusion

5.2 Simulateurs HDL

  • ModelSim / QuestaSim : Reference industrielle (Mentor/Siemens)
  • Vivado Simulator : Integre a Vivado (gratuit)
  • GHDL : Open source pour VHDL
  • Icarus Verilog : Open source pour Verilog
  • Verilator : Simulation tres rapide
⏱️

Chapitre 6 : Contraintes

Timing et placement

6.1 Fichier de Contraintes (XDC)

# Contraintes d'horloge
create_clock -period 10.000 -name sys_clk [get_ports clk]

# Contraintes de pins (FPGA Basys3)
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

# LEDs
set_property PACKAGE_PIN U16 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]

# Boutons
set_property PACKAGE_PIN T18 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]

# Switches
set_property PACKAGE_PIN V17 [get_ports {sw[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]

6.2 Analyse Temporelle

Concepts cles

  • Setup Time : Temps avant le front d'horloge ou la donnee doit etre stable
  • Hold Time : Temps apres le front ou la donnee doit rester stable
  • Slack : Marge temporelle (positif = OK, negatif = violation)
  • WNS : Worst Negative Slack
  • TNS : Total Negative Slack
⚠️
Attention Un slack negatif signifie que le design ne fonctionnera pas a la frequence visee. Il faut optimiser le code ou reduire la frequence.
🔍

Chapitre 7 : Debug et Verification

ILA, VIO et techniques

7.1 Outils de Debug Integres

  • ILA (Integrated Logic Analyzer) : Capture des signaux internes en temps reel
  • VIO (Virtual I/O) : Controle et observation via JTAG
  • JTAG-to-AXI : Acces aux bus memoire
🚀

Chapitre 8 : Applications Pratiques

Projets et cartes de developpement

8.1 Cartes de Developpement Populaires

Carte FPGA Prix Usage
Basys 3 Artix-7 35T ~150 EUR Education
Nexys A7 Artix-7 100T ~300 EUR Education avancee
Arty A7 Artix-7 35T/100T ~130 EUR Maker, prototypage
DE10-Nano Cyclone V SoC ~180 EUR SoC, retrogaming
iCEBreaker iCE40UP5K ~70 EUR Open source

8.2 Projet : LED Clignotante sur Basys3

Code VHDL

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity blink is
    port (
        clk  : in  std_logic;  -- 100 MHz
        led  : out std_logic
    );
end entity;

architecture behavioral of blink is
    signal counter : unsigned(26 downto 0) := (others => '0');
begin
    process(clk)
    begin
        if rising_edge(clk) then
            counter <= counter + 1;
        end if;
    end process;
    
    led <= counter(26);  -- ~0.75 Hz
end architecture;

Contraintes XDC (Basys3)

set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
create_clock -period 10.000 -name sys_clk [get_ports clk]

set_property PACKAGE_PIN U16 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

Cours FPGA Complet | Electronique et Informatique Industrielle

yacine.love