Circuits programmables simples (SPLD) et complexes (CPLD)

PROM (Programmable Read-Only Memory)

Avant l’invention des premiers circuits logiques programmables, les mémoires en lecture seule (ROM pour Read-Only Memory) étaient déjà utilisées pour réaliser des fonctions logiques combinatoires.

Une ROM est organisée comme un tableau de 2N2^N cellules contenant MM bits chacune. Une entrée sur NN bits permet d’indiquer le numéro (l’adresse) de la cellule à lire. Une sortie sur MM bits retourne la donnée contenue dans cette cellule. Dans une ROM, les données ne sont pas modifiables : pour une adresse précise, une ROM retourne toujours la même valeur.

Une PROM (Programmable Read-Only Memory) est une mémoire qui peut être programmée une seule fois. La figure suivante donne un schéma de principe d’une PROM à quatre bits d’adresse et quatre bits de donnée. Les portes ET et les inverseurs réalisent ici un décodeur qui permet de reconnaître toutes les combinaisons possibles des bits d’adresses. Chaque connexion configurable est réalisée à l’aide d’un fusible ou antifusible qui correspond à un bit de donnée (0 pour une connexion ouverte, 1 pour une connexion fermée).

Structure d'une PROM

Ainsi, en détournant un peu le rôle de l’entrée adresse, nous pouvons réaliser n’importe quelle fonction logique combinatoire avec NN bits en entrée et MM bits en sortie. La correspondance entre les adresses et données est exactement spécifiée par la table de vérité de la fonction à réaliser.

Depuis, les PROM ont été remplacées par des mémoires dont le contenu peut être effacé et réécrit :

Comme nous le verrons dans le chapitre sur les FPGA, le principe de construction de fonctions logiques combinatoires avec de la mémoire est largement utilisé aujourd’hui dans des circuits programmables modernes.

Exemple

La figure ci-dessous illustre l’utilisation d’une PROM pour réaliser la partie commande du robot télécommandé dont nous avons établi la table de vérité.

Synthèse de la partie commande du robot télécommandé avec une PROM

PLA (Programmable Logic Array)

Inventé en 1970, le PLA est un circuit logique programmable qui permet de réaliser un circuit directement à partir d’équations lorsqu’elles sont de la forme somme de produits. La figure ci-dessous donne un schéma de principe d’un PLA à quatre entrées et quatre sorties.

Structure d'un PLA

Un PLA possède donc deux plans de connexions configurables : un en entrée des portes ET et l’autre en entrée des portes OU. À titre de comparaison, une PROM ne permettait de configurer que le plan OU.

Alors qu’une PROM à NN bits d’adresse contient toujours 2N2^N portes ET, un PLA peut en contenir un plus petit nombre. La configuration du plan ET permet de sélectionner les termes produits nécessaires.

Exemple

La figure ci-dessous illustre l’utilisation d’un PLA pour réaliser la partie commande du robot télécommandé dont nous avons établi la table de vérité.

Synthèse de la partie commande du robot télécommandé avec un PLA

Ici, nous constatons que huit portes ET suffisent à calculer les termes produits nécessaires.

PAL (Programmable Array Logic) et GAL (Generic Array Logic)

Les premiers PAL ont été développés à la fin des années 1970. Leur architecture plus simple que celle d’un PLA permettait de créer des circuits plus petits, plus rapides et moins coûteux.

Comme avec un PLA, un PAL permet de réaliser un circuit directement à partir d’équations lorsqu’elles sont de la forme somme de produits. En revanche, dans un PAL, seul le plan ET est configurable.

La figure ci-dessous montre deux représentations du même circuit. Dans la version de gauche, nous faisons apparaître le plan ET configurable et le plan OU fixe. Dans la version de droite, nous avons démêlé les fils pour rendre le schéma plus lisible.

Structure d'un PAL

Dans un PAL, on appelle cellule logique un groupe de portes ET associées à une même porte OU. Par construction, chaque cellule est associée à une broche de sortie. De plus, dans les PAL du commerce, il y a typiquement autant de broches d’entrée que de cellules.

En plus des caractéristiques déjà présentées, les PAL permettent un rebouclage des sorties vers le plan ET, ce qui permet de réutiliser le résultat d’une équation logique dans une autre équation, de mettre des termes en facteur, etc. Les sorties peuvent être associées à des bascules D, ce qui permet de réaliser des circuits logiques séquentiels comme des compteurs ou des automates.

Développés dans les années 1980, les GAL sont une version améliorée des PAL dans lesquels la configuration peut être effacée et réécrite.

Exemple : fonction combinatoire

La figure ci-dessous illustre l’utilisation d’un PAL pour réaliser la partie commande du robot télécommandé dont nous avons établi la table de vérité.

Synthèse de la partie commande du robot télécommandé avec un PAL

Les quatre sorties sont produites par quatre cellules. Dans chaque cellule, nous n’avons utilisé que trois portes ET. Les portes ET non utilisées sont neutralisées en les connectant simultanément à une entrée et son inverse (en violet sur la figure), ce qui force leurs sorties à zéro.

Exemple : fonction séquentielle

Réalisons un compteur synchrone modulo 8 avec une entrée d’autorisation de comptage EE et une entrée de remise à zéro synchrone CLRCLR. Le fonctionnement attendu est le suivant :

