🔲
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]