Cours de Circuits Programmables FPGA [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Circuits Programmables FPGA

S. Haroun

Cours de Circuits Programmables FPGA Introduction Actuellement les objets techniques (O.T) utilisent de plus en plus la logique programmée (µP, Mémoire, µC…). Ces structures ont besoin de s’interfacer entre elles. Elles utilisent généralement pour réaliser ces interfaces des fonctions à base de fonctions logiques élémentaires, compteur, registres,…. Le nombre de circuits nécessaires pour remplir ces fonctions peut devenir très vite important. Pour diminuer les couts de fabrications, de développement et de maintenance, les fabricants de circuits intégrés ont donné naissance aux circuits logique programmable ou encore P.L.D (Programmable Logic Device). Ces circuits sont capables pour un O.T de réaliser plusieurs fonctions logiques dans un seul circuit. Si ces fonctions étaient réalisées à base de circuits de logiques classiques, il en faudrait plusieurs circuits. Un autre avantage, l’évolution des fonctions d’un O.T s’effectue par programmation comparée à une solution classique ou il faut refaire un circuit imprimé si on veut modifier le fonctionnement.

1. Circuits logiques programmables PLD 1.1.

Présentation

Un circuit logique programmable (PLD en anglais, Programmable Logic Device) est un circuit logique où les relations entre les entrées et les sorties du circuit ne sont pas figées mais doivent être configurées par l’utilisateur. Attention au terme programmable, il ne faut pas le prendre au sens de programme comme pour un microcontrôleur (suite séquentielle d’instructions) mais plutôt au sens programmable comme pour une PROM, l’utilisateur « programme » le comportement du circuit. En toute rigueur, on devrait d’ailleurs parler de circuits logiques à configurations multiples ou circuits logiques re-configurables plutôt que de circuits logiques programmables.

Entrées

CIRCUIT LOGIQUE PROGRAMMABLE

Sorties

Les fonctions réalisées peuvent être des fonctions logiques combinatoires ou logiques séquentielles. Ce type de circuit est de plus en plus répandu et tend à remplacer la logique câblée classique. En effet, les avantages sont nombreux : - Possibilités d’évolution et de modification des fonctions sans modification du câblage. - Simplification du câblage car des fonctions logiques complexes peuvent être rassemblées dans le même boîtier. Ce qui entraîne une diminution de la surface des circuits imprimés. Amélioration des performances C.E.M. P a g e 1 | 37

Circuits Programmables FPGA

S. Haroun

- Gain de temps en étude : on peut faire fabriquer le circuit imprimé pendant que l’on termine le développement du circuit (à condition d’avoir bien choisi le circuit logique programmable). - Possibilités (sur certains circuits) d’interfacer le circuit avec un micro-ordinateur pour réaliser des fonctions de test (Bus JTAG). Il existe plusieurs familles de circuits logiques programmables. Nous allons rapidement les passer en revue.

1.2.

Classification des P.L.D

1.2.1. Les P.A.L Signifie Programmable Array Logic, c’est-à-dire réseau logique programmable. La programmation de ces circuits s’effectue par destruction de fusibles. Une fois programmée on ne peut plus les effacer. On distingue deux sous familles : a) Les P.A.L combinatoires ou P.A.L simples. Ils sont constitués de fonctions de logique combinatoire. b) Les P.A.L à registres ou F.P.L.S Filed Programmable Logic Sequencer pour séquenceur logique programmable. Ils sont constitués de logique combinatoire et séquentielle (Registre). 1.2.2. Les P.A.L effaçables E.P.L.D E.P.L.D signifie Erasable Programmable Logic Device, c'est-à-dire circuit logique programmable et effaçable et qui sont aux P.A.L ce que sont les U.V.P.R.O.M aux P.R.O.M les E.P.L.D peuvent être effacés par U.V ou électriquement. Ils sont encore appelés P.A. C.M.O.S. 1.2.3. Les G.A.L Ce qui signifie Generic Array Logic ou encore réseau logique générique ce qui veut dire pas grand-chose mais qui sont aux P.A.L ce que sont les E.E.P.R.O.M aux P.R.O.M. Leur fonctionnement est identique aux P.A.L CMOS, ils sont programmables et effaçables électriquement. A l’origine, PAL est une appellation du constructeur MMI ( Monolithic Mémories Inc.), GAL est une appellation déposée par la société Lattice. 1.2.4. Les C.P.L.D Ce qui signifie Complex Programmable Logic Device, ces circuits sont composés de plusieurs P.A.L élémentaires (par exemple l’équivalent de P.A.L 22V10) reliés entre eux avec une zone d’interconnexion. Grace à cette architecture, ils permettent d’atteindre des vitesses de fonctionnement élevées (plusieurs centaines de MHZ). 1.2.5. Les L.C.A & F.P.G.A à anti-fusible a) Les L.C.A Ce qui signifie Logic Cell Array ou encore réseau de cellules logiques. Ces circuits sont composés de bloc logiques élémentaires de 2000 à 10000 portes que l’utilisateur peut interconnecter. b) Les F.P.G.A à anti-fusibles