répéter
    si CLR = 1 alors
        N* ← 0
    sinon, si E = 0 alors
        N* ← N
    sinon, si N < 7 alors
        N* ← N + 1
    sinon
        N* ← 0
    fin si
fin répéter

répéter
    si front-montant(CLK) alors
        N ← N*
    fin si
fin répéter

Sous forme de table de vérité, nous obtenons :

CLRCLR EE N2N_2 N1N_1 N0N_0 N2N_2^* N1N_1^* N0N_0^*
1 0 0 0
0 0 N2N_2 N1N_1 N0N_0
0 1 0 0 0 0 0 1
0 1 0 0 1 0 1 0
0 1 0 1 0 0 1 1
0 1 0 1 1 1 0 0
0 1 1 0 0 1 0 1
0 1 1 0 1 1 1 0
0 1 1 1 0 1 1 1
0 1 1 1 1 0 0 0

La mise en équations sous forme de sommes de produits donne :

N2=CLREN2+CLREN2N1N0+CLREN2N1+CLREN2N0N1=CLREN1+CLREN1N0+CLREN1N0N0=CLREN0+CLREN0\begin{aligned} N_2^* &= \overline{CLR} \cdot \overline{E} \cdot N_2 + \overline{CLR} \cdot E \cdot \overline{N_2} \cdot N_1 \cdot N_0 + \overline{CLR} \cdot E \cdot N_2 \cdot \overline{N_1} + \overline{CLR} \cdot E \cdot N_2 \cdot \overline{N_0} \\ N_1^* &= \overline{CLR} \cdot \overline{E} \cdot N_1 + \overline{CLR} \cdot E \cdot \overline{N_1} \cdot N_0 + \overline{CLR} \cdot E \cdot N_1 \cdot \overline{N_0}\\ N_0^* &= \overline{CLR} \cdot \overline{E} \cdot N_0 + \overline{CLR} \cdot E \cdot \overline{N_0} \end{aligned}

Pour réaliser ce compteur, nous pouvons utiliser trois cellules d’un PAL dont les sorties sont munies de bascules D. Les trois bascules D sont synchronisées sur les fronts montants du même signal d’horloge.

Synthèse d'un compteur synchrone avec un PAL

Sur la figure ci-dessus, nous observons que les sorties des bascules D sont rebouclées dans le plan de connexions configurables en entrée des portes ET. La partie combinatoire du circuit calcule la valeur suivante du compteur NN^* en fonction des entrées CLRCLR et EE et de la valeur courante du compteur NN.

CPLD (Complex Programmable Logic Device)

Avec l’augmentation de la complexité des systèmes électroniques, il est fréquent qu’un circuit soit conçu comme un assemblage de fonctions logiques combinatoires et séquentielles qui communiquent entre elles : opérations arithmétiques, multiplexeurs, registres, compteurs, automates, etc.

Dans les PAL et les GAL, la communication entre les cellules logiques s’effectue en rebouclant leurs sorties vers la matrice de connexions configurables, ce qui permet à une cellule de traiter des signaux en provenance d’autres cellules. Nous avons exploité cette possibilité dans l’exemple du compteur. Par construction, dans un PAL, chaque cellule a accès aux sorties de toutes les autres. On peut considérer que ce n’est pas nécessaire et que la matrice d’interconnexions devient inutilement imposante si le circuit contient un grand nombre de cellules.

En réponse à ce problème, les CPLD sont composés de blocs logiques qui communiquent entre eux à travers une matrice d’interconnexions configurables globale (figure ci-dessous). Cette matrice rassemble les signaux en provenance des broches d’entrée du circuit et des sorties de chaque bloc. Chaque bloc traite un sous-ensemble des signaux de cette matrice, sélectionnés grâce à des multiplexeurs configurables. Un sous-ensemble des sorties de chaque bloc peut être dirigé vers les broches du circuit.

Architecture simplifiée d'un CPLD

L’architecture d’un bloc diffère selon les modèles de circuits et les constructeurs. Par exemple, sur les CPLD Xilinx CoolRunner II et Altera MAX 3000A, un bloc est structuré comme un PLA un peu amélioré. Ainsi, chaque bloc possède sa propre matrice d’interconnexions permettant de configurer la fonction qu’il réalise. Parmi les améliorations typiques, on peut citer la présence de bascules D pour mémoriser les sorties des portes OU. Sur des modèles plus récents, les blocs sont composés de cellules logiques proches de celles que l’on peut rencontrer dans un FPGA.

Résumé

Un circuit programmable simple permet de réaliser des fonctions logiques combinatoires ou séquentielles à partir d’équations de la forme sommes de produits.

Tous les circuits programmables simples sont construits avec des portes logiques fixes et un réseau de connexions configurables. Les différences portent sur la capacité à configurer les connexions entre les entrées et les portes ET (PLA, PAL, GAL), et entre les portes ET et les portes OU (PROM, PLA).

Dans les circuits programmables simples, les entrées et les sorties des cellules logiques sont systématiquement reliées à des broches du circuit.

Dans les PAL et les GAL, Les sorties sont rebouclées vers la matrice de connexions configurables, ce qui permet à une cellule de traiter les signaux en provenance d’autres cellules.

Un CPLD est composé de blocs qui possèdent chacun sa propre matrice de connexions configurables et qui communiquent entre eux à travers une matrice commune.