Définition
L’ électronique programmable désigne les composants dont le comportement peut être modifié logiciellement.

Attention
Même s’il est possible d’embarquer un programme dans un microcontrôleurs ou un microprocesseur, on considère que les microprocesseurs ou microcontrôleurs ne sont pas des composants programmables.

Introduction
principaux types de composants logiques:
– Les microprocesseurs sont des composants de logique séquentielle : le programme d’un microprocesseur est une suite d’instructions qui sont exécutées séquentiellement, ie l’une après l’autre.
Exemple de processeurs séquentiels: les CPU, DSP, microcontrôleurs
– Les processeurs vectoriels sont des composants de logique parallèle : le programme d’un processeur vectoriel est la description de l’ensemble des opérations qui sont effectuées à chaque coup d’horloge par le processeur.
Exemple de processseurs vectoriels: les portes logiques, FPGA et CPLD, les unités de traitement vectoriel des CPU.

En général, un microprocesseur est un type particulier de processeur vectoriel, où l’on considère que les données traitées par le processeur vectoriel sont les instructions du programme du microprocesseur.

Un processeur vectoriel est conçu intégralement pour traiter un seul type de données: par conséquent, il est beaucoup plus optimisé pour ce traitement que ne le serait un processeur séquentiel programmé pour effectuer la même fonction: un processeur vectoriel peut traiter un nombre arbitraire d’échantillons à chaque cycle d’horloge, alors qu’un processeur séquentiel prendra un plus grand nombre de cycles d’horloge pour effectuer le même traitement.

Le choix entre un processeur séquentiel et un vectoriel doit s’appuyer sur un certain nombre de critères (liste non exhaustive):

– Coût (humain et financier) de développement (une unité vectorielle est plus couteuse qu’une unité séquentielle)
– Nécessité/coût des mises à jour du logiciel
– Contraintes de performance: vitesse de traitment, latence de traitement, temps-réel
– Contraintes de consommation
– Utilisation des ressources: une unité vectorielle est en permanence en fonctionnement… il faut donc autant d’unités vectorielles que de traitements

Pourquoi les composants programmables?
Souplesse d’utilisation
A part les pattes d’alimentation, toutes les pattes d’un composant programmable sont équivalentes (à quelques détails près néanmoins). On peut donc concevoir une carte très compacte sans interconnexions acrobatiques et coûteuses en surface de PCB, et transferérer cette complexité au composant programmable. A l’autre extrémité, on peut utiliser directement le composant programmable sur une plaque d’expérimentation (aux problèmes d’intégrité des signaux logiques près) et placer n’importe quel unité de traitement sur n’importe quelle patte.

Performances
Les composants programmables sont un moyen aisé de créer des unités vectorielles:

– Silicium répandu et fondu en grande quantité -> prix par unité faible
– Possibilité de reprogrammer l’unité in-situ -> mise à jour possible, développement plus rapide (on évite les délais de fonderie)
Néanmoins, les composants programmables consomment beaucoup d’énergie: un Stratix EP1S25 peut consommer par exemple 6W (un PIC18F consomme 0,05W).

En pratique, c’est quoi?
Un composant programmable est constitué de 3 parties principales:

Elements logiques
il s’agit d’ensembles de portes logiques, en général des portes OU et NON-ET pour les CPLD, ou des mémoires associatives (LUT LookUp Table) pour les FPGA.
Matrice d’interconnexion
c’est le câblage interne du composant programmable, il relie les Elements Logiques entre eux.
Buffers d’entrée/sortie
c’est l’interface avec le monde réel, ils permettent de configurer indépendamment les pattes du composant en entrée ou en sortie, et les relient à la matrice d’interconnexion.
[modifier]FPGA et CPLD
FPGA et CPLD sont les deux grandes familles de composants programmables. Leur principale différence est leur architecture:

Un FPGA (Field Programmable Grid Array) est une énorme matrice d’interconnexion au sein de laquelle on a placé en grille des petites unités logiques (en général, 4 entrées 2 registres 2 sorties)
Un CPLD (Complex Programmable Logical Device) contient deux unités clairement séparée: une grille d’interconnexion, et un bloc d’éléments logiques.
Le choix FPGA/CPLD dépend beaucoup de l’application:

Fréquence de fonctionnement
un CPLD garantit par construction la fréquence de fonctionnement, alors que le FPGA nécessite de calculer à chaque synthèse de son programme sa fréquence de fonctionnement.
Complexité des calculs
un FPGA peut compter plusieurs millions de portes logiques au sein de la même puce en raison de son architecture géométrique répétitive. A l’opposé, construire un gros CPLD nécessite une conception spécifique. On trouvera donc plus facilement des gros FPGA que des gros CPLD, ce qui rend le FPGA plus adapté à des calculs complexes.
[modifier]Programmation des FPGA et CPLD
Un FPGA ou un CPLD se programment généralement de la même façon. Le processus est le suivant:

Génération des listes de circuits et des mémoires LUT
A cette étape, on définit le circuit sous la forme d’un ensemble de portes logiques, reliées par des fils.
Placement/routage
Dans cette étape, on attribue à chaque porte logique un emplacement dans le circuit, ainsi que le placement des interconnexion qui réalisent les connexion électriques des circuits.
Recherche du chemin critique (FPGA seulement)
Dans cette étape, on évalue le temps de transmission dans le circuit de chaque signal. Le maximum du temps de transmission est appelé le chemin critique, et détermine la fréquence maximale de fonctionnement du circuit.
Assemblage
dans cette étape, on transforme le placement des portes et des interconnexions en un programme binaire qui est compatible avec le circuit cible.
Programmation
dans cette dernière étape, on place le programme assemblé dans une mémoire flash qui reprogrammera automatiquement le circuit à chaque mise sous tension.
Le processus est très complexe: le placement/routage et la génération des listes de circuits ne sont pas déterministes, le placement/routage est un problème NP complet, et la recherche du chemin critique demande de nombreuses simulations de propagation de signaux. Aussi, une synthèse complète prend rarement moins de 1 minute pour un petit composant, et dépasse souvent les 5 minutes. Par ailleurs, plus le composant est proche de la saturation, plus la synthèse prend du temps car une solution acceptable nécessite une recherche encore plus exhaustive.

Aussi, il est hors de question de vouloir effectuer la programmation à la main comme au bon vieux temps de l’assembleur.

La complexité du problème rend également le déboggage quasiment impossible.

Source: planete-sciences.org | CC