Sont identiques aux L.C.A sauf qu’ils permettent une plus grande intégration de portes et ils ne sont pas effaçables électriquement. Le nom anti-fusible vient de la programmation des connexions qui s’effectue par fermeture de circuits, comparé aux fusibles ou l’on ouvre les circuits.

P a g e 2 | 37

Circuits Programmables FPGA

1.3.

S. Haroun

Principe des PLD : les PAL

Etant donné que toute fonction logique peut être exprimée comme une somme de produits logiques (mintermes), la structure de base des premiers circuits programmables est formée par une matrice ET (AND) suivie d'une matrice OU (OR). L'une des deux matrices, ou les deux, est programmable.

Une matrice programmable est un ensemble de portes logiques dont les entrées sont connectées aux variables du systèmes, vraies et inversées, au moyen d'un réseau de fusibles. Lorsqu'un fusible est brûlé, la connexion respective entre la variable et la porte logique disparaît. La programmation du système se fait en choisissant les fusibles que l'on laisse et que l'on brûle.

P a g e 3 | 37

Circuits Programmables FPGA

S. Haroun

Selon le caractère programmable des matrices ET et OU, il existe deux types de circuits logiques programmables : o PAL (Programmable Array Logic) : matrice ET programmable suivie d'une matrice OU fixe. o PLA (Programmable Logic Array) : les deux matrices ET et OU sont programmables. Les circuits PALs sont les PLDs les plus courants : les PLAs sont très peu utilisés à cause de leur nombre élevé de fusibles, ce qui amène une grande consommation de puissance et de long délai.

1.4.

Représentation et symbolisation

La figure ci-dessous représente la structure simplifiée d'un PAL (2 entrées et 1 sortie).

A partir de cette structure de base il va être possible de réaliser de nombreuses fonctions logiques. La programmation va constituer à détruire les fusibles pour obtenir les fonctions désirées, en sachant que lors de l’achat d’un P.A.L tous les fusibles ne sont pas détruits. Cette représentation schématique demande beaucoup d'espace pour représenter un PAL en entier. Les industriels ont adopté la représentation symbolique suivante :

D'où les représentations symboliques du PAL de 2 entrées et 1 sortie :

P a g e 4 | 37

Circuits Programmables FPGA

S. Haroun

Exemple

1.5.

Structure générale d'un PAL

Tout P.A.L est constitué : -

D’entrées (Input) : de I1 à In avec 8 < n < 20

-

De sorties (Output) Ou d’entrées/sorties (I/O) de type trois états : de O1 à On ou IO1 à IOn (8 < n < 15). On peut trouver aussi :

-

Une entrée d’horloge (Clock) : CLK ou Clock Une entrée de validation des sorties trois états : OE (Output Enable) ou Enable. Une entrée de remise à zéro des registres : RESET

D’un point de vue fonctionnel un P.A.L est constitué d’une zone d’entrée de fusibles ou matrice de programmation et une structure de sortie non programmable déterminant le type de circuit.

P a g e 5 | 37

Circuits Programmables FPGA

S. Haroun

1.5.1. Différents types d'entrées / sorties On distingue 3 principes utilisés pour les sorties. Selon le modèle, un ou plusieurs types de sorties peuvent être utilisés sur un même PAL. a) Entrées / Sorties combinatoires :

Il existe trois types : -

H (High) porte ET suivit d’une porte OU, sortie active à l’état haut L (Low) porte ET suivit d’une porte NON OU sortie active à l’état bas C (Combinée) programmable en type Hou L.

Les deux premiers types de circuits correspondent à des circuits combinatoires classiques. Sur le troisième type de circuits, il y a : - possibilité de mettre la sortie dans l’état haute impédance. - possibilité de transformer une sortie en entrée. - possibilité de relire une sortie pour modifier l’entrée. b) Sorties à registres (Séquentielle) Ces sorties utilisent une bascule D qui permet la logique séquentielle mais elles ne peuvent pas être utilisées comme entrées. Il existe trois types : 

R : Registre

P a g e 6 | 37

Circuits Programmables FPGA

S. Haroun

Ces circuits sont composés de bascule D, les sorties des bascules sont de type trois états contrôlé par un signal de validation Enable ou OE, et une horloge (Clock) est commune à toutes les bascules. 

X : Ou exclusif et registre



RA : Registre Asynchrone

c) Entrées / Sorties des PAL versatiles (VPAL): Ce type de structure représente les P.A.L les plus évolués, car les structures de sorties dite versatile permettent de configurer (par programmation) le mode d'utilisation de la broche de sortie pour réaliser n’importe laquelle des 4 sorties précédentes. elle-ci est basée sur un multiplexeur de sortie, commandé par les bits S1 S0.

Ce qui donne :

P a g e 7 | 37

Circuits Programmables FPGA

S. Haroun

2. Circuits logiques programmables complexes (CPLD) 2.1.

Présentation

Les PLA, PAL et GAL sont parfois appelés des circuits logiques programmable simples (Simple Programmable Logic Devices – SPLD). Les CPLD (Complex Programmable Logic Devices) sont donc une extension naturelle des circuits PAL. Un CPLD incorpore plusieurs PAL ou PLA sur une seule puce avec un réseau d’interconnexions. Ce réseau permet de relier les pattes de la puce à différents blocs internes et de relier les blocs entre eux. Les CPLD peuvent contenir entre 100 et 100 000 portes logiques et entre 16 et 1000 bascules voir plus.

2.2.

Structure générale d’un CPLD

Le diagramme de la figure ci-dessous montre l'architecture interne d'un CPLD typique. Bien que chaque fabricant a sa propre variante, les CPLDs présentent généralement un schéma fonctionnel identique constitué de blocs logique (Block Function), de blocs entrée / sortie et des matrices d’interconnexion. Les dispositifs sont programmés à l'aide d'éléments programmables qui, selon la technologie du fabricant, peuvent être des cellules EPROM, des cellules EEPROM ou des cellules Flash EPROM.

Architecture d’un CPLD Xilinx. 2.2.1. Blocs Logique (Function Blocks), Un bloc logique est constitué de plusieurs Macro-cellule qui permet, par programmation, de réaliser de nombreuses fonctions logiques combinatoires ou séquentielles. Comme dans le cas des PLD simples, la macro-cellule est constitué d’un plan AND qui peut accepter des entrées à partir des blocs d'E / S, d'autres blocs logiques ou des retours du même bloc logique. Les termes résultants sont additionnés ensemble en utilisant un nombre déterminé de portes OR. Les termes sont sélectionnés par la suite via un large multiplexeur. Les sorties du multiplexeur peuvent alors être envoyées directement du bloc ou via une bascule cadencée (par une horloge). Habituellement, les blocs de fonction sont conçus pour être similaires aux architectures PAL existantes, afin que le concepteur puisse utiliser des outils familiers ou même des conceptions plus anciennes sans les modifier. 2.2.2. I/O Blocks Le bloc d'E / S est utilisé pour envoyer des signaux aux broches du périphérique CPLD aux niveaux de tension appropriés avec le courant approprié. Habituellement, une bascule est incluse, comme indiqué sur la P a g e 8 | 37

Circuits Programmables FPGA

S. Haroun

figure. Ceci est effectué sur les sorties afin que les signaux synchronisés puissent être émis directement vers les broches sans subir de retard significatif. De plus, une certaine quantité de logique est incluse dans le bloc d'E / S pour ajouter des ressources et fonctionnalités supplémentaires au périphérique. 2.2.3. Matrice d’interconnexion L'interconnexion dans le CPLD se fait par une grande matrice de commutateurs programmables qui permet aux signaux provenant de toutes les parties du périphérique de parvenir à toutes les autres parties. Bien qu'aucun commutateur ne puisse connecter tous les blocs de fonction internes à tous les autres blocs de fonction, la flexibilité est suffisante pour permettre de nombreuses combinaisons de connexions. 2.2.4. Les Eléments Programmables Chaque fabricant utilise une différente technologie pour implémenter les éléments programmables d'un CPLD. Les technologies courantes sont les mémoires EPROM (EPROM), les mémoires PROM effaçables électriquement (EEPROM) et les EPROM Flash. Ces technologies sont similaires aux technologies utilisées pour les dispositifs programmables les plus simples, à savoir les PROM, ou à des versions de nouvelle génération de celles-ci.

3. Les F.P.G.A (Fields Programmable Gate Array) 3.1.

Présentation

Lancé sur le marché en 1984 par la firme XILINX, le FPGA (Field Programmable Logic Device) est un réseau de cellules logiques programmable. Actuellement, les deux plus grands constructeurs des FPGA sont XILINX et ALTERA. Tous les FPGA sont fabriqués en technologie CMOS, les plus gros d'entre eux intègrent jusqu'à 1000000 portes logiques utilisables. Il faut noter que la surface de silicium d'un FPGA est utilisée au 2/3 pour les interconnexions et au 1/3 pour les fonctions logiques. Le FPGA est composés de blocs logiques élémentaires (plusieurs milliers de portes) qui peuvent être interconnectés. Les cellules de base (blocs logiques élémentaires) d'un FPGA sont disposées en rangées et en colonnes. Des lignes d'interconnexions programmables traversent le circuit, horizontalement et verticalement, entre les diverses cellules. Ces lignes d'interconnexions permettent de relier les cellules entre elles, et avec les plots d'entrées/sorties.

3.2.

Différents types de FPGA

Il existe deux types de FPGA : les FPGA non reprogrammables (OTP) et les FPGA reprogrammables (SRAM). 3.2.1. Les FPGA de Type OTP : Commercialisés à partir de 1990, ce FPGA, programmable une seule fois, est basé sur la technologie des interconnexions à anti-fusibles (équivalent à un condensateur que l’on peut « claquer » pour réaliser une liaison). Les lignes d'interconnexions programmables traversent le circuit, horizontalement et verticalement, entre les diverses cellules. La technologie à anti-fusibles permet de réduire considérablement la surface prise par les interconnexions programmables, par rapport aux interconnexions à base de SRAM.

P a g e 9 | 37

Circuits Programmables FPGA

S. Haroun

3.2.2. Les FPGA de type SRAM : Chaque connexion est réalisée par une matrice de transistor MOS. Ces circuits sont volatiles. A chaque mise sous tension, ils doivent être reconfigurés. Les FPGA de type SRAM sont toujours accompagnés d’une mémoire de configuration (PROM ou EEPROM) qui est lue automatiquement par le FPGA à la mise sous tension. Le FPGA SRAM est utilisé pour des prototypes ou des petites séries, alors que le FPGA à anti-fusibles est destiné pour des plus grandes séries, en raison de son coût de fabrication moins élevé.

3.3.

Structure d’un FPGA

Un FPGA est composé à la base de :   

Un réseau de blocs logiques programmable (Configurable Logic Block, CLB) : chaque bloc pouvant réaliser des fonctions complexes de plusieurs variables, et comportant des éléments à mémoire ; Un réseau d’interconnexions programmables entre les blocs ; Des blocs spéciaux d’entrée et de sortie avec le monde extérieur (Input/Output Block – IOB).

Structure d’une FPGA 3.3.1. Blocs de logique programmable Les FPGAs se distinguent des CPLDs par le fait que les CLBs des FPGAs sont beaucoup plus nombreux et plus simples que les blocs fonctionnels des CPLDs. Comme ils sont présents en grand nombre sur une même puce (de plusieurs centaines à plusieurs milliers), ils favorisent la réalisation et l’intégration d’une multitude de circuits indépendants. Il y a deux catégories de blocs de logique programmable : ceux basés sur les multiplexeurs et ceux basés sur les tables de conversion (LUT : Look Up Table).  Un multiplexeur avec n signaux de contrôle peut réaliser toute fonction booléenne à n + 1 variables sans l’ajout d’autres portes logiques. Pour ce faire, on exploite le fait qu’un multiplexeur génère effectivement tous les mintermes des signaux de contrôle S. Il ne reste qu’à spécifier la valeur qu’on veut propager quand un de ces mintermes est vrai.  Les CLBs basés sur les tables de conversion (LUT) utilisent de petites mémoires programmables au lieu de multiplexeurs. Cette approche est similaire à l’approche par multiplexeurs, mais en supposant que

P a g e 10 | 37

Circuits Programmables FPGA

S. Haroun

les entrées du multiplexeur ne peuvent être que des constantes. Effectivement, il faut un multiplexeur deux fois plus gros pour réaliser la même fonction, mais le routage du circuit est plus simple. Look Up Table (LUT) : la LUT permet de stoker la table de vérité de la fonction combinatoire à implémenter dans la cellule RAM.

Exemple descriptif d’un LUT Les FPGAs de la compagnie Altera étaient à l’origine basés sur une approche par multiplexeurs, alors que ceux de Xilinx utilisaient des tables de conversion. La plupart des FPGAs récents utilisent des tables de conversion. Le CLB est généralement composé de :  Deux tables de conversion (LUT) programmables à 4 entrées chacune, F et G, qui sont effectivement des mémoires de 16 bits chacune ;  Un multiplexeur ‘H’ et son entrée associée H1 qui permet de choisir la sortie de l’une des deux tables de conversion ;  Quatre multiplexeurs dont les signaux de contrôle S0 à S3 sont programmables ; et,  Deux éléments à mémoire (bascule D) permet la réalisation de fonctions logiques séquentielles.

Bloc de logique programmable simplifié – Xilinx P a g e 11 | 37

Circuits Programmables FPGA

S. Haroun

3.3.2. Blocs d’E/S Configurables Un bloc d'E / S configurable sert à amener des signaux sur la puce et les renvoyer. Il se compose d'un registre tampon (buffer) d'entrée et d'un registre tampon (buffer) de sortie avec des sorties à trois états contrôlable et à collecteur ouvert. Il y a généralement des résistances de pull up sur les sorties. La polarité de la sortie peut généralement être programmée pour une sortie active à l’état haute ou à l’état bas. De plus, il y a souvent une bascule sur les sorties afin que les signaux synchronisés puissent être émis directement vers les broches sans subir de retard significatif.

Blocs d’E/S Configurables 3.3.3. Réseau d’interconnexions programmable L'interconnexion d'un FPGA est très différente de celle d'un CPLD. Comme le montre la figure ci-dessous, il existe de longues lignes qui peuvent être utilisées pour connecter des CLB critiques physiquement éloignés les uns des autres sur la puce sans induire beaucoup de retard. Ils peuvent également être utilisés comme bus dans la puce. Il existe également des lignes courtes utilisées pour connecter des CLB individuels physiquement proches les uns des autres. Il existe souvent une ou plusieurs matrices de commutation, permettant de relier ces lignes longues et courtes de manière spécifique. Des commutateurs programmables à l'intérieur de la puce permettent la connexion de CLB pour interconnecter des lignes et des lignes d'interconnexion entre elles et avec la matrice de commutateurs.

P a g e 12 | 37

Circuits Programmables FPGA

S. Haroun

3.3.4. Autres composants sur les FPGA a) Blocs de mémoire intégrée Les blocs de mémoire ont été parmi les premiers modules ajoutés à cause du grand besoin en mémoire de la plupart des applications. L’avantage important à intégrer des blocs de mémoire près de logique configurable est la réduction significative des délais de propagation et la possibilité de créer des canaux de communication parallèle très larges. La Figure ci-dessous illustre l’intégration de blocs de mémoire sous la forme d’une colonne entre les CLBs d’un FPGA. La quantité de mémoire présente dans les blocs de RAM varie à travers les différentes familles de FPGAs, mais on peut retrouver jusqu’à 10 Méga bits de mémoire dans les plus gros et plus récents modèles.

Mémoire RAM intégrée b) Fonctions arithmétiques avancées Les fabricants de FPGAs ont ajouté à leurs architectures des blocs spéciaux pour réaliser des opérations de multiplication. Les multiplicateurs sont en général disposés près des blocs de mémoire RAM pour des raisons d’efficacité de routage des signaux et de disposition des ressources du FPGA sur une puce. Pour les applications devant traiter des opérandes plus larges, il est possible de regrouper plusieurs multiplicateurs. Le nombre de multiplicateurs varie, mais on en retrouve facilement des dizaines même sur les FPGAs les plus modestes.

Multiplicateurs intégrés

multiplication-accumulation

P a g e 13 | 37

Circuits Programmables FPGA

S. Haroun

Une autre fonction populaire est la multiplication-accumulation (Multiply-Accumulate – MAC), qui consiste à accumuler le produit de plusieurs nombres. Cette opération est utilisée entre autres pour le calcul du produit scalaire. Afin d’accélérer cette opération, plusieurs fabricants intègrent des blocs MAC à leurs FPGAs. c) Microprocesseurs fixes Les fabricants de FPGA intègrent des processeurs fixes (hard) à plusieurs familles de FPGAs. La figure ci-dessous illustre deux variations, avec un et quatre processeurs fixes. En intégrant ainsi un ou plusieurs microprocesseurs à un FPGA, on obtient un tissu de calcul d’une puissance très intéressante.

(a) One embedded core

(b) Four embedded cores Processeur intégré

Les microprocesseurs intégrés ne sont pas réalisés à l’aide de blocs de logique ou de mémoire du FPGA. Ce sont plutôt des régions du puce optimisé comme si le microprocesseur était réalisé par lui-même dans un circuit intégré. En général, les constructeurs des FPGAs utilisent des processeurs populaires dans l’industrie.

P a g e 14 | 37

Circuits Programmables FPGA

S. Haroun

4. Le langage VHDL 4.1.

Introduction

VHDL est l’acronyme de VHSIC HDL (Very High Speed Integrated Circuit Hardware Description Language), c’est un langage de description matérielle qui a été créé dans les années 1980 à la demande du département de la défense américaine (DOD). La première version du VHDL accessible au public a été publiée en 1985, et a fait l’objet d’une norme internationale en 1986 (IEEE 1076) par l’institut des ingénieurs électriciens et électroniciens (IEEE). Révisée en 1993 (IEEE 1164) pour supprimer quelques ambiguïtés et améliorer la portabilité du langage, cette norme est vite devenue un standard en matière d'outils de description de fonctions logiques. De nos jours, le langage VHDL devient un outil indispensable pour la conception des systèmes électroniques intégrés (ASIC), il est proposé par la grande majorité des sociétés de développement et la programmation des composants programmables du type PLD, CPLD et FPGA. Le VHDL es utilisé aussi pour concevoir des modèles de simulations numériques ou des bancs de tests. Avec un langage de description matérielle et un FPGA (Field Programmable Gate Array), un concepteur peut développer rapidement et simuler un circuit numérique sophistiqué, de l’implémenter sur une carte de prototypage, et de vérifier son fonctionnement.

4.2.

Structure d’une description VHDL

4.2.1. Entité et architecture

L’accès aux bibliothèques

En VHDL, une structure logique est décrite à l'aide d'une entité et d'une architecture de la façon suivante :

library nom de la bibliothèque ; use permet l’accès aux fonctions de la bibliothèque all ;

La déclaration d’entité

entity Nom_de_l’entité is generic déclaration des paramètres (éventuellement) ; port description des E/S de la structure en explicitant pour chacune d’entre elles, le nom, la direction ou mode et le type ; end Nom_de_l’entité ;

L’architecture

architecture Nom_de_l’architecture of Nom_de_l’entité is zone de déclaration optionnelle begin description de la structure logique end Nom_de_l’architecture ;

P a g e 15 | 37

Circuits Programmables FPGA

S. Haroun



L'entité donne les informations concernant les signaux d'entrées et de sorties de la structure (schéma fonctionnel) ainsi que leurs noms et leurs types.



L'architecture décrit le comportement de l'entité (Schéma structurel).



Il est possible de créer plusieurs architectures pour une même entité, mais pas le contraire. Chacune de ces architectures décrira l'entité de façon différente.

Exemple 1 Donner la discription VHDL de circuit intégré 7400. Ce dernier est constitué de quatre portes logiques NAND à deux entrées.

Circuit intégré 7400 (Vue externe (a) et vue interne (b)).

Réponse La description du circuit intégré 7400 en langage VHDL est donnée par le listing suivant :

Les deux premières lignes définissent les bibliothèques et les paquetages dont nous avons besoin pour la conception de notre circuit. Dans notre code, on fait appel au paquetage std_logic_1164 qui se trouve dans la bibliothèque IEEE. P a g e 16 | 37

Circuits Programmables FPGA

S. Haroun

a) La déclaration de l’entité

L’entité correspond au circuit vu de l’extérieur, et comprend essentiellement les entrées-sorties du circuit. La première ligne d’une entité (ligne 4 du code) indique le nom du circuit, ‘’CI_7400’’dans notre exemple. Les entrées - sorties du circuit sont des ports qui doivent avoir le format suivant : NOM_DU_PORT : MODE TYPE ;

Le MODE d’un port peut être : - IN s’il s’agit d’une entrée - OUT s’il s’agit d’une sortie - INOUT s’il s’agit d’une entrée - sortie (port bidirectionnel) - BUFFER s’il s’agit d’une sortie rebouclée en entrée

Pour le TYPE du port, il faut savoir que le langage VHDL est un langage typé, c’est-à-dire que chaque objet manipulé doit avoir un type de données. Dans l’exemple précédent, le type du port utilisé est STD_LOGIC. Il est défini dans le paquetage STD_LOGIC_1164. Si le type du signal utilisé est un bus de données, on utilise alors le type STD_LOGIC_VECTOR qui est défini comme étant un tableau unidimensionnel d’éléments de type STD_LOGIC. Exemple : Soit le signal d’entré A de 8 bits, on le déclarera en VHDL comme suit : A : in std_logic_vector ( 7 downto 0 ) ; Ou bien : A : in std_logic_vector (0 to 7); La différence entre les deux expressions est l’indice du MSB et du LSB. Dans la première expression, l’indice du MSB est A(7), celui du LSB est A(0). Dans la deuxième expression, l’indice du MSB est A(0), celui du LSB est A(7).

P a g e 17 | 37

Circuits Programmables FPGA

S. Haroun

b) La déclaration de l’architecture

L’architecture du circuit correspond au circuit vu de l’intérieur, et comprend essentiellement la description des opérations du circuit. Architecture NOM_DE_L’ARCHITECTURE of NOM_DE_L’ENTITE is

Dans notre exemple, le nom de l’architecture est behavioral. La description principale d’une architecture comprend toujours les deux mots réservés ‘’BEGIN’’ et ‘’END’’, les expressions des opérations du circuit se trouvent entre elles. Ces expressions sont des instructions qui s’exécutent en concurrence contrairement à un langage informatique comme le langage C, où les instructions s’exécutent séquentiellement. Exemple 2

1. Quel est le nom des bibliothèques utilisées ? 2. Quelles sont les entrées et les sorties de la fonction ? 3. Représenter le schéma fonctionnel de la fonction. 4. Quel est le nom de l’entité ? 5. Quel est le nom de l’architecture ? 6. Représenter le schéma structurel de la fonction. Réponse 2.1. Les bibliothèques utilisées sont ieee.std_logic_1164, work.std_arith. 2.2. Les entrées de la fonction sont A, B, la sortie est S. A

2.3. Schéma fonctionnel de la fonction.

B

P a g e 18 | 37

PORTE

S

Circuits Programmables FPGA

S. Haroun

2.4. Le nom de l’entité est PORTE.

A

2.5. Le nom de l’architecture est ARCH_PORTE. B

2.6. Schéma structurel de la fonction.

&

S

Exemple 3 : Comparateur 1 bit Les entrées du comparateur sont : A, B. Les sorties du comparateur sont : EG (égale), PG (plus grand), PP (plus petit). Table de vérité du et équations booléennes du comparateur :

Le schéma du circuit du comparateur :

La description du comparateur en langage VHDL :

P a g e 19 | 37

Circuits Programmables FPGA

S. Haroun

Exemple 4 Additionneur complet 1 bit : Les entrées de l’additionneur sont : A, B, Ri. Les sorties de l’additionneur sont : S (somme), Rout (retenue). Table de vérité et équations booléennes de l’additionneur :

Le code VHDL de l’additionneur :



Les signaux intermédiaires :

Les signaux intermédiaires correspondent aux connexions qui se trouvent à l’intérieur d’un circuit. Pour bien comprendre la notion et l’utilisation de ces signaux, prenons l’exemple de notre additionneur complet 1 bit. On peut le concevoir à partir de deux demi-additionneurs et une porte logique OR. Le schéma du circuit de l’additionneur :

P a g e 20 | 37

Circuits Programmables FPGA

S. Haroun

Le code VHDL d’un additionneur complet 1 bit en utilisant les signaux intermédiaires devient :

4.3.

Les objets et leurs types

4.3.1. Les principaux objets manipulés Un objet dans un programme VHDL appartient à l’une des quatre classes connues du langage, classe qui est précisée lors de la déclaration (obligatoire) de l’objet. Plusieurs objets de la même classe et du même type peuvent être déclarés simultanément au moyen d’une liste d’identificateurs. On présentera ici trois objets à savoir : les constantes, les signaux, et les variables. a) Les constantes Une constante peut être assimilée à un signal interne (au circuit) auquel est associée une valeur fixe et définitive (non modifiables au cours de l’exécution d’un programme). Elles permettent d'apporter une plus grande lisibilité du code. La constante peut être de tout type. Exemples :

Elles sont généralement initialisées au moment de leur déclaration. Cette déclaration se situe dans la partie déclarative d’une entité, d’une architecture, d’un processus, d’un bloc, d’un paquetage ou d’un sousprogramme.

b) Les Signaux En VHDL, Les signaux sont spécifiques à la description matérielle, c.-à-d. le signal est une information qui existe physiquement dans le circuit, ou ils représentent les fils d’interconnexion entre les différents composants sur la carte. P a g e 21 | 37

Circuits Programmables FPGA

S. Haroun

Exemple : Un signal se déclare dans l’univers concurrent : zones déclaratives d’une architecture (le cas le plus fréquent), d’une entité, d’un bloc ou d’un paquetage.

c) Les variables Une variable est un objet capable de retenir une valeur pendant une durée limitée. Les variables apportent une aide précieuse dans les processus de description et permettent de décrire la nature d'évolution des signaux dans des structures de programmation séquentielles, conditionnelles ou répétitives (elles ne peuvent être employées qu’à l’intérieur d’un process). Par opposition à un signal, une variable n’est pas une liaison physique, et n’est pas une information synthétisable (elle ne laisse aucune trace après synthèse). Exemple : Les variables doivent toujours être déclarées, dans la zone déclarative des modules séquentiels d’un programme i.e. les processus ou les sous-programmes (fonctions ou procédures). Ci-dessous deux exemples de déclarations de variables faite dans une fonction et dans un processus :

4.3.2. Les Types et sous-types de données Comme la plupart des langages structurés, le VHDL impose de typer les données à manipuler. Tout objet utilisé dans une description doit au préalable être déclaré et associé à un type. Les types couramment utilisés sont les types scalaires, composites et fichiers. L’utilisation des types accès et protégés est marginale. A partir de types de base, le langage prévoit de définir des sous-types. a) Les types « scalaires » Les types scalaires dont la valeur est composée d'un seul élément sont classés en type entier (Integer), flottant (Real), physique (Time), et énumérés. 

Les types entiers (Integer) : Ces des types dont les valeurs sont des entiers. La norme VHDL précise que cet intervalle doit au minimum aller de – (231-1) à (231-1). Ce type contient deux sous-types :



Les types Réels (REAL) : Ce sont des types dont les valeurs sont des réels. La norme VHDL précise que cet intervalle doit au minimum aller de – (1038) à (1038). Les types physiques : Le seul type physique prédéfini est le type Time. Un type physique est défini par son intervalle de variation, par son unité de base et par des unités multiples éventuelles. La plage



P a g e 22 | 37

Circuits Programmables FPGA

S. Haroun

de variation d’un Time dépend de la machine sur laquelle est compilée la description VHDL. Quelle que soit la machine, elle inclue la plage –2147483647 à +2147483647. La déclaration du type time se trouve dans le package standard.



Les types énumérés : les variables et signaux de types énumérés prennent un nombre fini et restreint de valeurs parfaitement connues c.-à-d. les valeurs qu’il peut prendre sont énumérées. Les types prédéfinis dans le package standard sont les types Boolean, Bit, Character et Severity_level. -

Type BOOLEAN : Défini comme (False, True).

-

Type BIT : Une grandeur de type BIT peut prendre deux valeurs : ( '0' , '1' ).

-

Type STD_LOGIC : possède neuf états (‘0’, ‘1’, ‘Z’, ‘U’, ‘X’, ‘W’, ‘L’, ‘H’, ‘-‘). Les valeurs ‘0’ et ‘L’ sont équivalentes pour la synthèse, tout comme les valeurs ‘1’ et ‘H’. Les valeurs ‘U’, ‘X’ et ‘W’ ne sont utilisables que pour la simulation d’un design.

-

Type CHARACTER : Les types de données « caractère » en VHDL sont similaires à ceux d’un langage de programmation de haut niveau, ils peuvent être utilisés pour représenter une chaine de caractères (…,’A’, ‘B’, ‘C’,…’0’, ‘1’, ‘2’,…).

-

Type SEVERITY_LEVEL : Ce type de données est particulier, il possède quatre valeurs possibles : (‘NOTE’, ‘WARNING’, ‘ERROR’, ‘FAILURE’) Il est très utile d’utiliser ce type de données lors des simulations, par exemple, pour demander au simulateur d’arrêter la simulation lorsqu’il détecte une erreur.

b) Les types « composés » Le type « composés » représente un ensemble de valeurs, il est divisé en deux classes : 

Les types « composés » tableaux (ARRAY) : Un objet de type tableau (ARRAY) est un ensemble d’un ou de plusieurs éléments du même type. On accède à l’élément d’un tableau par un ou plusieurs indices. Exemple d’une déclaration d’un tableau :

P a g e 23 | 37

Circuits Programmables FPGA

S. Haroun

La déclaration du tableau ci-dessus indique que le tableau dont le nom est « Mon_Tableau » est constitué de 16 éléments, où chaque élément est du type std_logic. On peut associer un objet de type « Mon_Tableau » comme suit :

Remarque : Généralement les tableaux à deux dimensions (matrices) ne sont pas supportés par les outils de synthèse, mais ils sont utiles pour décrire les tests de stimuli, les éléments de mémoires, ou autre donnée qui requièrent une forme de tableaux à deux dimensions. Quelques exemples de déclarations des tableaux unidimensionnels et bidimensionnels :



Les types « composés » articles (RECORD) : Un objet de type article (RECORD) est un ensemble d’éléments appelé champs, qui peuvent être de même type ou de types différents. Exemple d’une déclaration d’un article :

L’article ci-dessus dont le nom est « Mon_Article » est constitué de trois champs (clock, data et x). c) Les types « accès » (Access) : Ces types fournissent des références vers des objets de la même manière que les pointeurs qui fournissent des références vers des données dans un langage de programmation de haut niveau. d) Les types « fichiers » (File) : Ce sont des objets de référence qui contiennent une séquence de valeurs.  Les sous-types Les valeurs de chaque type de données se trouvent dans un intervalle défini, par exemple l’intervalle de type de données entier (INTEGER) est [-2147483647, +2147483647]. Le langage VHDL nous permet de spécifier un sous-ensemble de valeurs d’un type, par exemple la déclaration suivante crée un objet de type entier qui ne peut avoir que des valeurs positives allant de 0 à 255:

Remarquez la déclaration « range », cette dernière permet de vérifier lors de la synthèse et de la simulation que la valeur d’un objet n’est pas en dehors de son intervalle de variation. On peut déclarer un sous-type d’un type de données, par exemple la déclaration ci-dessous crée un soustype (Short) du type scalaire entier (Integer) avec un intervalle limité :

P a g e 24 | 37

Circuits Programmables FPGA

4.4.

S. Haroun

Les Operateurs et les attributs

Le langage VHDL nous permet de faire plusieurs opérations sur les objets, suivant leurs types et le type du résultat de l’opération. 4.4.1. Les opérations logiques : Les opérations logiques sont utilisées pour décrire des opérations booléennes, ou pour effectuer des opérations au niveau des bits.

4.4.2. Les opérations relationnelles : Les opérations relationnelles testent les valeurs relatives de types scalaires. Le résultat d’une opération relationnelle est toujours une valeur booléenne TRUE ou FALSE.

4.4.3. Les opérations d’addition : Les opérations d’addition peuvent être utilisées pour décrire des fonctions arithmétiques ou des opérations de concaténations.

4.4.4. Les opérations de multiplication : Les opérations de multiplication peuvent être utilisées pour décrire des fonctions arithmétiques ou de types numériques.

4.4.5. Les opérations de signe : Les opérations de signes sont utilisées pour spécifier le signe (positif ou négatif).

4.4.6. Les opérations de décalage : Les opérations de décalage permettent de faire des opérations de décalage ou de rotations au niveau des bits ou d’objet de type booléens.

P a g e 25 | 37

Circuits Programmables FPGA

S. Haroun

4.4.7. Autre opérations : Les opérations d’exponentiation, ou de valeur absolue peuvent être appliquées à des objets de type numérique.

4.4.8. Les attributs : Un attribut est une caractéristique du VHDL qui permet d’extraire des informations supplémentaires à propos d’un type de données ou d’un signal. Il y’a deux classes d’attributs : les attributs prédéfinis et les attributs utilisateurs. Utilisation : on spécifie le nom du type ou du signal suivi d'une apostrophe puis du nom de l'attribut affecté d'éventuelles grandeurs d'entrées. a) Attributs associés aux types Pour illustrer cette classe d'attributs, les types énumérés suivants seront utilisés :

Remarque : on définit la position d'une valeur valide pour un type par la valeur 0 pour la grandeur définie à gauche. La seconde valeur possède la position 1 . . .  Cas des types et sous-types énumérés

 Cas de tous les types et sous-types scalaires

Il existe des attributs supplémentaires permettant de retrouver les caractéristiques d'un type vectoriel (ou d'un tableau de dimension x d'une façon générale). Pour les tableaux, les attributs left, right, high et low existent aussi mais renvoie un indice (position dans le tableau).

P a g e 26 | 37

Circuits Programmables FPGA

S. Haroun

Note : ce dernier tableau utilise pour les exemples le tableau TAB_ENTIER de dimension 1 seulement ce qui explique que la valeur donnée à x est toujours 1. b) Attributs associés à un signal Les attributs associés à un signal permettent de mieux connaître la façon dont évolue ce signal (exemple : détection de front montant ou descendant, changement d'état . . . ). Afin de comprendre le fonctionnement de ces attributs, il est nécessaire de préciser ce qu'est une Transaction. Définition : une transaction sur un signal est une opération modifiant ou affirmant la valeur de ce signal pendant le cycle de simulation en cours.

P a g e 27 | 37

Circuits Programmables FPGA

4.5.

S. Haroun

Assignation conditionnelle et assignation sélectionnée des signaux

Les instructions d’assignation conditionnelles et d’assignation sélectionnées aux signaux sont exécutées en concurrence. Leurs comportements sont similaires aux instructions IF et CASE qu’on verra par la suite, qui ont quant à eux, des instructions qui s’exécutent séquentiellement. 4.5.1. Assignation conditionnelle : Le format d’une assignation conditionnelle des signaux est le suivant : Signal_1