Vous êtes sur la page 1sur 178

Circuits numriques et synthse logique

Circuits numriques et synthse logique, un outil : VHDL

Jacques WEBER
Matre de confrences lIUT de CACHAN

Maurice MEAUDRE
Chef de travaux lIUT de CACHAN

Circuits numriques et synthse logique

Avant-propos
Au cours des quinze dernires annes, les mthodes de conception des fonctions numriques ont subi une volution importante. Dans les annes soixante-dix, la majorit des applications de la logique cble taient construites autour de circuits intgrs standard, souvent pris dans la famille TTL. Au dbut des annes quatre-vingt apparurent, paralllement, les premiers circuits programmables par lutilisateur du ct des circuits simples et les circuits intgrs spcifiques (ASICs) pour les fonctions complexes fabriques en grande srie. La complexit de ces derniers a ncessit la cration doutils logiciels de haut niveau qui sont la description structurelle (schmas au niveau des portes lmentaires) ce que les langages volus sont au langage machine dans le domaine de la programmation. A lheure actuelle, lcart de complexit entre circuits programmables et ASICs sest restreint : on trouve une gamme continue de circuits qui vont des hritiers des premiers PALs (programmable array logic), quivalents de quelques centaines de portes, des FPGAs (Field programmable gate array) ou des LCAs (Logic cell array) de quelques dizaines de milliers de portes quivalentes. Les outils daide la conception se sont unifis ; un mme langage, VHDL par exemple, peut tre employ quels que soient les circuits utiliss, des PALs aux ASICs. Circuits numriques et synthse logique, un outil : VHDL est lun des rsultats de la rflexion faite lIUT de CACHAN sur lvolution du contenu de lenseignement de llectronique numrique, pour proposer aux tudiants une formation en accord avec les mthodes de conceptions actuelles. La gageure tait dviter le pige du cours VHDL , impensable ce niveau de formation, compte tenu du volume horaire imparti (une centaine dheures, travaux dapplications compris). Nous avons dcid de nous restreindre un sous-ensemble cohrent de VHDL, qui soit strictement synthtisable. Ce choix tant fait, nous avons men en synergie lapprentissage des bases de la logique et celui des concepts des langages de description de haut niveau. Chaque lment nouveau, vu sous son aspect circuit, est immdiatement transcrit en VHDL, ce qui prcise sa fonction, et permet ltudiant de se familiariser progressivement avec la syntaxe du langage. Lobjectif tant la matrise du processus de synthse, jusqu la ralisation, nous avons utilis un compilateur VHDL qui permet trs simplement de gnrer les fichiers JEDEC utiliss pour la programmation des circuits. Exprimente pour la premire fois au cours de lanne scolaire 1994-95, cette approche un peu diffrente de llectronique numrique semble avoir rencontr un accueil favorable de la part des tudiants. La cration de machines dtats adaptes un problme donn, ne semble plus constituer un obstacle pour eux. Que soient remercis ici les collgues de lIUT, pour les nombreuses discussions que nous avons eues sur le sujet, et, surtout, les tudiants qui se sont lancs, parfois avec fougue, dans lexploration de cette terre inconnue. Le livre est subdivis en cinq chapitres et une annexe : I. Une introduction gnrale au monde du numrique. On y dfinit les notions de base telles que la reprsentation des nombres, les conventions logiques etc. II. Un panorama des caractristiques lectriques, statiques et dynamiques, des circuits numriques et leur emploi pour dterminer les limites de fonctionnement dune application. Ce chapitre nest pas forcment trait en cours de faon chronologique

Circuits numriques et synthse logique

linaire ; certaines parties ne prennent sens quau vu des applications de la logique squentielle (calcul dune frquence maximum de fonctionnement, par exemple). III. La dfinition des oprateurs lmentaires, combinatoires et squentiels. Le principe adopt est de ne pas attendre davoir vu toute la logique combinatoire pour aborder la logique squentielle. Les bascules (synchrones principalement) doivent devenir des objets aussi familiers quune porte ET. Cest loccasion de la dcouverte des oprateurs lmentaires que les premiers rudiments du langage VHDL apparaissent. Les difficults de ce langage (dont la principale concerne le passage combinatoire squentiel asynchrone squentiel synchrone) sont abordes sur des objets trs simples, elles sont donc faciles expliciter. Une fois ces difficults surmontes, la puissance du langage rcompense trs largement lutilisateur de son effort intellectuel. IV. Les principales catgories de circuits, fonctions standard et circuits programmables. Ltude de cette partie, volontairement restreinte, ne peut se faire quen illustrant le cours de nombreuses analyses de notices techniques. V. Les mthodes de synthse qui sont laboutissement de cet enseignement. On y fait connaissance avec les machines dtats, les architectures de Moore et de Mealy, leur transcription en VHDL. Les mthodes de simplification sont vues trs rapidement, essentiellement pour comprendre ce que fait un optimiseur, de faon apprendre le piloter. VI. Une annexe qui rsume et explicite les principales constructions quautorise le langage VHDL. Sont exclues, volontairement, toutes les constructions non synthtisables, qui servent exclusivement la modlisation et la simulation. De nombreux exemples illustrent les principes abords, et des exercices permettent au lecteur dasseoir sa comprhension. La connaissance dun langage de programmation procdural, comme C ou Pascal, nest pas indispensable, mais elle facilite la comprhension de certains passages. Quelques notions sur les composants, transistors et capacits, et sur les lois lmentaires des circuits lectriques sont souhaitables. On notera cependant que les aspects structurels internes des circuits ne sont pas abords, sauf quand ils sont incontournables (sorties non standard).

Circuits numriques et synthse logique

1 Informations numriques

1.1 De lanalogique au numrique


Entre un disque noir et un disque compact il y a une diffrence de principe : le premier est analogique, le second numrique. Que signifient ces termes ? Le mot analogique voque ressemblance, si on regarde avec un microscope une partie de sillon dun disque noir on verra une sorte de valle sinueuse dont les flancs reproduisent, peu prs, la forme des signaux lectriques transmis aux haut-parleurs. A un son grave correspondent des sinuosits qui ont une priode spatiale grande (quelques mm pour 100 Hz), un son aigu correspondent des sinuosits dont la priode spatiale est plus petite (quelques centimes de mm pour 10 kHz). De mme, lamplitude des sinuosits reproduit, grosso-modo, lamplitude du son que lon souhaite reproduire. Le mot numrique voque nombre. Si on regarde au microscope (grossissement suprieur 100) une plage dun disque compact on verra une sorte de pointill de trous ovales, presque identiques, rpartis de faon irrgulire sur des pistes quasi-circulaires. Aucun rapport de forme entre le son enregistr et lallure de la gravure ne peut tre observ, prsence ou absence de trous constituent les deux valeurs possibles dun chiffre en base 2. Ces chiffres, regroups par paquets de 16, constituent des nombres entiers dont la valeur est limage, via un Amplitude code, de lamplitude du signal sonore1. t Le passage dun monde signal analogique lautre se fait par des convertisseurs analogiqueTraitement CAN CNA numrique (CAN) et numriquenumrique analogique (CNA), dont nous ntudierons pas ici le fonctionnement. La diffrence de Amplitude principe voque plus haut se retrouve videmment quand on observe le fonctionnement des t signal numrique circuits : un circuit analogique manipule des signaux lectriques
1

En ralit le code est un peu plus compliqu que ne le laisserait supposer cette description, mais cest une autre histoire.

Circuits numriques et synthse logique

qui peuvent prendre une infinit de valeurs, qui sont en gnral des fonctions continues du temps, un circuit numrique manipule des signaux qui ne peuvent prendre quun nombre fini (gnralement 2) de valeurs conventionnelles, sans rapport avec le contenu de linformation, qui sont des fonctions discontinues du temps.

1.2 Deux niveaux lectriques : le bit


Dans toute la suite nous considrerons, ce qui est le cas le plus frquent, que les signaux numriques reprsentent des valeurs binaires ; ils ne peuvent prendre que deux valeurs. Une variable binaire porte le nom de bit, contraction de binary digit, littralement chiffre en base 2. Dans un circuit lectronique la grandeur physique significative que lon utilise le plus souvent est la tension (un signal lectrique peut trs bien tre un courant), sauf prcision contraire explicite la valeur dun signal lectrique binaire se mesurera donc en volts. Dans un systme numrique tous les potentiels sont mesurs par rapport un potentiel de rfrence, la masse, qui est une quipotentielle commune tous les circuits. Cette prcision permet de parler du potentiel (ou de la tension) dun point dun montage au lieu de spcifier diffrence de potentiels entre ... et la masse . A chaque quipotentielle dun circuit on peut donc associer un bit qui reprsente la valeur de la tension de lquipotentielle considre.

1.2.1 Conventions logiques


Une entre ou une sortie dun circuit numrique ne peut prendre que deux valeurs, notes gnralement H, pour High (haut), et L, pour Low (bas) : 3 et 0,2 volts sont des valeurs typiques frquemment rencontres. La valeur dun signal reprsente en gnral quelque chose : chiffre en base deux, 0 ou 1, valeur dune variable logique, vrai ou faux, tat dun oprateur, actif ou inactif, tat dune porte, ouverte ou ferme, tat dun moteur, arrt ou en marche, etc. Lassociation entre la valeur lectrique (H ou L) et le sens que lon donne cette valeur (0 ou 1, par exemple) constitue ce que lon appelle une convention logique. Il ny a pas de convention par dfaut, cet oubli peut tre une source derreurs. Dans la famille des microprocesseurs 68xx0 les adresses (des nombres entiers) sont matrialises par des tensions o H est associ au 1 binaire et L au 0 binaire, mais les niveaux dinterruptions (galement des nombres entiers) sont matrialiss par des tensions o H est associ au 0 binaire et L au 1 binaire. Cest comme . Traditionnellement on qualifie de convention logique positive lassociation entre H et 1, ou vrai, ou actif, et de convention logique ngative lassociation entre H et 0, ou faux, ou inactif. Dans le cas de la porte, qui doit, comme chacun sait, tre ouverte ou ferme , il ny a pas de tradition. Le circuit 74xx08, par exemple, est connu comme tant une positive logic and gate , littralement porte et en logique positive . Si lon change de convention logique le mme circuit devient un oprateur Boolen diffrent (lequel ?).

Circuits numriques et synthse logique

1.2.2 Immunit au bruit


Lun des intrts majeurs des signaux numriques est leur grande robustesse vis vis des perturbations extrieures. Lexemple des enregistrements sonores en est une bonne illustration, le lecteur sceptique naura qu faire la simple exprience qui consiste prendre une pingle (fine), rayer un disque noir , un disque compact, et comparer les rsultats. Derrire le rsultat de cette exprience, quelque peu agressive, se cachent en fait deux mcanismes qui se compltent pour rendre le systme numrique plus robuste, une protection au niveau du signal lmentaire, le bit, et une protection au niveau du systme par le jeu du codage : Au niveau du bit La protection repose sur le fait que linformation nest pas contenue dans lamplitude du signal. Un signal analogique direct (on exclut ici les signaux moduls pour lesquels lanalyse devrait tre affine) a une forme qui est limage de linformation transmettre. Toute perturbation cette forme se traduit par une dformation de linformation associe. Lamplitude dun signal numrique na quun rapport trs lointain avec linformation vhicule, la seule contrainte est que le systme soit encore capable de diffrencier sans ambigut un niveau haut et un niveau bas. Lcart entre ces deux niveaux tant grand, seule une perturbation de grande amplitude pourra provoquer une erreur de dcision2. Au niveau du systme Les valeurs lmentaires (bits) sont regroupes en paquets pour former des mots, ces mots doivent obir certaines rgles de construction, des codes. Il est parfaitement imaginable, et cest ce qui est fait dans tous les cas o lon craint les perturbations, de construire des codes qui permettent de dtecter et, dans une certaine mesure, de corriger des erreurs. Un exemple connu de tous, certes assez loign de llectronique numrique, est la langue crite. Un lecteur qui nest pas totalement illettr est mme de dtecter et de corriger un grand nombre derreurs typographiques, mme sans faire appel au sens, dun texte. La raison en est simple : les mots du dictionnaire sont loin de contenir toutes les combinaisons possibles des 26 lettres de lalphabet, la construction dune phrase obit des rgles de grammaire bien connues du lecteur. Ces restrictions (mots du dictionnaire et grammaire) introduisent des redondances qui permettent justement dassurer la robustesse du texte vis vis des erreurs typographiques. Les codes dtecteurs et/ou correcteurs derreurs sont tous fonds sur ladjonction de redondances la chane de bits transmis, ou inscrits sur un support fragile.3 Les choses ont un cot Sans rentrer ici dans les dtails, on peut remarquer que la robustesse des signaux numriques est lie la trs faible quantit dinformation vhicule par chaque signal lmentaire (0 ou 1). Le corollaire de cette pauvret du signal lmentaire est que pour traiter une information complexe il faut une quantit norme de signaux lmentaires, merci M. de La Palice. Cela se traduit par un dbit, dans le cas des transmissions, ou par un volume, dans le cas du stockage, trs important. A titre dexercice on calculera le nombre doctets (paquets de 8 bits, byte dans le jargon) contenus dans un disque compact qui dure une heure, sachant que le signal est numris (CAN) 44 000 fois par seconde, et que chaque point occupe 2*16
2 3

Cette question sera prcise quantitativement lors de la prsentation des technologies des circuits (chapitre II). Un exemple simple de code correcteur sera tudi en exercice, quand les outils danalyse seront disponibles.

Circuits numriques et synthse logique

bits (sans les redondances du code correcteur !). A titre de comparaison, le micro-ordinateur qui sert rdiger ce texte dispose dune mmoire de 8 Mga Octets, et dun disque de 200 Mga Octets. On rpondra ensuite la question : pourquoi la tlvision numrique ne sera-telle gnralise quau sicle prochain (il est vrai que cest demain), au prix dun investissement mathmatique considrable pour comprimer linformation vido. 4

1.3 Du bit au mot : des codes


Nous avons dj voqu que les informations lmentaires, que constituent les bits, sont souvent regroupes dans des paquets plus riches de sens, interprtables dans un code. Le monde du codage est vaste, nous nous contenterons ici de dcrire rapidement quelques codes lmentaires, dusage quotidien, et laisserons linitiative du lecteur lexploration des codes sophistiqus, notamment les codes correcteurs derreurs.

1.3.1 Pour les nombres


Deux grandes catgories de nombres existent dans le monde informatico-logique : les entiers et les flottants. Les premiers constituent un sous ensemble fini de lensemble des entiers cher aux mathmaticiens, les seconds tentent dapprocher, par un ensemble fini, les nombres rels. Le distinguo est de taille, les entiers que nous rencontrerons obissent une arithmtique euclidienne clairement dfinie, telle quon lapprend dans les grandes classes de lcole primaire, les seconds obissent une arithmtique approche, mme si lapproximation est bonne. Le lecteur averti pourra objecter que lon rencontre parfois des nombres non entiers, caractriss par un nombre connu de chiffres aprs la virgule (un exemple de tels nombres est rencontr sur vos relevs bancaires). Cette catgorie de nombres, connue sous le nom de virgule fixe, nen est pas une : ils obissent larithmtique entire (faites vos comptes en centimes), et sont convertis lors des oprations dentre-sortie (affichage, impression, saisie clavier). Entiers naturels La base 2 Etant donn un mot de n bits (an-1,an-2, ... a1,a0), o les ai valent 0 ou 1, on peut considrer que ce mot reprsente la valeur dun entier A, crit en base 2 : A = an-12n-1 + an-22n-2 + .... + a12 + a0 Les valeurs de A sont limites par : 0 A 2n - 1 Les valeurs couramment rencontres pour n sont 8 (octet), 16 (entier court) et 32 (entier long). Les bornes suprieures correspondantes pour la valeur de A sont respectivement de 255, 65 535 et 4 294 967 295. Quand n est un multiple de 4 (cest le cas des valeurs voques ci-dessus...) il est souvent pratique, car plus compact, dcrire le nombre en hexadcimal (base 16) : A = (hm-1,hm-2, ...,h0) = hm-116m-1 + hm-216m-2 + ...+ h0 O m = n/4, et hi peut prendre lune des 16 valeurs 0, 1, 2 ....,9, A, B, C, D, F qui sont elle-mmes reprsentables en binaire sur 4 bits.
4

Une image tlvision se rpte au minimum 25 fois par seconde, contient 600 lignes de 700 points, chaque point est numris sur 2 octets.

Circuits numriques et synthse logique

Les oprations arithmtiques classiques sont laddition, la soustraction, la multiplication et la division. On notera que : 1. Tous les rsultats sont obtenus modulo 2n, ce qui confre aux oprations sur lensemble des entiers sur n bits un caractre priodique comparable celui des fonctions trigonomtriques. 2. La division est la division entire, dont le rsultat est constitu de deux nombres : le quotient et le reste. La base 10 Les humains actuels ont pris la dplorable habitude de compter en base dix5 qui nest pas une puissance de 2 (60 non plus, dailleurs). Il ny a donc pas de correspondance simple entre un nombre crit en binaire et sa version dcimale. Si cette difficult est la source dexercices lmentaires de programmation (programmes de changements de bases), elle est parfois gnante en pratique. Cest pour cette raison que lon rencontre parfois des codes hybrides : le nombre est crit en chiffres dcimaux, et chaque chiffre est cod en binaire sur 4 bits. Le code le plus classique, dit BCD pour binary coded decimal consiste coder chaque chiffre dcimal (0 9) en binaire naturel (0000 1001). Larithmtique de ce code nest pas simple, laddition de deux chiffres dcimaux peut conduire un rsultat hors code (un nombre compris entre 10 et 15), ou faux mais apparemment dans le code (un nombre compris entre 16 et 18) ; aprs chaque opration lmentaire il faut donc recaler le rsultat intermdiaire. Cette opration supplmentaire sappelle ajustement dcimal, il faut leffectuer aprs tout calcul sur une tranche de 4 bits. Beaucoup de calculettes utilisent un code BCD qui facilite les oprations daffichage. Dautres codes dcimaux existent, qui facilitent un peu les calculs, mais ils sont dun usage rarissime actuellement. Entiers signs Quand on aborde la question des entiers signs il est essentiel de se souvenir quun mot de n bits ne peut fournir que 2n combinaisons diffrentes. Comme on ne peut pas avoir le beurre et largent du beurre, il faudra restreindre la plage des valeurs possibles pour la valeur absolue du nombre. Les tres humains ont lhabitude de reprsenter un nombre sign dans un code qui spare le signe et la valeur absolue du nombre. Le signe tant une grandeur binaire (+ ou -), on peut lui affecter un bit, le bit de signe, et garder les n-1 bits restant pour coder la valeur absolue, en binaire naturel, par exemple. Ce type de code, connu sous le nom de signe-valeur absolue nest en fait jamais utilis pour les nombres entiers (il lest par contre pour les flottants). La raison en est que larithmtique sous-jacente est complique ; en effet pour additionner ou soustraire deux nombres signs, dans un code signe-valeur absolue, il faut commencer par dterminer quel sera le signe du rsultat. Pour ce faire il faut commencer tout calcul par une comparaison qui fait intervenir la fois les signes et les valeurs absolues des oprandes (remmorez-vous vos dbats avec les mathmatiques du dbut du collge). Les deux codes universellement utiliss pour reprsenter les entiers relatifs, prsents cidessous, vitent cet cueil, additions et soustraction ne sont quune mme opration, qui ne fait pas intervenir de comparaison, et les reports (ou retenues) ventuels sont simples traiter. Dans lun des codes comme dans lautre, lintervalle de dfinition dun nombre A, cod sur n bits, est donn par :
5

On notera que vers 3000 avant J.C. les Sumriens avaient fort judicieusement choisi la base 60, multiple de 2, 3, 4, 5, 6, 10, 12. Il est vrai que lapprentissage des tables de multiplications ne devait pas tre la porte de tous.

Circuits numriques et synthse logique

- 2n-1 A 2n-1 - 1 Soit -128 127 pour n = 8, -32 768 32 767 pour n= 16 et -2 147 483 648 2 147 483 647 pour n=32. Attention ! Le caractre priodique des oprations implique, par exemple, que dans un code sign sur 8 bits 100 + 100 = -56, qui est bien gal 200 modulo 256, il ne sagit pas l dune erreur mais dune consquence de la restriction un sous-ensemble fini des oprations sur les entiers. Le changement de longueur du code, par exemple le passage de 8 16 bits, nest pas une opration triviale, la combinaison binaire qui reprsente 200 en binaire naturel, na pas forcment la mme signification quand on linterprte dans un code 8 bits ou un code 16 bits. Le code complment 2 Cest le code utilis pour reprsenter les nombres entiers dans un ordinateur. Il prsente lintrt majeur de se prter une arithmtique simple, mais a pour dfaut mineur que la reprsentation des nombres ngatifs nest pas trs parlante pour un tre humain normalement constitu. La construction du code complment deux, sur n bits, dcoule directement de la dfinition modulo 2n des nombres. Etant donn un nombre A : Si A 0 le code de A est lcriture en binaire naturel de A, ventuellement complt gauche par des 0. Exemple : A = 23, cod sur 8 bits scrit : 00010111. Si A < 0 le code de A est lcriture en binaire naturel de 2n + A, ou, ce qui revient au mme, de 2n |A|. Exemple : A = 23, cod sur 8 bits scrit : 11101001, qui est la reprsentation en binaire naturel de 256 23 = 233 (E9 en hexadcimal). On remarquera que le bit le plus gauche, le bit de poids fort ou MSB (pour most significant bit), est le bit de signe, avec la convention logique 1 pour et 0 pour +. Le calcul de loppos dun nombre, quel que soit le signe de ce nombre, est une simple consquence de la dfinition du code : A = 2n A modulo 2n. Par exemple : (23) = 256 + 23 modulo 256 = 23. Astuce de calcul : Pour obtenir rapidement lexpression binaire de loppos dun nombre dont on connat le code, on peut utiliser lastuce suivante (que certains, tort, prennent pour une dfinition du code) : 2n A = 2n 1 A + 1 (vrifiez) 2n 1 est le nombre dont tous les chiffres binaires sont 1, 2n 1 A est le nombre que lon obtient en remplaant dans le code de A les 1 par 0 et rciproquement. Ce nouveau nombre sappelle complment 1 ou complment restreint de A, et se note classiquement A . Suivant la tradition on peut alors crire :

Circuits numriques et synthse logique

A = A + 1. Exemple : 23 = 00010111, 23 = 11101000, 23 = 23 + 1 = 11101001, qui est le rsultat prcdent. Laugmentation de longueur du code (par exemple le passage de 8 16 bits) se fait en compltant gauche par le bit de signe, 0 pour un nombre positif, 1 pour un nombre ngatif. Cette opration porte le nom dextension de signe. Exemple 23 scrit 11101001 sur 8 bits et 1111111111101001 sur 16 bits, ce qui est notablement diffrent de 0000000011101001 qui est le code de 233, dont lexistence est maintenant lgale. Les additions et soustractions des nombres ne sont quune seule et mme opration : des additions et des ventuels changements de signes, sans que lon ait jamais faire de comparaison, et o les reports (ou retenues) sont gnres mcaniquement. La dissymtrie entre addition et soustraction, bien connue des lves des premires annes de collge, a disparu. Les multiplications et les divisions par des puissances de 2 sont des dcalages arithmtiques (i.e. avec conservation du signe), par exemple pour des octets :

A:

a7 a6 a5 a4 a3 a2 a1 a0 A2:

A:

a7 a6 a5 a4 a3 a2 a1 a0 a6 a5 a4 a3 a2 a1 a0 0

A/2 : a7 a7 a6 a5 a4 a3 a2 a1

N.B. : Les dtails de manipulation des nombres, lors des oprations arithmtiques, sont videmment transparentes pour le programmeur gnraliste, elles sont intressantes connatre pour le concepteur dunits de calcul, et, exceptionnellement, pour le programmeur qui soccupe des interfaces logiciels avec le matriel (pilotes de priphriques, librairies de bas niveau, etc.). Si le code complment deux se prte bien aux calculs, il sign complment 2 complique les oprations de 127 comparaisons et, plus gnralement, les oprations qui font intervenir une relation dordre 0 128 255 entre les nombres. Prcisons cette -1 127 non sign question de relation dordre : le code en complment 2 de 1, par exemple, correspond tous les -128 chiffres binaires 1, qui Relation binaire naturel complment deux sur 8 bits. reprsente le plus grand nombre possible dans une interprtation non signe. Face la combinaison binaire correspondant 1 la rponse la question ce nombre est-il suprieur 10 ? ne devra pas tre traite de la mme faon par un oprateur

Circuits numriques et synthse logique

10

cbl suivant que le code est sign ou non. La figure ci-dessous tente dillustrer cette rupture dans la relation dordre. Le code binaire dcal Le code binaire dcal ne prsente pas linconvnient voqu sign binaire dcal ci-dessus propos de la relation dordre : il possde la mme relation 127 dordre que le code binaire naturel des nombres non signs. On le 0 127 255 rencontre dans certains -1 128 convertisseurs numriques non sign analogiques (ou, plus rarement analogiques numriques) et dans la -128 reprsentation de lexposant des Relation binaire naturel binaire dcal sur 8 bits. nombres flottants. Lapplication qui fait passer du binaire naturel au binaire dcal est dfinie en sorte que le minimum de lun des codes corresponde au minimum de lautre, et que le maximum de lun des codes corresponde au maximum de lautre : Un examen rapide de la courbe prcdente fournit la formule de gnration du code binaire dcal sur n bits : tant donn un nombre entier A tel que 2n-1 A 2n-1 1, le code de A est le code binaire naturel de A + 2n-1, do le nom du code. On peut remarquer que le nombre 2n-1 a son MSB gal 1, tous les autres chiffres tant nuls. On passe du code binaire dcal au code complment deux en complmentant le bit de signe. Flottants Si A est un nombre flottant il est cod par une expression du type : A = (1)s2e1,xxxxx... o s est le signe de A, e un nombre entier sign, cod en binaire dcal, et xxxxx... la partie fractionnaire de la valeur absolue de la mantisse. A titre d'exemple les flottants double prcision (64 bits) suivant la norme ANSI ont les caractristiques suivantes: signe s : 1 lment binaire, 1 pour , 0 pour +, exposant compris entre 1022 et +1023, soit 11 lments binaires, partie fractionnaire de la mantisse sur 52 lments binaires. combinaisons rserves pour le zro, l'infini (+ et ) et NAN (not a number). Cela correspond une dynamique allant de 2,210-308 1,810+308, pour une prcision de l'ordre de 16 chiffres dcimaux. De ce qui prcde il faut tirer deux conclusions importantes : 1. L'arithmtique des nombres flottants et celle des entiers font appel des algorithmes radicalement diffrents. 2. Le test d'galit de deux nombres, qui a un sens clair pour des entiers, fournit un rsultat alatoire dans le cas des flottants. Seule une majoration de leur cart conduit un rsultat prvisible.

Circuits numriques et synthse logique

11

Le format binaire des nombres est tel que seule la partie fractionnaire de la mantisse figure, pour des flottants simple prcision :
nombre flottant : poids des bits : s exposant partie fractionnaire de la mantisse

31 30----------------23 22----------------------------------------------------0

1.3.2 Il ny a pas que des nombres


Toute catgorie de donnes un tant soit peu organise est susceptible de gnrer un code ; il est videmment hors de question den faire un catalogue un tant soit peu exhaustif. Nous nous contenterons de citer quelques exemples. Un cas important dans les applications concerne tout ce qui est change dinformations, par exemple entre deux ordinateurs ou entre un ordinateur et une imprimante, sous forme de texte : cela conduit aux codes alphanumriques. Le code alphanumrique le plus utilis porte le nom de code ASCII pour American standard code for information interchange , dcrit ci-dessous. Le code ASCII Sept bits pour les caractres anglo-saxons Pour reprsenter lensemble des lettres de lalphabet - minuscules et majuscules, sans les accents, les dix chiffres dcimaux, les caractres de ponctuation, les parenthses crochets et autres accolades, les symboles arithmtiques les plus courants et des commandes : 128 combinaisons suffisent. Do le code ASCII, sur 7 bits (b6b5b4b3b2b1b0), quasi universellement adopt :
b6 b5 b4 Hex 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 0 0 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 0 0 1 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 0 1 0 2 SP ! " # $ % & ( ) * + , . / 0 1 1 3 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 1 0 0 4 @ A B C D E F G H I J K L M N O 1 0 1 5 P Q R S T U V W X Y Z [ \ ] ^ _ 1 1 0 6 ` a b c d e f g h i j k l m n o 1 1 1 7 p q r s t u v w x y z { | } ~ DEL

b3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

b2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

b1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

b0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

Les codes de valeurs infrieures 32 (en dcimal) sont des commandes ou des caractres spciaux utiliss en transmission. Comme commandes on peut citer, titre dexemples, CR pour retour chariot, LF pour nouvelle ligne, FF pour nouvelle page, BEL pour cloche etc...

Circuits numriques et synthse logique

12

Il est clair que le programmeur gnraliste qui utilise un langage volu na en fait jamais connatre les valeurs des codes, ils sont videmment connus du compilateur, par contre lauteur dun pilote dimprimante peut, lui, avoir se pencher sur ces choses peu conviviales ! Huit bits pour les accents Quand on passe aux dialectes rgionaux, le franais par exemple, un problme se pose : le code ASCII ne connat pas les lettres accentues. Pour palier ce manque, les auteurs de logiciels et/ou les fabricants de matriels (imprimantes) ont complt le code, en ltendant un octet soit 256 combinaisons diffrentes. Malheureusement les rgles disparaissent quand on passe aux codes caractres sur 8 bits, on peut mme trouver des ordinateurs qui, suivant les logiciels, utilisent des combinaisons variables pour reprsenter les , , , , et autres caractres dialectaux. Nous ne citerons pas de nom. Un bit de plus pour les erreurs Quand on craint que des erreurs se produisent au cours dune transmission (minitel, par exemple), on rajoute parfois un bit supplmentaire (8me ou 9me suivant la taille du code initial) on rajoute un chiffre binaire supplmentaire qui est calcul de telle faon que pour chaque caractre transmis : Le nombre de bits un soit impair, on parle alors de parit impaire, ou : le nombre de bits un transmis soit pair, on parle alors de parit paire. Si metteur et rcepteur utilisent la mme convention de parit, le rcepteur est capable de dtecter une faute de transmission tant que le nombre de fautes nexcde pas une erreur par caractre. Un procd aussi rudimentaire ne permet videmment pas de corriger lerreur autrement quen demandant une retransmission du caractre incrimin. Autres codes Concurrent de lASCII dans le codage des caractres on peut citer le code EBCDIC (extended binary coded decimal interchange code), encore utilis dans certains systmes de gestion.
a f g e d c b

Pour afficher un chiffre dcimal sur un afficheur 7 segments il faut associer chaque chiffre une combinaison qui indique les segments (a, b, c, d, e, f et g) allumer : Le passage dun code un autre, pour des informations qui ont le mme contenu, sappelle un transcodage. A titre dexemple on peut imaginer comment construire un transcodeur BCD 7 segments.

Circuits numriques et synthse logique

13

Exercices Dbordements A et B sont des nombres entiers, cods en binaire. Pourquoi, mme sil ny a pas de dbordement, lopration 2*(A/2 + B/2) donne-t-elle parfois un rsultat diffrent de (A + B) ? Justifiez votre rponse en vous appuyant sur une reprsentation binaire sur 8 bits. Quelle est la valeur numrique maximum de lcart entre les deux rsultats ? Nombres entiers signs Montrer que lquation x= x

a deux solutions pour des nombres entiers signs, dans le code complment deux sur n bits. Volumes et dbits d informations Un enregistrement sur disque compact consiste prendre une suite d'chantillons (on trace la courbe en pointill...) la cadence de 44 kHz. Chaque chantillon est reprsent par un nombre de 16 lments binaires pour chacune des voies droite et gauche (strophonie). A combien d'octets (paquet de 8 bits) correspond un disque d'une heure de musique enregistre ? A quelle vitesse, en bits par seconde, doit travailler le lecteur pour restituer la musique en temps rel (ce qui est souhaitable) ? Sachant que la frquence maximum des signaux sonores est de 20 kHz, quel est le "cot" du numrique ? Quels sont ses avantages ? Reprendre les calculs prcdents pour un signal de tlvision, de frquence maximum 5 MHz, cod sur 8 bits (l' il est trs tolrant) 2,2 fois la frquence maximum. La tlvision numrique peut-elle tre une simple transposition des techniques utilises pour le son ?

Circuits numriques et synthse logique

14

Conversions. Une chane de traitement de linformation est constitue comme suit :

Ve

Conversion AN

e 8 bits

Calculateur 8 bits

s 8 bits

Conversion NA

Vs

Les convertisseurs analogique numrique et numrique analogique ont un pas de 40 mV (cart de tensions analogiques qui correspond une diffrence de 1 bit de poids faible). Toute la chane est bipolaire : tensions dentre et de sortie positive ou ngative, nombres entiers signs (sur 8 bits). Quelles sont les tensions maximum et minimum des tensions analogiques dentre et de sortie ? Le calculateur effectue chaque tape (n) la moyenne des quatre chantillons prcdents : s(n) = 1/4*(e(n) + e(n-1) + e(n-2) + e(n-3)) 1. Un premier programme de calcul est la traduction directe de la formule prcdente. En relevant la fonction de transfert Vs = f(Ve), le programmeur saperoit que les rsultats en sortie sont parfois tranges. Pourquoi ? 2. Ayant trouv son erreur, le programmeur utilise cette fois la formule : s(n) = e(n)/4 + e(n-1)/4 + e(n-2)/4 + e(n-3)/4 3. Les rsultats sont moins absurdes, mais un autre dfaut apparat. Lequel ? 4. Quelle serait la solution du problme ?

Circuits numriques et synthse logique

15

2 Circuits : aspects lectriques

2.1 Technologies
Les circuits numriques sont subdiviss en familles technologiques. A chaque famille est associe un processus de fabrication qui recouvre un type de transistor (bipolaires, MOS etc.), donc des paramtres lectriques : tensions dalimentations, niveaux logiques, courants changs lors de lassociation de plusieurs oprateurs, caractristiques dynamiques comme les temps de propagations, les frquences dhorloge maxima. Le principe gnral adopt est que lutilisateur peut construire une fonction logique complexe en associant des oprateurs lmentaires sans se poser chaque fois des questions dinterface lectrique tant quil utilise des circuits dune mme famille. Nous ntudierons pas ici larchitecture interne des diffrentes technologies utilises en lectronique numrique6, pour le concepteur de systme numrique un circuit apparat comme une boite noire dont le fonctionnement est entirement dfini par ses caractristiques externes, tant statiques (volts et milliampres) que dynamiques (nanosecondes et mgaherz). Avant daborder ces deux points, nous passerons en revue, de faon trs gnrale les familles les plus utilises en pratique.

2.1.1 Les familles TTL


Famille historique sil en est, apparue au milieu des annes 1960, la famille TTL (Transistor Transistor Logic), construite autour de transistors bipolaires, est devenue un standard de fait. Les premires versions sont devenues compltement obsoltes mais servent dlments de comparaison. Dans la version TEXAS INSTRUMENT, repris par de nombreuses secondes sources, le code didentification dun circuit TTL est relativement standardis : SN 74 AS 169 N ou DM 54 S 283 J Chaque champ a une signification : SN, DM : champ littral qui indique le constructeur. 74 ou 54 : gamme de tempratures normale (0C 70C) ou militaire (-55C +125C). AS, S, ...: technologie ici advanced shottky, shottky. 169, 283, ...: fonction logique. N, J, P, NT...: type de botier (ici DIL plastique ou cramique).
On consultera avec profit HOROWITZ et HILL, The Art of Electronics, Cambridge University Press, 1983 ; MILLMANN et GRABEL Microlectronique, McGraw-Hill, 1988 ou HODGES et JACKSON Analysis and design of digital integrated circuits, McGraw-Hill, 1988.
6

Circuits numriques et synthse logique

16

Les familles TTL ncessitent une alimentation monotension de +5 V. Attention, cette spcification est trs stricte, et doit tre respecte 10 % prs, voire 5 % prs dans certains cas. Le dpassement de la tension dalimentation maximum, de mme que linversion de cette tension, par permutation accidentelle entre masse et alimentation, est lun des moyens de destruction du circuit le plus sr. Le tableau ci-dessous rsume quelques lments cls des familles TTL :
Technologie 74/54 N 74/54 H 74/54 L 74/54 S 74/54 LS 74/54 F 74/54 AS 74/54 ALS Commentaire Srie historique standard, transistors saturs, obsolte Srie historique rapide, obsolte Srie historique faible consommation (low power), obsolte Shottky, srie rapide, transistors non saturs, presque obsolte Shottky faible consommation, trs rpandue, standard de fait, presque obsolte Version Fairchild des technologies rapides Advanced Shottky, remplace la S advanced low power shottky, remplace la LS P mW 10 20 1 20 2 4 8 2 tp ns 10 5 30 3 10 3 2 4

Dans le tableau prcdent, la puissance P et le temps de propagation (retard) tp sont mesurs pour un oprateur lmentaire (porte), typiquement un inverseur. Les familles TTL sont caractrises par une consommation non ngligeable, de lordre de quelques milliwatts par porte, qui augmente un peu avec la frquence dutilisation, et des frquences maximums de fonctionnement comprises entre 10 et 100 MHz suivant les versions. Les niveaux logiques typiques sont de lordre de 3 V pour le niveau haut et 0,4 V pour le niveau bas (voir plus loin).

2.1.2 Les familles CMOS


Apparue la mme poque que la famille TTL N, la premire famille CMOS (Complementary Metal Oxyde Semi-conductor), la srie 4000 de RCA, sest rendue populaire par sa trs faible consommation statique (pratiquement 0) et par une grande plage de tension dalimentation (3 15 V), malgr des performances dynamiques quatre dix fois plus mauvaises, dans le meilleur des cas7. Cette famille est strictement incompatible avec la famille TTL, la fois pour des questions de niveaux logiques que de courant absorb par les portes TTL. La famille des circuits CMOS sest agrandie depuis, dans deux directions 1. Circuits spcialiss trs faible tension dalimentation (1,5 V), trs faible consommation, o la vitesse nintervient pas, ou peu (montres, calculettes simples, etc.). Nous nen parlerons pas plus. 2. Circuits qui concurrencent les familles TTL, mme rapides, avec une consommation statique pratiquement nulle : 4000B, 74 C, 74 HC, 74 HCT, 74 ACT, 74 FACT etc. Les familles 74xxx sont fonctionnellement quivalentes aux familles TTL, mais le brochage des circuits est parfois diffrent, la lettre T indique la compatibilit de niveaux lectriques avec les familles TTL. Les notices des circuits CMOS sont analyser avec prudence quand on les compare aux autres familles :
7

Le retard dans les circuits dpend beaucoup de la capacit de charge en sortie pour la famille 4000.

Circuits numriques et synthse logique

17

La consommation est proportionnelle la frquence de fonctionnement, nulle frquence nulle, la puissance absorbe par porte rejoint celle des familles bipolaires aux alentours dune dizaine de mgahertz. Une formule approche permet destimer la puissance absorbe par une porte lmentaire : Pd = (CL + CPD)Vcc(VH VL) f o CL est la capacit de charge, CPD une capacit interne quivalente de lordre de 25 pF pour les familles 74 AC, Vcc la tension dalimentation8 et f la frquence de fonctionnement. Les circuits MOS prsentent une caractristique dentre qui peut tre assimile une capacit, le temps de propagation et la consommation par porte augmentent notablement quand la capacit de charge, donc le nombre doprateurs commands, augmente. Le tableau ci-dessous rsume quelques lments cls des familles CMOS :
Technologie 4000 74/54 C 74/54 HC 74/54 HCT 74/54 ACT Commentaire Srie historique, non compatible TTL, obsolte Partiellement compatible TTL, obsolte Partiellement compatible TTL Compatible TTL Compatible TTL, rapide P mW 0,1 0,1 0,1 0,1 0,1 tp ns 100 50 10 10 5

Dans le tableau prcdent les chiffres sont donns pour une capacit de charge de 50 pF et une frquence de travail de 1 Mhz. La compatibilit TTL, si elle est mentionne, na de sens que pour une tension dalimentation de 5 V. Les CMOS sont un peu la famille idale pour les applications courantes. Quelques prcautions demploi sont cependant noter : Les entres inutilises ne doivent jamais tre laisses en lair , loubli de cette prcaution, qui peut conduire des dysfonctionnements des familles TTL, peut tre destructive dans le cas des CMOS. Les signaux dentre ne doivent jamais tre appliqus un circuit non aliment. Si le potentiel dune entre dpasse celui de la broche dalimentation du circuit, cela peut provoquer un phnomne connu sous le nom de latch up , destructif, qui est un vritable court-circuit interne9. Les circuits sont sensibles aux dcharges lectrostatiques, les mmoires grande capacit, qui font appel des transistors de dimensions submicroniques, ne doivent tre manipules que par un oprateur muni dun bracelet conducteur reli la masse du montage. Laugmentation de la vitesse, conjointement la consommation statique nulle (rsistances quivalentes infinies), conduit une trs forte dsadaptation, au sens des lignes de propagation, des circuits vis vis des conducteurs dinterconnexions. Cette dsadaptation conduit des phnomnes dchos : une impulsion peut tre rflchie en bout de ligne, et gnrer un cho, cest

Cette formule met clairement en vidence lintrt du passage, qui tend se gnraliser, de 5 V 3,3 V pour la tension dalimentation des circuits numriques. 9 Pour les initis : la structure CMOS prsente un thyristor parasite qui, sil est mis en conduction, court-circuite les alimentations. Un dpassement de la tension dalimentation par une des entres peut mettre ce thyristor en conduction. Les circuits rcents sont mieux protgs contre ce phnomne que ceux des premires gnrations, mais le problme na pas compltement disparu.

Circuits numriques et synthse logique

18

dire une impulsion parasite qui peut conduire des erreurs de fonctionnement. La consommation dun circuit CMOS nest pas du tout rgulire, mais forme dune suite dimpulsions de courant, chaque changement dtat ; si ces impulsions de courant se retrouvent dans les fils dalimentation ceux-ci se comportent comme autant dantennes qui mettent des signaux parasites. Globalement cela se traduit par un comportement trs bruyant des systmes numriques qui utilisent une technologie CMOS sans respecter les rgles de lart concernant le cblage. Parmi ces rgles de lart la plus importante, et de loin, est le dcouplage haute frquence de lalimentation de chaque circuit. Pratiquement il faut adjoindre chaque botier une capacit de dcouplage (10 100 nF), entre alimentation et masse. Cette capacit doit prsenter une impdance aussi faible que possible en haute frquence (plusieurs centaines de mgaherz), elle doit donc avoir une inductance parasite aussi faible que possible : fils courts, technologie mille feuilles , lidal tant une capacit chip soude directement sous le circuit dcoupler. Pour rsumer : dans les conducteurs dalimentation et de masse ne doivent circuler que des courants continus.

2.1.3 Les familles ECL


Les familles ECL constituent en quelque sorte laristocratie des familles logiques. Trs rapides, temps de propagation infrieur la nano-seconde pour une porte, temps daccs de moins de 10 nano-secondes pour les mmoires, ces familles constituent un monde part. Elles sont strictement incompatibles avec la TTL, ne serait-ce que par leur tension dalimentation qui est ngative, 5,2 V, et par des niveaux logiques haut et bas de 1 V et 1,6 V respectivement. Le fonctionnement interne fait appel des amplificateurs diffrentiels, en technologie bipolaire, qui fonctionnent en rgime linaire. Cette particularit leur confre un courant absorb pratiquement constant, ce qui rend les circuits peu bruyants, et facilite ladaptation dimpdance aux lignes dinterconnexions. La contrepartie du fonctionnement en rgime linaire est une consommation importante. Le tableau ci-dessous rsume quelques caractristiques des deux familles principales :
Technologie ECL 10K ECL 100K Commentaire Srie historique, non compatible TTL Meilleure stabilit en temprature, plus rapide, non compatible TTL P mW 25 30 tp ns 2 0,8 f max 125 MHz 400 MHz

La puissance et le temps de propagation concernent une porte lmentaire, la frquence maximum de fonctionnement concerne un circuit squentiel synchrone simple. Les domaines dapplications des technologies ECL sont les super ordinateurs , et les parties hautes frquences des systmes de tlcommunication. On trouve des circuits drivs de lECL, dont le fonctionnement interne est celui de cette famille, mais qui apparaissent au monde extrieur comme compatibles TTL, alimentation comprise.

2.1.4 Les familles AsGa


Dun usage industriel encore limit quelques fonctions relativement simples, en gnral dans les parties hautes frquences des systmes de tlcommunications et de radars, ces

Circuits numriques et synthse logique

19

technologies surpassent les familles ECL dans le domaine des frquences allant de 500 MHz 5 GHz. Elles utilisent comme composants lmentaires des transistors effet de champ jonction, MESFET (pour Metal Semi-conductor Field Effect Transistor), dont la jonction de commande est une diode Shottky. Lorigine de la vitesse de ces transistors est que la mobilit des lectrons est cinq dix fois plus leve dans larsniure de gallium que dans le silicium. Le tableau ci-dessous indique quelques unes des performances atteintes :
Technologie BFL DCFL Commentaire Buffered FET logic, Gomtrie 0,5m Direct coupled FET logic, 0,5 m P mW 10 1,3 tp ps 55 11 f max 2,5 GHz 4 GHz

La puissance et le temps de propagation (en pico-secondes) concernent une porte lmentaire, la frquence maximum de fonctionnement (en gigahertz) concerne un circuit squentiel synchrone simple.

2.2 Volts et milliampres


Le principe de constitution dune famille logique est de permettre au concepteur dune application dinterconnecter les circuits sur une carte de la mme faon quil assemble des fonctions sur un schma de principe. Ce jeu de Lego est rendu possible par le respect, par les fabricants de circuits, de rgles cohrentes, communes tous les fabricants, qui rendent comprhensibles, par les entres dun circuit, les signaux issus des sorties dun autre. Le jeu se complique un peu cause de linvitable dispersion des caractristiques, dun composant lautre lors de la fabrication, dispersion initiale laquelle il convient de rajouter les variations des caractristiques dun mme circuit avec la temprature. Tous les paramtres lectriques dun circuit intgr seront dfinis par trois valeurs : minimum, maximum, dans une plage de temprature, et typique, temprature normale , cest dire 25 C (300 K).

2.2.1 Les niveaux de tension


A un circuit, aliment par une tension VCC, on applique une tension dentre Ve et on mesure la tension de sortie Vs.

Vcc

Ie Ve

Is Vs

Figure 2-1

Les niveaux HAUT et BAS, en entre et en sortie, VIH, VOH, VIL et VOL sont dfinis par : Niveaux bas en entre si 0 Ve VIL Niveaux bas en sortie si 0 Vs VOL Niveaux haut en entre si VIH Ve Vcc Niveaux haut en sortie si VOH Vs Vcc

Circuits numriques et synthse logique

20

Il est clair quentre un niveau haut et un niveau bas doit exister une plage interdite , pour quil ny ait pas ambigut. Quand on envisage lassociation de deux circuits, A et B, il convient de rendre compatibles les niveaux dentre et de sortie.

Vcc A Ie VeA Is VsA VeB Ie B

Vcc

Is VsB

Figure 2-2

Pour assurer que le circuit B comprend bien les signaux issus du circuit A, on doit avoir : VOHMIN > VIHMIN VOLMAX < VILMAX Dans ces ingalits, un peu paradoxales, il faut bien comprendre que les attributs MIN et MAX ont un sens statistique, ils concernent les valeurs extrmes que le constructeur garantit sur tous les circuits dune mme famille technologique. Un catalogue de composants TTL nous renseigne sur la valeur de ces paramtres dans cette famille : VOHMIN = 2,7 V et VIHMIN = 2 V, VOLMAX = 0,4 V et VILMAX = 0,8 V. Ces valeurs respectent bien videmment les ingalits prcdentes. Entre les familles TTL et CMOS traditionnelles la compatibilit nest pas assure dans le sens TTLCMOS pour le niveau haut. La valeur minimum des carts entre VOHMIN et VIHMIN dune part, VOLMAX et VILMAX dautre part reprsente limmunit au bruit de la famille considre. Elle est de 400 mV en TTL. Cette immunit au bruit reprsente lamplitude que doit avoir un parasite, superpos au signal utile, qui risque de rendre ambigu la tension dentre dun circuit. La figure II-3 rsume les dfinitions qui prcdent :

Tensions Vcc niveau haut VOH Zone inexistante VOL niveau bas 0 Sorties Marges Entres VIH VIL Zone interdite niveau bas niveau haut

Figure 2-3

2.2.2 Les courants changs


Les courants Ie et Is des figures II-1 et II-2 indiquent des conventions de signe pour des courants dont les sens rels dpendent des niveaux logiques qui interviennent. En premire approximation, on peut considrer que la sortie dun circuit se comporte comme une source de tension ; dans un montage comme celui de la figure II-2, la valeur du courant qui circule dans

Circuits numriques et synthse logique

21

la liaison entre les deux circuits est alors principalement fixe par ltage dentre du circuit rcepteur de linformation. Pour un niveau bas Ie est ngatif (le courant sort du rcepteur), il est positif pour un niveau haut. Quand un circuit en commande plusieurs, son courant de sortie est, un signe prs, gal la somme des courants dentre des circuits commands :

Vcc Rcepteur B Vcc Emetteur A Ie Ve IsA VsA Vcc Rcepteur C IeB

IeC

Figure 2-4

Is A = (Ie B + Ie C)

Pour dterminer la validit dune association telle que celle reprsente figure II-4, il faut connatre les valeurs maximums (en valeurs absolues) des courants dentre, et la valeur maximum tolrable pour le courant de sortie. Cest dans cette optique que sont dfinis : IIH et IIL , courants dentre dun circuit auquel on applique des niveaux haut et bas, respectivement. IOH et IOL , courants de sortie admissibles par un circuit tout en conservant les niveaux de tension haut et bas, respectivement. Pour assurer la validit dune association dans laquelle un circuit en commande plusieurs autres, il faut contrler que sont vrifies les deux ingalits : IOHMAX > ( IIHMAX ) IOLMAX > ( IILMAX ) Les signes proviennent des conventions de signes classiquement adoptes, seules comptent, videmment, les valeurs absolues des courants. En TTL-LS : IOHMAX = 0,4 mA pour IIHMAX = 20 A, IOLMAX = 8 mA pour IILMAX = 0,4 mA On en dduit quun circuit peut en commander 20 autres tout en assurant le respect des niveaux logiques. Les ingalits prcdentes, associes leurs semblables concernant les tensions, permettent de dterminer la validit dassociations entre circuits de technologies diffrentes, ou de spcifier un circuit dinterface fait maison avec une technologie donne. A lintrieur dune technologie les niveaux de tension sont videmment compatibles, les rgles concernant les courants se rsument alors contrler le bon respect des sortances et entrances des circuits : On prend comme unit logique la charge apporte par lentre dune porte lmentaire de la famille technologique considre (en gnral linverseur). On dfinit alors deux nombres entiers : La sortance (fan out) dune sortie est gale au nombre maximum de charges lmentaires que peut piloter cette sortie.

Circuits numriques et synthse logique

22

Lentrance (fan in) associe une entre dun circuit complexe est gale aux nombres de charges lmentaires quivalentes aux courants absorbs (ou fournis) par cette entre. La valeur typique de sortance adopte par les fabricants est de 20. N.B. : Autant ce qui prcde a un sens clair pour les technologies dont les consommations sont peu dpendantes de la vitesse de fonctionnement, TTL et ECL par exemple, autant les consommations statiques nont aucun sens appliques aux technologies CMOS. Pour ces technologies les calculs de sortances conduisent des rsultats absurdes, parce quapplicables uniquement une application qui ne fait rien ! Pour ces technologies laugmentation du nombre dentres mises en parallle se traduit par une augmentation de la capacit de charge prsente au circuit de commande, il en rsulte une augmentation des temps de propagation des signaux, donc une baisse de vitesse du systme. Les notices de circuit donnent les capacits des entres et des courbes de temps de propagation en fonction de la capacit de charge.

2.3 Nanosecondes et mgahertz


Avant de prciser les paramtres dynamiques que lon dfinit pour caractriser les circuits logiques, rappelons brivement comment on caractrise une impulsion :

Amplitude normalise 1

0,9 0,5 tw

0,1 temps tr tf

Figure 2-5

Les noms des diffrents temps qui interviennent sont : tw : largeur (width) tr : temps de monte (rise time) tf : temps de descente (fall time). Quelle que soit la famille logique, les signaux appliqus aux circuits doivent avoir des temps de monte et de descente infrieurs au temps de propagation des oprateurs lmentaires ; la dfinition de ces temps de propagation est lobjet du paragraphe suivant. Dans toute la suite nous considrerons donc des signaux dont les temps de monte et de descente sont nuls. Prcisons que les logiciels de simulation logique adoptent toujours la mme convention, malgr une terminologie parfois ambigu (voir ci-dessous).

2.3.1 Des paramtres observables en sortie : les temps de propagation


Considrons la rponse une impulsion dun inverseur lmentaire figure II-6 :

Circuits numriques et synthse logique


Ve Vcc Vs Ve Vs t tPHL tPLH t

23

Figure 2-6

Les deux temps tPHL , pour temps de propagation du niveau haut vers le niveau bas, et tPLH , pour temps de propagation du niveau bas vers le niveau haut, qui ne sont pas forcment gaux, caractrisent le retard entre une cause, Ve , et un effet, Vs , d aux imperfections des transistors qui constituent linverseur. Ces dfinitions se gnralisent sans peine pour toute relation de cause effet entre une entre et une sortie dun circuit : retard par rapport une horloge, retards pour commuter dun tat haute impdance un tat logique et vice versa, etc....On consultera avec profit une notice de circuit pour se familiariser avec les multiples temps de propagations spcifis. Ces temps sont dfinis en valeur maximum, parfois en valeurs typiques et minimum, pour une valeur spcifie de le capacit de charge vue par la sortie (en gnral 50 pF). En effet, les temps de propagation dpendent beaucoup de cette capacit de charge, surtout dans les technologies qui utilisent des transistors effet de champ. Dans certains cas les notices fournissent des taux daccroissement des temps de propagation en fonction de la capacit de charge (nanosecondes par picofarad). N.B. : Les remarques qui prcdent, propos des capacits de charges acceptables en sortie des circuits logiques, laissent penser aux effets pour le moins curieux que peuvent provoquer des mesures faites avec en oscilloscope dpourvu de sonde !

2.3.2 Des rgles respecter concernant les entres


Une autre classe de paramtres dynamiques des circuits est parfois moins bien comprise : elle concerne des paramtres qui ne sont pas directement observables, mais dont le non respect peut entraner des dysfonctionnements du circuit. Ces paramtres interviennent notamment dans les circuits squentiels synchrones, pilots par une horloge. Temps de prpositionnement et de maintien Les temps de prpositionnement (set up time, tSU ) et de maintien (hold time, tH ) concernent les positions temporelles relatives de deux entres dun mme circuit, par exemple la position de lentre D et de lhorloge dune bascule D synchrone, qui ragit aux fronts montants de son horloge. Nous dfinirons ces temps sur cet exemple simple, mais ils se gnralisent toutes les entres dun circuit qui provoquent une action conjointe (figure II-7) :

Circuits numriques et synthse logique


Horloge front actif Horloge Entre Ck D Q Entre t

24

tat indiffrent t tSU tH

Figure 2-7

Pour que la bascule interprte correctement la valeur de lentre, quelle que soit cette valeur, do les deux valeurs possibles reprsentes sur la figure II-7, celle-ci doit tre stable avant la transition active dhorloge (set up) et maintenue stable aprs (hold) cette transition. Typiquement, pour la technologie TTL-LS, ces valeurs sont : tSU = 20 ns et tH = 0. Lintrt davoir une valeur nulle pour le maintien apparat ds que lon remarque quen gnral les entres dun circuit synchrone sont les sorties dun autre, la valeur prendre en compte au moment de la transition dhorloge est alors, sans ambigut, celle qui prcde cette transition. Pour illustrer ceci il suffit de monter une bascule D en diviseur par deux , un montage qui change dtat chaque transition active de lhorloge (figure II-8) :

Horloge Horloge Ck Q D /Q Q rsultat t Entre > tSU + t

Figure 2-8

Si la bascule du schma de la figure II-8 possde un temps de maintien nul, le montage fonctionne correctement quel que soit le temps de propagation de la bascule, pourvu que la clause sur le temps de prpositionnement (qui nest jamais nul) soit respecte. De plus, au niveau de lanalyse de principe, cela permet de comprendre le fonctionnement dun systme en idalisant les caractristiques des composants ; rien nest plus irritant que les explications de principe qui font en permanence appel aux dfauts des composants (les retards) pour clairer ce fonctionnement. Par contre ces dfauts doivent tre pris en compte lors de lvaluation des limites de fonctionnement dun montage, cest ce que nous allons explorer dans la suite.

Circuits numriques et synthse logique

25

Calcul de la frquence maximum dune horloge Reprenons le schma de la figure II-8, mais en tenant compte, cette fois, des retards dans la bascule (figure II-9), de faon pouvoir valuer les limites de performances de notre systme :

Entre > tH Hor Entre Ck Q D /Q Hor TCK > tSU > tH > tSU t

tPHL

tPLH

Figure 2-9

Pour que le montage fonctionne correctement les paramtres des circuits doivent vrifier : tH < min( tPHL , t PLH ) tSU < TCK max( tPHL , t PLH ) soit : FCK = 1/ TCK < 1/ (tSU + max( tPHL , t PLH )) La premire relation, indpendante de la frquence de lhorloge, est toujours vrifie pour des circuits dont le temps de maintien est nul, do lintrt de ces circuits. La deuxime relation permet de calculer la frquence maximum de fonctionnement du montage. On peut tendre ltude prcdente un cas plus gnral que le diviseur par deux (figure II-10) :

Horloge p tP2 tSU tP1 n

Entres

Figure 2-10

Dans un tel systme, qui volue chaque transition dhorloge en fonction de son tat initial et des entres extrieures, trois conditions doivent tre respectes : 1. Les entres extrieures doivent tre correctement positionnes par rapport lhorloge, cela peut tre assur en resynchronisant, au moyen dune bascule D,

Circuits numriques et synthse logique

26

toute entre asynchrone par rapport lhorloge locale ; nous prciserons ce point au paragraphe suivant. 2. La frquence de lhorloge doit respecter lingalit : FCK < 1/ ( tSU + max( (tPropagation ) ) ) 3. Le temps de maintien doit tre nul, ou au pire infrieur au plus petit des temps de propagation. Attention : Un dysfonctionnement par violation de prpositionnement se corrige en rduisant la frquence dhorloge ou en choisissant une technologie plus rapide, un dysfonctionnement par violation de temps de maintien, par contre, est indpendant de la frquence de lhorloge et ncessite, en gnral, une refonte complte du systme. Dautres paramtres sont spcifis qui concernent lhorloge, ou les entres de commandes asynchrones des circuits squentiels : largeur minimum des impulsions, frquence maximum de fonctionnement du circuit sans rebouclage, etc...Ces paramtres conduisent, en gnral, des contraintes beaucoup moins svres que celles que nous venons dobtenir ; il convient de se mfier des valuations htives faites partir de la lecture des notices de circuits, sans valuation des temps de propagation dans le schma rel. Notons que les outils de simulation logique permettent dextraire dun schma complexe les chemins critiques qui limitent les performances du systme. Synchronisation des entres asynchrones dun systme synchrone Dans un systme tel que celui de la figure II-10, il est impossible dassurer que les rgles prcdentes sont respectes si les changements des entres sont asynchrones de lhorloge. Le risque est alors de voir apparatre des transitions fausses10. Pour viter ce type de dsagrment la mthode consiste systmatiquement resynchroniser les entres asynchrones au moyen de bascules D (registre de synchronisation) :

Horloge Entres synchrones p tP1

Entres asynchrones

tPe p

tP2 tSU n

Registre de synchronisation (p bascules D)

Figure 2-11

Dans le schma de principe de la figure II-11 les dures de tous les chemins sont dfinies, ce qui permet de contrler le respect des temps de maintien et de prpositionnement.
10

Par exemple un compteur qui devrait se charger 13 prend la valeur 9 parce que la bascule de poids binaire 2 est un peu plus lente que les autres.

Circuits numriques et synthse logique

27

Il reste cependant une interrogation : que se passe-t-il pour une bascule du registre de synchronisation si les temps prcdents ne sont pas respects pour elle ? A priori, tant que lon reste dans le monde de la logique, le seul risque est de perdre une priode dhorloge dans la prise en compte de lentre concerne. De toute faon un systme synchrone volue avec une dfinition temporelle qui est connue une priode dhorloge prs, le problme semble donc rsolu. Et pourtant... il peut arriver, extrmement rarement (les probabilits sont infrieures 10-9 pour des bascules saines ), quune bascule dont lentre D change juste avant la transition active dhorloge (quelques nanosecondes en TTL-LS ), hsite ensuite entre le niveau haut et le niveau bas, et ce pendant un temps trs long lchelle de lhorloge. Ce phnomne, exceptionnel rappelons le, est connu sous le nom de mtastabilit. Certains fabricants de circuits rapides donnent des indications concernant la propension la mtastabilit de leurs produits. La figure II-12, ci dessous, illustre la tension de sortie dune bascule qui passe par un tat mtastable dans une transition LH.

Ck D

Q Vs

Ve

Violation de tSU

Ve Vs Etat analogique mtastable

Figure 2-12

Une interprtation physique de lapparition dun mtastable peut tre illustre par les points dquilibres dune bille sur une surface courbe (figure II-13) :

Etat mtastable

Etat stable L

Etat stable H

Figure 2-13

Les fluctuations (agitation thermique, impulsions dhorloge) font que la bascule quittera, un moment ou un autre, ltat mtastable, mais il est impossible de prvoir la dure de cet tat. Dans des applications o le risque, mme faible, dapparition de mtastables est intolrable, on peut utiliser une double synchronisation, constitue de deux registres monts en cascade, comme dans un registre dcalage.

Circuits numriques et synthse logique

28

2.3.3 Des rgles respecter concernant les dcouplages


Quand la tension de sortie dun circuit change dtat ce changement dtat saccompagne dun transfert de charge lectrique entre le circuit et la capacit de charge, CL, de la sortie considre. Pendant la transition on peut considrer que la charge transfre provient entirement de la capacit de dcouplage du circuit, les conducteurs dalimentation prsentent en effet une rsistance non ngligeable aux variations brusques de courant11. Un modle lectrique simple permet de modliser la commutation (figure II-14) :

Rligne Vcc CD Vs cc CL

Figure 2-14

Dans une transition LH, qui correspond une fermeture de linterrupteur, il apparat entre Vcc et Vs un diviseur capacitif (Vcc est la tension dalimentation du circuit). On simpose, en gnral, une valeur maximum de variation Vcc de tension dalimentation. Par exemple, un circuit dont huit sorties commutent simultanment, chaque entre tant charge par une capacit de 50 pF, pour un cart Vs = 3 V entre niveaux bas et haut, et une variation Vcc infrieure 100 mV, devra tre dcoupl par : CD (Vs/Vcc) 8CL = 240CL = 12 nF. Do la valeur couramment prconise de 10 100 nF par circuit, avec une capacit qui prsente une faible rsistance srie quivalente en haute frquence, par exemple de type cramique multicouches dilectrique X7R ou Z5U.

2.4 Types de sorties


Tant quune application est construite comme un assemblage de circuits dont chaque sortie commande une ou des entres dautres circuits de mme technologie, cest dire dans la majorit des applications, on fait appel des sorties standard , auxquelles se rapportent les dfinitions vues prcdemment concernant les niveaux logiques. Dans certains cas on est amen utiliser des assemblages qui sont premire vue curieux : plusieurs sorties sont connectes en parallle. Les circuits qui autorisent ce genre de construction font appel des sorties non-standard, collecteur (ou drain) ouvert et/ou sorties trois tats.

11

Rsistance ou inductance ? Un premier niveau danalyse, un peu naf, militerait pour inductance, la thorie des lignes de propagation nous apprend quen dernier ressort il sagit plutt dune rsistance, si les lignes dalimentations sont sans pertes.

Circuits numriques et synthse logique

29

2.4.1 Sorties standard


Pour lutilisateur dun circuit, indpendamment des dtails de la structure interne et tant que les spcifications de courants de sortie maximum sont respectes, une sortie standard apparat comme une source de tension, que cette sortie soit au niveau haut ou au niveau bas. Un modle lectrique simplifi est alors celui de la figure II-15 : les deux interrupteurs fonctionnent en alternance, pour un niveau haut K1 est ferm, K2 est ouvert, la situation est inverse pour un niveau bas.

Sorties standard Vcc K1 Logique de commande K2 sortie sortie sortie Vcc R Vdd

principe

en TTL...

en CMOS.

Figure 2-15

Il est clair que les sorties standard ne supportent : ni la mise en parallle, ni le court-circuit vers la masse ou vers lalimentation.

2.4.2 Sorties collecteur (ou drain) ouvert


Une image du principe qui conduit aux sorties dites collecteur ouvert est celle du signal dalarme dans un train. Le pilote du train doit tre prvenu si lune au moins des alarmes mises la disposition des voyageurs est active. Dun point de vue logique, la fonction correspondante est un OU. Les sorties collecteur ouvert permettent de raliser une telle fonction OU, avec un nombre arbitraire dentres, sans quil soit ncessaire de compliquer le cblage quand on augmente le nombre des entres. Le principe est fort simple : linterrupteur K1 du schma de la figure II-15 a disparu (figure II-16).

Circuits numriques et synthse logique


Sorties collecteur (ou drain) ouvert Vcc sortie Logique de commande K2 sortie Rcepteur signal sortie R pull-up

30

principe

en TTL...

en CMOS.

utilisation : sorties en parallle

Figure 2-16

On notera que dans le schma prcdent le niveau actif est un niveau bas, ce qui est gnralement le cas dans ce type dapplication o tous les circuits partagent la mme masse, mais pas forcment la mme alimentation. La rsistance Rpullup (rsistance de tirage), qui est unique, est situe du ct de lentre du circuit de rception du signal. Une autre application, plus marginale, des sorties collecteur ouvert, est linterface entre des sous-ensembles qui travaillent avec des tensions dalimentation diffrentes, dans le schma de la figure II-16 la tension dalimentation du rcepteur, Vcc, peut tre diffrente de la tension dalimentation des circuits metteurs. Cela permet, par exemple, de crer simplement une interface entre des circuits aliments en 5 V et en 15 V. Les sorties collecteur ouvert ne peuvent remplacer les sorties standard dans toutes les applications : leurs performances dynamiques sont nettement moins bonnes, et trs dissymtriques. Alors que la transition HL est aussi rapide que celle observe avec une sortie standard de la mme technologie, le rgime dynamique de la transition LH fait intervenir la rsistance de tirage, conduisant un temps de monte qui est beaucoup plus grand quavec une sortie standard, et qui dpend fortement de la capacit de charge de la sortie.

2.4.3 Sorties trois tats


Dans un ordinateur les chemins de donnes doivent permettre lchange dinformations entre de nombreuses sources et de nombreux rcepteurs : unit(s) centrale(s), mmoires, priphriques. Un cblage traditionnel, par des connexions deux deux entre toutes les sources et tous les rcepteurs possibles, conduirait rapidement un schma inextricable. La solution ce problme est de raliser les interconnexions entre les diffrents lments dun systme par des bus. Un bus est un ensemble de conducteurs (fils lectriques) qui relient en parallles toutes les entres et toutes les sorties susceptibles de recevoir ou mettre un signal dun type donn. Dans une architecture classique on trouvera, par exemple, un bus de donnes, un bus dadresses et un bus de contrle12. Le protocole daccs un bus est simple : chaque instant il ne peut y avoir, au maximum, quun seul matre du bus ; dit autrement, une seule sortie peut imposer, un instant, des niveaux logiques aux conducteurs du bus. Si deux circuits (ou plus) tentent dimposer, simultanment et indpendamment, des niveaux logiques au bus on parle de conflit de bus. Dans le schma de la figure II-17, qui illustre une connexion en bus entre une unit centrale et trois botiers de mmoires, lors dune opration de lecture (transfert de la mmoire vers lunit centrale), une seule des lignes de slection (sel i) est active, les sorties des
12

Dans le cas du bus de contrle, le terme de bus est parfois un abus de langage, il est employ mme quand les conducteurs de ce bus relient entre elles des sorties qui ne sont pas trois tat .

Circuits numriques et synthse logique

31

mmoires qui ne sont pas slectionnes sont lectriquement dconnectes du bus de donnes, elles sont dans un tat particulier dit tat haute impdance.

donnes

Unit centrale sel 0 sel 1 sel 2 lect/cr

mmoire 0 sel

mmoire 1

mmoire 2

sel sel adresses

Figure 2-17

Les sorties qui permettent une telle dconnexion sont appeles sorties trois tats (tristate). Physiquement, dans une sortie trois tats, les deux interrupteurs de la figure II-15 sont ouverts (les transistors correspondants sont bloqus). Une sortie trois tats peut se trouver dans lune des trois configurations : basse impdance, niveau logique bas, basse impdance, niveau logique haut, haute impdance (la broche correspondante du circuit est en lair ).

OE

OE

OE E/S

Portes trois tats

Entre sortie bi-directionnelle

Figure 2-18

Traditionnellement les symboles distinguent les commandes de connexion (commandes de mise en basse impdance) des autres entres logiques des oprateurs par une position particulire (entres OE de la figure II-18), le niveau actif de ces commandes, indiqu sur les symboles, correspond ltat basse impdance. On peut raliser une sortie collecteur ouvert au moyen dune sortie trois tats, il suffit de maintenir un niveau logique bas, constant, et dagir sur la commande de tri-state .

Circuits numriques et synthse logique

32

Exercices Frquence maximum de fonctionnement Le schma de la figure IV-6, page 94, reprsente un compteur dcimal trois chiffres qui utilise lassociation de trois compteurs, un par dcade. En consultant un catalogue de circuits 74LS..., estimer le frquence maximum de fonctionnement du montage dans cette technologie. En quoi le schma propos dans le catalogue permet-il de gagner un peu en vitesse ? Le constructeur propose dutiliser le circuit 74LS264, pour augmenter la vitesse maximum de fonctionnement. A partir de combien de dcades ladjonction de ce circuit auxiliaire est elle intressante ? Circuits programmables Au moyen dune notice du circuit 22V10, peu importe la technologie, expliquer pourquoi les constructeurs distinguent une frquence maximum de fonctionnement interne et une frquence maximum de fonctionnement externe . Sorties collecteur ouvert (manipulation) 1. Concevoir et tester un schma qui permet d'allumer une diode lectro-luminescente partir de deux sources connectes en parallles. On fixera le courant dans la diode 5 mA, ce courant tant dtermin par une rsistance de "pull-up" connecte soit 5 V, soit 12 V (deux valeurs diffrentes pour la rsistance !) . 2. Ces valeurs sont-elles acceptables pour un circuit du type 74LS06 ? 3. On commande l'un des circuits du montage prcdent par un gnrateur, sortie TTL, rgl environ 100 kHz . Observer l'oscilloscope et interprter la forme du signal de sortie de ces circuits, dans les deux cas de tension d'alimentation. D'o provient la diffrence entre les temps de monte et de descente de ce signal ?

Circuits numriques et synthse logique

33

3 Oprateurs lmentaires

Une fonction numrique complexe est construite de faon hirarchique, comme un assemblage de boites noires , fonctions moins complexes, dfinies par leurs entres, leurs sorties et les relations entre les premires et les secondes. Tout en bas de cette hirarchie on trouve des oprateurs lmentaires, les briques ultimes au del desquelles intervient llectronicien qui les ralise avec des transistors ; mais au del de cette frontire le monde du numrique sarrte. Nous considrerons donc que les briques lmentaires de notre construction sont ces oprateurs lmentaires, et avant dexplorer cette dmarche descendante qui va du gnral au particulier, du complexe au simple, nous tenterons de bien comprendre le fonctionnement de ces oprateurs lmentaires. Nous utiliserons, entre autres, un langage de haut niveau, VHDL13, pour dcrire le fonctionnement de ces oprateurs lmentaires. Il est bien vident que VHDL connat ces oprateurs comme primitives internes, et quil y a donc l une redondance certaine. Mais cela nous familiarisera avec ce langage qui est en passe de devenir un standard de description des systmes numriques, et mme, terme, des systmes analogiques. Sauf prcision contraire, nous adopterons dans la suite une convention logique14 positive, qui associe le 0 binaire la valeur logique FAUX et le 1 binaire la valeur logique VRAI.

3.1 Combinatoire et squentiel


Certains de ces oprateurs lmentaires sont la matrialisation, sous forme de circuits, ou de parties de circuits, des oprateurs bien connus de lalgbre de BOOLE. Dautres, et notamment (mais pas uniquement) ceux que lon appelle oprateurs squentiels, sont une spcialit de llectronique numrique, leur description napparat dans aucun trait relatif la dite algbre. Si lon cherche classer les oprateurs par familles, et cest en classant les choses que lon se donne les moyens den comprendre ventuellement le fonctionnement, le premier critre de classement concerne la faon dont volue, au cours du temps, ltat dun oprateur, donc ses sorties15. On dira quun oprateur est combinatoire si les valeurs de ses sorties sont dtermines de faon univoque par les valeurs des entres au mme instant ( un temps de propagation prs, bien sr). Un oprateur est squentiel si son tat un instant donn dpend des entres, videmment, mais aussi de ses tats passs, du chemin quil a parcouru pour en arriver l, bref, un oprateur squentiel est dou de mmoire.
13 14

VHDL est un acronyme de Very high speed integrated circuits Hardware description language. Voir chapitre I. 15 Etat et sorties dun systme sont deux concepts diffrents, mais un systme dont ltat nest pas visible de lextrieur na gure dintrt, lvolution de ltat interne dun objet a donc priori une manifestation externe visible en sortie, mme si cette manifestation nest pas immdiate.

Circuits numriques et synthse logique

34

Prenons un exemple : une serrure mcanique combinaisons et une serrure hypothtique digicode. Louverture de la premire sera provoque par une combinaison prdfinie des trois variables dentre, louverture de la seconde sera obtenue par la frappe dune squence prdfinie de valeurs sur le clavier. Par exemple, si pour les deux serrures le code daccs est 247, la premire 0 1 2 serrure souvrira ds que ses variables dentre 3 4 5 (les molettes) afficheront ce code, la deuxime 2 4 7 6 7 8 exigera que les trois chiffres de la cl soient taps 9 A B au clavier dans le bon ordre. Il est clair que la Figure 3-1 deuxime serrure doit se souvenir du 2 quand on tape le 4, du 2 et du 4 quand on tape le 7 ; elle doit donc possder une mmoire interne. Cette mmoire interne peut tre une simple mmorisation des chiffres prcdemment taps, cest conceptuellement la solution la plus vidente, mme si ce nest pas la plus simple raliser. Une autre solution consiste doter la serrure dune variable interne qui mmorise ltat davancement de la squence, sans mmoriser les nombres eux-mmes. On pourra alors dcrire le fonctionnement du systme par une sorte de diagramme, figure III-2, dans lequel chaque case reprsente ltat interne, auquel sont ventuellement attaches des actions (sorties), et les flches les transitions dun tat lautre. A ct de chaque transition figure la condition16 sur lentre qui provoque le franchissement de cette transition.

entre = 2 tat initial, serrure ferme

entre = 4 serrure ferme

entre = 7 serrure ferme tat final, serrure ouverte

entre 4 entre 7 dtection de l ouverture de l anneau Figure 3-2

La plupart des systmes rels sont squentiels, et beaucoup peuvent tre analyss simplement par lintroduction dune ou de plusieurs variables dtat. Limportance des systmes squentiels a amen les concepteurs de circuits imaginer des oprateurs lmentaires spcifiques, qui facilitent la tche du concepteur. Pour illustrer le genre de questions auxquelles est amen le concepteur rpondre, reprenons lexemple de la serrure : Que doit-on faire si plusieurs entres changent simultanment ? Comment faire cooprer plusieurs sous-systmes de faon prvisible ? Lide est progressivement venue que le travail de conception tait grandement simplifi si les transitions ne pouvaient avoir lieu qu des temps connus, indpendamment des instants de changements des entres, instants que, bien videmment, le concepteur ne peut pas connatre. On rajoute alors un signal interne spcial, lhorloge, qui fixe la cadence de
16

Le diagramme prsent figure III-2 comporte en fait des erreurs par omission, lutilisateur astucieux peut obtenir louverture de la serrure, mme sil ne connat pas le code daccs. Question : comment ?

Circuits numriques et synthse logique

35

lvolution du systme. Les systmes qui voluent sous le contrle dune horloge sont appels systmes squentiels synchrones. Les circuits synchrones ont un fonctionnement qui ne peut pas tre entirement compris dans le cadre de la logique combinatoire, ils font appel des oprateurs lmentaires, les bascules, qui sont des briques de base part entire de la logique, au mme titre quun oprateur ET .

3.2 Oprateurs combinatoires


Pour chaque oprateur, nous indiquerons le ou les symboles couramment rencontrs, puis nous en donnerons une description sous forme de table de vrit, dexpression algbrique, de diagramme de Venn (hritage de la thorie lmentaire des ensembles) et sous forme dalgorithme dans le langage VHDL.

3.2.1 Des oprateurs gnriques : NON, ET, OU


Les oprateurs NON (NOT), ET (AND) et OU (OR) jouent un rle privilgi dans la mesure o ils sont gnriques , cest dire que toute fonction combinatoire peut tre exprime laide de ces oprateurs lmentaires. Les symboles Bien que les symboles rectangulaires soient normaliss, la majorit des notices emploient les symboles curvilignes traditionnels (figure III-3). Lassemblage de symboles lmentaires dans un schma porte le nom de logigramme, un logigramme est presque le schma de cblage dans lequel on aurait oubli les masses et les alimentations des circuits.

s e

Inverseur : NON (ou PAS)

e1 e2

e1 e2

&

e1 e2

e1 e2

Intersection : ET

Runion : OU

Figure 3-3

Les tables de vrit Toute fonction combinatoire peut, en dernier ressort, tre dcrite par une table qui numre les valeurs prises par la (ou les) sortie(s) en fonction des valeurs des variables dentre. Cette mthode apparemment simple a le dfaut de devenir extrmement lourde quand le nombre de variables mises en jeu augmente. Il faut cependant y recourir quand les mthodes plus abstraites ne permettent pas de rpondre une interrogation. Les tables peuvent tre prsentes sous forme linaire ou, ce qui est souvent plus compact, sous forme de tableaux (figure III-4) :

Circuits numriques et synthse logique


e1e2 e 0 1 s 1 0 00 01 10 11 s 0 0 0 1 ET Figure 3-4 e2 0 e1 0 0 1 0 1 0 1 e1e2 00 01 10 11 s 0 1 1 1 OU e2 0 e1 0 0 1 1 1 1 1

36

NON

Notations algbriques Oprateur NON : Oprateur ET : Oprateur OU :

s = e , not parfois, par commodit dcriture s = /e.


s = e1 e2 , ou s = e1 & e2 , ou encore s = e1 e2. s = e1 e2 , ou s = e1 | e2 , ou encore s = e1 + e2.

Les deux notations et + pour les oprateurs ET et OU sont videmment particulirement ambigus, donc inutilisables, quand on mlange dans une mme description des expressions arithmtiques et des expressions logiques. Quand il ny a pas risque de confusion, ce sont pourtant les notations les plus frquentes. Lors de lcriture dune expression qui fait intervenir les diffrents types doprateurs, les rgles de priorit gnralement adoptes vont, de la priorit la plus grande la plus faible, de linversion (NON) au OU : a + b /c doit tre compris a + ( b ( /c)) Par contre il convient dtre extrmement prudent quand apparat un mlange doprations arithmtiques et logiques (mlange autoris dans certains langages), la prudence lmentaire dicte, dans un tel cas, de parenthser les expressions. Diagrammes de Venn Ces diagrammes illustrent bien les proprits des expressions simples, ils soulignent lidentit de proprits de lalgbre de Boole et de lalgbre des parties dun ensemble, munie des oprations complmentation (NON), intersection (ET) et runion (OU) (figure III-5).

e1 e

e2

e1

e2

NON Figure 3-5

ET

OU

Circuits numriques et synthse logique

37

Description en VHDL Des tautologies Les exemples de code source VHDL ci-dessous ne nous apprennent rien sur les proprits des oprateurs concerns, ils nous montrent laspect dun programme VHDL et nous rappellent que les oprations NON, ET et OU sont dfinies sur les objets de type BIT comme sur ceux de type BOOLEAN, avec une convention logique positive (1 TRUE, 0 FALSE).
-- inverseur (ceci est un commentaire) ENTITY inverseur IS PORT ( e : IN BIT ; -- les entrees s : OUT BIT ); -- les sorties END inverseur; ARCHITECTURE pleonasme OF inverseur IS BEGIN s <= NOT e; END pleonasme;

de mme :
-- operateur ET ENTITY et IS PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END et; ARCHITECTURE pleonasme OF et IS BEGIN s <= e1 AND e2; END pleonasme;

ou encore :
-- operateur OU ENTITY ou IS PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END ou; ARCHITECTURE pleonasme OF ou IS BEGIN s <= e1 OR e2; END pleonasme;

On notera la structure gnrale dun programme et le symbole daffectation particulier aux objets de nature signal (s, e, e1, e2). La dclaration ENTITY correspond au prototype dune fonction en C, elle dcrit linteraction entre loprateur et le monde environnant. La partie ARCHITECTURE du programme correspond la description interne de loprateur, elle dcrit donc son fonctionnement. Les mots cls du langage ont t mis en majuscule, cest une habitude de certains, pas une obligation.

Circuits numriques et synthse logique

38

Des affectations conditionnelles Dans les programmes qui suivent on voit apparatre la notion de haut niveau du langage. Des expressions purement boolennes sont utilises pour dcrire le fonctionnement dun circuit. Ici elles traduisent strictement les tables de vrit, mais permettent videmment des constructions beaucoup plus labores.
-- inverseur ENTITY inverseur IS PORT ( e : IN BIT ; s : OUT BIT ); END inverseur; ARCHITECTURE logique OF inverseur IS BEGIN s <= WHEN (e = ) ELSE ; END logique;

de mme :
-- operateur ET ENTITY et IS PORT ( e1, e2 : IN BIT s : OUT BIT END et; ARCHITECTURE logique OF BEGIN s <= WHEN (e1 = END logique;

; ); et IS OR e2 = ) ELSE ;

ou encore :
-- operateur OU ENTITY ou IS PORT ( e1, e2 : IN BIT s : OUT BIT END ou; ARCHITECTURE logique OF BEGIN s <= WHEN (e1 = END logique;

; ); ou IS AND e2 = ) ELSE ;

Des exemples de modles comportementaux Terminons cette premire dcouverte de VHDL par deux descriptions purement comportementales des oprateurs ET et OU :
ENTITY et IS -- operateur ET PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END et; ARCHITECTURE abstrait OF et IS BEGIN PROCESS ( e1,e2 ) BEGIN

Circuits numriques et synthse logique


IF (e1 = s <= ELSE s <= END IF; END PROCESS; END abstrait; OR e2 = ; ; ) THEN

39

ou encore :
-- operateur OU ENTITY ou IS PORT ( e : IN BIT_VECTOR(0 TO 1) ; -- ATTENTION!!! s : OUT BIT ); END ou; ARCHITECTURE abstrait OF ou IS BEGIN PROCESS ( e ) BEGIN CASE e IS WHEN "00" => s <= '0'; WHEN OTHERS => s <= '1'; END CASE; END PROCESS; END abstrait;

3.2.2 Un peu dalgbre


Nous rappelons rapidement ici quelques proprits lmentaires des oprateurs fondamentaux de la logique combinatoire. Le lecteur dsireux de parfaire sa culture sur ce sujet pourra consulter un ouvrage de mathmatiques, au chapitre qui traite de lalgbre de Boole ou de lalgbre des parties dun ensemble17. Parmi ces proprits, les plus importantes, et de loin, dans les applications, sont les lois de De Morgan : ces deux lois permettent de passer dune convention logique une autre, sans calcul, ou presque. Les dmonstrations concernant lalgbre de Boole peuvent toujours se faire, en dernier recours, par un examen des tables de vrit. Cette mthode, un peu lourde, doit tre envisage si des mthodes plus astucieuses ne sont pas trouves ; en tout tat de cause, il nest pas pensable de rester dans le doute en ce qui concerne un rsultat de logique combinatoire. Lintuition permet de gagner du temps dans lobtention dun rsultat, son absence ne justifie pas le doute. Proprits des oprateurs ET et OU Associativit, commutativit Associativit :

17

Par exemple : J.C. BELLOC et P. SCHILLER : Mathmatiques pour llectronique, Masson, 1994.

Circuits numriques et synthse logique

40

a (b c) = (a b) c , de mme : a + (b + c) = (a + b) + c . Commutativit : a b = b a , et : a + b = b + a . Un oprateur, agissant sur deux oprandes, qui est associatif et commutatif peut tre gnralis un nombre quelconque doprandes, sans quil soit ncessaire de parenthser les expressions, par exemple : a + b + c + d + e est dfini de faon univoque quel que soit lordre dans lequel on effectue les calculs . Pratiquement cela signifie quil est possible de concevoir des oprateurs ET et OU nombre arbitraire dentres (figure III-6) :

e1 s en

e1 & s en Intersection : ET

e1 s en

e1 en Runion : OU

Figure 3-6

On notera que la sortie dun ET vaut 0 si lune au moins des entres est 0, et que, rciproquement, la sortie dun OU vaut 1 si lune au moins des entres est 1. Double distributivit La ressemblance entre les proprits des oprateurs arithmtiques, appliqus des chiffres binaires, et celles des oprateurs logiques est grande. Une diffrence notable concerne la distributivit, les oprateurs ET et OU sont mutuellement distributifs lun par rapport lautre : a (b + c) = (a b) + (a c) , ce qui ntonne personne (a(b + c) = ab+ac). a + (b c) = (a + b) (a + c) , qui na pas dquivalent arithmtique (a + bc (a + b) (a + c) ). La distributivit du OU par rapport au ET, illustre par la deuxime des relations cidessus, est dautant plus troublante que lon adopte gnralement la mme convention de priorit entre les oprateurs ET et OU quentre leurs analogues arithmtiques : les oprateurs multiplicatifs sont plus prioritaires que les oprateurs additifs. Cela permet dviter certaines parenthses dans lcriture des relations un peu complexes, mais rompt laspect symtrique des proprits de la runion et de lintersection logiques. Pot pourri Sans commentaire : a a = a, a 1 = a (lment neutre), a 0 = 0, a + a = a, a + 1 = 1, a + 0 = a (lment neutre),

Circuits numriques et synthse logique

41 a+ab=a

= a, a + a = 1, a a = 0, a + ( a b) = a + b,

Les lois de DE MORGAN Les deux lois de De Morgan permettent le passage dune fonction logique son complment, elles sont utilises systmatiquement par les logiciels daide la synthse de circuits logiques, pour dterminer la convention logique qui conduit lquation la plus simple qui rende compte dun problme donn. Les voici : (A + B) = A B et : (A B) = A + B Bien videmment, dans les expressions prcdentes, A et B peuvent tre elles-mme des expressions. Sous ces formules apparemment simples se cachent parfois des calculs importants.

3.2.3 Non-ET, Non-OU


Les oprateurs NON-ET (NAND), et NON-OU (NOR), jouent un rle particulier : ils contiennent chacun, ventuellement via les lois de De Morgan, les trois oprateurs gnriques de la logique combinatoire ET, OU et NON. Le premier, loprateur NAND, est gnrateur de la technologie TTL (74xx00). Le second, loprateur NOR, est gnrateur de la technologie ECL. Dfinitions et symboles Non Et

e2

e1 e2

e1 s e2

&

e1 s e2

e1 e2

e1

0 1 1

1 1 0

0 1

NON-ET, ou NAND

Figure 3-7

Les quations de loprateur NAND sont, en appliquant les lois de De Morgan :

s = e1 e2 = e1 + e2
Non Ou

e2

e1 e2

e1 s e2

>=1

e1 s e2

e1 s e2

&

e1

0 1 0

1 0 0

0 1

NON-OU, ou NOR Figure 3-8

Les quations de loprateur NOR sont, en appliquant les lois de De Morgan :

Circuits numriques et synthse logique

42

s = e1 + e2 = e1 e2
Les oprateurs NAND et NOR ne sont pas associatifs, ils ne sont donc pas gnralisables, sans prcaution, un nombre quelconque dentres. Par contre on peut dfinir un oprateur qui est le complment du ET (respectivement du OU) plusieurs entres comme un NON-ET (respectivement NON-OU) gnralis :

s = e1 ... en ( ou s = e1 + ... + en respectivement).


Une illustration des lois de De Morgan A titre dillustration des lois de De Morgan, et pour prciser ce que lon entend par un oprateur gnrique, montrons quune expression quelconque peut tre construite en nutilisant que des oprateurs de type NAND :
a + b ( c + d e) = a + b ( c + d e) = a b ( c + d e)

= a b ( c + d e) = a b c d e

La dernire expression ne fait appel qu des oprateurs de type NAND, et des inverseurs qui sont des NAND une seule entre.

3.2.4 Le ou exclusif , ou somme modulo 2


Oprateur aux multiples applications, le OU EXCLUSIF (XOR) est sans doute loprateur deux oprandes le plus riche et le moins trivial. Il trouve ses applications dans les fonctions : arithmtiques, additionneurs, comparateurs et compteurs ; de contrle et de correction derreurs ; o lon souhaite pouvoir programmer la convention logique ; de cryptage de linformation. Aprs avoir donn la dfinition de cet oprateur, nous donnerons quelques exemples de ces applications. Dfinition algbrique et symboles

e1 e2

e1 e2

e2

=1

e1

0 0 1

1 1 0

0 1

OU EXLUSIF (XOR) Figure 3-9

On peut remarquer que cet oprateur prend la valeur 1 quand ses deux oprandes sont diffrents. La dfinition algbrique du OU EXCLUSIF, laide des oprateurs ET () et OU (+), est : s = e1 e2 = e1 e2 + e1 e2 = (e1 + e2) (e1 + e2)

Circuits numriques et synthse logique

43

Dautres symboles sont parfois rencontrs pour dsigner le OU EXCLUSIF : :+:, ^ ou, plus rarement, . ATTENTION ! Comme on peut facilement le vrifier sur la table de vrit de la figure III-9, le OU EXCLUSIF est loprateur daddition lmentaire de deux chiffres en base deux. Il est donc possible de noter cet oprateur + , tout simplement, quand il ny a pas de risque de confusion avec le ou inclusif. Ce type de confusion ne se pose pas dans des langages de haut niveau comme VHDL o le + est le symbole de laddition, qui porte sur des nombres, les oprateurs logiques, dont les oprandes sont de type BIT ou BOOLEAN, sont reprsents par leurs noms AND, OR et XOR. Proprits lmentaires et applications Algbre Loprateur ou exclusif possde les proprits de laddition : il est associatif, commutatif et possde 0 comme lment neutre ; on peut donc le gnraliser un nombre quelconque doprandes dentre. Ainsi gnralis loprateur devient une fonction qui vaut 1 quand il y a un nombre impair de 1 dans le mot dentre, do le symbole de la figure III-10, o la table de vrit concerne un oprateur 4 oprandes18.

e1 s en

e1 =2k+1 en OU EXLUSIF gnralis (XOR) s

00 01 11 10 00 0 1 0 1 01 1 11 0 10 1 0 1 0 1 0 1 0 1 0

Figure 3-10

Complment du OU EXCLUSIF (XNOR) : Loprateur OU EXCLUSIF a la particularit que pour obtenir son complment on peut, soit complmenter la sortie, soit complmenter lune quelconque de ses entres. a b = a b = a b = a b + a b = (a + b) (a + b) Comme oprateur deux oprandes, ce nouvel oprateur indique lidentit entre les deux oprandes, do le nom parfois employ pour le dsigner de concidence . Comme oprateur gnralis un nombre quelconque doprandes, le complment du ou exclusif indique par un 1 quun nombre pair de ses oprandes vaut 1. Addition en binaire Pour faire laddition de deux nombres il faut savoir faire la somme de trois chiffres : les chiffres de rang n des deux oprandes et le report rn issu de laddition des chiffres de rang infrieur ; outre la somme il faut galement gnrer le report rn+1 pour ltage suivant. On appelle additionneur complet un tel oprateur (figure III-11).
18

On notera le code particulier utilis pour numroter lignes et colonnes, cest un code connu sous le nom de code de GRAY, ou code binaire rflchi ; ce code a la particularit que lon passe dune combinaison la suivante en changeant la valeur dun seul chiffre binaire. Nous aurons loccasion den reparler.

Circuits numriques et synthse logique


an bn rn Figure 3-11

44
sn = an bn rn rn+1 = an bn + (an + bn) rn

additionneur

sn rn+1

La ralisation de laddition de deux nombres peut se faire en cascadant les oprateurs prcdents, on parle alors de propagation de retenue , ou en calculant en parallle toutes les retenues, au prix dune complexit non ngligeable19, on parle alors de retenue anticipe . Erreurs : tests de parits Lors de la transmission dinformations numriques entre deux sous-ensembles, il peut se produire des erreurs. On peut tenter de dtecter, voire de corriger ces erreurs en rajoutant des redondances dans le message transmis. Ces redondances consistent rajouter au contenu du message des bits supplmentaires labors conformment une rgle connue la fois par lmetteur et le destinataire du message. La technique la plus lmentaire, qui est trs utilise dans la transmission de caractres, cods en ASCII par exemple, consiste rajouter un bit de parit calcul de telle faon que chaque caractre transmis, augment de cet lment de contrle, contienne un nombre pair (parit paire, even parity) ou impair (parit impaire, odd parity) dlments binaires 1. La figure III-12 illustre le principe dun metteur qui utilise une convention de parit paire. Du ct du rcepteur un schma similaire permet de 2k + 1 contrler que la parit du caractre caractre caractre est bien conforme la valeur ou exculsif transmis pair transmettre prvue par le protocole de transmission. 7 Ce type de contrle Figure 3-12 lmentaire ne permet de dtecter que des erreurs simples ; si deux erreurs affectent le mme caractre la parit du message reu est correcte, le rcepteur nest alors pas pr-venu du problme.
7 8

En augmentant le nombre de cls de contrle (les bits supplmentaires) il est possible de construire des codes autocorrecteurs, qui dtectent et corrigent les erreurs de transmission, tant que leur nombre nexcde pas une valeur limite qui dpend du nombre de cls rajoutes. Oprateur programmable Quand on calcule une fonction combinatoire complexe, il peut tre plus simple de calculer dabord son complment et dinverser le rsultat. La plupart des circuits programmables offrent, pour ce faire, la possibilit de complmenter, ou non, la sortie dun oprateur au moyen dun fusible de polarit. Loprateur OU EXLUSIF permet de crer cette fonctionnalit, lune de ses entres est alors considre comme une entre de donne, lautre comme une commande de polarit, conformment au schma de principe de la figure III-13.

19

On consultera avec profit la notice dun circuit comme le 74xx283.

Circuits numriques et synthse logique

45

fonction programmable

commande de polarit Figure 3-13

Descriptions en VHDL VHDL connat loprateur XOR comme primitive ; les exemples qui suivent sont destins explorer, outre les proprits de cet oprateur, des fonctionnalits du langage que nous navions pas abordes jusquici. Description structurelle Ayant dfini les oprateurs lmentaires ET, OU et NON comme prcdemment, il est possible de les utiliser dans une construction plus complexe, comme le OU EXCLUSIF. Lexemple qui suit est, bien sr, compltement acadmique, il est difficile dimaginer plus compliqu pour raliser un oprateur aussi simple !
ENTITY ouex IS -- operateur OU exlusif PORT ( a, b : IN BIT ; s : OUT BIT ); END ouex; use work.portelem.all ; -- rend visible le contenu de -- portelem ARCHITECTURE struct OF ouex IS signal abar,bbar,abbar,abarb : bit; BEGIN -- les differents composants sont instancies ici i1 : inverseur port map (a,abar); i2 : inverseur port map (b,bbar); et1 : et port map (a,bbar,abbar); et2 : et port map (b,abar,abarb); ou1 : ou port map (abbar,abarb,s); END struct;

Pour que le programme prcdent soit compris correctement, il a fallu, au pralable, crer et compiler le paquetage portelem et la description des oprateurs lmentaires qui y sont dcrits comme suit :
package portelem is component inverseur PORT ( e : IN BIT ; -- les entrees s : OUT BIT ); -- les sorties END component; component et PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END component;

Circuits numriques et synthse logique

46

component ou PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END component; end portelem; -- ce qui suit est la copie de programmes dj vus ENTITY inverseur IS PORT ( e : IN BIT ; -- les entrees s : OUT BIT ); -- les sorties END inverseur; ARCHITECTURE pleonasme OF inverseur IS BEGIN s <= NOT e; END pleonasme; -- operateur ET ENTITY et IS PORT ( e1, e2 : IN BIT ; s : OUT BIT ); END et; ARCHITECTURE pleonasme OF et IS BEGIN s <= e1 AND e2; END pleonasme; -- operateur OU ENTITY ou IS PORT ( e1, e2 : IN BIT ; s : OUT BIT );

END ou;
ARCHITECTURE pleonasme OF ou IS BEGIN s <= e1 OR e2; END pleonasme;

addition lmentaire Loprateur OU EXCLUSIF nest autre que loprateur daddition en base deux, le programme suivant en est la consquence directe :
-- operateur OU exlusif ENTITY ouex IS PORT ( a, b : IN INTEGER RANGE 0 TO 1 ; s : OUT INTEGER RANGE 0 TO 1 ); END ouex; ARCHITECTURE arith of ouex is BEGIN s <= a + b; END arith;

Circuits numriques et synthse logique

47

La comparaison Si deux oprandes binaires sont diffrents le rsultat de loprateur OU EXCLUSIF est '1' :
-- operateur OU exlusif ENTITY ouex IS PORT ( a, b : IN BIT ; s : OUT BIT ); END ouex; ARCHITECTURE compare of ouex is BEGIN s <= '0' WHEN a = b ELSE '1'; END compare;

Indicateur de parit impaire Nous terminerons cette dcouverte du OU EXCLUSIF par sa gnralisation comme contrleur de parit dun mot dentre :
-- operateur OU exlusif generalise ENTITY ouex IS PORT ( a : IN BIT_VECTOR(0 TO 3) ; s : OUT BIT ); END ouex; ARCHITECTURE parite of ouex is BEGIN process(a) variable parite : bit ; begin parite := '0' ; FOR i in 0 to 3 LOOP if a(i) = '1' then parite := not parite; end if; END LOOP; s <= parite; end process; END parite;

Rien ne soppose, semble-t-il, gnraliser ce programme un mot dentre de, mettons, 16 bits. L se pose un petit problme : loptimiseur du compilateur va tenter de rduire les quations logiques sous-tendues par la boucle for pour exprimer la fonction obtenue comme somme (logique) de produits (logiques). Mais il y a 32 768 produits logiques dans un contrleur de parit sur 16 bits (215), do les dangers des descriptions abstraites.... Une solution plus raisonnable, mais, il est vrai, non optimale du point de vue vitesse de calcul est20 :
ENTITY ouex4 IS
20

-- le mme que prcdemment

Le lecteur est instamment convi dessiner un schma logique en mme temps quil lit le corps du programme.

Circuits numriques et synthse logique


PORT ( a : IN BIT_VECTOR(0 TO 3) ; s : OUT BIT ); END ouex4; ARCHITECTURE parite of ouex4 is BEGIN process(a) variable parite : bit ; begin parite := '0' ; FOR i in 0 to 3 LOOP if a(i) = '1' then parite := not parite; end if; END LOOP; s <= parite; end process; END parite; ENTITY ouex16 IS PORT (e : IN BIT_VECTOR(0 TO 15); s : OUT BIT_VECTOR (0 TO 3); -- force la conservation des signaux intermdiaires s16 : OUT BIT); -- le rsultat complet END ouex16; ARCHITECTURE struct OF ouex16 IS SIGNAL inter : BIT_VECTOR(0 TO 3); COMPONENT ouex4 PORT ( a : IN BIT_VECTOR(0 TO 3) ; s : OUT BIT ); END COMPONENT; BEGIN par16 : for i in 0 to 3 generate g1 : ouex4 port map (e(4*i to 4*i + 3),inter(i)); end generate; g2 : ouex4 port map (inter,s16); s <= inter; END struct;

48

On notera lintrt des boucles generate pour crer des motifs rptitifs.

3.2.5 Le slecteur, ou multiplexeur deux entres


Le lecteur attentif naura pas manqu de remarquer que beaucoup de choses, en logique combinatoire, peuvent sexprimer par des alternatives SI... ..ALORS... ...AUTREMENT. Mais quel est donc loprateur lmentaire qui, en logique cble, permet de matrialiser directement ce type de propositions ? Le slecteur, ou multiplexeur. Nous donnons ci-dessous la description de sa version la plus simple, quand il ny a que deux choix possibles dans lalternative, mais il est bien sr possible de le gnraliser pour reprsenter des choix multiples (IF... ...THEN... ...ELSIF... ...ELSIF... ...END IF, ou, CASE... ...IS WHEN... ...WHEN... ...END CASE).

Circuits numriques et synthse logique

49

Description Principe gnral Le slecteur est construit comme un oprateur o lon spare les variables dentre en deux groupes : Les entres de donnes, qui sont en gnral issues dautres fonctions ; Lentre de slection, qui est une commande. Prenons un exemple. Pour faire laddition de deux chiffres dcimaux, cods en BCD, il faut commencer par faire laddition de ces deux chiffres, sans se poser de question, comme sil sagissait de nombres crits en base 2. Deux ventualits peuvent alors se produire : 1. La somme est infrieure 10, lopration est alors termine. 2. La somme est suprieure ou gale 10, ce rsultat nest alors pas correct en BCD. Il faut lui rajouter lcart entre un nombre binaire sur 4 bits (0 15) et un chiffre dcimal (0 9), soit 6. Rsumons ce qui prcde sous forme dun algorithme : a et b sont les deux chiffres additionner, s est le rsultat. s=a+b si s < 10 termin autrement s = s + 6. Une structure de la ralisation cble de ce qui prcde pourrait tre celle de la figure III-14 :

selection a b addition 6 addition e0 e1 sel s s = e0 sel + e1 sel

e1 10 e2

e1>e2

comparaison

Figure 3-14

Symbole et logigramme

e0 e0 e1 0 s 1 sel sel e1 s

Le multiplexeur lmentaire est souvent reprsent par un symbole qui indique les valeurs de lentre de slection ct des entres de donnes correspondantes (figure III-15).

Figure 3-15

Circuits numriques et synthse logique

50

Code source VHDL Le multiplexeur deux entres est llment de base des descriptions dans des langages comme VHDL, nous nen donnerons que quelques exemples : Quelques tautologies Nous retrouvons ici la dfinition mme dun multiplexeur.
entity sel is port ( e0,e1,sel s end sel;

: in bit; : out bit);

architecture pleonasme of sel is begin with sel select s <= e0 when '0', e1 when '1'; end pleonasme;

ou :
entity selecteur is port ( e0,e1,sel : in bit; s : out bit); end selecteur; architecture procif of selecteur is begin process (sel) begin if(sel = '0') then s <= e0 ; else s <= e1; end if; end process; end procif;

ou encore :
entity selecteur is port ( e0,e1,sel : in bit; s : out bit); end selecteur; architecture pleonasme of selecteur is begin s <= e0 when (sel = '0') else e1; end pleonasme;

Circuits numriques et synthse logique

51

Une autre faon de voir : les tableaux VHDL connat les types structurs, la recherche dun lment dun tableau se traduit, en logique cble, par un multiplexeur :
entity selecteur is port ( e : in bit_vector(0 to 1); sel : in integer range 0 to 1; s : out bit); end selecteur; architecture vecteur of selecteur is begin s <= e(sel); end vecteur;

ou, en gnralisant :
entity selecteur is port ( e : in bit_vector(0 to 7); sel : in integer range 0 to 7; s : out bit); end selecteur; architecture vecteur of selecteur is begin s <= e(sel); end vecteur;

3.3 Oprateurs squentiels


Nous avons dj voqu limportance de la notion de mmoire, ce qui diffrencie un oprateur squentiel dun oprateur combinatoire rside dans la capacit du premier se souvenir des vnements antrieurs : une mme combinaison des entres, un certain instant, pourra avoir des effets diffrents suivant les valeurs des combinaisons prcdentes de ces mmes entres. Pour traduire cet effet de mmoire on introduit la notion dtat interne de loprateur, laction des entres est alors de provoquer dventuels changements dtat, la situation qui suit le changement de lune delles dpend des valeurs des entres et de ltat initial de loprateur ; si le nouvel tat est diffrent du prcdent on dit quil y a eu une transition. Les oprateurs squentiels peuvent tre classs en deux grandes familles qui se diffrencient par la faon dont peuvent arriver les transitions : 1. Les oprateurs asynchrones, les plus anciens et les plus simples, sont de simples circuits combinatoires sur lesquels on introduit une raction positive. Lune des entres de loprateur, soit er , est connecte une sortie, soit sr ; de plus loprateur sr = f(er) prsente une caractristique non inverseuse21. La
21

Ltude gnrale de la raction nous apprend quune raction positive, en continu, conduira un systme qui prsente deux tats stables et un tat instable non oscillatoire. Une raction ngative, par contre, conduira un tat stable ou une instabilit de type oscillatoire.

Circuits numriques et synthse logique

52

transition dun tat un autre est provoque par des changements de niveaux dune ou plusieurs entres. 2. Les oprateurs synchrones, plus complexes, utilisent plusieurs oprateurs asynchrones pour mmoriser leur tat. Lide qui prside la ralisation des oprateurs synchrones est de les munir dune entre trs particulire, lhorloge, dont un front, montant ou descendant, fixe les instants o les transitions entre tats sont effectues. En gnral, cette horloge est le signal issu dun gnrateur dimpulsions priodiques, le mme pour tous les oprateurs dun systme, qui fixe une cadence de travail commune tous les lments du groupe. Entre deux transitions actives du signal dhorloge le systme est fig, il ne peut en aucun cas changer dtat ; cest ce temps de latence qui est mis profit pour permettre aux transitoires de calcul des circuits, combinatoires notamment, de se terminer sans influencer de faon alatoire le comportement du systme. Nous commencerons la description des oprateurs squentiels par les premiers, en raison de leur simplicit, bien que les seconds soient, et de loin, les plus utiliss.

3.3.1 Les bascules asynchrones


Les deux principaux types de bascules asynchrones sont la bascule D Latch, et la bascule R - S. La premire sert simplement mmoriser une donne D, les entres de la seconde doivent plutt tre comprises comme des commandes qui spcifient une action. La bascule D Latch , ou verrou La bascule D-latch constitue la version la plus simple de la mmoire lmentaire. Le principe Cest un oprateur deux entres et une sortie :
D Q L

une entre D de donne, une entre L de commande une sortie Q, tat de loprateur.

Le fonctionnement est extrmement simple : si L est au niveau haut (L = '1') la sortie prend la valeur de lentre D (Q = D), cest le mode transparent, si L est au niveau bas (L = '0') la sortie conserve sa valeur quelle que soit celle de lentre D, cest le mode mmoire. Il est clair que les niveaux actifs de lentre de commande L peuvent tre inverss. Un exemple de ralisation La description qui prcde suggre immdiatement une ralisation qui fait appel un multiplexeur lmentaire, ou, ce qui revient au mme, la traduction en logigramme de lquation qui traduit cette description (figure III-16) :

Q = LD + L Q

Circuits numriques et synthse logique

53

0 s D 1 sel L Q L D

Figure 3-16

Lquation prcdente mrite quelque explication, quand L = '0', elle ressemble sy mprendre une tautologie (Q = Q) dont on peut se demander ce quelle veut dire. La figure ci-dessous (III-17) correspond au cas o L = '0', il y apparat clairement que la bascule, en mode mmoire, se comporte comme un systme boucl. Pour analyser le type de raction mise en jeu, une mthode simple consiste ouvrir la boucle , tracer la caractristique de transfert Q = f(E), o E est lentre du systme en boucle ouverte, et chercher lintersection de cette caractristique avec la droite dquation Q = E.

ouverture de la boucle Q VH E 1 0 Q VL E VI Q=E Q = f(E) en boucle ouverte

Figure 3-17

Le systme dquations associ cette construction graphique a trois solutions : Q = VL et Q = VH , qui correspondent deux tats logiques possibles, sont des solutions stables. Si l entre D de la bascule place celle ci dans lun de ces deux tats, quand L = '1', le circuit conservera son tat dans le mode mmoire (L = '0'), quelle que soit la valeur de D. Q = VI est une solution instable qui correspond un tat analogique intermdiaire. Si la bascule se trouve accidentellement dans cet tat, elle voluera vers lun ou lautre des tats stables22. Quelques descriptions en VHDL VHDL ne connat pas la fonction mmoire comme lment primitif. Une bascule asynchrone est gnre soit par une description structurelle, soit par une description comportementale exhaustive, cest dire qui comprend la description explicite du mode mmoire, soit, et cela constitue, pour les dbutants, un pige du langage, par une description incomplte des alternatives dune instruction IF .
entity selecteur is -- dj vu prcdemment port ( a0,a1,sel : in bit; s : out bit);

Voir ce sujet au paragraphe II.3.2.3 la prsentation des tats mtastables dans les circuits synchrones, lexistence de ces tats est due cette troisime solution Q = VI dans les bascules asynchrones qui servent raliser une bascule synchrone.

22

Circuits numriques et synthse logique


end selecteur; architecture pleonasme of selecteur is begin s <= a0 when (sel = '0') else a1; end pleonasme; entity d_latch is port ( D,L : in bit; Q : out bit); end d_latch; architecture struct of d_latch is -- description structurelle component selecteur port ( a0,a1,sel : in bit; s : out bit); end component; signal reac : bit; begin Q <= reac; s1 : selecteur port map(reac,D,L,reac); end struct;

54

Le code qui prcde nest que la traduction nave du premier schma de la figure III-16. Les architectures qui suivent, qui dcrivent la mme entit, sont plus synthtiques :
architecture d_flow of d_latch is signal reac : bit; -- le signal de raction begin Q <= reac; reac <= D when L = '1' else reac; -- explicite le mode mmoire. end d_flow;

Donnons enfin une forme de description qui gnre le mode mmoire par omission dune combinaison dans une alternative IF . La possibilit de ce type de construction prsente le danger quelle est parfois le rsultat dun rel oubli du programmeur, et non dune volont de sa part :
architecture behav of d_latch is signal reac : bit; begin Q <= reac; process(L,D) begin if(L = '1') then reac <= D ; end if; -- L omission du cas o L = '0' -- gnre le mode mmoire. end process; end behav;

Circuits numriques et synthse logique

55

Les applications La simplicit de la constitution interne dune bascule D-Latch en fait llment constitutif des mmoires statiques. Le comportement purement combinatoire de cette structure, quand elle est en mode transparent, en interdit lusage dans tout systme qui contient des rebouclages des sorties sur les entres. Nous verrons dans la suite que la plupart des fonctions squentielles font usage de tels rebouclages. Dit autrement, une bascule de ce type doit toujours tre commande en boucle ouverte, ses entres de donne et de commande ne doivent en aucun cas tre des fonctions combinatoires de sa sortie. A titre dillustration, citons une application classique des bascules D-Latch dans le dmultiplexage temporel dune information : Certains microcontrleurs utilisent les mmes broches du circuit pour vhiculer des informations dadresses et de donnes ; les mmoires, elles, attendent une adresse stable pendant toute la dure du transfert de donnes. Pour permettre de rsoudre le conflit, le microcontrleur fournit un indicateur, ALE (pour adress latch enable), qui indique la priphrie que linformation disponible est une adresse. Un registre constitu de bascules D-Latch permet alors de reconstituer linformation dadresse dont les mmoires ont besoin, conformment aux chronogrammes de la figure III-18 :

8 Adresses/ Donnes 8 ALE Adresses Adresses Micro Mmoire t t DLatch 8 Donnes Adresses Adresses/Donnes Adresses ALE Donnes t

Figure 3-18

La bascule R-S Le principe Comme la prcdente, la bascule R-S est une cellule mmoire qui peut prendre deux tats; le passage dun tat lautre est cette fois dirig par deux entres de commande, R et S : lentre R, pour reset, provoque la mise zro de la sortie Q, lentre S, pour set, provoque la mise un de Q. R Quand aucune des deux commandes nest active la bascule est en Q mode mmoire, quand les deux sont actives une priorit de lune des S entres sur lautre sera observe. Un exemple de ralisation Si on fixe les niveaux actifs '1', et que lon privilgie la mise zro de Q (si R et S sont simultanment actifs, R lemporte), la traduction en quation logique de la description prcdente conduit :

Q = R S + R Q

Circuits numriques et synthse logique

56

Qui correspond au premier logigramme de la figure III-19. Le deuxime logigramme de cette figure correspond un fonctionnement o R et S sont actifs '0'. RS = "11" provoque le mode mmoire et la priorit est la mise '1' de Q si les deux commandes sont actives simultanment. On notera que, comme dans le cas de la bascule D-Latch, le mode mmoire correspond une raction positive sur lensemble du montage. Si lon simpose la contrainte de ne jamais rendre actives les deux commandes simultanment, les sorties des deux oprateurs (nor ou nand) sont toujours complmentaires, le mme schma fournit alors Q et Q 23.

R Q

S R S actifs '1' Figure 3-19

S R S actifs '0'

La bascule RS met bien en vidence la difficult majeure des systmes asynchrones : si les deux commandes passent simultanment de ltat actif ltat inactif (mmoire), le rsultat est imprvisible, cest ce quon appelle classiquement un ala. Un phnomne analogue existe videmment dans les bascules D-Latch, mais choque moins en raison de la dissymtrie fonctionnelle des deux entres D et L. Quelques descriptions en VHDL
entity rs is port ( R,S : in bit; Q : out bit); end rs; architecture df of rs is signal etat : bit; begin q <= etat; with R&S select -- l oprateur & concatne les signaux R et S etat <= '1' when "01", '0' when "10", etat when "00", -- mode mmoire explicite '0' when "11"; end df;

23

On rencontre parfois, et tort, le terme de combinaison interdite pour la situation o les deux commandes sont actives simultanment. Les auteurs de ces lignes nont jamais vu de bascule exploser dans une telle situation, et ils lont pourtant maintes fois provoque, bien involontairement il est vrai, en utilisant des bascules D-Edge qui sont constitues de trois bascules R-S et o cette fameuse combinaison interdite est utilise.

Circuits numriques et synthse logique

57

Ayant utilis, pour dcrire une bascule D-Latch, une instruction IF incomplte, nous donnerons ci-dessous lexemple dune instruction CASE pour gnrer le mode mmoire :
architecture bv of rs is begin process (R,S) begin case R&S is when "01" => Q <= '1'; when "10" | "11" => Q <= '0'; -- '|' est un -- ou logique when others null ; -- mode mmoire : pas -- d action sur Q. end case; end process; end bv;

Noter que, si toutes les combinaisons de lexpression teste ne sont pas mentionnes explicitement, lalternative others est obligatoire ; linstruction CASE ne peut pas tre incomplte. Linstruction null traduit labsence daction, par dfaut la valeur de Q est conserve, ce qui correspond bien une cellule mmoire. Les applications La premire application des bascules R-S rside dans les commandes de forage un ou zro des systmes squentiels, des plus simples aux plus complexes, la mise sous tension notamment. Beaucoup de circuits offrent, cet effet, un mode de fonctionnement de type RS en plus du fonctionnement normal, synchrone dans la plupart des cas. La rinitialisation matrielle (hard reset) dun ordinateur, par exemple, correspond une rinitialisation asynchrone (i.e. indpendante de lhorloge) de certains registres critiques du processeur, charge au programmeur davoir prvu la suite des vnements. Une autre application classique des bascules RS est llimination des rebonds des interrupteurs : Quand un interrupteur passe dun tat un autre (ouvert ou ferm), il se produit gnralement un rgime transitoire oscillatoire o ces deux tats se succdent avant que lun deux soit stable. Une solution classique consiste remplacer les interrupteurs par des commutateurs, objets deux tats mcaniquement stables, F1 et F2, et un tat mcaniquement instable o les deux contacts sont ouverts, deux rsistances et une bascule RS, conformment au schma de la figure III-20, dont nous laisserons ltude dtaille la sagacit du lecteur24.

Guide de raisonnement : quand un commutateur passe de F1 F2 il oscille entre F1 ou F2 et ltat intermdiaire o les deux contacts sont ouverts.

24

Circuits numriques et synthse logique


K F1 ouvert K F1 F2 Q F2 Q Vcc Figure 3-20 S t t

58

Vcc

3.3.2 Les bascules synchrones


Nous avons voqu, propos de la bascule R-S, quune difficult arrive, dans les circuits squentiels, quand plusieurs entres susceptibles de provoquer des modifications dtats des cellules mmoire changent de niveau simultanment. Une premire ide consiste interdire de telles situations, cette politique a eu cours une poque, mais la complexit croissante des fonctions logiques a vite mis en vidence linanit dune telle solution qui compliquerait formidablement la conception du moindre circuit25. La solution couramment adopte est de construire les fonctions complexes avec des bascules synchrones, qui disposent dune entre rserve et unique qui fixe les instants des ventuels changements dtats : lhorloge. Des changements dtat bien ordonns : lhorloge Principe Lide est de dissocier les moments de dfinition dune commande des instants o elle est excute. Pour fixer les ides, le signal dhorloge est en gnral issu dun gnrateur dimpulsions priodiques. Une bascule peut changer dtat uniquement lors dune transition (montante, par exemple) de ce signal, ltat obtenu aprs la transition active tant dtermin par la commande prsente avant la dite transition. Le corollaire de ce principe est videmment que la commande doit tre stable pendant un intervalle de temps non nul situ juste avant chaque transition active26. De trs nombreux systmes, de la vie courante, utilisent ce principe de commande excution diffre, citons, en vrac : le rle dun chef dorchestre, le pistolet qui marque le dbut dune course pieds, ladjudant qui tente dobtenir un quart de tour droite dun peloton de soldats lors dun dfil etc. Le fonctionnement interne des bascules synchrones relve de llectronique analogique, et fait intervenir les temps de propagation des signaux dans les transistors, mais ces aspects ne doivent en aucun cas tre ncessaires la comprhension du fonctionnement logique dun systme. La simplification apporte au concepteur par les bascules synchrones napparatra que progressivement, chaque bascule est un objet lectronique plus compliqu27, la simplification narrive que quand se pose la question de raliser des fonctions complexes, qui mettent en
25

Llimination des alas dans les fonctions squentielles na, en fait, dintrt que pour la conception dune bascule synchrone qui deviendra la brique lmentaire de tout ldifice. 26 Pour plus de prcision voir le paragraphe II.3.2. 27 Il faut deux ou trois bascules asynchrones pour raliser une bascule synchrone, voir, par exemple, les schmas internes de la bascule D 74xx74 dans les technologies bipolaires et CMOS.

Circuits numriques et synthse logique

59

oeuvre un grand nombre de bascules en interactions. Pour rsumer on peut dire que le temps qui spare deux fronts actifs de lhorloge (une priode de celle-ci) est mis profit par la logique classique (qui traite des niveaux) pour effectuer ses calculs, peu importe alors lordre dans lequel les nouvelles commandes sont labores, pourvu que tous les calculs soient termins avant que narrive une nouvelle transition. Chronogrammes et symboles Les symboles couramment utiliss mettent en vidence le rle particulier de lhorloge (Ck pour clock) par un triangle qui indique que cette commande agit par ses fronts, de monte ou de descente, plutt que par des niveaux logiques, comme les entres ordinaires (figure III21) :

Ck commandes

Q commandes

Ck

fronts montants actifs (positive edge triggered)

fronts descendants actifs (negative edge triggered)

Figure 3-21

Dans un ensemble synchrone le temps devient une variable discrte, par opposition continue, on peut le mesurer par un nombre entier, lunit de mesure tant la priode de lhorloge. Ltat dune bascule linstant t est une fonction combinatoire f de la commande et de ltat linstant t 1 : Q(t) = f( Q(t 1) , commande(t 1) ) Do un chronogramme de principe de la figure III-22 :

Horloge

etat Q(t) t-1 commande t-1 f(...) t t+1 t t+1

temps

temps

temps Figure 3-22

Sur ces chronogrammes on a soulign par une zone grise les moments o commandes et tat dune bascule ne sont pas forcment bien dtermins, mais il sagit l dune simple illustration. En aucun cas le contenu de ces zones nest ncessaire la comprhension du principe de fonctionnement.

Circuits numriques et synthse logique

60

Diagrammes de transition Pour reprsenter de faon visuelle le fonctionnement des bascules synchrones, tout en mettant en vidence les notions centrales de la logique squentielle que sont les tats et les transitions, on utilise souvent des diagrammes de transitions entre tats (state transition diagram), ou, pour abrger, diagrammes de transitions ou diagrammes dtats (figure III-23).

transition 0 1 maintien 0 Q=0 transition 1 0 Q=1

maintien 1

Figure 3-23

Dans un tel diagramme un cercle reprsente un tat (une bascule en a deux), une flche une transition entre deux tats (qui peut tre un maintien dans ltat initial). Pour quune transition soit effectue trois conditions doivent tre vrifies : 1. La bascule doit tre dans ltat de dpart, 2. il doit y avoir un front actif du signal dhorloge, 3. les entres de commande autre que lhorloge doivent autoriser la transition. En gnral le signal dhorloge est implicite, mais il ne faut bien sr pas oublier cette condition sine qua non. La description (analyse) ou la cration (synthse) dune bascule revient donc prciser les quations logiques (quatre au maximum pour une bascule) qui dfinissent les transitions en fonction des commandes. Une prcision qui concerne VHDL VHDL ne contient pas le concept de signal dhorloge. Le moyen dintroduire un signal dhorloge dans vos ouvrages (designs) est dutiliser une instruction "WAIT" dans un processus, ou dutiliser une description structurelle 28! Cela a le mrite dtre clair, il vaut mieux tre prvenu. Pour illustrer ce qui prcde on donne ci-dessous la structure dun programme qui dcrit une bascule :
entity basc_synchrone is port ( clock : in bit; commande : in bit_vector( ... ); q: out bit); end basc_synchrone; architecture fsm of basc_synchrone is signal etat : bit; begin q <= etat; process begin wait until (clock = '1') -- tout est l case etat is
28

Warp2, VHDL Development system, Reference Manual, Cypress Semiconductor.

Circuits numriques et synthse logique


when '0' => -- conditions de la transition '0'->'1' when '1' => -- conditions de la transition '1'->'0' end case; end process; end fsm;

61

Dautres constructions quivalentes existent, qui utilisent une liste de sensibilit dans la description du processus, nous aurons loccasion de les examiner dans la suite. Le point important noter est que seuls les processus permettent de gnrer partir dune description comportementale la synthse dune fonction qui utilise des bascules synchrones. Llment fondateur : la bascule D Le principe La bascule D synchrone, plus laconiquement D-edge, est la cellule mmoire fondamentale. Munie dune entre de donne (en gnral note D ), et, naturellement, dune entre dhorloge, elle prend, chaque transition active de lhorloge, ltat dont la valeur est celle de lentre de donne. Lquation gnrale des bascules synchrones devient, dans ce cas, extrmement simple : Q(t) = D(t 1) o t est la priode dhorloge considre.

En notation abrge, mais trompeuse car les deux membres de lquation ne sont pas pris au mme instant, on crit parfois cette quation : Q=D Le symbole, le diagramme de transition et un exemple de chronogramme qui illustre le fonctionnement sont indiqus sur la figure III-24 :

Circuits numriques et synthse logique


D=1 Ck D Q D=0 Q=0 Q=1 D=1

62

D=0 Ck

D(t) t-1 Q(t) Etat inconnu t-1 t t+1 t t+1

temps

temps

temps Figure 3-24

On notera, dans le diagramme de transitions, le lien qui est indiqu entre les changements (ou le maintien) dtat et lentre de commande D. Dans la figure prcdente on a pris la prcaution de noter qu priori ltat initial de la bascule est inconnu. Ce point est important garder en mmoire quand on se pose un problme de synthse de systme squentiel. Un exemple de ralisation La ralisation interne dune bascule D-edge nest en gnral pas le souci du concepteur dun ensemble logique, la bascule en question est un oprateur primitif, au mme titre quune porte ET. Le schma ci dessous, figure III-25, est donn titre dinformation.

1 1

0 Select 0 Select

Ck

Figure 3-25

Les deux multiplexeurs sont connects en bascules D-Latch, avec des niveaux actifs inverss pour le mode mmoire. Quand lhorloge est au niveau bas la cellule de sortie est en mode mmoire, donc insensible aux variations ventuelles de son entre, la cellule dentre en mode transparent. Quand lhorloge passe au niveau haut la cellule dentre mmorise la donne prsente, et la transfre dans la cellule de sortie. Le bon fonctionnement de lensemble est en fait assur par lexistence de temps de commutation non nuls des multiplexeurs. Cette technique de ralisation dune bascule D, diffrente de celle utilise pour la 74xx74 des familles TTL, est employe, par exemple, dans les circuits programmables (FPGAs) TPC12 (Texas Instrument).

Circuits numriques et synthse logique

63

Description en VHDL Les deux exemples qui suivent, quoique des plus simples, sont mditer attentivement. Ils reprsentent les deux seules faons sres dobtenir dun compilateur VHDL la gnration dune bascule D synchrone gnrique (i.e. qui ne soit pas reconstruite au moyen de portes, ou, pire, qui ne soit pas une bascule D-Latch).
entity d_edge is port ( d,hor : in bit; s : out bit); end d_edge; architecture d_primitive of d_edge is begin process begin wait until hor = '1'; s <= d ; end process; end d_primitive;

Et une variante qui remplace linstruction WAIT par une liste de sensibilit du processus et un test sur lexistence dune transition du signal dhorloge et le niveau qui suit cette transition.
architecture d_primitive1 of d_edge is begin process(hor) -- Le process ne ragit qu au signal hor. begin if(hor'event and hor = '1') then -- attention ! deux conditions s <= d ; end if; end process; end d_primitive1;

Lomission du facteur horevent dans le test conduit certains compilateurs gnrer une bascule D-Latch. La deuxime des deux formes prsentes ci-dessus est un peu plus complique que la premire, mais plus souple. Elle permet en effet dinclure une commande dinitialisation asynchrone, reset dans lexemple qui suit, une bascule D synchrone. La mthode utilise dans cet exemple prsente cependant un certain danger, les compilateurs sont toujours accompagns doptimiseurs qui modifient ventuellement les polarits des signaux internes, en utilisant les lois de De Morgan. Lutilisateur peut alors avoir la dsagrable surprise de dcouvrir quune remise zro asynchrone se traduit parfois par une mise un de la sortie attache la bascule vise !
entity d_edge is port ( d,hor,reset : in bit; s : out bit); end d_edge;

Circuits numriques et synthse logique


architecture d_primitive of d_edge is begin process(hor,reset) begin if(reset = '1') then s <= '0'; elsif(hor'event and hor = '1') then s <= d ; end if; end process; end d_primitive;

64

Terminons ce tour dhorizon des descriptions en VHDL dune bascule D par la traduction dans ce langage du schma construit au moyen de multiplexeurs :
entity d_edge is port ( d,hor : in bit; s : out bit); end d_edge; architecture d_flow of d_edge is signal sort,entre : bit; begin s <= sort; entre <= d when hor = '0' else entre; sort <= entre when hor = '1' else sort; end d_flow;

A nutiliser quen dernier recours, quand on a puis toutes les vraies bascules D disponibles dans un circuit. Les applications Les bascules D sont la cl de vote de toutes les applications squentielles. Des quelques bascules (4 ou 8) couramment rencontres dans les circuits standard de la famille TTL, on passe plus de mille dans les gros circuits programmables. Focalise sur les transitions : la bascule T Le principe Lune des difficults demploi des bascules D dans certaines applications rside dans le fait que la condition de maintien '1' de son diagramme de transition ne doit pas tre omise dans les quations obtenues pour la commande D, ce qui complique parfois notablement ces quations. La bascule T (T pour Toggle, cest dire bascule) est un lment qui interprte son unique entre de commande (en plus de lhorloge, videmment), T, non comme une donne mmoriser, mais comme un ordre de changement dtat : Si T = "actif" changer dtat la prochaine transition de lhorloge, si non conserver ltat initial. Do lquation qui dcrit son fonctionnement :

Circuits numriques et synthse logique

65

Q(t) = T Q(t-1) + T Q(t-1) On peut clairer lquation prcdente par le diagramme de transitions de la figure III-26, ci-dessous :

T= 1 Ck T Q T=0 Q=0 Q=1 T=0

T=1

Figure 3-26

Un exemple de ralisation Lexamen du diagramme de transitions de la figure III-26 nous montre que Q(t) = 1 si Q(t-1) = '1' et T = '0', ou Q(t-1) = '0' et T = '1' Ce qui nous fournit lquation de lentre D dune bascule D : D=TQ Do le logigramme :

Ck T

Ck D

QT

Figure 3-27

Description en VHDL La description dune bascule T se dduit simplement du diagramme de transition :


entity T_edge is port ( T,hor: in bit; s : out bit); end T_edge; architecture d_primitive of T_edge is signal etat : bit; begin

Circuits numriques et synthse logique


s <= etat ; process begin wait until hor = '1' ; if(T = '1') then etat <= not etat; end if; end process; end d_primitive;

66

On rappelle que de tels exemples sont fournis titre dillustration du fonctionnement de loprateur considr, et pour familiariser le lecteur avec le langage VHDL. On na jamais besoin, en pratique, de dcrire chaque bascule utilise dans ce langage ! Les applications Lun des intrts principaux des bascules de type T est quelles permettent de gnrer de faon extrmement simple des compteurs binaires synchrones. Un compteur binaire est une fonction squentielle synchrone dont ltat interne est un nombre entier naturel cod en binaire dont chaque chiffre binaire est matrialis par une bascule. A chaque transition active de lhorloge ce nombre est incrment de 1, quand le nombre maximum est atteint, toutes les bascules sont 1, la squence recommence partir de 0. Si le nombre de bits utiliss est n, on parlera dun compteur modulo 2n. La simple observation dune table des entiers naturels crits en base 2 nous fournit la cl du problme : la bascule de rang i doit changer dtat quand toutes les bascules de rang infrieur sont 1. Do un exemple de ralisation dun compteur synchrone modulo 16 dont on peut interrompre le comptage (en = '0') :
ENTITY cnt16 IS PORT (ck, en : IN BIT; s : OUT BIT_VECTOR (0 TO 3) ); END cnt16; ARCHITECTURE structurelle OF cnt16 IS SIGNAL etat : BIT_VECTOR(0 TO 3); SIGNAL inter: BIT_VECTOR(1 TO 3); COMPONENT T_edge -- la mme que dans l exemple prcdent port ( T,hor: in bit; s : out bit); END COMPONENT; BEGIN -- Etablir le logigramme tout en lisant le texte s <= etat ; inter(1) <= etat(0) and en ; inter(2) <= etat(1) and inter(1) ; inter(3) <= etat(2) and inter(2) ; g0 : T_edge port map (en,ck, etat(0)); g1 : for i in 1 to 3 generate g2 : T_edge port map (inter(i),ck,etat(i));

Circuits numriques et synthse logique


end generate; END structurelle;

67

L encore mettons en garde le lecteur, quand on a rellement besoin dun compteur on crit
etat <= etat + 1 ;

cest nettement plus simple, le compilateur gnrera de lui mme les interconnexions ncessaires entre les bascules. Lanctre vnrable : la bascules J-K Le principe Quelque peu tombe en dsutude, la bascule J-K a rgn en matre dans le monde de la logique squentielle des dcennies 60 et 70. Elle est l hritire directe de la bascule R-S, que lon a dbarrass progressivement de ses difficults asynchrones. Les premires bascules J-K ntaient, en fait, pas de rels oprateurs synchrones, elles comportaient tout un mcanisme de mmorisation interne des commandes dans des bascules R-S (matre-esclave). Les versions actuelles sont construites au moyen dune bascule D-edge et de logique combinatoire. Une bascule J-K dispose de deux commandes, J et K, outre lhorloge. Son fonctionnement se dcrit bien au moyen dune table qui dcrit la fonction ralise en fonction des valeurs de la commande :
J(t-1) 0 0 1 1 K(t-1) 0 1 0 1 Fonction Mmoire Mise zro synchrone Mise un synchrone Changement d tat Equation Q(t) = Q(t-1) Q(t) = '0' Q(t) = '1'

Q(t) = Q(t-1)

Comme pour tout oprateur synchrone, ltat de la bascule ne change pas entre deux transitions actives du signal dhorloge. La fonction mmoire , dans la table ci-dessus, signifie que la bascule conserve son tat prcdent mme lors dune transition dhorloge. Dans la construction du diagramme de transitions de la figure suivante, III-28, on a tenu compte de ce que chaque transition peut tre obtenue par deux combinaisons diffrentes des commandes J et K, la transition '0' '1', par exemple, peut tre obtenue par mise 1 explicite (JK = "10") ou par changement dtat (JK = "11") :

J=1 Ck J K Q J=0 Q=0 Q=1 K=0

K=1

Figure 3-28

On dduit aisment lquation de la bascule J-K de son diagramme de transition :

Circuits numriques et synthse logique

68

Q(t) = J Q(t-1) + K Q(t-1) Au lieu de raisonner sur lquation de ltat futur, on peut dcrire la bascule J-K par son quation de transition, si on introduit une variable binaire auxiliaire TJK , gale '1' si une transition doit avoir lieu, '0' autrement, on obtient :

TJ K = J Q + K Q
Description en VHDL La premire description que nous donnerons est la simple traduction nave de la table de vrit :
entity jk is port ( j,k,clock : in bit; q: out bit); end jk; architecture fsm of jk is signal etat : bit; begin process begin wait until clock = '1'; if (j = '1' and k = '1') then etat <= not etat; elsif (j = '1' and k = '0') then etat <= '1'; elsif (j = '0' and k = '1') then etat <= '0'; end if; end process; q <= etat; end fsm;

Dans la version suivante, construite de la mme faon, on a tenu compte des simplifications qui apparaissent dans le diagramme de transitions. Il est bien vident que le compilateur aurait, de toute faon trouv tout seul ces simplifications.
architecture fsm1 of jk is signal etat : bit; begin process begin wait until clock = '1'; IF (j = '1' and etat = '0') then etat <= '1'; elsif (k = '1' and etat = '1') then etat <= '0'; end if; end process; q <= etat; end fsm1;

Circuits numriques et synthse logique

69

Les exemples prcdents taient construits partir de la commande, ceux qui suivent le sont partir de ltat interne de la bascule :
architecture fsm2 of jk is signal etat : bit; begin q <= etat; process begin wait until clock = '1'; case etat is when '0' => IF (j = '1' ) then etat <= '1'; end if; when '1' => if (k = '1' ) then etat <= '0'; end if; end case; end process; end fsm2;

Ou, dans une variante dj rencontre :


architecture fsm3 of jk is signal etat : bit; begin q <= etat; process(clock) begin if(clock = '1'and clock'event) then case etat is when '0' => IF (j = '1' ) then etat <= '1'; end if; when '1' => if (k = '1' ) then etat <= '0'; end if; end case; end if; end process; end fsm3;

En conclusion de cette numration prcisons que les quations logiques gnres par un compilateur seront les mmes quelle que soit la forme du programme source, savoir : PLD Compiler Software DESIGN EQUATIONS q.D = q.Q * /k + /q.Q * j

Circuits numriques et synthse logique

70

Ce qui est rassurant. Les applications Les applications des bascules J-K ne diffrent gure de celles des autres bascules synchrones. Dans des ralisations discrtes , qui utilisent un cblage externe et des composants standards, elles conduisent en gnral des schmas plus simples que les versions ralises avec des bascules D. Cela tient lexistence dun mot de commande (JK) trs souple : Chaque transition peut tre obtenue de deux faons diffrentes, le maintien dans ltat correspond lomission de tout terme correspondant dans les quations de J et K. Dans les circuits programmables ou les ASICs, le problme se pose de faon un peu diffrente : une bascule J-K est plus complique quune bascule D, la complexit globale de la fonction ralise peut alors tre strictement quivalente dans les deux ralisations. O lon apprend passer de lune lautre Les caractristiques communes de toutes les bascules synchrones sont : 1. Deux tats possibles, 2. lventuel passage dun tat lautre a lieu lorsque survient le front actif de lhorloge, 3. les transitions sont rgies par un ou des signaux de commande qui doivent tre stables avant le front actif du signal dhorloge. Elles diffrent par les dtails des signaux de commande. Avec un type de bascule on peut, par adjonction dune fonction combinatoire gnrer toutes les autres, les quations ncessaires peuvent tre obtenues par identification des quations, ou par examen des diagrammes de transition. Nous avons donn, titre dexemple, le logigramme dune bascule T ralis au moyen dune bascule D ; le lecteur pourra, titre dexercice, dduire des diagrammes de transitions des diffrents types de bascules, les autres schmas de passage possibles : Raliser une bascule J-K avec une bascule D, et rciproquement, raliser une bascule J-K avec une bascule T, et rciproquement, raliser une bascule D avec une bascule T.

Circuits numriques et synthse logique

71

Exercices Oprateurs combinatoires 1. Le circuit 74xx86 est un ou exclusif en logique positive. Quelle est lopration ralise dans une convention logique ngative ? Justifiez votre rponse par une table de vrit. 2. Donnez le logigramme de la fonction f = a*b + a * c * d + a * d en nutilisant que des oprateurs NAND . En utilisant les lois de De Morgan donner lexpression de f sous forme de somme de produits. Notions de dtection et de correction d'erreurs. Un systme de transmission comporte un metteur et un rcepteur, conformment la figure ci-dessous. Les informations sont regroupes en messages m3m2m1m0 de quatre bits, il peut s'agir, par exemple, de donnes codes en DCB. Au cours de la transmission des erreurs peuvent se produire. Pour tenter de dtecter ces erreurs ventuelles, on rajoute au message des cls de contrle c2c1c0 et un bit de parit gnrale p. A l'mission ces lments de contrle sont construits comme suit: - L'ensemble m3m2m1c2 contient toujours un nombre pair de bits "1". - L'ensemble m3m2m0c1 contient toujours un nombre pair de bits "1". - L'ensemble m3m1m0c0 contient toujours un nombre pair de bits "1". - L'ensemble m3m2m1m0c2c1c0p contient toujours un nombre pair de bits "1".

m3m2m1m0 m3m2m1m0 4 4 3 c2c1c0 p Emetteur Erreurs de transmission Rcepteur message corrig 4

On notera qu'une erreur de transmission peut affecter n'importe quel bit, qu'il appartienne au message ou l'un des lments de contrle. a Quel oprateur permet de gnrer les cls ci l'mission ? b Montrer qu'en ralit le calcul de p ne ncessite qu'un oprateur trois oprandes. Prciser la nature de l'oprateur et les oprandes. c Le rcepteur recalcule la parit des ensembles dfinis ci-dessus. Il construit ainsi quatre variables binaires e2 e1 e0 et e qui indiquent, par un 1 logique, qu'il y a une faute de parit sur l'un de ces ensembles ; e indique une faute de parit gnrale. Proposer un schma pour la gnration des ei et de e. d En admettant qu'il ne peut pas y avoir plus d'une erreur de transmission, montrer que l'analyse des ei permet de savoir lequel des bits m3 m2 m1 ou m0 est faux : on

Circuits numriques et synthse logique

72

construira une table de vrit dont les entres sont les ei et les sorties quatre indicateurs f3 f2 f1 et f0 qui indiquent une erreur sur m3 m2 m1 ou m0 respectivement. Proposer un schma de correction de l'ventuelle erreur. e Que se passe-t-il s'il y a deux erreurs de transmission ? A quoi sert le contrle de parit gnrale ? f La mthode prcdente peut sembler extrmement lourde ; montrer qu'en fait le nombre form par les ei (en base 2) peut tre interprt comme le numro du bit faux, cls comprises. En dduire que le nombre de cls ncessaires pour corriger une erreur dans un message est gal au logarithme en base 2 du nombre de bits de ce message, cls comprises. Application numrique: quelle est la longueur du message utile si on transmet des paquets de 256 bits ?

Du schma au chronogramme. On considre le schma suivant :


Hor Ck Q1 D1 /Q1

En admettant que les deux bascules sont initialement 0, tablir un chronogramme qui fait apparatre lhorloge et les deux sorties Q1 et Q0. Ltat initial des bascules a-t-il une importance ?

Ck Q0 D0 /Q0

Circuits numriques et synthse logique

73

4 Circuits : une classification

Notre propos tant essentiellement de prsenter les mthodes de synthse des fonctions logiques, dans loptique de leur ralisation au moyen de circuits programmables ou de circuits intgrs ddis une application, nous nexplorerons que trs partiellement les fonctions standard. Mme si limportance des quelques centaines de fonctions proposes dans un catalogue de circuits TTL a tendance dcrotre, en valeur relative, elles restent une rfrence culturelle , pour le moins. Aucun concepteur de systme numrique ne peut tout ignorer du dcodeur 74xx138, des compteurs et registres de la famille 74xx160, des multiplexeurs de la famille 74xx151 ou des interfaces de bus de la famille des 74xx24029. Nous tenterons de donner ici quelques repres de classification, renvoyant le lecteur aux nombreux ouvrages qui traitent le sujet pour un complment dinformation. Dans le monde des circuits configurables par lutilisateur, technologies et architectures sont intimement lies. Nous adopterons ici un point de vue utilisateur, sans nous proccuper du comment cela fonctionne , au niveau des processus de fabrication.

4.1 Des fonctions prdfinies : les circuits standard


Outre les oprateurs lmentaires, portes et bascules, les circuits standard peuvent tre classs par modes de fonctionnement : combinatoires ; squentiels, synchrones ou asynchrones ; interfaces avec des bus trois tats, collecteurs ouverts. Paralllement cette premire classification, on peut galement tablir un dcoupage par fonctions : aiguillages dinformations ; commandes ; arithmtique ; compteurs ; registres ; transcodeurs, encodeurs, et sans doute bien dautres.
29

Ces derniers jouent plus un rle lectrique que logique. Ils gardent leur place dans les stocks de composants, ct des circuits logiques proprement dits qui sont essentiellement des circuits programmables.

Circuits numriques et synthse logique

74

Les deux classifications sont corrles, mais ne se recouvrent pas ; dans la figure IV-1 nous avons tent dillustrer les principaux de ces repres, en indiquant certains liens croiss entre les deux approches.

Fonctions standard

synchrones
(essentielles)

interfaces bus

combinatoires

squentielles asynchrones
(marginales)

aiguillages

commandes

arithmtiques

compteurs

registres

multiplexeur dmultiplexeur comparateur /dcodeur

calculs

dcalage

mmoire

Figure 4-1

Nous passerons volontairement sous silence les fonctions arithmtiques, elles concernent des applications trs spcialise.

4.1.1 Circuits combinatoires


Multiplexeurs et dcodeurs font partie de la boite outil standard de toute conception logique. Leur fonction premire concerne laiguillage dune information ; au del de cette application directe, ces oprateurs sont gnriques, ils permettent de raliser nimporte quelle fonction combinatoire, nous les retrouverons ce titre dans les cellules lmentaires de certains circuits programmables. Les multiplexeurs Limage dun multiplexeur correspond la sortie dune gare de triage : par un jeu daiguillages on peut raccorder lune des voies de la gare la ligne de sortie. Principe gnral Un multiplexeur possde deux types dentres : les donnes dentre dont lune est aiguille vers la sortie, les commandes de laiguillage qui spcifient laquelle des entres doit se retrouver en sortie, ou, ventuellement, permettent dinhiber globalement le fonctionnement du circuit (figure IV-2).

Circuits numriques et synthse logique


k e0 e1

75

en-1


n = 2p

k 2 entres sortie
p

validation

adresse p i = 0 ... (p-1)

En

Ai

Figure 4-2

Le fonctionnement est le suivant : Si En est actif, mettons gal '0', la sortie S est gale lentre dont la commande dadresse, A code sur p bits, fournit le numro ; si En est inactif, la sortie est un niveau fixe, indpendant des entres, mettons '1'. De cette dfinition on peut tirer lquation, pour p = 2 : S = En (A1 A0 e0 + A1 A0 e1 + A1 A0 e2 + A1 A0 e3) Chaque entre ei peut tre une donne binaire, ou un mot cod sur un nombre k quelconque de bits. Exemples Les circuits classiques, de la famille TTL, correspondent : 74xx151 : p = 3, n = 8, k = 1 74xx153 : p = 2, n = 4, k = 2 74xx157 : p = 1, n = 2, k = 4 Les variations corrlatives de n et k sont telles que tous ces circuits tiennent dans un botier 16 broches. Oprateur gnrique Un multiplexeur p entres dadresses permet, en rajoutant ventuellement un inverseur, de gnrer nimporte quelle fonction de p + 1 variables dentre. La solution est vidente : tant donn une fonction f(xp, xp-1, ... x0), pour une combinaison donne des variables xp-1...x0, la fonction ne peut prendre que les valeurs xp, xp , '0' ou '1'. Il suffit donc de connecter les variables xp-1...x0 aux entres dadresses dun multiplexeur dont les entres de donnes sont connectes xp, xp , '0' ou '1', suivant la valeur de la fonction.

Circuits numriques et synthse logique

76

Les dcodeurs dmultiplexeurs Dcodeur et dmultiplexeur sont deux fonctions diffrentes, mais obissent aux mmes quations. Le circuit est donc le mme, mais vu sous deux aspects diffrents. La fonction dcodeur Un dcodeur est un oprateur sorties multiples, dont le nombre est gnralement une puissance de deux, telles que dans une convention logique donne (le plus souvent ngative), une seule dentre elles, au maximum, soit active un instant donn. Des entres dadresse permettent de slectionner celle des sorties qui doit tre active, et des entres de validation gnrale permettent dinhiber toutes les sorties. Lexemple illustr par la figure IV-3 correspond au dcodeur le plus utilis de la famille TTL : le 74xx138.

A2 A1 A0 G2a G2b G1

} }

adresse

validation

S7 S6 S5 S4 S3 S2 S1 S0

G 2a

G 2b

G1 A2

A1

A0

S0

S1

S2

S3

S4

S5

S6

S7

x 1 x 0 0 0 0 0 0 0 0

x x 1 0 0 0 0 0 0 0 0

0 x x 1 1 1 1 1 1 1 1

x x x 0 0 0 0 1 1 1 1

x x x 0 0 1 1 0 0 1 1

x x x 0 1 0 1 0 1 0 1

1 1 1 0 1 1 1 1 1 1 1

1 1 1 1 0 1 1 1 1 1 1

1 1 1 1 1 0 1 1 1 1 1

1 1 1 1 1 1 0 1 1 1 1

1 1 1 1 1 1 1 0 1 1 1

1 1 1 1 1 1 1 1 0 1 1

1 1 1 1 1 1 1 1 1 0 1

1 1 1 1 1 1 1 1 1 1 0

Figure 4-3

Contrairement notre habitude, nous en reproduisons la table de vrit : la diagonale de '0', qui indique laquelle des sorties est active, est caractristique de la fonction dcodeur. Application typique Lapplication la plus frquente des dcodeurs est la commande de circuits trois tats qui accdent un bus commun. Les diffrents botiers de mmoire qui constituent la mmoire centrale dun ordinateur en est un exemple typique. Lors de lcriture ou de la lecture dune information en mmoire, un seul des botiers doit tre activ, celui qui contient la cellule mmoire adresse (figure IV-4) :

Circuits numriques et synthse logique


bus de donnes

77

M0 Adr n Adresses S0 S1 S2 S3 D CS n-2 Adr

M1 D CS

M2 Adr D CS

M3 Adr D CS

Chip Select

A 2

dcodeur

Figure 4-4

Les deux bits de poids forts de ladresse sont utiliss pour slectionner le botier, les autres bits adressent en parallle tous les circuits de la mmoire. Nous navons pas reprsent sur cette figure des commandes globales qui fixent, par exemple, le sens de transfert des donnes. Gnration de fonctions Si on exprime, en logique positive, la relation entre les entres dadresse et une sortie dun dcodeur, lquation obtenue est un simple produit logique. Les sorties sont gnralement actives au niveau bas, ce qui rajoute une complmentation. Par exemple en admettant que les commandes de validation gnrale sont actives :

S5 = A2 A1 A0
Pour raliser une fonction quelconque des entres dadresses, considres comme des variables quelconques, il suffit de runir les monmes correspondants : f(A2,A1,A0) = A2 A1 A0 + A2 A1 A0 + A2 A1 A0 = S3 S5 S6 Dans lquation prcdente, nous avons utilis les lois de De Morgan pour passer dune convention logique positive la convention logique ngative gnralement utilises dans les dcodeurs. Cette application des dcodeurs est intressante quand il est ncessaire de crer plusieurs fonctions des mmes variables. La fonction dmultiplexeur Le mme circuit peut servir raliser lopration rciproque30 du multiplexage : le dmultiplexage.
30

Notons quil sagit l dun abus de langage, il ne sagit pas de la fonction rciproque au sens mathmatique du terme, ce qui naurait aucun sens. On peut, de mme, considrer quun encodeur prioritaire, comme le 74148, est une forme de fonction rciproque du dcodeur 74138 : cest un oprateur huit entres qui fournit sur ses trois sorties le numro, cod en binaire, de lentre active la plus prioritaire.

Circuits numriques et synthse logique

78

Un dmultiplexeur est un oprateur qui aiguille une entre de donne vers une sortie dont on donne ladresse sous forme dun nombre cod en binaire. Pour raliser une telle fonction avec un dcodeur du type 74138, par exemple, il suffit de considrer lune des entres de validation comme entre de donne (G2a ou G2b si la sortie adresse doit avoir la mme polarit que lentre).

4.1.2 Circuits squentiels


Nous nous contenterons, ici, de dcrire deux fonctions squentielles synchrones fondamentales : les compteurs programmables et les registres dcalage. Les compteurs La fonction de comptage lmentaire consiste simplement passer dune valeur entire N la valeur N + 1 (ou N 1 sil sagit dun dcompteur)31, quand un ordre de comptage est actif. Le nombre N est cod sur n chiffres binaires. Comme n est fini (4, 8 ou 16 sont des valeurs courantes), lensemble des valeurs possibles pour le contenu du compteur est fini. Quand N est gal au plus grand nombre possible, Nmax, la valeur suivante est gnralement 0. Un compteur rel est donc toujours un compteur modulo Nmax + 1; si Nmax = 2n 1 il sagit dun compteur binaire, mais il existe des compteurs dans dautres codes, par exemple les compteurs dcimaux (code DCB). Les compteurs programmables disposent dentres de commandes qui leur donnent bien dautres fonctions que lincrmentation dun entier. Principe de fonctionnement Nous prendrons comme exemple les compteurs 4 bits TTL de la famille 74160 (74160, 74161, 74162, 74163, 74168 et 74169). Ce sont des circuits synchrones, dont lvolution est provoque par un front montant du signal dhorloge qui est commun toutes les bascules du circuit. La figure IV-5 rsume les caractristiques dun compteur 74163 :

Ck Clear Load EnP EnT (D) 4 Figure 4-5 DCBA QD QC QB QA (Q) 4

Clear Load EnP EnT

Fonction mise 0 chargement mmoire mmoire comptage

(Q)(t) = 0 (D)(t1) (Q)(t1) (Q)(t1) (Q)(t1)+1

0 1 1 1

x 0 1 1 1

x x 0 x 1

x x x 0 1

RCO

74xx163

RCO = QD QC QB QA EnT

A chaque front montant dhorloge laction prcise par le tableau a lieu. Par exemple : en mode chargement, des donnes prsentes sur les entres (D), notation globale pour les quatre donnes D, C, B et A, sont transfres dans les quatre bascules du compteur, QD, QC, QB et QA, notes collectivement (Q). La sortie RCO (Ripple carry output) est active si le compteur a atteint sa valeur Nmax et sil est autoris compter ; elle annonce le dbut dun nouveau cycle pour la priode
31

Le symbole + reprsente ici lopration daddition.

Circuits numriques et synthse logique

79

dhorloge suivante. Cette sortie sert la mise en cascade de plusieurs circuits du mme type, de faon raliser un compteur sur plus de quatre chiffres binaires. Le tableau ci-dessous rsume les principales caractristiques des diffrents membres de cette famille de compteurs :
Type 74160 74161 74162 74163 74168 74169 Caractristiques particulires Dcimal, remise zro asynchrone, chargement synchrone. Binaire, remise zro asynchrone, chargement synchrone. Dcimal, remise zro synchrone, chargement synchrone. Binaire, remise zro synchrone, chargement synchrone. Dcimal, compteur dcompteur, pas de RAZ, chargement synchrone. Binaire, compteur dcompteur, pas de RAZ, chargement synchrone.

Nous verrons un exemple dapplication de ces compteurs au chapitre suivant. Compteurs plusieurs chiffres Lassociation de plusieurs compteurs du mme type ne ncessite, en gnral, aucun autre circuit que les compteurs eux-mmes. Il suffit de chaner les sorties RCO sur les entres EnT, en allant des poids faibles vers les poids forts, pour quun tage ne sincrmente que quand tous les tages prcdents recommencent un nouveau cycle (figure IV-6) :

Hor 4 74162 EnT RCO 4 74162 EnT RCO 4 74162 EnT RCO

10

10

10

Compteur de 000 999, en DCB. Figure 4-6

Sur le schma de la figure IV-6, nous navons pas reprsent les autres commandes des compteurs. Elles doivent tre configures de sorte que les trois dcades soient en mode de comptage. Dans le schma prcdent la retenue se propage de circuit en circuit, des poids faibles vers les poids forts. Ce mcanisme provoque un cumul des temps de propagation : pour que lautorisation de comptage du dernier tage (poids le plus fort) soit stable, il faut attendre que toutes les retenues aient t calcules par les tages prcdents. Pour des applications o la limitation correspondante de la frquence dhorloge serait inacceptable, les retenues doivent tre calcules en parallle. Il existe des circuits spcialiss destins ce type dapplications, comme le 74xx264, connus sous le nom (trompeur) de gnrateurs de retenue anticipe (ces circuits nanticipent videmment pas, ils vitent le cumul des retards).

Circuits numriques et synthse logique

80

Les registres dcalage Un registre dcalage lmentaire est organis de telle faon que lentre dune bascule est connecte la sortie de lune de ses voisines (figure IV-7) :

hor Ck e_serie Dn1 Qn1 Ck Dn2 Qn2 Ck D0 Q0 n sens du dcalage Figure 4-7 s_serie s_para

Suivant le sens du dcalage, li la faon dont on dessine le schma, on parle de dcalage gauche ou droite. Si le contenu du registre reprsente un nombre cod en binaire, nous retrouvons que la fonction dcalage est intimement lie aux oprations de multiplication et de division par deux (voir chapitre I). Registres universels De mme quun compteur offre gnralement bien dautres possibilits que le comptage, les registres dcalage universels offrent, grce un mot de commande, des fonctions supplmentaires : mmoire (le registre conserve son tat initial), chargement parallle, entres sorties parallles trois tats, dcalages gauche et droite (74xx323, par exemple), dcalage arithmtique. Prcisons la dernire de ces fonctions : dans la division par deux dun nombre entier sign, cod en complment deux, le signe du nombre doit tre conserv. Certains registres (74xx322, par exemple) offrent la possibilit de raliser cette opration en interne, lors dun dcalage arithmtique lentre de la bascule de rang n 1 est connecte sa propre sortie, de sorte quau cours du dcalage le signe du nombre soit conserv et propag vers les poids faibles, comme il se doit. Applications Outre les oprations arithmtiques, les applications principales des registres dcalages concernent les transmissions dinformations binaires en srie, cest dire lment binaire par lment binaire : liaisons sries entre ordinateurs, transmissions numriques par radio, lecture ou enregistrement de mmoires magntiques, disques ou bandes, etc.

Circuits numriques et synthse logique

81

4.1.3 Circuits dinterface


Alors que la plupart des fonctions standard apparaissent actuellement au concepteur plus comme des lments de librairie (dans un systme de CAO) que comme des composants rels implanter sur une carte, les circuits dinterface (bus drivers, line drivers et buffers) restent des composants vritables trs utiliss. Leur fonction logique est gnralement triviale : ils relient entre eux les signaux de deux systmes, sans raliser aucune opration, sauf parfois une simple inversion. Leur particularit rside dans leurs caractristiques lectriques qui sont adaptes leur destination : commander de nombreuses entres, ventuellement travers des connexions de grande longueur et recevoir des signaux ventuellement entachs de parasites. Les caractristiques lectriques qui les distinguent des oprateurs traditionnels sont les suivantes : Leur sortance est plus leve que celle des oprateurs classiques de la mme famille technologique (typiquement trois fois plus). Ils sont capables de fournir des pics de courant de forte amplitude lors des commutations (au moins 30 mA, typiquement 60mA, pour un 74ALS245, par exemple). Leur rsistance quivalente de sortie est contrle (quelques dizaines dohms), de faon limiter les phnomnes de rflexions multiples sur les extrmits des lignes dinterconnexion. Les sorties trois tats se mettent en haute impdance quand lalimentation du circuit est coupe. Cette particularit autorise le raccordement dune cartes un bus sans teindre lalimentation de tout le systme. Certains de ces circuits (74xx244, par exemple) disposent dun tage dentre qui prsente un hystrsis (trigger de Schmitt). Cette proprit leur permet daccepter en entre des signaux qui varient lentement sans quil y ait cependant dambigit au moment de la commutation.

4.2 Des fonctions dfinies par lutilisateur


Deux grandes catgories de circuits offrent lutilisateur la possibilit de crer ses propres fonctions : les circuits programmables (PLDs et FPGAs) et les circuits intgrs spcifiques dune application (ASICs)32. Les premiers sont programmables par le concepteur du systme ; les seconds ncessitent lintervention dun fabricant de circuits (le fondeur). Les circuits programmables : ils offrent, au prix dune densit dintgration plus faible (quelques dizaines de milliers de portes, au maximum, en 1995), une grande souplesse dutilisation, un dlai de mise en oeuvre trs faible pour des petites sries et, pour certains dentre eux, la possibilit de reprogrammer le circuit. Cette possibilit de reprogrammation peut aller jusqu la programmation in situ, cest dire sans retirer le circuit de la carte sur laquelle il est cbl. Cette technique ouvre la voie la ralisation densembles logiques reconfigurables suivant le contexte (cartes graphiques de micro-ordinateurs, par exemple) : le systme hte un ordinateur le plus souvent peut modifier la fonction dun circuit en lui transmettant les nouvelles quations raliser. Les circuits spcifiques : quant eux, ils offrent une densit dintgration trs grande (jusqu quelques centaines de milliers de portes en 1995), au prix dun dlai initial de fabrication non ngligeable et de limpossibilit de modifier la fonction des circuits raliss.
32

PLD : Programmable Logic Device ; FPGA : Field Programmable Gate Array ; ASIC : Application Specific Integrated Circuit.

Circuits numriques et synthse logique

82

Compte tenu du cot que reprsente la mise en fabrication dun circuit, on les rencontre dans les produits de grande srie (lectronique grand public, automobile, lectromnager, radiotlphones, etc). La figure IV-8 fournit une illustration des domaines dapplication respectifs des circuits standard , programmables et spcifiques . En abscisse figure le volume de production de la fonction ralise, en ordonne sa complexit.

complexit en nombre de portes 100000 10000 1000 100

Circuits programmables : FPGAs PLDs circuits standard


100 1000 10000

Circuits spcifiques (ASICs)

100000

volume fabriqu

Figure 4-8

4.2.1 Les circuits programmables par lutilisateur


Un circuit programmable est constitu doprateurs logiques lmentaires (portes, multiplexeurs simples et bascules), dont une partie des interconnexions sont modifiables par lutilisateur. Ce dernier dfinit la fonction raliser par un schma, des quations logiques, un programme dans un langage de description ou une combinaison des mthodes prcdentes. La programmation dun circuit fait appel un outil logiciel, un compilateur, et, sauf pour les circuits programmables in situ, un appareil, un programmateur, qui va transfrer dans le circuit le rsultat de la compilation : la liste des points de jonction raliser. Le compilateur cre cette liste sous forme dun fichier dans un format connu du programmateur. Lun des standards, universellement reconnu, pour les circuits simples est le format JEDEC : chaque point de jonction possible porte un numro didentification ; une jonction ralise est reprsente par un zro (ASCII), une jonction non faite par un un . Un extrait dun tel fichier est donn titre dexemple ci-dessous :
Cypress C22V10 Jedec Fuse File: mandec1.jed This file was created on 00 at 12:33:08 by PLA2JED.EXE 06/DEC/94 [v3.15 ] 3.3 IR x90 C22V10* QP24* Number of Pins* QF5828* Number of Fuses* fusible = connexion F0* Note: Default fuse setting 0* G0* Note: Security bit Unprogrammed* NOTE DEVICE C22V10* NOTE PACKAGE PALC22V10-20PC/PI* NOTE PINS hor:1 man:2 moore_state_1:14 mealy_state_1:15 mealy:16 mealy_state_0:17 * NOTE PINS moore_state_0:21 mealysync:22 moore:23 * NOTE NODES *

Circuits numriques et synthse logique


L00000 *-- fusibles 0 43 00000000000000000000000000000000000000000000 * Node hor[1] => BANK : 1 * L00044 *-- fusibles 44 ... 11111111111111111111111111111111111111111111 11110111110111111111111111111111111111011111 11111011111011111111111111111111111111011111 00000000000000000000000000000000000000000000 .....

83

Critres de classification Nous tentons ci-dessous de donner au lecteur quelques repres gnraux ; le monde des circuits programmables change extrmement rapidement, pouss par une croissance annuelle de la production de plus de 30% par an en volume. Le lecteur curieux est invit consulter les data books des fabricants de circuits pour une plus ample information. Complexit La complexit dun circuit programmable est gnralement exprime en nombre de portes quivalentes, en nombre de bascules disponibles et en nombre de cellules dentres sorties (relies une broche du circuit). Ces chiffres doivent tre examins avec prudence, surtout le premier : les gros circuits actuels (1995) contiennent jusqu 50000 portes, mais lors de la programmation du circuit certaines de ces portes seront inutilise. Les oprateurs logiques du circuit sont regroups en cellules de quelques portes lmentaires, or un oprateur inutilis dans une cellule ne peut pas tre rcupr par une autre. Un dchet est donc invitable. Schmatiquement on peut dire que des cellules de petite taille limitent ce dchet, mais compliquent le rseau dinterconnexions, dont la place occupe sur le circuit augmente. En ordre de grandeur, la plupart des constructeurs admettent un taux moyen dutilisation des portes de un tiers, ce qui conduit un nombre de portes utilisables qui peut aller jusqu quinze vingt mille dans le cas ci-dessus. Le nombre de bascules disponibles va de 8 pour les plus simples (PLD PAL16V8) plus de 1500 pour les plus complexes (FPGA de la famille XC4000 de Xilinx). Pour les mmes circuits, le nombre dentres sorties disponibles va de 16 192. Programmables une fois ou reprogrammables La programmation dun circuit consiste tablir des interconnexions entre des oprateurs logiques. Les technologies employes pour les mmoires ont servi mettre au point celles des circuits programmables : fusibles (PROM), transistors mos grille flottante qui autorisent des structures effaables grce aux rayons ultraviolets (EPROM) ou lectriquement (EEPROM ou FLASH). Dans le domaine des circuits simples et moyennement complexes, cette dernire technologie est celle qui domine. Dautre part des technologies spcifiques aux circuits programmables sont apparues : transistors dinterconnexions commands par le contenu dune mmoire RAM statique, pour les circuits reconfigurables in situ ; anti-fusibles pour les circuits complexes programmables une fois. Les premiers (in situ) excutent automatiquement une squence dinitialisation aprs la mise sous tension, en allant chercher leur table des fusibles dans une mmoire ROM externe ou en dialoguant avec un systme microprocesseur. Dans les seconds (anti-fusibles),

Circuits numriques et synthse logique

84

la programmation consiste crer une surtension entre les bornes des contacts isols que lon veut runir, surtension qui provoque le perage du dilectrique et une vritable soudure par points. Vitesse et consommation Les circuits programmables nchappent videmment pas au compromis vitesseconsommation, commun tous les circuits lectroniques. La technologie utilise tant gnralement base de cellules CMOS, la consommation est, en gros, proportionnelle la frquence de travail. Contentons nous de citer quelques ordres de grandeur : Un PAL22V10 (10 bascules) rapide, 166 MHz de frquence maximum dhorloge, consomme jusqu 190 mA. Un compteur 16 bits chargement parallle, implant dans un FPGA, cadenc 100 MHz consomme typiquement 50 mA. Repres croiss Toutes les technologies dinterconnexions ne sont pas disponibles avec toutes les complexits. Le tableau ci dessous rsume ces corrlations.
Technolo gie Fusibles EPROM Types de circuits PLDs simples 10 bascules PLDs simples et complexes < 250 bascules PLDs simples et complexes FPGAs < 400 bascules des PLDs simples aux FPGAs complexes Avantages rapidit reprogrammables aprs effacement aux ultra-violets reprogrammables lectriquement reconfigurables in situ Inconvnients programmables une fois botiers chers (fentre optique) ncessitent un programmateur circuits annexes et procdure initialisation programmables une fois Fabricants principaux tous tous

FLASH

tous AMD XILINX ALTERA ATMEL CYPRESS ACTEL QUICK LOGIC TEXAS INS.

SRAMS

Anti fusibles

FPGAs complexes

rapidit

4.2.2 Les circuits spcifiques


Rservs aux grandes sries, les circuits spcifiques ncessitent lintervention du fabricant pour raliser la fonction dfinie par le concepteur de lapplication. On distingue classiquement : Les circuits prdiffuss, dans lesquels les oprateurs logiques sont en place indpendamment de lapplication. Seule la dernire couche dinterconnexions est modifie par le fabricant, suivant la fonction raliser. Les circuits prcaractriss, pour lesquels les cellules sont places et interconnectes la demande.

Circuits numriques et synthse logique

85

5 Mthodes de synthse

Au cours des quinze dernires annes, les mthodes de conception des fonctions numriques ont subi une volution importante. Dans les annes soixante dix, la majorit des applications taient construites autour de circuits intgrs standard, souvent pris dans la famille TTL. Au dbut des annes quatre vingt apparurent paralllement : les premiers circuits programmables par lutilisateur (PALs), du ct des circuits simples, les circuits intgrs spcifiques (ASICs)33, pour les fonctions complexes fabriques en grande srie. La complexit des seconds a ncessit la cration doutils logiciels de haut niveau, qui sont la description structurelle (schmas au niveau des portes lmentaires) ce que les langages volus sont au langage machine dans le domaine de la programmation. Les premires gnrations de circuits programmables taient conus au moyen de simples programmes de traduction dquations logiques en table de fusibles. A lheure actuelle, lcart de complexit entre circuits programmables et ASICs sest restreint : on trouve une gamme continue de circuits qui vont des hritiers des premiers PALs, quivalents de quelques centaines de portes, des FPGAs ou des LCAs34 de quelques dizaines de milliers de portes quivalentes. Les outils daide la conception se sont unifis, un mme langage, VHDL par exemple, peut tre employ quels que soient les circuits utiliss, des PALs aux ASICs. Le remplacement, dans la plupart des applications, des fonctions standard complexes par des circuits programmables, saccompagne dun changement dans les mthodes de conception : On constate un retour aux sources : le concepteur dune application labore sa solution en descendant au niveau des bascules lmentaires, au mme titre que larchitecte dun circuit intgr. Lutilisation systmatique doutils de conception assiste par ordinateur (C.A.O.), sans lesquels la tche serait irralisable, rend caducs les fastidieux calculs de minimisation dquations logiques. Le concepteur peut se consacrer entirement aux choix darchitecture qui sont, eux, essentiels. La complexit des fonctions ralisables dans un seul circuit pose le problme du test. Les outils traditionnels de tests de cartes imprimes, du simple oscilloscope la planche clous en passant par lanalyseur dtats logiques, ne sont plus dun grand secours, ds lors que la grande majorit des quipotentielles sont inaccessibles de lextrieur. L encore, la C.A.O. joue un rle essentiel. Encore faut-il que les solutions choisies soient analysables de faon sre. Cela interdit formellement certaines astuces,
33 34

Programmable Array Logic, Application Specific Integrated Circuit. Field Programmable Logic Array, Logic Cell Array.

Circuits numriques et synthse logique

86

parfois rencontres dans des schmas traditionnels de logique cble, comme des commandes asynchrones utilises autrement que pour une initialisation lors de la mise sous tension, par exemple35. Les langages de haut niveau, comme VHDL, privilgient une approche globale des solutions. Ds lors que larchitecture gnrale dune application est arrte, que les algorithmes qui dcrivent le fonctionnement de chaque partie sont labors, le reste du travail de synthse est extrmement simple et rapide. Nous tenterons ci-dessous de mettre en vidence quelques rgles de conception et de donner au lecteur les cls de comprhension de la littrature spcialise, notamment les notices des fabricants de circuits et les notes dapplication qui les accompagnent.

5.1 Les rgles gnrales


Avant de prsenter les outils de base du concepteur, il nest sans doute pas inutile de prciser quelques rgles, qui pourront sembler de simple bon sens, mais dont le non respect a conduit beaucoup de ralisations vers le cimetire des projets morts avant dtre ns. Du gnral au particulier, une approche descendante Lerreur de mthode la plus frquente, et la plus pnalisante, que commettent beaucoup de dbutants dans la conception des systmes lectroniques, quils soient analogiques ou numriques, est sans doute de dessiner des schmas, voire de les cbler, avant mme davoir une vision claire de lensemble de la tche accomplir. Le travail de rflexion sur la structure gnrale dune application est primordial. Ce que lon appelle traditionnellement la mthode descendante (top down design), nest rien dautre que lapplication de cette rgle simple : quand on conoit un ensemble, on va du gnral au particulier, on ne soccupe des dtails que quand le cahier des charges a t mrement rflchi, et que le plan gnral de la solution a t tabli. Si, au cours de la descente vers les dtails, on dcouvre quune difficult imprvue apparat, il faut revenir au niveau gnral pour voir comment la rponse cette difficult sinsre dans le plan densemble. Diviser pour rgner Le premier rflexe avoir, face un problme, un tant soit peu complexe rsoudre, est de le couper en deux. La dmarche prcdente est rpte, pour chaque demi-problme, jusqu obtenir des sous-ensembles dont la ralisation tient en quelques circuits lmentaires, en quelques lignes de code source dans un langage ou dans un diagramme de transitions qui ne dpasse pas une dizaine dtats diffrents. Lun des auteurs de ce livre garde un souvenir cuisant de la premire introduction dun systme de CAO, pour raliser un projet dlectronique numrique, auprs dtudiants dIUT que nous navions pas suffisamment averti des piges lis la puissance de loutil. Ce systme pouvait assurer automatiquement la rpartition dune application dans plusieurs circuits programmables dont on avait, au pralable, tabli la liste. Le problme pos tait relativement simple ; il sagissait de crer un automate pilotant un circuit de multiplication, suivant un algorithme squentiel, et assurant linterface entre ce circuit et un microprocesseur. Trois sous-ensembles en interaction devaient tre crs :
35

Mme lpoque du rgne des fonctions standard, ces pratiques taient minemment douteuses.

Circuits numriques et synthse logique

87

Un interface avec le bus du microprocesseur, qui assure le bon respect du protocole dchange. Un compteur qui permet de savoir o en est la multiplication : chaque impulsion dhorloge le multiplieur fournit un chiffre binaire du rsultat, si le produit est cod sur 16 bits, il faut attendre 16 priodes dhorloge pour lobtenir. Lautomate squentiel qui pilote le tout. Trois blocs, dont la ralisation ncessite, en tout, une douzaine de circuits standards TTL. La fusion des trois blocs dans une grande boite fourre tout , ne rentre pas dans un seul circuit de type 22V10, ce qui est normal. Si lutilisateur du systme de CAO laisse ce dernier se charger lui-mme du dcoupage de la ralisation en sous-ensembles, le rsultat est une carte qui contient, outre le multiplieur lui-mme, une ribambelle de circuits programmables, utiliss 50% de leur capacit. Le simple fait de subdiviser la solution en petits modules, ce qui permet de guider le logiciel de placement, divise par deux le nombre de circuits ncessaires et, soit dit en passant, permet den contrler facilement le bon fonctionnement. Mener de front laspect structurel et laspect fonctionnel La ralisation dun ensemble lectronique se mne sur deux plans parallles, structurel et fonctionnel, qui doivent, chaque tape, tre cohrents entre eux. Le plan structurel prcise les subdivisions en blocs, combinatoires ou squentiels, fixe les signaux dinterconnexions entre ces blocs, pour aboutir, en dernire tape, un ventuel schma. Une fois raliss, chaque bloc et lensemble sont soumis des tests de validation. Le plan fonctionnel prcise lalgorithme utilis dans chaque bloc, fixe le codage des signaux, pour aboutir, en dernire tape, des quations logiques ou des modules de programme dans le langage choisi. Le fonctionnement de chaque sous-ensemble et du systme complet peut tre simul. Le tableau qui suit illustre le processus :

Circuits numriques et synthse logique


Structurel Ebauche de synoptique : entres sorties blocs squentiels combinatoires Signaux d interconnexion, registres d tats. Mise jour prcise : nombre de bits des signaux, choix des principaux circuits. Fonctionnel Explicitation du cahier des charges.

88

Algorithmes gnraux. Choix des codages. Algorithmes dtaills : diagrammes de transition fonctions combinatoires. Equations logiques.

Schmas Programmes sources Compilation. Programmation des circuits

Tests

Simulation

Confrontation.

Citons quelques incohrences graves parfois rencontres entre les deux plans : Les noms de signaux ne correspondent pas. Les tailles des registres dtats sont incompatibles avec les diagrammes de transitions qui les dcrivent ; une bascule se voit pourvue de plus de deux tats, ou, inversement, un diagramme qui contient cinq tats est cens reprsenter le fonctionnement dun registre de quatre bascules. Les quations de certaines commandes de circuits complexes ne sont pas prcises. Faciles corriger au dbut, de telles incohrences sont sources derreurs difficiles identifier quand elles apparaissent lors des tests de validation. Alas et testabilit : privilgier les solutions synchrones Une plaie de trop de ralisations rencontres est le mlange, dans une mme unit fonctionnelle, des commandes asynchrones et synchrones. Citons quelques exemples : Mises zro ou chargements parallles Les mises zro ou les chargements parallles de registres, par des commandes action directe, cest dire indpendamment de lhorloge, sont la source de nombreux ennuis ultrieurs ; ce type de pratique est condamner sans appel. Lutilisation de telles commandes en fonctionnement normal conduit la gnration dimpulsions de dures inconnues, souvent trs faibles, donc difficiles observer. Les outils de test et de simulation grent fort mal ces

Circuits numriques et synthse logique

89

commandes, il devient impossible de valider correctement la fonctionnalit dun quipement qui les utilise. Lutilisation de ces commandes asynchrones conduit parfois un rsultat qui, sil peut tre instructif dans un contexte denseignement, est catastrophique dans une ralisation : une carte qui semble donner toute satisfaction quand on lobserve, par exemple avec un oscilloscope, cesse de fonctionner ds que lon retire lappareil de mesure. Lorigine du phnomne tient la charge capacitive supplmentaire apporte par la sonde de mesure. Cette charge peut, si elle est bien place, modifier la dure et lamplitude dimpulsions troites dont lexistence est dterminante pour le bon fonctionnement de lensemble. Il est, nous lesprons, inutile de prciser que le dpannage dun tel objet relve plus de la divination que dune mthodologie raisonne36. Les signaux d horloges Le blocage, par exemple par une porte, des signaux dhorloge pour maintenir ltat dun registre, est une autre erreur que lon rencontre parfois. Cette faute, qui provoque des dcalages temporels entre les signaux dhorloge (clock skew) appliqus aux diffrentes parties dune carte, ou dun circuit, risque de conduire des violations de temps de maintien ou de prpositionnement, do des comportements imprvisibles des registres concerns. Un autre effet pervers des circuits combinatoires de calcul des signaux dhorloge, est la gnration, difficile contrler, dimpulsions parasites sur ces signaux. La recherche de ces impulsions, suffisamment larges pour faire commuter les circuits actifs sur des fronts, mais suffisamment troites pour ne pas tre vues lors dun examen rapide avec un oscilloscope, est un passe temps dont on se lasse trs vite. Quand il est ncessaire dappliquer diffrentes parties dun ensemble des signaux dhorloges diffrents, il est indispensable de traiter part, et de faon mticuleuse, la ralisation du distributeur dhorloge correspondant37. Notons, en passant, que pour ces fonctions il convient de surveiller de trs prs les modifications apportes par les optimiseurs ; ces derniers ont la fcheuse tendance dliminer les portes inutiles dun point de vue algbrique, mme si elles sont utiles dun point de vue circuit. Les bascules asynchrones (D Latch, R S) Ce chapitre est consacr aux mthodes de conception des automates squentiels. Ces oprateurs ont la particularit de fonctionner en boucle ferme : ltat futur dpend de ltat initial. Ce mode de fonctionnement exclut priori lusage de bascules ou registres asynchrones dans la ralisation de tels systmes. Les bascules D latch ou R-S ont, parfois, leur place la priphrie des systmes, elles servent alors dinterfaces entre deux ensembles indpendants, pilots par des horloges diffrentes, qui changent des informations en respectant un protocole bien dfini.

36

Un effet rciproque peut galement tre rencontr : la carte qui fonctionne quand on ne la regarde pas, et qui tombe en panne quand on lobserve, la sonde de lappareil ayant gomm une impulsion essentielle, bien que fragile, la bonne sant de lensemble. 37 Le seul argument srieux qui peut, parfois, et avec une extrme prudence, conduire un concepteur utiliser le blocage de lhorloge, est la consommation : un circuit squentiel, surtout en technologie CMOS, dont on arrte lhorloge, consomme moins que si le maintien est gnr de faon synchrone. Comme quoi les rgles doivent tre dictes, mais parfois transgresses. Mieux vaut, dans ces cas, avoir conscience quil y a transgression, donc danger.

Circuits numriques et synthse logique

90

5.2 Les machines synchrones nombre fini dtats


Les machines nombre fini dtats (Finite state machines), en abrg machines dtats, ou automates finis ou, encore, squenceurs cbls38, sont largement utilises dans les fonctions logiques de contrle, qui forment le c ur de nombreux systmes numriques : arbitres de bus, circuits dinterfaces des systmes base de microprocesseurs, circuits de gestion des protocoles de transmission, systmes de cryptages etc. Plus prosaquement, la quasi totalit des fonctions squentielles standard, compteurs, par exemple, peuvent tre analyses, ou synthtises, en adoptant le point de vue machine dtats . Une machine dtats est un systme dynamique (i.e. volutif) qui peut se trouver, chaque instant, dans une position parmi un nombre fini de positions possibles. Elle parcourt des cycles, en changeant ventuellement dtat lors des transitions actives de lhorloge, dans un ordre qui dpend des entres externes, de faon fixer sur ses sorties des squences dtermines par lapplication contrler. Un programmateur de machine laver en est lillustration typique : suite la mise en marche, le programmateur contrle que la porte est ferme, si oui il commande louverture de la vanne darrive de leau, quand la machine est pleine etc. Larchitecture gnrale dune machine dtats simple est celle de la figure V-1 :

Horloge p Entres n

f( )
n Calcul de l tat futur Etat futur n Calcul des sorties q Sorties

Registre tat

Etat actuel

Figure 5-1

Ce synoptique gnral va nous servir, ventuellement lgrement modifi, de support dans les explications qui suivent.

5.2.1 Horloge, registre dtat et transitions


Le registre dtat, pilot par son horloge, constitue le c ur dune machine dtats, les autres blocs fonctionnels, bien que gnralement nettement plus complexes, sont son service .

38

Les diffrences de terminologie correspondent des diffrences de point de vue : llectronicien sintresse la ralisation de la machine, donc son fonctionnement interne. Il concentre son attention sur le fonctionnement dun registre qui peut passer dun tat interne un autre, en fonction de commandes qui lui sont fournies. Lautomaticien et linformaticien sintressent, de prime abord, au fonctionnement externe du mme objet : ils en attendent des actions (automates) en sortie correspondant une squence (squenceurs) fixe par lapplication laquelle la machine est destine. Peu importent, ce niveau et jusqu un certain point, les dtails de ralisation interne du squenceur.

Circuits numriques et synthse logique

91

Le registre dtat Le registre dtat est constitu de n bascules synchrones, nous admettrons dans ce qui suit, sauf prcision contraire, que ce sont des bascules D, ce qui nimpose aucune restriction de principe, puisque nous savons passer dun type de bascule un autre. Etat prsent et tat futur. Le contenu du registre dtat reprsente ltat de la machine, il sagit dun nombre cod en binaire sur n bits, dans un code dont nous aurons reparler. Lentre du registre dtat constitue ltat futur, celui qui sera charg lors de la prochaine transition active de lhorloge. Le registre dtat constitue la mmoire de la machine, llment qui matrialise lhistoire de son volution. Limportance de ce registre est telle que beaucoup de circuits programmables offrent la possibilit de le charger, des fins de tests, avec une valeur arbitraire, indpendante du fonctionnement normal de la machine. Toute procdure de test devra sappuyer sur la connaissance du contenu de ce registre39, par une mesure relle, ou en simulation. Taille du registre et nombre d tats La taille du registre dtat fixe videmment le nombre dtats accessibles la machine. Si n est le nombre de bascules et N le nombre dtats accessibles, ces deux nombres sont relis par la relation : N = 2n Cette relation, qui ne prsente gure de difficult, est pourtant trop souvent oublie des concepteurs dbutants : En synthse le nombre dtats ncessaires est issu du cahier des charges de la ralisation, on en dduit aisment une taille minimum du registre. Quand tous les tats disponibles ne sont pas utiliss, loubli des tats inutiliss peut conduire de cruelles dconvenues si on oublie de prvoir leur volution. Le rle de lhorloge Le rle de lhorloge, dans une ralisation synchrone, est de supprimer toute possibilit dalas dans lvolution de ltat. Idalement, entre deux transitions actives de lhorloge le systme est fig, en position mmoire, son tat ne peut pas changer. Dans la ralit, le temps de latence qui spare deux fronts conscutifs du signal de lhorloge est mis profit pour permettre aux circuits combinatoires deffectuer leurs calculs, sans que les temps de retards, toujours non nuls, ne risquent de provoquer dambigut dans le rsultat. Ce qui a t dit propos des bascules lmentaires se gnralise : chaque transition dhorloge est suivie dune priode de grand trouble dans la valeur de ltat futur, le

Ce point peut tre moins trivial quil ny parat, les sorties des bascules ne sont pas toujours disponibles en sortie dun circuit, on parle alors de bascules enterres. Dans de tels cas les circuits complexes offrent de plus en plus souvent la possibilit de ressortir , par une procdure particulire, les contenus de ces bascules (cest lune des fonctions possibles des automates de test dits boundary scan qui sont intgrs dans certains circuits).

39

Circuits numriques et synthse logique

92

concepteur doit sassurer que cette valeur est stable quand survient la transition dhorloge suivante (figure V-2)40 :

Horloge

actuel t1 futur t t+1

temps

temps

temps Temps pendant lequel la valeur de futur est stable. Sa dure doit tre suprieure au setup time du registre d tat.

Temps pendant lequel les circuits combinatoires effectuent les calculs.

Figure 5-2

Le temps devient une variable discrte Sauf pour le calcul des limites de fonctionnement du systme, le temps devient une variable discrte, un nombre entier qui indique simplement combien de priodes dhorloges se sont coules depuis linstant pris comme origine. Une machine dtats est compltement dcrite par une quation de rcurrence, qui permet de connatre le contenu du registre dtat linstant t, t entier, en fonction de ses valeurs prcdentes et de celles des entres. Les entres et l tat actuel dterminent l tat futur Dans une architecture comme celle de la figure V-1, lquation de rcurrence voque prcdemment est du premier ordre (la porte temporelle de la mmoire est gale une priode dhorloge) : Etat_actuel(t) = Etat_futur(t 1) Or la fonction logique combinatoire, f( ), qui calcule ltat futur, fournit une valeur qui dpend de ltat prsent et des entres, do la relation gnrale qui dcrit lvolution dune machine dtats : Etat_actuel(t) = f( Etat_actuel(t 1) , Entres(t 1) )

40

Ce qui est dit ici est en troite relation avec le contenu du paragraphe II-3, qui aboutit au calcul de la frquence maximum de fonctionnement dun circuit dans lequel interviennent des rtro couplages.

Circuits numriques et synthse logique

93

Cette quation est la gnralisation de celles qui ont t introduites propos des bascules lmentaires. Il est important de noter que, si lquation qui rgit lvolution du registre dtat, pris dans son ensemble, est du premier ordre, ce nest pas vrai pour lquation dvolution dune bascule qui est, elle, plus complexe. Toutes les bascules du registre dtat sont, en gnral, couples. Lordre de lquation dvolution dune bascule peut atteindre n, o n est la taille du registre dtat41. Exemple : un diviseur de frquence par 3 ou 4 Pour illustrer ce qui prcde, considrons le schma de la figure V-3 :

hor div Ck Q1 D1

Ck Q0 D0

Figure 5-3

Ltat du systme est (Q1,Q0), ensemble constitu des tats individuels des deux bascules. On admet que lentre extrieure div est synchrone de lhorloge. A chaque front montant du signal dhorloge hor, le systme volue suivant le systme dquations :
Q1(t) = Q0(t - 1) (Q1(t - 1) + div(t - 1)) Q0(t) = Q1(t - 1)

On peut remarquer, en passant, que lquation de chaque bascule est effectivement du deuxime ordre, par exemple pour Q1 :
Q1(t) = Q1(t - 2) (Q1(t - 1) + div(t - 1))

Sur le chronogramme de la figure V-4, construit partir des quations prcdentes, on voit que : si div = '0' les sorties Q1 et Q0 sont des signaux priodiques, de frquence gale au tiers de la frquence dhorloge, si div = '1' la frquence des signaux Q1 et Q0 est gale au quart de la frquence dhorloge.
41

On peut rapprocher ce point des mthodes danalyse des circuits analogiques : la prsentation variables dtat conduit une quation diffrentielle du premier ordre, qui porte sur un vecteur de dimension n, la prsentation traditionnelle considre chaque grandeur lectrique comme obissant individuellement une quation diffrentielle dont lordre peut atteindre n. Le passage dun mode de reprsentation lautre nest simple que dans le cas des quations linaires. Les quations des systmes numriques sont gnralement non linaires, avec une exception notable : les gnrateurs de squences pseudo alatoires qui utilisent un registre dcalage reboucl par des sommes modulo 2.

Circuits numriques et synthse logique

94

hor div Q1 Q0 division par 3 division par 4 t

Figure 5-4

Si les chronogrammes permettent dillustrer un fonctionnement, ils ne constituent pas une mthode efficace danalyse, et, encore moins, de synthse. Dans ltude de machines dtats simples, les diagrammes de transitions constituent une approche plus compacte, donc plus puissante, tout en fournissant exactement le mme niveau de dtails. Les diagrammes de transitions Dans un diagramme de transitions, on associe chaque valeur possible du registre dtat, une case. Lvolution du systme est reprsente par des flches, les transitions, qui vont dun tat un autre42. Comme pour les bascules lmentaires, une transition est effectue si trois conditions sont runies : 1. Le systme est dans ltat source de la transition considre, 2. une ventuelle condition de ralisation sur les entres doit tre vraie, 3. un front actif dhorloge survient. Si aucune transition nest active, le systme reste dans son tat initial. Sil ny a pas dambigut le signal dhorloge est gnralement omis (horloge unique), mais il conditionne toutes les transitions. Reprenant lexemple prcdent, nous reprsentons, figure V-5, le diagramme de transitions du diviseur par trois ou quatre. Le registre dtat contient deux bascules, soit quatre tats accessibles. Pour chaque tat initial, les quations du diviseur fournissent ltat darrive. Dans cet exemple, quel que soit ltat de dpart, et quelle que soit la valeur de lentre div, il y a toujours une transition active ; le systme change donc dtat chaque front montant du signal dhorloge. Quand le diviseur est dans ltat 3 le chemin parcouru dpend de la valeur de lentre div. Si div = '0' un cycle complet contient trois tats, do la division de frquence par trois, si div = '1', un cycle complet comporte quatre tats, do la division de frquence par quatre43.

42

Les automaticiens utilisent souvent un diagramme similaire, le GRAFCET, dont les tapes peuvent tre matrialises par les tats dune machine. Nous adoptons les diagrammes de transitions plutt que le GRAFCET, car seuls les premiers sont utiliss, et le sont beaucoup, dans la littrature professionnelle lectronique (notices dapplications de circuits, manuels des systmes de CAO, etc.). Le passage dun type de diagramme lautre ne prsente gure de difficult. 43 Cet exemple est une version simple de ce que lon appelle les diviseurs par N/(N+1). Ces circuits sont utiliss dans les synthtiseurs de frquences, boucle verrouillage de phase, avec des valeurs plus grandes de N (255, par exemple).

Circuits numriques et synthse logique

95

0 (00) div

1 (01)

2 (10)

div Etat : (Q1 Q0)

3 (11)

Figure 5-5

Dans lexemple prcdent, nous sommes partis des quations dun systme pour aboutir au diagramme de transitions qui en dcrit le fonctionnement. Il sagit l dun travail danalyse. Le concepteur se trouve gnralement confront au problme inverse : du cahier des charges il dduit un diagramme de transitions, et de ce diagramme il souhaite tirer les quations de commandes des bascules du registre dtat, ou une description en VHDL44. Du diagramme aux quations Rajoutons lexemple prcdent une commande supplmentaire, en, telle que : si en = '0' , la machine ne quitte pas ltat 1, quand elle y arrive, si en = '1' , la machine fonctionne comme prcdemment. Le diagramme de transitions devient (figure V-6) :

en 0 (00) div 1 (01) en

2 (10)

div Etat : (Q1 Q0)

3 (11)

Figure 5-6

Quand le nombre de bascules du registre dtat et le codage des tats sont connus, le passage du diagramme de transitions aux quations de commandes des bascules est immdiat. Les dtails des calculs dpendent du type de bascules utilises pour raliser le registre dtat.
44

Il existe des logiciels de traduction des diagrammes de transitions en code source, dans un langage. Le plus souvent le programme obtenu sapparente plus une description du type flot de donnes , avec des bascules dcrites au niveau structurel, qu une relle description de haut niveau, dans un langage comportemental.

Circuits numriques et synthse logique

96

Avec des bascules D : Il suffit de recenser, pour chaque bascule, toutes les transitions, et les maintiens, qui conduisent la mise '1' de la bascule. Dans notre exemple il y a deux bascules : Q1 est '1' dans les tats 2 et 3, obtenus par les transitions 1 3 et 3 2. Q0 est '1' dans les tats 1 et 3, obtenus par les transitions 0 1, 1 1 (maintien) et 1 3. Do, en notant les tats de faon symbolique par leur numro soulign, et en simplifiant, ventuellement les expressions obtenues :
D1 = 1 en + 3 div = Q1 Q0 en + Q1 Q0 div

D0 = 0 + 1 en + 1 en = 0 + 1 = Q1
Avec des bascules T : Il suffit de recenser, pour chaque bascule, toutes les transitions qui conduisent un changement dtat de la bascule. Dans notre exemple il y a deux bascules : Q1 change dans les transitions 1 3, 3 0 et 2 0. Q0 change dans les transitions 0 1, 3 0 et 3 2. Do, en notant les tats de faon symbolique par leur numro soulign et en simplifiant, ventuellement les expressions obtenues :
T1 = 1 en + 3 div + 2 = Q1 Q0 en + Q1 div + Q1 Q0 T0 = 0 + 3 div + 3 div = 0 + 3 = Q1 Q0

La comparaison entre les deux solutions, bascules D ou bascules T, montre que dans lexemple considr, la premire solution conduit des quations plus simples (ce nest pas toujours le cas). Certains circuits programmables offrent lutilisateur la possibilit de choisir le type de bascules, ce qui permet dadopter la solution la plus simple45. Table de transitions Pour passer dun diagramme de transitions aux quations de commandes des bascules, le concepteur dbutant peut toujours recourir une table de vrit qui rcapitule toutes les transitions possibles. Si cette mthode est systmatique, elle prsente videmment linconvnient dtre fort lourde. Le nombre de variables dentres de la table devient vite, mme pour des problmes simples, trs lev. Le tableau qui suit correspond la dernire version de notre diviseur par trois ou quatre. Quand, pour une transition, la valeur dune commande est indiffrente, elle apparat par la valeur 'x'.

45

Soyons clairs, cest en gnral loptimiseur du compilateur qui fait ce choix, mais lutilisateur a un droit de regard, et daction, sur ce que fait le logiciel.

Circuits numriques et synthse logique


Etat initial Q1 0 0 0 1 1 1 Q0 0 1 1 1 1 0 Entres en x 0 1 x x x div x x x 0 1 x Etat final D1 0 0 1 0 1 0 D0 1 1 1 0 0 0

97

Table de transitions du diviseur par 3/4. Cette table napporte rien de plus que le diagramme de transitions, son utilit est dautant plus discutable que lon effectue rarement les calculs la main, et nous verrons quil est trs simple de passer directement dun diagramme de transitions au programme VHDL correspondant. tat futur est unique Pour reprsenter, de faon non ambigu le fonctionnement dun systme, un diagramme de transitions doit respecter certaines rgles qui concernent les tats, dune part, et les transitions, dautre part. Leur non respect constitue une erreur : Un tat, reprsent par un code unique, ne peut apparatre quune seule fois dans un diagramme. Cette rgle, somme toute fort naturelle, nest gnralement pas source derreurs, ou, au pire, provoque par son non respect, des erreurs faciles identifier et corriger. La machine est forcment quelque part . Cela impose que la condition de maintien dans un tat soit le complment logique de la runion de toutes les conditions de sortie de ltat. Cette rgle est gnre automatiquement par les logiciels seules les transitions doivent tre spcifies, les compilateurs en dduisent la condition de maintien mais peut tre une source derreurs dans une synthse manuelle. La machine ne peut pas tre deux endroits diffrents la fois. Les transitions qui partent dun tat, pour arriver des tats diffrents, doivent tre assorties de conditions mutuellement exclusives. Ces deux derniers points mritent des claircissements ; leur non respect, qui ne saute pas toujours aux yeux, est lune des principales sources derreur dans les diagrammes de transitions. Prcisons cela en modifiant quelque peu le diviseur tudi prcdemment. On souhaite remplacer, dans le diviseur par 3/4, les commandes en et div par deux commandes, div3 et div4, actives '1', qui fournissent globalement les mmes fonctionnalits, mais avec une rpartition des rles un peu diffrente : div3 commande le fonctionnement en diviseur par 3, div4 commande le fonctionnement en diviseur par 4. Si les deux commandes sont inactives, la machine sarrte dans ltat 1. Deux versions du diagramme de transitions de la nouvelle variante du diviseur sont reprsentes figure V-7.

Circuits numriques et synthse logique


div3 div4 0 (00) div3 2 (10) 1 (01) div3 + div4 3 (11) 2 (10) 0 (00) 1 (01) div3 div4 div3 + div4 div3 div4

98

div4

div4 + div3

3 (11)

FAUX
Figure 5-7

Correct

Sur les deux versions on a indiqu que le maintien dans ltat 1 est bien obtenu par complmentation de la condition de cet tat, ce qui est correct. La premire version, marque comme fausse sur la figure, contient deux erreurs qui concernent lvolution partir de ltat 3 : 1. Une erreur de syntaxe, si div3 et div4 sont tous les deux actifs, le diagramme indique deux destinations diffrentes, ce qui est absurde. 2. Une erreur de sens, par rapport au cahier des charges, si div3 et div4 sont tous les deux inactifs, le diagramme indique un maintien dans ltat 3, par absence de transition. La deuxime version prsente une solution correcte au problme, lerreur de syntaxe a disparu, et on a tabli une priorit de la division par quatre. Si les deux commandes sont actives la machine prend le chemin de la division par quatre ; elle ragit de mme si les deux commandes deviennent inactives alors que ltat 3 est actif, elle volue vers ltat 1, pour sy arrter, en passant par les tats 2 et 0. Ce genre derreurs est vite arriv. Lors de la traduction en VHDL dun diagramme de transitions les erreurs de syntaxe disparaissent le plus souvent, grce aux priorits quintroduisent les algorithmes squentiels : les instructions if ... elsif ... else ... end if dcomposent un choix multiple en alternatives binaires, do les conflits de destinations ont disparu ; les instructions case ... when ... end case doivent obligatoirement traiter toutes les alternatives. Mais la disparition des erreurs de syntaxe peut, malheureusement, saccompagner dune modification du sens quavait prvu un concepteur insuffisamment rigoureux. Attention aux tats piges ! Un tat pige est un tat dans lequel la machine peut entrer, mais dont elle ne sort jamais, comme un pige anguilles. Cela peut tre volontaire, aboutissement dune squence dinitialisation qui suit la mise sous tension dun systme, par exemple ; mais cest rare. De plus dans ce genre de situation, ltat pige est explicite, il est donc visible. Plus dangereux sont les piges cachs, qui ne figurent pas sur le diagramme de transitions. Prenons un exemple.

Circuits numriques et synthse logique

99

On souhaite raliser, au moyen de deux bascules, deux signaux rigoureusement synchrones, issus de deux diviseurs de frquence par deux coupls, tels que les sorties des bascules soient toujours complmentaires. La premire version du diagramme de transitions de la figure V-8 semble convenir, a tort.

0 (00) 1 (01) 2 (10) 1 (01)

3 (11)

2 (10)

FAUX
Figure 5-8

Correct

Plac dans un circuit programmable de type 16V8, la machine dtats ainsi cre ne fonctionne pas du tout : Synthtis la main, partir du diagramme, avec des bascules D, elle reste obstinment arrte dans ltat 0, aprs tre passe par ltat 3 lors de la mise sous tension, par les vertus de linitialisation automatique dont dispose le circuit. Par omission des termes correspondants dans les quations de commande, tous les tats oublis, dans une synthse qui emploie des bascules D, sont raccords ltat 0. Or celui-ci, toujours par omission, est un pige dans notre exemple. Synthtis par un compilateur, qui gnre par dfaut les quations de maintien, le systme reste obstinment fig dans ltat 3, autre pige. La deuxime version fonctionne correctement, et a, de plus, la vertu dtre dcrite par des quations plus simples, que lon aurait dailleurs pu trouver directement par un simple raisonnement qualitatif46. Le problme des piges cachs a conduit lintroduction, dans les langages de description, de sortes de mta tats , qui regroupent tous les non-dits, pour pouvoir prciser ce qui doit leur arriver (else dun if, others dun case, en VHDL). Mais, comme lexemple prcdent le montre, le raccordement de tous les tats inutiliss dans un mme tat du diagramme, ne conduit pas toujours la solution la plus simple. Une approche algorithmique : VHDL VHDL offre de multiples possibilits pour traduire le fonctionnement dune machine dtats. Seules nous intressent ici les descriptions comportementales, dans lesquelles le coeur dune machine dtats est associ un processus. Mme avec cette restriction, qui exclut les reprsentations structurelles, toujours possibles, le langage offre des styles de programmation varis, qui permettent de traduire simplement les situations les plus diverses. Nous tenterons, ci-dessous, de donner certaines indications gnrales, qui peuvent servir de guide pour les cas les plus courants. En conformit avec ce qui a t dit au dbut de ce
46

Nous ne pouvons que conseiller au lecteur de faire, titre dexercice, la synthse des exemples dont nous ne donnons pas les quations.

Circuits numriques et synthse logique

100

chapitre, nous ne nous occuperons que de fonctions synchrones, dont le synoptique gnral correspond celui de la figure V-1. Le registre d tat A tout seigneur tout honneur, nous commencerons par le registre dtat. Il est matrialis, dans un programme source en VHDL, par deux lments indissociables : 1. un signal interne, de type bit_vector, numr ou integer, dclar de faon tre cod sur n chiffres binaires, 2. un processus, activ par le seul signal dhorloge, qui est lunique endroit o le signal dtat subit une affectation. Le choix du type employ pour le signal dtat dpend de la nature des oprations les plus frquemment rencontres dans le diagramme de transitions, du lien entre le registre dtat et les sorties, nous reviendrons sur ce point important, et ... du got du concepteur. Mme sil semble plus naturel dadopter, par exemple, un type entier pour une machine dont le fonctionnement se modlise bien par des oprations arithmtiques, il est bon de se souvenir que les oprateurs peuvent tre surchargs, pour agir sur des vecteurs de bits. Les paquetages fournis avec un compilateur contiennent dj la plupart de ces surcharges utiles. Faut il crer un processus part pour la fonction combinatoire f( ), qui calcule, dans le synoptique de la figure V-1, ltat futur ? Rien nest moins sr. La sparation du registre dtat et de sa commande conduit un premier processus, qui est trivial, pour le registre dtat, et un second processus, qui lest beaucoup moins, pour la commande. Notons, en particulier, que des combinaisons des entres dont on ne prcise pas leffet sur la machine gnrent, par dfaut, des maintiens47 dans la version mono processus, et des mmorisations asynchrones des commandes dans la version deux processus spars ! Un exemple de prototype de machine dtats qui corresponde au synoptique de la figure V-1 peut tre48 :
entity proto_machine is generic (n , p , q : integer := 2 ) ; port(hor : in bit ; entrees : in bit_vector(0 to p - 1); sorties : out bit_vector(0 to q - 1) ) ; end proto_machine ; -- suivant le compilateur utilise : use work.paquetage_arithmetique.all ; architecture comporte of proto_machine is signal etat : bit_vector(n - 1 downto 0) ; begin machine : process
47

Dans le diagramme de transition. Ces maintiens peuvent tre voulus, auquel cas tout va bien, ou involontaires, auquel cas le rsultat est faux, mais pas scandaleux. Des oublis dans la description dun processus combinatoire conduisent des maintiens asynchrones, ce qui est scandaleux. 48 La clause generic, prsente chapitre VI, permet de rendre modifiables certains paramtres.

Circuits numriques et synthse logique


begin wait until hor = '1' ; -- ci-dessous code du diagramme de transitions. end process machine ; actions : process begin -- ci-dessous code du calcul des sorties. end process actions ; end comporte ;

101

Lactivation dune transition, dans un diagramme dtats, dpend de ltat initial et des entres extrieures. On peut, quitte caricaturer un peu une ralit toujours plus nuance, situer une machine dtats quelque part entre deux extrmes : Certains automates traitent beaucoup de variables dentres, une ou peu de fois chacune. Ltat de la machine sert essentiellement tester dans un ordre cohrent, ces diffrentes entres, attendre, chaque tape, une condition sur lune ou lautre dentre elles et dclencher une action, avant de passer la suite du programme. La valeur particulire de ltat de la machine, chaque tape, est essentielle pour dterminer la grandeur teste et le trajet suivant. Un exemple typique de fonctionnement de ce genre est un programmateur de lave linge. Dautres machines rpondent des commandes globales, qui provoquent des parcours, dans lespace des tats accessibles, qui peuvent tre dcrits indpendamment des valeurs, chaque instant, des tats. Lexemple typique dune telle machine est un compteur. Les commandes de comptage, de chargement parallle, de remise zro, entranent une volution qui obit un algorithme gnral, dans lequel la valeur particulire de ltat actuel nintervient pas pour prvoir celle de ltat futur : soit que ltat futur ne dpende pas de ltat actuel, soit que la valeur de ltat futur puisse tre calcule partir de celle de ltat actuel, de faon systmatique, par exemple par une opration mathmatique. Les deux discussions qui suivent correspondent ces deux situations. Primaut l tat de dpart Pour dcrire un diagramme de transitions en VHDL, une mthode simple consiste traiter toutes les valeurs possibles de ltat de la machine, et pour chaque cas, analyser les entres pour en dduire ltat suivant. Lexemple ci-dessous est la transcription, avec cette dmarche, du diviseur par trois ou quatre tudi prcdemment (diagramme de la figure V-6).
entity div3_4 is port ( hor , div , en : in bit ; Q1 , Q0 : out bit ) ; end div3_4 ; architecture comporte of div3_4 is signal etat : bit_vector(1 downto 0) ; begin Q1 <= etat(1) ;

Circuits numriques et synthse logique


Q0 <= etat(0) ; process begin wait until hor = '1' ; case etat is -- primaut a l etat. when "00" => etat <= "01" ; when "01" => if en = '1' then etat <= "11" ; end if ; when "10" => etat <= "00" ; when "11" => if div = '1' then etat <= "10" ; else etat <= "00" ; end if ; end case ; end process ; end comporte ;

102

La mme fonction de principe, mais avec un nombre plus important dtats possibles, conduirait vite une numration dune lourdeur prohibitive. La slection others de linstruction when permet, quand un traitement collectif de certains tats est possible, de rsoudre le problme. Le programme qui suit correspond un diviseur par 255/256, pour lequel on a abandonn la contrainte dobtenir la mme frquence pour toutes les sorties, contrainte irralisable avec un registre dtat de largeur 8 bits :
entity dual_modulus is generic (n : integer := 8 ) ; -- n est la taille du registre d etat. port(hor : in bit ; en, div : in bit ; sortie : out integer range 0 to 1 ) ; end dual_modulus ; architecture comporte of dual_modulus is signal etat : integer range 0 to 2**n - 1 ; begin machine : process begin wait until hor = '1' ; case etat is when 1 => -- cas particulier. if en = '1' then etat <= etat + 1; end if ; when 2**n - 2 => if div = '0' then etat <= 0 ; else etat <= etat + 1 ;

Circuits numriques et synthse logique


end if ; when others => -- cas general. etat <= etat + 1 ; end case ; end process machine ; actions : process begin sortie <= etat / 2**(n-1);-- bit de poids fort. end process actions ; end comporte ;

103

Lexemple prcdent illustre la limitation du dessin explicite dun diagramme de transitions, dans des cas un peu complexes. Certains outils de CAO fournissent lutilisateur la possibilit de crer des macro tats , utiles quand une partie du diagramme peut tre dcrite par une formule. Donnons un exemple (figure V-9) qui correspond au diviseur par 255/256 prcdent49 :

en 1 0 en 2 Indique une squence de comptage assortie une condition unique.

div 255 div Figure 5-9 ++ 254

Ces extensions, qui ne sont absolument pas standardises, la reprsentation traditionnelle des diagrammes de transitions permettent de reprsenter de faon visuelle des fonctionnement complexes, ce nest pas ngliger. Primaut la commande Les machines dtats qui disposent de commandes globales, dont les actions peuvent tre dcrites indpendamment de la valeur explicite de ltat, se prtent fort mal une description aussi dtaille que celle fournie par un diagramme de transitions. Leur description purement algorithmique peut, pourtant, tre fort simple. Lexemple ci-dessous illustre ce fait au moyen dun compteur modulo dix, inspir du circuit 74162, pourvu de trois commandes clear, load et en, dans lordre de priorits dcroissantes : clear = '0' provoque la mise zro du compteur, quel que soit son tat initial ;

49

Reprsentation inspire du logiciel PLDDS, de la socit Hewlett Packard.

Circuits numriques et synthse logique

104

load = '0' provoque le chargement parallle du compteur, avec des donnes extrieures, quel que soit son tat initial ; en = '1' autorise le comptage ; quand toutes les commandes sont inactives, le compteur ne change pas dtat.
entity decade is port ( hor , clear, load, en : in bit ; donnee : in integer range 0 to 9 ; sortie : out integer range 0 to 9 ) ; end decade ; architecture comporte of decade is signal etat : integer range 0 to 9 ; begin machine : process begin wait until hor = '1' ; if clear = '0' then -- primaut aux commandes. etat <= 0 ; elsif load = '0' then etat <= donnee ; elsif en = '1' then case etat is -- un cas particulier. when 9 => etat <= 0 ; when others => etat <= etat + 1 ; end case ; end if ; end process machine ; sortie <= etat ; end comporte ;

Il est clair quun diagramme de transitions complet dun tel objet est pratiquement impossible crire : le chargement parallle autorise des transitions entre toutes les paires dtats. Lapproche algorithmique, par contre, ne pose aucune difficult. On notera galement que la structure if...elsif...else...end if permet de traduire, de faon trs lisible, la priorit qui existe entre les diffrentes commandes. Rsumons nous : Le processus qui dcrit le fonctionnement dune machine dtats comporte deux structures imbriques : le traitement des commandes et le traitement de ltat de dpart de chaque transition. Les commandes, compte tenu de leurs hirarchies, se prtent bien une modlisation par des structures if...elsif...else...end if. Les tats se prtent bien une modlisation en terme daiguillage, soit les structures case...when...when others...end case. Suivant le type de fonctionnement, primaut ltat de dpart ou primaut la commande, on choisira lordre dimbrication des deux structures correspondantes.

Circuits numriques et synthse logique

105

5.2.2 Des choix darchitecture dcisifs


Les logiciels de synthse librent le concepteur davoir se proccuper des dtails des calculs qui conduisent, face un problme pos, dune ide de solution aux quations de commandes des circuits, dduites dun diagramme de transitions ou dun algorithme. Le travail de conception qui reste sa charge rside principalement dans les choix gnraux darchitectures : dcoupage du systme en sous ensembles de taille humaine, choix de structures et de codages pour chaque sous ensemble. Ces derniers comprennent principalement le traitement des entres sorties et, en liaison avec les sorties, le type de codage des tats. Calculs des sorties : machines de Mealy et de Moore Suivant la faon dont les sorties dpendent des tats et des commandes, on distingue deux types de machines dtats : les machines de Moore et les machines de Mealy. Dans les premires les sorties ne dpendent que de ltat actuel de la machine, dans les secondes les sorties dpendent de ltat de la machine et des entres. Dans beaucoup de cas rels la sparation nest pas aussi tranche : certaines sorties sont traites comme des sorties dune machine de Moore, dautres comme des sorties dune machine de Mealy. Machines de Moore A limage de M. Jourdain, nous avons, en ralit, fait des machines de Moore sans le savoir. Le synoptique gnral de la figure V-1, dans lequel les sorties sont fonctions uniquement de la valeur du registre dtat, est la dfinition mme dune telle machine. Dans ce type darchitecture, le calcul des sorties et le codage des tats sont videmment intimement lis. Nous aurons loccasion de revenir sur ce point ultrieurement. Machines de Mealy Dans une machine de Mealy les entres du systme ont une action directe sur les sorties, nous admettrons, dans un premier temps, que les sorties sont des fonctions purement combinatoires, symbolises par une fonction g( ), des entres et de ltat de la machine. La structure gnrale dune machine de Mealy est la suivante (figure V-10) :

Circuits numriques et synthse logique


Horloge p

106

Entres

f( )
n n Calcul de l tat futur

g( )
Etat futur Registre tat q Calcul des sorties Sorties

Etat actuel

Figure 5-10

Une premire diffrence apparat alors immdiatement entre les comportements de sorties de Moore et de Mealy : les premires voluent suite un changement dtat, donc la priode dhorloge qui suit celle o a vari lentre responsable de lvolution, les secondes ragissent immdiatement une variation dune entre, prcdant en cela lvolution du registre dtat. Le chronogramme de la figure V-11 illustre ce point ; on y reprsente, en supposant le fonctionnement idal, cest dire sans faire apparatre les temps de propagations : le changement dune entre com, un changement dtat qui en rsulte, etat_i passe 0, le changement associ dune sortie de Moore, moore_i, qui passe 1, le changement dune sortie de Mealy, mealy_ou_i, calcule par mealy_ou_i = com + etat_arrive, o etat_arrive est ltat qui suit etat_i, le changement dune autre sortie de Mealy, mealy_et_i, calcule par mealy_et_i = com etat_i. Un point intressant, que souligne ce chronogramme, est la possibilit de gnrer, par une sortie de Mealy, une impulsion qui dure une priode dhorloge, indiquant quun changement dtat va se produire au front dhorloge suivant (sortie mealy_et_i)50.

50

Il est clair que nous supposons ici que les commandes sont synchrones de la mme horloge que la machine tudie.

Circuits numriques et synthse logique


Horloge temps

107

com

etat_i

temps

moore_i

temps

mealy_ou_i

temps

mealy_et_i

temps

temps

Figure 5-11

Une application classique des machines de Mealy est la cration doprateurs pourvus de sorties dextension. Reprenons, titre dexemple, le compteur modulo 10 de lexemple VHDL prcdent. Il serait souhaitable de pouvoir associer simplement plusieurs de ces compteurs en cascade, de faon raliser un compteur sur plusieurs chiffres dcimaux, un compteur kilomtrique de voiture, par exemple, sans avoir rajouter de circuiterie supplmentaire. Pour cela il faut disposer dune sortie, rco (pour ripple carry out), qui nous indique que la dcade va passer zro, cest dire quelle est dans ltat 9 et quelle est autorise compter, car son entre dautorisation, en, est un. Mcanisme danticipation et influence directe dune entre, la sortie rco dun compteur est bien une sortie de Mealy. Le programme ci-dessous contient la modification souhaite :
entity decade_rco is port ( hor , clear, load, en : in bit ; donnee : in integer range 0 to 9 ; sortie : out integer range 0 to 9 ; rco : out bit ) ; end decade_rco ; architecture comporte of decade_rco is signal etat : integer range 0 to 9 ; begin machine : process begin wait until hor = '1' ; -- mme code que prcdemment. end process machine ; sortie <= etat ; rco <= '1' when etat = 9 and en = '1' else '0'; end comporte ;

Circuits numriques et synthse logique

108

Pour crer un compteur plusieurs chiffres dcimaux, il suffit alors de connecter la sortie rco de chaque dcade sur lentre en de la dcade de poids suprieur ; il va sans dire que toutes les dcades doivent tre pilotes par la mme horloge51 ! Diagramme de transitions d une machine de Mealy Pour tenir compte de laction immdiate des entres sur les sorties, dans une machine de Mealy, on complte parfois le diagramme de transitions de la machine en faisant figurer, en plus de la condition de transition, la valeur associe des sorties du type Mealy. Par exemple, pour une simple bascule R-S synchrone, mais qui ragit instantanment, nous obtenons (figure V-12) :

S/1 hor S R R/0 sortie S/0 0 1 R/1

Figure 5-12

Un tel diagramme se lit de la faon suivante : Quand la bascule est 0, la sortie est 0 tant que lentre S est 0, quand S passe 1 la sortie passe 1 et la bascule effectue la transition 01 au front dhorloge suivant ; quand la bascule est 1, la sortie est 1 tant que lentre R est 0, quand R passe 1, la sortie passe 0 et la bascule effectue la transition 10 au front dhorloge suivant. De ce diagramme nous pouvons dduire lquation de la commande, D, de la bascule, et lquation de la sortie52 :

D = Q S + R Q sortie = Q S + R Q
Il se trouve que, dans cet exemple, lquation de la sortie est identique, dans la forme mais pas dans le rsultat), celle de la commande de la bascule ; ce nest videmment pas toujours le cas. Comparaison des machines de Moore et Mealy : un exemple Afin dillustrer les diffrences entre les deux types de machines dtats, nous allons donner un exemple dapplication, trait par les deux mthodes.
51

Notons, au passage, un pige des sorties de Mealy : il est interdit de rajouter un rtrocouplage de la sortie rco sur lentre en de la mme dcade. Ce rtrocouplage crerait une raction asynchrone, qui peut, par exemple, conduire des oscillations du circuit. Dans les compteurs TTL de la famille 160, les constructeurs ont prvu deux entres, ent et enp, dautorisation de comptage, dont lune, enp, na aucune action sur la sortie de mise en cascade. Sil est ncessaire, par exemple, dinhiber le comptage en fin de cycle, cest cette deuxime entre de validation qui doit tre employe. 52 On comparera utilement le fonctionnement de cette bascule R S synchrone avec celui dune bascule J K.

Circuits numriques et synthse logique

109

Un dcodeur Manchester diffrentiel. Dans les communications sries entre ordinateurs on utilise gnralement des techniques particulires de codage pour les signaux qui circulent sur le cble, par exemple, le codage Manchester diffrentiel. En codage Manchester diffrentiel, chaque intervalle de temps lmentaire, pendant lequel un signal binaire est plac sur le cble, nomm le plus souvent temps bit , est divis en deux parties de dures gales avec les conventions suivantes : Un signal binaire 1 est reprsent par une absence de transition au dbut du temps bit correspondant. Un signal binaire 0 est reprsent par la prsence dune transition au dbut du temps bit considr. Au milieu du temps bit il y a toujours une transition.

hor man bin absence de transition (1) transition systmatique transition signifiante (0)

Figure 5-13

Le chronogramme de la figure V-13 reprsente un exemple dallure des signaux. Les donnes dcoder, le signal man, sont synchrones dune horloge hor53 ; on souhaite raliser un dcodeur qui fournit en sortie le code binaire correspondant, bin. La sortie du dcodeur est retarde dune priode dhorloge par rapport linformation dentre, pour une raison qui sexpliquera par la suite. Analyse du problme : Lide est assez simple, nous allons construire une machine dtats qui, parcourt un premier cycle quand le signal dentre change chaque priode dhorloge, ce qui correspond un '0' transmis, et change de cycle quand elle dtecte une absence de changement du signal dentre, qui correspond un '1' transmis. Machine de Mealy : Labsence de changement peut se produire tant pour un niveau haut que pour un niveau bas du signal dentre, do lbauche de diagramme de transitions de la figure V-14 (page suivante).

La reconstruction par un rcepteur du signal dhorloge, hor, nest pas abord ici. Les techniques employes relvent gnralement de lanalogique (boucle verrouillage de phase).

53

Circuits numriques et synthse logique

110

hor man Mealy bin 0/0 x/y : man/bin Q1Q0 : tat

a 00 1/0 b 01

0/1 1/1 0/1

c 10

0/1

1/1

d 11

1/1

Figure 5-14

On se convaincra facilement que les cycles parcourus sont : abababa... ou bababab... pour trois '0' conscutifs transmis, acbdacb... ou bdacbda... pour trois '1' conscutifs transmis. En fonctionnement permanent, une fois le systme synchronis et sauf erreur dans le code dentre, les conditions de maintien dans les tats c et d sont toujours fausses, elles servent la synchronisation en dbut de rception. Du diagramme prcdent on dduit les quations de commandes des bascules, D1 et D0, et celle de la sortie ; aprs quelques simplifications on obtient :
D0 = man D1 = Q0 man bin = Q1 + Q0 man

Machine de Moore (figure V-15) :

0 hor man Moore bin = Q2 a 000 0 man Q2Q1Q0 : tat 1 1 0 0 1 b 001 1 e 111 1 c 110 0 0 1 d 101 f 100

Figure 5-15

Dans une machine de Moore, diffrentes valeurs des sorties correspondent des tats diffrents, le diagramme de transitions doit donc contenir plus dtats. Le diagramme ne reprsente pas deux tats inutiliss, 2 et 3, en dcimal. Leur affectation se fait lors du calcul des quations de commandes, de faon les simplifier au maximum (si man = '1', 37 et 25 ; si man = '0', 34 et 26). On obtient, aprs quelques manipulations :
D0 = man D1 = Q0 man

Circuits numriques et synthse logique

111

D2 = Q1 + Q0 man
qui sont exactement les mmes quations que celles obtenues dans le cas de la machine de Mealy54, malgr lapparente complexit du diagramme de transitions. Comparaison : Sur lexemple que nous venons de traiter, il apparat comme seule diffrence une bascule supplmentaire en sortie, pour gnrer le signal bin, dans le cas de la machine de Moore. En regardant plus attentivement larchitecture des deux systmes, on constate que la sortie combinatoire de la machine de Mealy risque de nous rserver quelques surprises : son quation fait intervenir des signaux logiques qui changent dtat simultanment, do des risques de cration dimpulsions parasites troites au moment des commutations. Une simulation confirme ce risque55(figure V-16) :

hor man mealy moore mealy resynchronis

Figure 5-16

Quand on compare les sorties des deux machines, elles diffrent dune priode dhorloge, ce qui est normal, mais la sortie de la machine de Moore est exempte de tout parasite, contrairement celle de la machine de Mealy, ce qui est un avantage non ngligeable. Llimination des parasites en sortie a une solution simple : il suffit de resynchroniser la sortie incrimine, cest ce que nous avons fait pour obtenir la dernire trace du chronogramme prcdent, dans ce cas, les deux approches conduisent des rsultats strictement identiques ! Autocritique. Pour familiariser le lecteur aux raisonnements sur les diagrammes de transitions, avec un exemple pas tout fait trivial, nous navons pas respect la rgle dor du concepteur : diviser pour rgner. En sparant le problme en deux : 1. Dtection des absences de transition ; 2. gnration du code binaire ; Llaboration des diagrammes de transitions des deux machines dtat devient un exercice extrmement simple. Le programme VHDL de ltude prcdente :

54

Soyons honntes, le codage des tats a t choisi de faon ce que les choses tombent bien ; mais, quel que soit le codage, les complexits des quations sont du mme ordre de grandeur. 55 Le simulateur utilis est purement fonctionnel, mais causal. Chaque couche logique rajoute un temps de propagation virtuel gal une unit ( tic de simulation). Lallure des signaux na donc quune vertu qualitative, pour ce qui concerne les limites dun fonctionnement.

Circuits numriques et synthse logique

112

On trouvera ci-dessous le programme VHDL qui contient, sous forme de deux processus, les deux solutions prsentes pour le dcodeur Manchester diffrentiel. La lecture de ce programme doit se faire en observant paralllement les deux diagrammes dtats.
entity mandec is port ( hor, man : in bit ; mealy , mealysync : out bit ; moore : out bit ); end mandec ; architecture comporte of mandec is signal moore_state : bit_vector(2 downto 0); signal mealy_state : bit_vector(1 downto 0); begin mealy <= mealy_state(1) or not(mealy_state(0) xor man) ; moore <= moore_state(2) ; mealy_mach : process begin wait until hor = '1' ; mealysync <= mealy_state(1) or not(mealy_state(0) xor case mealy_state is when "00" => if man = '0' then mealy_state <= "10" else mealy_state <= "01" end if ; when "01" => if man = '0' then mealy_state <= "00" else mealy_state <= "11" end if ; when "10" => if man = '1' then mealy_state <= "01" end if ; when "11" => if man = '0' then mealy_state <= "00" end if ; end case ; end process mealy_mach ;

man) ;

; ;

; ;

moore_mach : process begin wait until hor = '1' ; case moore_state is when O"0" => if man = '0' -- etats en octal then moore_state <= O"6" ; else

Circuits numriques et synthse logique


moore_state <= O"1" ; end if ; when O"1" => if man = '0' then moore_state <= O"0" ; else moore_state <= O"7" ; end if ; when O"6" => if man = '1' then moore_state <= O"5" ; end if ; when O"7" => if man = '0' then moore_state <= O"4" ; end if ; when O"4" => if man = '0' then moore_state <= O"6" ; else moore_state <= O"1" ; end if ; when O"5" => if man = '0' then moore_state <= O"0" ; else moore_state <= O"7" ; end if ; when O"2" => if man = '0' -- etat inutiles then moore_state <= O"6" ; else moore_state <= O"5" ; end if ; when O"3" => if man = '0' then -- bis moore_state <= O"4" ; else moore_state <= O"7" ; end if ; end case ; end process moore_mach ; end comporte ;

113

Codage des tats Quand on utilise des circuits standard, des compteurs programmables, par exemple, pour raliser une machine squentielle, le codage des tats du diagramme de transitions est, de fait, impos par le circuit cible. Il en va tout autrement quand la dite machine doit tre implante dans un circuit programmable ou un ASIC. Libr des contraintes lies une quelconque fonction prdfinie, le concepteur peut, loisir, adapter le codage des tats lapplication quil est en train de raliser. Le choix dun code est particulirement important quand on soriente vers la ralisation dune machine de Moore. Lexemple du dcodeur Manchester nous a appris que lun des avantages de cette architecture rside dans la possibilit de gnrer les sorties directement partir du registre dtat, donc dnues de tout parasite li leur calcul. Mais, comme nous le verrons dans deux exemples, lidentification des sorties du systme celles des bascules du registre dtat ne suffit gnralement pas pour dfinir le codage des tats.

Circuits numriques et synthse logique

114

Ce choix du codage mrite une grande attention, il conditionne grandement la complexit de la ralisation, sa bonne adaptation au problme pos ; un choix judicieux conduira un rsultat simple et facilement testable, alors quaucun logiciel doptimisation ne compensera des erreurs de dcision ce niveau. Le nombre dtats ncessaires et le type de code adopt fixent, en premier lieu, la taille du registre dtat. Schmatiquement, si n est la taille, en nombre de bits, du registre dtat, et Ne le nombre dtats ncessaires, ces deux nombres (entiers !) doivent vrifier la double ingalit : n Ne 2n Si lingalit de gauche nest pas vrifie, certaines bascules sont probablement inutiles ; quand cette ingalit se transforme en galit, on utilise un code trs dilu , une bascule par tat, qui prsente lavantage de la lisibilit, mais le danger de gnrer en grand nombre des tats accessibles inutiliss (rappelons ici quil y a toujours 2n tats accessibles). Si lingalit de droite nest pas vrifie, la tentative est sans espoir ; si elle se transforme en galit, on utilise un encodage fort , auquel il faudra trs probablement adjoindre des fonctions combinatoires de calcul des sorties ; on ne ralise pas que des compteurs binaires ou des codeurs de position absolue (code de Gray). Les situations intermdiaires correspondent en gnral des codes adapts aux sorties. Encodage fort ou code dilu ? En caricaturant un peu, on peut dire que les tenants de la premire solution prfrent les fonctions combinatoires, et que les seconds sont des adeptes des bascules. Il nest pas vident, priori, de prvoir la complexit des quations engendres par tel ou tel code. On gagne souvent suivre le fonctionnement naturel de la machine56, et, surtout, on gagne se souvenir que les ordinateurs, et leurs compilateurs, ne sont pas poss sur un bureau titre de dcoration ; ils permettent de voir trs vite quelle est la complexit sous jacente dun choix, sans pour cela tomber dans le BAO57. Codes adapts aux sorties Lide qui vient naturellement lesprit est de choisir le codage en fonction des sorties gnrer. Cest souvent la mthode la plus souple, celle qui conduit aux quations les plus faciles interprter, et pas forcment plus compliques que celles que lon obtiendrait avec dautres codes. Une commande de feux tricolores. Pour satisfaire une tradition bien tablie, nous prendrons comme premier exemple une commande de feux de circulation routire. Un passage pour pitons traverse une avenue ; il est protg par un feu tricolore qui fonctionne la demande des pitons : En labsence de toute demande, les feux sont lorange clignotant (un nombre Tor de secondes allums, Tor secondes teints). Quand un piton souhaite traverser lavenue, il est invit appuyer sur un bouton, ce qui provoque le dclenchement dune squence (vue des voitures) : orange fixe pendant 2Tor secondes,
56

Mais quest-ce que ce fonctionnement naturel ? Sa recherche est, sans doute, lune des parties les plus intressantes, et donc souvent difficile, du travail. 57 Bricolage Assist par Ordinateur.

Circuits numriques et synthse logique

115

rouge pendant Tr secondes, vert pendant Tv secondes, pour laisser passer le flot de voitures pendant un minimum de temps, retour la situation par dfaut. Profitons de cet exemple pour subdiviser la solution du problme en sous ensembles. Trois blocs fonctionnels peuvent tre identifis : 1. La commande des feux proprement dite, les sorties de trois bascules du registre dtat commandent directement lallumage, ou lextinction, des lampes rouge, verte et orange. 2. Une temporisation qui, suite une commande dinitialisation, fournit les trois dures Tor, Tr et Tv. 3. Une mmorisation de lappel des pitons, qui vite de se poser des questions concernant la dure pendant laquelle le demandeur appuie sur le bouton ; une simple pression suffit, lappel est alors enregistr, quel que soit ltat davancement de la squence de gestion des feux. Outre les commandes des feux proprement dites, le bloc principal fournit un signal dinitialisation (cpt) la temporisation, qui doit durer une priode dhorloge58, et un signal dannulation (raz) de la requte, mmorise, dun piton. Les signaux dentre de ce bloc sont la requte (piet) et les trois indications de dure Tor Tr et Tv ; nous supposerons que ces dernires passent '1', pendant une priode dhorloge, quand les dures correspondantes se sont coules. Do le synoptique de la figure V-17 :

hor

R O V piet Feux cpt Tempo Tor Tr Tv raz

svp Appel

Figure 5-17

Nous nous contenterons dtudier, ici, le bloc principal, feux, laissant la synthse des deux autres blocs titre dexercice. Premire bauche : Le fonctionnement gnral peut tre celui illustr par la figure V-18 :
Nous sommes en train de dfinir trois processus qui se commandent et/ou sattendent mutuellement. Le danger de ce type darchitecture, trs frquente, est de gnrer des interblocages : un processus en initialise un second et attend une rponse de ce dernier. Si le demandeur oublie de relcher la commande dinitialisation, le systme est bloqu. Ce type de situation porte, en informatique, le doux nom dtreinte fatale (deadly embrace). La solution adopte ici est denvoyer des signaux fugaces (mais synchrones !), ce qui oblige le demandeur attendre la rponse dans un tat diffrent de celui o il a pass la commande dinitialisation.
58

Circuits numriques et synthse logique

116

feux teints Tor piet feu orange Tor + piet Tor piet feu orange

Tor

feu rouge Tv

Tr

feu vert

Figure 5-18

Prcisions : A partir de lbauche prcdente, il nous reste prciser le mode de calcul des signaux grs par le processus feux, et en dduire le codage des tats. Le signal cpt se prte bien une ralisation sous forme de sortie de Mealy, les signaux de commande des feux une ralisation sous forme de sorties de Moore. Les deux tats o le feu orange est allum doivent tre distingus, une bascule supplmentaire, qui nest attache aucune sortie, doit tre rajoute cette fin. La sortie raz peut tre identique la sortie qui correspond au feu rouge ; il nest pas utile de mmoriser une demande de piton quand les voitures sont arrtes au feu rouge. Do une version plus labore du diagramme de transitions (figure V-19) :

others

hor piet Tor Tr Tv 0000

Q3 Q2 Q1 Q0 feux

R raz O V cpt Tor/cpt

tat : Q3Q2Q1Q0

(Tor piet) /cpt 0100

(Tor+piet)/cpt (Tor piet)/cpt

Tr/cpt 1000

0101

0010

Tv/cpt

Figure 5-19

Programme VHDL : Un exemple de programme VHDL, qui correspond au module feux uniquement, est fourni ci-dessous ; il se dduit directement du diagramme de transitions prcdent.
entity feux is port ( hor, piet, Tor, Tr, Tv : in bit ; R, O, V, cpt : out bit ); end feux ; architecture comporte of feux is signal etat : bit_vector(3 downto 0) ; begin R <= etat(3) ; O <= etat(2) ; V <= etat(1) ; machine : process -- diagramme de transitions. begin

Circuits numriques et synthse logique


wait until hor = '1' ; case etat is when X"0" -- tats en hexadcimal. => if (Tor or piet) = '1' then etat <= X"4" ; end if ; when X"4" => if (Tor and piet) = '1' then etat <= X"5" ; elsif (Tor and not piet) = '1' then etat <= X"0" ; end if ; when X"5" => if Tor = '1' then etat <= X"8" ; end if ; when X"8" => if Tr = '1' then etat <= X"2" ; end if ; when X"2" => if Tv = '1' then etat <= X"4" ; end if ; when others => etat <= X"0" ; -- pour les tats inutiliss. end case ; end process machine ; mealy : process -- calcul de la sortie cpt. begin wait on etat, piet, Tor, Tr, Tv ; -- liste de sensibilit cpt <= '0' ; -- assure un bloc combinatoire. case etat is when X"0" => if Tor = '1' or piet = '1' then cpt <= '1' ; end if ; when X"4" => if Tor = '1' then cpt <= '1' ; end if ; when X"5" => if Tor = '1' then cpt <= '1' ; end if ; when X"8" => if Tr = '1' then cpt <= '1' ; end if ; when X"2" => if Tv = '1' then cpt <= '1' ; end if ; when others => null ; -- case complet. end case ; end process mealy ; end comporte ;

117

Le dcodeur Manchester rexamin.

Circuits numriques et synthse logique

118

Comme deuxime exemple, reprenons, en la compltant un peu, ltude du dcodeur Manchester diffrentiel. Nous avions omis, dans la version prcdente, un deuxime signal de sortie, rx, qui indique aux utilisateurs la cadence de transmission. Comme on peut le voir sur la figure V-20 , ce signal a une frquence moiti de celle de lhorloge, mais il ne peut pas sagir dun simple diviseur par deux : un diviseur par deux est incapable de distinguer les transitions systmatiques des transitions signifiantes du signal dentre man, il est incapable de se synchroniser.

hor man bin rx resynchronisation mise en route du dcodeur

Figure 5-20

Choisissons, comme prcdemment, la sortie Q2 (poids fort) du registre dtat pour gnrer le signal bin. Pour le signal rx, il est pratique de prendre la sortie Q0 de ce registre ; une fois le dcodeur synchronis, les trajets parcourus dans le diagramme de transitions doivent tre tels que la parit du code de ltat change chaque transition : le successeur dun nombre impair doit tre pair, et rciproquement. Le diagramme de la figure V-7, tudi prcdemment, ne respecte pas cette clause (transition ac , par exemple), et ne peut pas la respecter, le nombre dtats ntant pas suffisant (si on changeait les codes des tats a et b, par exemple, la transition ea ne respecterait plus lalternance de parit). Partant du cycle cdef..., qui correspond aux transmissions de signaux binaires gaux '1', on adjoint ce cycle deux cycles quivalents, aba...et ghg..., qui codent les '0' transmis, mais avec une parit inverse. On obtient un diagramme 8 tats, qui peut, par exemple, tre celui de la figure V-21. Comme prcdemment, les conditions de maintien sont, en rgime tabli, toujours fausses. Leur dtection pourrait servir indiquer une faute de synchronisation. Nous laisserons au lecteur le soin de traduire ce diagramme de transitions en quations de commandes des bascules, et en programme VHDL, ce qui ne pose gure de difficult.

hor man

Q2 Q1 Q0 man

bin

1 a 000 0 1 b 001 0 0 e 110 1 1 1 f 111 0

0 c 100 1 h 011 0 1 d 101 0 g 010 0

rx

tat : Q2Q1Q0

Figure 5-21

Bascules enterres.

Circuits numriques et synthse logique

119

Dans les deux exemples prcdents, certaines bascules servent de sorties, dautres ne servent quaux tats internes. De telles bascules sont dites bascules enterres (burried flip flop). De nombreux circuits programmables offrent la possibilit dutiliser des bascules enterres ; cela a lavantage de diminuer, pour une complexit de circuit donne, le nombre de broches daccs ncessaires. Il est clair, cependant, que ces circuits sont plus dlicats tester : les tats ne sont pas tous visibles en sortie. Codes un seul actif Les codes dits un seul actif (one hot), sont les plus dilus : chaque tat on attribue une bascule ; la machine tant, par dfinition, dans un seul tat la fois, si lune des bascules est active, toutes les autres sont inactives. La commande de feux, tudie au paragraphe prcdent, serait une commande de ce type si on navait pas eu la fantaisie dy rajouter une bascule enterre59. Code binaire Cest le code classique des compteurs, nous lavons rencontr, par exemple, loccasion du diviseur double rapport de division 255/256. Cest typiquement le code que lon obtient quand on ralise des machines dtats avec des fonctions standard. Codes adjacents On dit quun code est adjacent, dans le cas dune machine dtat, si pour toutes les transitions du diagramme dtats, le changement de valeur du registre dtat ne porte que sur un chiffre binaire. Trs en vogue quand on synthtisait des automates asynchrones, ces codes ont perdu de limportance avec la gnralisation des techniques synchrones. La contrainte que reprsente le respect de ladjacence, pour tous les tats successifs, devient rapidement trs difficile observer. On peut, malgr tout noter que, si cela ne complique pas, par ailleurs, le problme, cest souvent une bonne ide de respecter ladjacence dans les transitions, au moins partiellement. Les tats inutiliss Tous les codes qui noccupent pas la totalit des tats accessibles gnrent des tats inutiliss. Notre feu rouge de tout lheure, par exemple, utilisait cinq des seize tats disponibles. Le non raccordement des tats inutiliss dans lun des tats du cycle relverait, dans ce cas de la roulette russe, mais avec les deux tiers des logements du barillet du revolver chargs. Si on nest pas certain que les tats inutiliss rejoignent naturellement lun des tats utiles du diagramme de transitions, il faut obligatoirement leur adjoindre une transition qui les ramne dans un territoire connu, faute de quoi on risque de crer une machine qui se plante la premire occasion.

En loccurrence, un code one hot zero, car ltat o toutes les bascules sont zro fait partie du code. Sil y a toujours une bascule active, la combinaison zro nest pas dans le code. On parle parfois, dans ce cas, de code one hot one.

59

Circuits numriques et synthse logique

120

Les tats quivalents Lors de la premire bauche dun diagramme de transitions, il peut arriver que lon cre des tats inutiles. Cela nest pas, en soi, dramatique, mais il peut tre intressant de les rechercher quand, notamment, lconomie dun ou deux tats permet de rduire la taille du registre dtat. Quand deux tats sont ils quivalents ? Quand ils gnrent les mmes sorties et les mmes valeurs futures des sorties, quelles que soient les squences dentre. Derrire cette dfinition, fort simple en apparence, se cache parfois une grande difficult de mise en pratique de cette recherche. Un cas particulier simple identifier se rencontre assez souvent sur des diagrammes de transitions de dimension raisonnable : deux tats fournissent les mmes sorties et ont les mmes tats futurs, ils sont alors quivalents, on peut supprimer lun dentre eux. Synchronisations des entres et des sorties Nous nenvisageons que la ralisation des machines dtats synchrones. Cela veut dire quau niveau local toutes les bascules qui interviennent sont pilotes par une horloge unique. Il est clair quau niveau dun systme cette rgle du synchronisme absolu est rarement observe, elle nuirait la modularit des sous ensembles. Lors des changes entre sous ensembles pilots par des horloges diffrentes, ou pour des interfaces avec un monde extrieur qui ne possde pas dhorloge du tout, un piton, par exemple, la question de la synchronisation des signaux dentre et de sortie se pose. Synchronisations des entres Les signaux dentre qui proviennent dun autre sous ensemble, pilot par une horloge diffrente, ou totalement asynchrone, doivent toujours tre resynchroniss au moyen de bascules (voir paragraphe II-3 pour plus de prcision). Synchronisations des sorties Les sorties calcules par des fonctions logiques combinatoires gnrent des impulsions parasites, nous en avons vu un exemple avec le dcodeur Manchester. Totalement inoffensives si elles sont exploites par un systme pilot par la mme horloge, ces impulsions peuvent tre fort mal acceptes par un rcepteur asynchrone de lhorloge locale. Des bascules de synchronisation des sorties suppriment ce dfaut, elles assurent des signaux stables entre deux fronts dhorloge. Ladjonction pure et simple de bascules en sortie, la place du bloc de calcul des sorties du synoptique de la figure V-1, retarde dune priode dhorloge les valeurs des sorties par rapport celles du registre dtat. Si ce retard prsente un inconvnient, il est toujours possible, quitte alourdir la partie combinatoire de la ralisation, danticiper le calcul des sorties en utilisant pour leur calcul ltat futur au lieu de ltat actuel. Le synoptique de la figure V-1 devient alors (figure V-22) :

Circuits numriques et synthse logique

121

Horloge Entres p

f( )
n n Calcul de l tat futur Etat futur Etat actuel Registre tat n

g( )
q Calcul des sorties

Sorties

(Machine de Mealy uniquement)

Figure 5-22

Circuits numriques et synthse logique

122

5.3 Fonctions combinatoires


Dans toute ralisation dun systme numrique interviennent des fonctions combinatoires ; nous en avons dj fait grand usage, sans avoir ressenti la ncessit de formaliser les choses au del de quelques dfinitions lmentaires de lalgbre de Boole. Dans les applications pratiques, ces fonctions combinatoires, bien que ne crant gure de difficult de principe, sont la source principale de complexit du schma lectrique obtenu. Sans y attacher une importance exagre, le concepteur se doit de connatre quelques principes gnraux, qui interviennent dans la manipulation de ces fonctions, ne serait-ce que pour comprendre les documents techniques qui accompagnent les circuits et les logiciels daide la synthse. Aprs deux dfinitions classiques concernant les critures standard des fonctions, nous aborderons rapidement les principes utiliss pour minimiser les quations correspondantes.

5.3.1 Des tables de vrit aux quations : les formes normales


Etant donne une fonction f(en-1, en-2, ...,e0), elle est compltement spcifie par la donne des 2n valeurs f(0, 0, ...,0), f(0, 0, ...,1) ...., f(1, 1, ...,1), qui sont les lments de sa table de vrit. Mais cette forme de reprsentation est difficilement manipulable. Aussi prfre-t-on gnralement la dcrire par une expression polynomiale qui fait intervenir les oprateurs fondamentaux de lalgbre de Boole que sont la runion (ou), lintersection (et) et la complmentation (non). On distingue traditionnellement deux formes, quivalentes, dcriture standard pour une fonction logique, nommes tout simplement premire et deuxime formes normales (ou canoniques). Premire forme normale : une somme de produits La premire forme normale est la plus couramment utilise : elle consiste crire une fonction combinatoire sous forme de somme de produits (runion dintersections) : f(en - 1, en - 2, ... , e0) = + + + f(0, 0, ..., 0) en - 1 en - 2 ... e0 f(0, 0, ..., 1) en - 1 en - 2 ... e0 f(1, 1, ..., 1) en - 1 en - 2 ... e0

Chaque terme de cette somme logique sappelle un minterme. Dans ce dveloppement polynomial, seuls restent les termes qui correspondent une valeur, dans la table de vrit de la fonction, gale '1'. Un oprateur ou exclusif, par exemple, scrit, dans cette reprsentation :

a b =

(0 0) a b + (0 1) a b + (1 0) a b + (1 1) a b a b = a b + a b
Cette criture correspond une phrase du type :

Circuits numriques et synthse logique

123

a ou exclusif b gale un si a gale 1 et b gale 0, ou si a gale 0 et b gale 1. La grande majorit des circuits programmables ont une architecture interne qui reproduit, en trois couches logiques (non et ou), un dveloppement en premire forme normale.

Notation condense Pour allger la notation, on dsigne parfois chaque minterme par un symbole, mi, o i reprsente le numro de la ligne de la table de vrit correspondante. Par exemple : m0 = en - 1 en - 2 e0 , m1 = en - 1 en - 2 e1 e0 Une fonction scrit alors :

f(en-1,en- 2, ... e0) =


ou, encore plus simplement : f=

f(ei) = 1

mi

m(i , i
1

.... ip)

o les numros ik indiquent simplement les numros des lignes de la table de vrit dans lesquelles la fonction vaut '1'. Par exemple : a b = m1 + m2 =

m(1,2)

Deuxime forme normale : un produit de sommes La mme fonction peut tre crite sous forme de produit (logique) de sommes (logiques), on parle alors de deuxime forme normale, ou canonique : f(en - 1, en - 2, ... , e0) = (f(0, 0, ..., 0) + en - 1 + en - 2 + ... + e0 ) (f(0, 0, ..., 1) + en - 1 + en - 2 + ... + e0) (f(1, 1, ..., 1) + en - 1 + en - 2 + ... + e0)

Pour une raison dont nous lverons le mystre un peu plus loin, chaque facteur de ce produit logique porte le nom de maxterme. On notera que la rgle dassociation entre les valeurs des variables, dans lcriture de la fonction, et la forme directe ou complmente avec laquelle interviennent ces variables dans le dveloppement diffre par rapport la premire forme normale : un '0' on associe la variable elle mme, et un '1' son complment. Cette inversion de rgle est une source

Circuits numriques et synthse logique

124

derreurs frquentes quand on utilise la deuxime forme normale. Aussi conseillerons nous vivement au lecteur la prudence : 1. Utiliser toujours la mme forme normale, de prfrence la premire. 2. Sil savre ncessaire dobtenir le dveloppement en deuxime forme, la mthode la plus sre consiste crire le complment de la fonction cherche en premire forme normale, puis dappliquer les thormes de De Morgan pour obtenir le rsultat souhait. Un oprateur ou exclusif, par exemple, scrit, dans cette reprsentation :
a b = ((0 0) + a + b) ((0 1) + a + b) ((1 0) + a + b) ((1 1) + a + b) a b = (a + b) (a + b)

La deuxime forme normale correspond une phrase du type : a ou exclusif b gale un si a gale 1 ou b gale 1, et si a gale 0 ou b gale 0. Notation condense Pour allger la notation, on dsigne parfois chaque maxterme par un symbole, Mi, o i reprsente le numro de la ligne de la table de vrit correspondante. Par exemple : M0 = en - 1 + en - 2 + + e0 , m1 = en - 1 + en - 2 + + e1 + e0 Une fonction scrit alors :

f(en - 1,en - 2, ... e0) =


ou, encore plus simplement : f=

f(ei) = 0

Mi

M(i , i
1

.... ip)

o les numros ik indiquent simplement les numros des lignes de la table de vrit dans lesquelles la fonction vaut '0'. Par exemple : a b = M0 + M3 =

M(0,3)

5.3.2 Llimination des redondances : les minimisations


Quand on exprime une fonction combinatoire, directement partir du rsultat obtenir, il arrive presque toujours quil y ait des redondances dans les quations obtenues.

Circuits numriques et synthse logique

125 Prenons un exemple.

1 e 3

Soit raliser un compteur modulo 3, qui, en fonction dune entre e, obisse au diagramme de transitions de la figure V-23 : Quand e = '1', le compteur sincrmente, sinon il reste dans ltat. Ltat 2 a t raccord dans le cycle, pour viter tout risque de pige .

e 2

Figure 5-23

Les quations de ce systme sobtiennent immdiatement, avec deux bascules D nous obtenons :

D1 = Q1 Q0 e + Q1 Q0 e + Q1 Q0 D0 = Q1 Q0 e + Q1 Q0 e + Q1 Q0 e + Q1 Q0 e + Q1 Q0
Avec un peu de rflexion on voit apparatre des simplifications, entre le deuxime et le troisime terme de lexpression de D0, par exemple, la variable e se simplifie. Le problme pratique qui se pose est de trouver une mthode systmatique de recherche de telles simplifications. Ce point fait lobjet des paragraphes suivants. Quelques remarques pralables simposent : Les simplifications algbriques, qui sont celles qui nous occupent ici, ne garantissent en aucun cas le nombre minimum doprateurs lmentaires pour raliser une fonction. Lexemple prsent du contrleur de parit, paragraphe III-2, en est un exemple flagrant. Ces simplifications fournissent une forme minimale des expressions dans une construction en trois couches, similaire lune des deux formes canoniques. Elles reprsentent donc un optimum dans lequel la vitesse de transfert du circuit ralis (nombre de couches) intervient en premier, le nombre doprateurs, donc la surface de silicium occupe, intervenant en second. Le concepteur est souvent amen accepter une certaine forme de compromis, dans les cas pratiques. Malgr les restrictions prcdentes, il serait faux de croire que les simplifications sont inutiles, une optimisation passe de toute faon par des minimisations des sousensembles que les contraintes de surface occupe auront dfini. Les compilateurs de silicium ont grandement chang les donnes du problme plusieurs niveaux : 1. Ils gnrent, partir des langages de haut niveau des constructions extrmement lourdes, o intervient, schmatiquement, une couche de multiplexeurs pour chaque niveau dimbrication des instructions de tests (if, case, ... etc). Sans optimisation des quations gnres un langage de haut niveau serait inutilisable60. 2. Ils permettent de grer des fonctions grand nombre de variables dentre difficilement calculables la main. La moindre machine dtats, pour laquelle on a
60

La mme remarque peut tre faite propos des langages de programmation. Si certains pensent encore que la programmation en langage machine est plus efficace, cest probablement en raison de la faible efficacit des premiers compilateurs disponibles. Les temps ont chang.

Circuits numriques et synthse logique

126

adopt un codage dirig par les sorties, donc relativement dilu, gnre des fonctions qui dcouragent vite, par le nombre de variables mises en jeu, les calculs manuels. 3. Des deux points prcdents rsulte le fait que lon ne fait plus jamais les calculs de simplifications entirement la main ; tous les compilateurs disposent de programmes de minimisation des expressions logiques. Par contre, il est essentiel que lutilisateur de tels programmes domine le principe de ce quils font, mme si la conception de ces programmes nest pas de son ressort. Nous ne nous lancerons donc pas dans des calculs sur des fonctions de plus de quatre variables, lessentiel tant de comprendre le principe de ces calculs, non de les tendre des cas rels. Dans tout ce qui suit nous nous limiterons des exemples qui font intervenir la premire forme canonique dune fonction. Simplifications algbriques directes Une variable dentre x est lobjet dune simplification si, dans lcriture de la fonction, apparaissent deux termes de la forme :
f(a, ...t, x, y,...) = ... + x fx(a, ....t, y, ...) + x fx(a, ....t, y,...) + ...

Les deux mintermes concerns sont dits adjacents, on passe de lun lautre en changeant la variable x uniquement. La fonction se simplifie en :

f(a, ...t, x, y,...) = ... + fx(a, ....t, y,...) + ...


Au del de trois variables, et encore, la difficult est de reprer les mintermes qui vont intervenir dans des simplifications. Cette difficult est accentue par le fait que le mme minterme peut intervenir dans plusieurs simplifications diffrentes, auquel cas il faut le dupliquer avant de simplifier effectivement, cest ce qui se produit dans lexpression suivante :

f(a, b, c) = a b c + a b c + a b c = (a b c + a b c) + (a b c + a b c) = a c + b c
Cette difficult de reprage limite grandement les calculs algbriques directs, do la mthode graphique des tableaux de Karnaugh. Les tableaux de Karnaugh Dfinition Les tableaux de Karnaugh, une variante des tables de vrit, sont organiss de telle faon que les mintermes adjacents soient systmatiquement regroups dans deux cases voisines, donc faciles identifier visuellement. On reprsente les valeurs de la fonction dans une table deux dimensions, organise comme un damier, dans laquelle chaque ligne et chaque colonne correspond une

Circuits numriques et synthse logique

127

combinaison des variables dentre. Le codage des lignes et des colonnes est fait dans un code adjacent, ou code de Gray (figure V-24).

bc a 0 a=1 1

c=1 00 01 11 10 f0 f4 f1 f5 f3 f7 f2 f6

cd ab

d=1 00 01 11 10

00 f0 01 f4 a=1

f1 f5

f3 f7

f2 f6 b=1

11 f12 f13 f15 f14 10 f8 f9 f11 f10 c=1

b=1

trois variables : f(abc)

quatre variables : f(abcd)

Figure 5-24

Chaque minterme correspond une cellule lmentaire de la table, qui constitue le plus petit groupement possible, do le nom. De mme, un maxterme correspond toutes les cellules sauf une gales '1', soit le recouvrement de taille maximum qui ne soit pas trivial. Cette disposition est telle que si le dveloppement en premire forme normale de la fonction contient deux mintermes adjacents, les deux '1' correspondant de la table de vrit se retrouvent dans des cases voisines. On notera que les cases dextrmit dune mme ligne; ou dune mme colonne, sont voisines. Une simplification, qui est un regroupement de mintermes adjacents, apparat alors comme une regroupement de plusieurs cases voisines. On notera quune simplification fait toujours intervenir un nombre de termes qui est une puissance de deux (2, 4, 8, ....). Exemple Reprenons les quations du compteur modulo 3 prcdent. Le report des valeurs des entres D1 et D0 des deux bascules, en fonction de Q1, Q0 et e, conduit aux tableaux de Karnaugh de la figure V-25 :

Q1Q0

Q0=1 00 01 11 10 e

Q1Q0

Q0=1 00 01 11 10 e

Q1Q0

Q0=1 00 01 11 10

e 0 e=1 1

0 0

0 1

1 0

1 1 e=1

0 1

0 1

1 1

1 0

1 1

0 1

0 1

1 1

1 0

1 1

Q1=1 D1 D0

Q1=1

Q1=1 D0 2me version

Figure 5-25

La figure prcdente met en vidence le fait que la solution nest pas toujours unique, mais si deux solutions sont possibles, elles ont la mme complexit.

Circuits numriques et synthse logique

128

Des diagrammes prcdents nous dduisons les quations (1re version de D0) :
D1 = Q1 Q0 e + Q1 e + Q1 Q0 D0 = Q0 e + Q1 Q0 + Q1 e

Nous ne pouvons que conseiller au lecteur de reprendre les exemples de machines dtats que nous avons tudies, et den dduire les quations de commandes au moyen de tableaux de Karnaugh. Fonctions incompltement spcifies Il arrive, souvent, en fait, que les donnes du problme laissent non spcifies les valeurs des sorties pour certaines combinaisons des variables dentres. Dans ce cas, le concepteur peut choisir des valeurs sa convenance, avec prudence comme nous allons le voir, pour tenter de minimiser les quations qui en rsultent. Une valeur non spcifie, par le cahier des charges, est traditionnellement note dans un tableau de Karnaugh. Il est important de noter que, non spcifie initialement, cette valeur sera bien dtermine une fois les quations choisies ! Reprenons, titre dillustration, les quations du dcodeur Manchester, sous forme de machine de Moore, dont le diagramme de transitions 6 tats a t reprsent la figure V15. Les tats 2 et 3 ne figurent pas sur le diagramme, nous pouvons donc les raccorder dans le cycle notre guise, de faon diminuer la complexit des quations gnres pour les commandes des trois bascules. Nous obtenons, en notant m pour lentre man, les tableaux de la figure V-26.

Q1Q0 m Q2

Q0

00 01 11 10 0 0 1 1 0 0 1 1 0 1
Q1

Q1Q0 m Q2

Q0

00 01 11 10 1 1 0 0 0 0 1 1 0 1
Q1

Q1Q0 m Q2

Q0

00 01 11 10 1 1 0 0 0 0 1 1 1 1
Q1

00 01
Q2

0 1

00 01 11 10

1 0

00 01 11 10

1 1
Q2

11 10

D0

D1

D2

Figure 5-26

Do les quations prcdemment donnes sans justification :


D0 = man D1 = Q0 man D2 = Q1 + Q0 man

On notera quil est essentiel, quand on a utilis des valeurs non spcifies, de contrler postriori, quand on connat les valeurs attribues aux , que lon na pas gnr de pige dans le diagramme de transitions.

Circuits numriques et synthse logique

129

Llimination des parasites de commutation Outre les simplifications, les tableaux de Karnaugh permettent de prvoir si, lors des changements des valeurs des entres, on risque de crer des impulsions parasites, ce que lon appelle des alas statiques. Un ala statique se manifeste, par exemple, par la prsence dun '0', de dure brve, li aux temps de propagation dans les circuits, lors du changement dune entre telle que la fonction vaut '1' avant et aprs le changement. La rgle est simple : pour assurer labsence dala statiques, il faut quil y ait des recouvrements partiels des groupements du tableau de Karnaugh, de sorte que quand on passe dun groupement un autre, on ne franchisse quune seule frontire. Prenons comme exemple un multiplexeur (figure V-27) :

e0=1 e1e0 sel 00 01 11 10 e0 e1 0 s 1 sel:1 0 1 0 0 1 0 1 1 0 1

e1=1 sel s

Figure 5-27

Les deux groupements en traits pleins ne se recouvrent pas, quand les deux entres sont '1', et que lon change la valeur de la commande de slection, on risque dobtenir un parasite '0' en sortie. Ce parasite est limin par ladjonction du groupement indiqu en pointill, qui assure la continuit du pavage. Do lquation dun multiplexeur sans ala :

s = e0 sel + e1 sel + e0 e1
Il est essentiel dutiliser un tel multiplexeur pour raliser des bascules, si non la bascule mmorise justement lala ! Dans les circuits programmables qui utilisent, comme cellules lmentaires des multiplexeurs, ceux-ci sont garantis sans ala, de faon pouvoir raliser sans risque des bascules. Les logiciels de minimisation Comme nous lavons mentionn, tous les compilateurs sont assortis dun programme de minimisation des quations logiques gnres. Il est hors de question, ici, de rentrer dans les dtails de ces programmes, qui sont loin dtre triviaux. Nous nous contenterons de citer deux algorithmes, parmi les plus connus61.

Pour les lecteurs intresss, voir : HILL F.J. et PETERSON G.R., Computer aided logical design with emphasis on VLSI, John WILEY, New York, 1993.

61

Circuits numriques et synthse logique

130

La mthode de Quine-McCluskey Lalgorithme de Quine-McCluskey, qui date de 1956, utilise, comme les tableaux de Karnaugh, mais dune faon systmatique, et non visuelle, des tables qui dcrivent tous les mintermes possibles dune fonction. Comme toute mthode tabulaire, tableaux de Karnaugh compris, la taille des donnes manipuler crot exponentiellement avec le nombre de variables dentres. Cette croissance exponentielle rend vite impraticables, mme sur ordinateur, ces mthodes ds quil sagit de traiter des fonctions grand nombre de variables dentres. Lavnement des compilateurs de silicium a rendu ncessaire la cration dalgorithmes qui, mme sils ne garantissent pas un optimum absolu, laissent esprer une simplification importante, avec un algorithme qui ne soit pas exponentiel. Espresso Au lieu de partir dune table des mintermes, lalgorithme Espresso (1984) manipule lexpression algbrique dune fonction, en tentant de la transformer, de proche en proche, pour aboutir une expression plus simple. La complexit de lalgorithme dpend de la complexit relle de la fonction plus que du nombre de variables dentres. Espresso ne garantit pas darriver une expression minimale absolue ; lalgorithme peut sachever dans des situations de minimums locaux, dont il narrive pas sortir62. Des tests effectus ont montr, cependant, que pour des fonctions de plus de 25 variables dentres, il est arriv des rsultats gaux, ou plus complexes dun seul terme, quun algorithme systmatique. Et ce, pour un temps de calcul plus faible dans un rapport 10 100 suivant les fonctions analyses. La plupart des systmes de CAO utilisent cet algorithme pour les calculs de minimisation dexpressions logiques63.

5.4 Squenceurs et fonctions standard


Pendant deux dcennies la plupart des machines dtats furent ralises au moyen de fonctions logiques standard, compteurs programmables, multiplexeurs et dcodeurs principalement.

62

Schmatiquement, le problme est que, mme quand on a trouv un recouvrement complet de groupements dans un tableau de Karnaugh, il peut correspondre un minimum local. Le fait de rutiliser plusieurs fois des mintermes, qui ont peut tre disparu lors de simplifications prcdentes, permet parfois de construire un recouvrement compltement diffrent de celui dont on est parti, qui aboutit un rsultat plus simple. Autant ce genre de choses saute aux yeux dun humain, qui a une vision globale de la situation, autant il est difficile de formaliser cette dmarche. Espresso retire, au fur et mesure de ses calculs les termes quil est sr de devoir garder, et commence par dsimplifier ce qui reste de la fonction pour chercher un autre recouvrement. Il applique cette dmarche de faon rcursive jusqu ce quil cesse de progresser. 63 Il nest jamais arriv aux auteurs de rencontrer une fonction, humainement analysable, o le rsultat manuel soit meilleur que celui despresso. Il est vrai que nous ne pratiquons plus gure les tableaux de Karnaugh de grandes dimensions.

Circuits numriques et synthse logique

131

5.4.1 Squenceurs cbls


Dans un squenceur cbl les quations logiques du systme sont matrialises par un cblage fig entre les diffrents constituants. Nous nous contenterons ici de donner larchitecture gnrale dun tel systme, et dindiquer la mthode qui permet de passer dun diagramme de transitions aux commandes des circuits. Architecture Le noyau dune machine dtats, qui utilise des fonctions standard, est gnralement un compteur commandes de chargement parallle et de remise zro, synchrones, cela va sans dire, mais disons le tout de mme. Les sorties du compteur pilotent les entres dadresses de multiplexeurs, par exemple, qui calculent, en fonction des entres extrieures et de ltat actuel de la machine, les commandes appliquer au compteur. Ces sorties sont ventuellement dcodes pour gnrer les sorties du squenceur. Cela correspond au synoptique de la figure V-28. Quand on utilise une telle architecture, il est clair que le codage du diagramme de transitions doit tre adapt au circuit choisi : on tente de privilgier les squences de comptage, en limitant au maximum les sauts par rapport au code binaire naturel du compteur. Les blocs logiques de calcul des commandes du compteur sont dautant plus simples quil y a des squences de comptage rgulires, quil y a le moins possible dadresses de rupture de squence diffrentes.

Compteur horloge entres p Ck conditions de comptage conditions de mise zro conditions de rupture adresse de rupture comptage (En) mise zro (Clear) chargement (Load) donnes charger (Din) Calcul des sorties (dcodeur) sorties q

tat n

Figure 5-28

Du diagramme de transitions aux commandes Dans llaboration des quations, la priorit qui existe entre les commandes des compteurs classiques (74xx163, par exemple) simplifie les calculs. Prenons comme exemple le diagramme de transitions de la figure V-21, notre dernire version du dcodeur Manchester, que nous rappelons ici (figure V-29) :

Circuits numriques et synthse logique


1 a 000 0 man b 001 1 0 0 e 110 1 1 d 101 0 g 010 0 1 f 111 0 0 c 100 1 h 011 0 1

132

hor man

Q2 Q1 Q0

bin

rx

tat : Q2Q1Q0

Figure 5-29

De ce diagramme on peut dduire les commandes du compteur, en utilisant une notation symbolique o interviennent les noms des tats64 :

Clear = b man + f man Load = b man + d man + f man + h En = a man + c man + d man + e man + g man
Ces quations se prtent bien une ralisation avec des multiplexeurs ; si on les matrialise au moyen de portes lmentaires, la priorit entre les commandes du compteur permet de mettre des dans les tables de vrit qui dterminent Load (partout o Clear est vrai) et En (partout o Clear ou Load sont vrais), autorisant des simplifications supplmentaires. Les adresses de rupture sont extrmement simples, en raison du faible nombre de branchements (on peut mettre dans toutes les cases de la table de vrit qui correspondent une condition o lquation de Load est fausse) : D0 = 0 D1 = Q1 Q2 D2 = Q0 Q2 + man Nous ne dtaillerons pas plus ce type dapplication des compteurs programmables. Le lecteur intress en trouvera de nombreux exemples dans les rfrences bibliographiques.

5.4.2 Squenceurs micro-programms


Dans larchitecture prcdente, toutes les quations sont figes par les circuits utiliss et leur cblage ; pour obtenir des machines dtats universelles, capables de matrialiser nimporte quel diagramme de transitions sans modification du schma, les concepteurs sorientrent vers les squenceurs microprogramms. Lide gnrale est simple, la partie la plus fige dun squenceur cbl traditionnel est le bloc de calcul de ladresse, en cas de rupture de squence. Si on introduit, dans le code binaire de ltat de la machine, un champ rserv cette adresse, on gagne en souplesse. Une architecture, simplifie, dune telle machine est donne la figure V-30 :

64

Il faut, par exemple, remplacer ltat f par son quivalent binaire, soit Q2Q1Q0.

Circuits numriques et synthse logique


adresse de branchement hor +1 ou +0 reg. adr. adresse externe mux adresse tat futur mmoire micro programme tat futur sorties hor

133

registre tat entres externes dcodeur instructions instructions

Figure 5-30

Allant plus loin dans cette voie, on structure le code de ltat en champs qui reprsentent chacun une commande standard. On utilise une mmoire pour stocker les valeurs des tats du diagramme de transitions, et deux registres pour stocker la valeur de ltat actuel et ladresse de ltat futur. Des commandes classiques sont65 : Incrmenter ladresse de ltat dune unit si une condition est vraie, cela provoque un droulement en squence, avec une condition dattente. Charger dans le registre dtat la valeur dont ladresse est donne dans le champ dadresse, il sagit dun branchement. Charger dans le registre dtat la valeur dont ladresse est fournie par une entre externe, il sagit dun saut un autre diagramme de transitions. Le diagramme de transitions devient, en fait un vritable programme, do son nom de micro programme, dans lequel les tats deviennent des micro instructions. Outre les commandes, les micro instructions contiennent des champs qui dfinissent les actions vers lextrieur. En enrichissant la machine dune mmoire RAM organise en pile et dun compteur auxiliaire, il devient possible de crer des boucles et des sous programmes. Lavnement des logiciels de synthse en langage de haut niveau et des circuits programmables par lutilisateur a considrablement restreint le champ dapplication des machines micro programmes. Il est actuellement plus simple de crer sa propre machine dtats, dcrite en langage volu, programme et modifie en quelques minutes dans un circuit en technologie Flash, que de crer des micro programmes que lon inscrira dans une mmoire de mme technologie.

La souplesse a chang de camp.

65

On consultera, par exemple, une notice du circuit Am2910.

Circuits numriques et synthse logique

134

Exercices Cohrence d'un diagramme de transition. Une machine d'tats synchrone dispose de trois entres de commande (en plus de l'horloge), M, D et A (on peut imaginer qu'il s'agit, par exemple, d'une partie de commande d'ascenseur). Une bauche de diagramme de transition est reprsente ci-dessous. Cette bauche de diagramme comporte une faute de principe, expliquer laquelle. Proposer une correction.

H M D A 3 D1 D0 Q1 Q0 A=1 M=1 1 2 0 A=1 D=1

En rajoutant les conditions de maintien, qui ne sont pas reprsentes, donner les quations logiques de D1 et D0 induites par le diagramme corrig. Gnration de signaux On souhaite raliser une fonction logique synchrone qui fournit en sortie les signaux suivants :

Ck H

S1 S2

temps temps s

1 1 1

Etablir un diagramme de transition qui permet de rpondre au problme. Proposer une solution qui fait appel des bascules D, puis des bascules J-K. Prciser quelle doit tre la frquence de l'entre d'horloge. Les chronogrammes prcdents sont modifis comme indiqu ci-dessous :

Circuits numriques et synthse logique

135

S1

S2

temps

temps s

Montrer qu'il faut rajouter la solution prcdente une bascule. Proposer une solution qui fait appel des bascules D.

Commande d un moteur d essuie glaces Le moteur dessuie glace dune voiture est mis en marche soit par une commande eg, soit par une commande lv, la seconde actionnant simultanment la pompe du lave glace. On se propose de faire une ralisation, en logique synchrone, de la commande du moteur : Les signaux dentre sont supposs synchrones de lhorloge hor. Lentre repos provient dun dtecteur de fin de course, qui indique par un '1', que les balais sont en position horizontale, pare brise

hor repos eg lv

moteur

dgag. Dans tous les cas, le moteur ne doit tre arrt que quand les balais sont en position de repos. La commande eg provoque, par un '1', la mise en route du moteur (moteur = '1'). Ce dernier ne doit sarrter que quand eg est dsactive, et que les balais sont en position de repos. La commande lv provoque, outre la mise en marche de la pompe du lave glace, la mise en route du moteur. Quand cette commande redevient inactive, le moteur ne sarrte quaprs que les balais dessuie glace aient effectus quatre aller retours complets, pour asscher le pare brise. 1. Proposer une machine dtats qui rponde au problme. Dcrire le fonctionnement de cette machine par un diagramme de transitions. 2. En dduire un programme VHDL. On veillera ce que la sortie moteur corresponde la sortie dune bascule synchrone.

Circuits numriques et synthse logique

136

6 Annexe : VHDL

VHDL est labrviation de Very high speed integrated circuits Hardware Description Langage . Lambition des concepteurs du langage est de fournir un outil de description homogne des circuits, qui permette de crer des modles de simulation et de compiler le silicium partir dun programme unique. Initialement rserv au monde des circuits numriques, VHDL est en passe dtre tendu aux circuits analogiques. Deux des intrts majeurs du langage sont : Des niveaux de description trs divers: VHDL permet de reprsenter le fonctionnement dune application tant du point de vue systme que du point de vue circuit, en descendant jusquaux oprateurs les plus lmentaires. A chaque niveau, la description peut tre structurelle (portrait des interconnexions entre des sousfonctions) ou comportementale (langage volu). Son aspect non propritaire : le dveloppement des circuits logiques a conduit chaque fabriquant dvelopper son propre langage de description. VHDL est en passe de devenir le langage commun de nombreux systmes de CAO, indpendants ou lis des producteurs de circuits, des (relativement) simples outils daide la programmation des PALs aux ASICs, en passant par les FPGAs. La description qui suit est loin dtre exhaustive, hritier dADA, VHDL est un gros langage. Nous en prsentons un sous-ensemble qui, nous lesprons, doit permettre un nophyte daborder ses premires ralisations avec un bagage minimum, limit des constructions synthtisables, et, en principe, portables sur nimporte quel compilateur.

6.1 Principes gnraux


6.1.1 Description descendante : le top down design
Une application un tant soit peu complexe est dcoupe en sous-ensembles qui changent des informations suivant un protocole bien dfini. Chaque sous-ensemble est, son tour, subdivis, et ainsi de suite jusquaux oprateurs lmentaires. Un systme est construit comme une hirarchie dobjets, les dtails de ralisation se prcisant au fur et mesure que lon descend dans cette hirarchie. A un niveau donn de la hirarchie, les dtails de fonctionnement interne des niveaux infrieurs sont invisibles, Cest le principe mme de la programmation structure. Plusieurs ralisations dune mme fonction pourront tre envisages, sans quil soit ncessaire de remettre en cause la conception des niveaux suprieurs ; plusieurs personnes pourront collaborer un mme projet, sans que chacun ait connatre tous les dtails de lensemble.

Circuits numriques et synthse logique

137

La conception descendante consiste dfinir le systme en partant du sommet de la hirarchie, en allant du gnral au particulier. VHDL permet, par exemple, de tester la validit de la conception densemble, avant que les dtails des sous-fonctions ne soient compltement dfinis. A titre dexemple, larchitecture gnrale dun processeur peut tre value sans que le mode de ralisation de ses registres internes ne soit connu, le fonctionnement des registres en question sera alors dcrit au niveau comportemental.

6.1.2 Simulation et/ou synthse


VHDL a t, initialement, conu comme un langage de simulation, il est fortement marqu par cet hritage trs informatique, ce qui est parfois un peu droutant pour llectronicien, proche du matriel, qui nest pas toujours un spcialiste des langages de programmation. Citons quelques exemples : Contrairement C ou PASCAL, VHDL est un langage qui comprend le paralllisme , cest dire que des blocs dinstructions peuvent tre excuts simultanment, par opposition squentiellement comme dans un langage procdural traditionnel. Autant ce paralllisme est fondamental pour comprendre le fonctionnement dun simulateur logique, et peut tre droutant pour un programmeur habitu au droulement squentiel des instructions quil crit, autant il est vident que le fonctionnement dun circuit ne dpend pas de lordre dans lequel ont t tablies les connexions. Lutilisateur de VHDL gagnera beaucoup en ne se laissant pas enfermer dans laspect langage de programmation, en se souvenant quil est en train de crer un vrai circuit. Les parties squentielles du langage, car il y en a, doivent, dans ce contexte, tre comprises soit comme une facilit offerte dans lcriture de certaines fonctions, soit comme le moyen de dcrire des oprateurs fondamentalement squentiels : les oprateurs synchrones. La modlisation correcte dun systme suppose de prendre en compte, au niveau du simulateur, les imperfections du monde rel. VHDL offre donc la possibilit de spcifier des retards, de prciser ce qui se passe lors dun conflit de bus etc. Pour simuler toutes ces vicissitudes, le langage offre toute une gamme doutils : signaux qui prennent une valeur inconnue, messages derreurs quand un circuit dtecte une violation de set-up time, changements dtats retards pour simuler les temps de propagation. Toutes les constructions associes de ce type ne sont videmment pas synthtisables ! La difficult principale est que, suivant les compilateurs, la frontire entre ce qui est synthtisable et ce qui ne lest pas nest pas toujours la mme, mme pour des compilateurs qui respectent la norme IEEE-1076. Avant dutiliser un outil de synthse, le concepteur de circuit a tout gagner lire trs attentivement la prsentation du sous-ensemble de VHDL accept par cet outil. Trois classes de donnes existent en VHDL : les constantes, les variables et les signaux. La nature des signaux ne prsente aucune ambigut, ce sont des objets qui vhiculent une information logique tant du point de vue simulation que dans la ralit. Les signaux qui ont chapp aux simplifications logiques, apportes par loptimiseur toujours prsent, sont des vraies quipotentielles du schma final. Les variables sont destines, comme dans tout langage, stocker temporairement des valeurs, dans loptique dune utilisation future, sans chercher reprsenter la ralit. Certains compilateurs considrent que les variables nont aucune existence relle, au niveau du circuit, quelles ne sont que des outils de description fonctionnelle. Dautres transforment, ventuellement (cela dpend de loptimiseur), les variables en cellules mmoires...

Circuits numriques et synthse logique

138

Tous les exemples qui sont donns ici, et dans les chapitres prcdents, ont t compils sur un logiciel destin la synthse de circuits programmables66. Cr par et pour des concepteurs de circuits, ce compilateur ne comporte aucune construction spcifique de la simulation, mais autorise cependant des difices relativement labores, notamment dans lutilisation des variables et des boucles67. Nous avons parfois eu quelques surprises dsagrables lors du portage de ces exemples sur dautres systmes, syntaxiquement accepts, certains programmes taient refuss par loutil de synthse, ou gnraient une quantit surprenante de bascules. En conclusion citons lun des grands de la CAO lectronique68: Des mythes communs existent : La conception descendante est une dmarche presse-bouton, la comptence de lexpert est rarement ncessaire. Faux. VHDL, les outils de synthse et doptimisation ne peuvent pas transformer un mauvais concepteur en un bon. Ce sont de simples outils supplmentaires qui peuvent aider un ingnieur raliser plus rapidement et plus efficacement un matriel quand ils sont utiliss correctement. Les outils doptimisation librent lutilisateur de la ncessit de comprendre les dtails physiques de sa ralisation. Faux. Il est toujours ncessaire de comprendre les dtails physiques de la faon dont est implmente une ralisation. Lingnieur doit regarder par dessus lpaule de loutil pour sassurer que le rsultat est conforme ses exigences et sa philosophie, et que le rsultat est obtenu en un temps raisonnable.

6.1.3 Lextrieur de la bote noire : une ENTITE


Nous avons mentionn que, dans une construction hirarchique, les niveaux suprieurs nont pas connatre les dtails des niveaux infrieurs. Une fonction logique sera vue, dans cette optique, comme un assemblage de botes noires , dont, syntaxiquement parlant, seules les modes daccs sont ncessaires lutilisateur69. La construction qui dcrit lextrieur dune fonction est lentit (entity). La dclaration correspondante lui donne un nom et prcise la liste des signaux dentre et de sortie :

66 67

WARP, Cypress Semiconductors Les variables ne sortent pas du programme, seuls les signaux se retrouvent dans le circuit final. 68 Mentor Graphics, Methods for using Autologic in top down design, 1994. 69 Ce point est mettre en parallle avec les prototypes dun langage comme le C. Dans un programme qui utilise la fonction sinus, le remplacement de celle-ci par une fonction exponentielle ne posera aucun problme de syntaxe, les modes daccs sont les mmes. Cela ne veut videmment pas dire que les deux programmes fourniront les mmes rsultats, ce dernier point est un problme de smantique.

Circuits numriques et synthse logique

139

mon_circuit sortie1 entree1 sortie2 entree2 entree3 sortie3 entree4 4 6

entity mon_circuit is port ( entree1 : in bit; entree2, entree3 : in bit; entree4 : in bit_vector(0 to 3); sortie1, sortie2 : out bit; sortie3 : out bit_vector(0 to 5)) end mon_circuit;

Figure 6-1

Dans lexemple qui prcde, les noms des objets, qui dpendent du choix de lutilisateur, sont crits en italique, les autres mots sont des mots-cls du langage. Les choix possibles pour le sens de transfert sont : in, out, inout et buffer (une sortie qui peut tre lue par lintrieur du circuit). Les choix possibles pour les types de donnes changes sont les mmes que pour les signaux (voir ci-dessous).

6.1.4 Le fonctionnement interne : une ARCHITECTURE


Larchitecture dcrit le fonctionnement interne dun circuit auquel est attach une entit. Ce fonctionnement peut tre dcrit de diffrentes faons : Description structurelle - le circuit est vu comme un assemblage de composants de niveau infrieur, cest une description schmatique . Souvent ce mode de description est utilis au niveau le plus lev de la hirarchie, chaque composant tant lui-mme dfini par un programme VHDL (entit et architecture). Description comportementale - le comportement matriel du circuit est dcrit par un algorithme, indpendamment de la faon dont il est ralis au niveau structurel. Description par un flot de donnes - le fonctionnement du circuit est dcrit par un flot de donnes qui vont des entres vers les sorties, en subissant, tape par tape, des transformations lmentaires successives. Ce mode de description permet de reproduire larchitecture logique, en couches successives, des oprateurs combinatoires. Flot de donnes et reprsentation comportementale sont trs voisines, dans les deux cas le concepteur peut faire appel des instructions de haut niveau. La premire mthode utilise un grand nombre de signaux internes qui conduisent au rsultat par des transformations de proche en proche, la seconde utilise des blocs de programme (les processus explicites), qui manipulent de nombreux signaux avec des algorithmes squentiels70. La syntaxe gnrale dune architecture comporte une partie de dclaration et un corps de programme :
architecture exemple of mon_circuit is partie dclarative optionnelle : types, constantes, signaux locaux, composants. begin corps de l architecture. suite d instructions parallles : affectations de signaux; processus explicites; blocs;
70

On relira avec profit les trois descriptions dune bascule D-Latch, qui sont donnes au paragraphe III.3.

Circuits numriques et synthse logique


instanciation (i.e. importation dans un schma) de composants. end exemple ;

140

On se reportera aux exemples du chapitre III pour des illustrations simples.

6.1.5 Des algorithmes squentiels dcrivent un cblage parallle : les PROCESSUS


Un processus est une instruction concurrente (N.D.T deux instructions concurrentes sont simultanes) qui dfinit un comportement qui doit avoir lieu quand ce processus devient actif. Le comportement est spcifi par une suite dinstructions squentielles excutes dans le processus. 71 Que cela signifie-t-il ? Trois choses : 1. Les diffrentes parties dune ralisation interagissent simultanment, peu importe lordre dans lequel un cbleur soude ses composants, le rsultat sera le mme. Le langage doit donc comporter une contrainte de paralllisme entre ses instructions. Cela implique des diffrences notables avec un langage procdural comme le C. En VHDL : a <= b ; c <= a + d ; et c <= a + d ; a <= b ; reprsentent la mme chose, ce qui est notablement diffrent de ce qui se passerait en C pour : a = b ; c = a + d ; et c = a + d ; a = b ; Les affectations de signaux, lextrieur dun processus explicite, sont traites comme des processus tellement lmentaires quil est inutile de les dclarer comme tels. Ces affectations sont traites en parallle, de la mme faon que plusieurs processus indpendants. 2. Lalgorithmique fait grand usage dinstructions squentielles pour dcrire le monde. VHDL offre cette facilit lintrieur dun processus explicitement dclar. Dans le corps dun processus il sera possible dutiliser des variables, des boucles, des conditions, dont le sens est le mme que dans les langages squentiels. Mme les affectations entre signaux sont des instructions squentielles quand elles
71

WARP, VHDL Reference, Cypress Semiconductors.

Circuits numriques et synthse logique

141

apparaissent lintrieur dun processus. Seul sera visible de lextrieur le rsultat final obtenu la fin du processus. 3. Les oprateurs squentiels, surtout synchrones, mais pas exclusivement eux, comportent naturellement la notion de mmoire, qui est le fondement de lalgorithmique traditionnelle. Les processus sont la reprsentation privilgie de ces oprateurs72. Mais attention, la rciproque nest pas vraie, il est parfaitement possible de dcrire un oprateur purement combinatoire par un processus, le programmeur utilise alors de cet objet la seule facilit dcriture de lalgorithme73. Outre les simples affectations de signaux, qui sont en elles mmes des processus implicites part entire, la description dun processus obit la syntaxe suivante : Processus : syntaxe gnrale
[tiquette : ] process [ (liste de sensibilit) ] partie dclarative optionnelle : variables notamment begin corps du processus. instructions squentielles end process [ tiquette ] ;

Les lments mis entre crochets sont optionnels, ils peuvent tre omis sans quil y ait derreur de syntaxe. La liste de sensibilit est la liste des signaux qui dclenchent, par le changement de valeur de lun quelconque dentre eux, lactivit du processus. Cette liste peut tre remplace par une instruction wait dans le corps du processus : instruction wait Cette instruction indique au processus que son droulement doit tre suspendu dans lattente dun vnement sur un signal (un signal change de valeur), et tant quune condition nest pas ralise. Sa syntaxe gnrale est74 :
wait [on liste_de_signaux ] [until condition ] ;

La liste des signaux dont linstruction attend le changement de valeur joue exactement le mme rle que la liste de sensibilit du processus, mais linstruction wait ne peut pas tre utilise en mme temps quune liste de sensibilit. La tendance, pour les volutions futures du

Ce nest pas la seule, les descriptions structurelle et flot de donnes, plus proches du cblage du circuit, permettent de dcrire tous les oprateurs squentiels avec des oprateurs combinatoires lmentaires. Pour les circuits qui comportent des bascules comme lments primitifs, connus de loutil de synthse, les deux seules faons dutiliser ces bascules sont les process et leur instanciation comme composants dans une description structurelle. 73 Voir titre dexemple la description que nous avons donne du ou-exclusif comme contrleur de parit, III.2.. 74 On peut spcifier un temps dattente maximum (wait ... for temps ), mais cette clause nest pas synthtisable.

72

Circuits numriques et synthse logique

142

langage, semble tre la suppression des listes de sensibilits, pour nutiliser que les instructions dattente. Description dun oprateur squentiel La reprsentation des horloges : pour reprsenter les oprateurs synchrones de faon comportementale il faut introduire lhorloge dans la liste de sensibilit, ou insrer dans le code du processus une instruction wait explicite. Rappelons quil est interdit dutiliser la fois une liste de sensibilit et une instruction wait. Quand on modlise un oprateur qui comporte la fois des commandes synchrones et des commandes asynchrones, il faut, avec certains compilateurs, mettre ces commandes dans la liste de sensibilit. Exemple :
architecture fsm of jk_raz is signal etat : bit; begin q <= etat; process(clock,raz) -- deux signaux d activation begin if(raz = '1') then -- raz asynchrone etat <= '0'; elsif(clock = '1'and clock'event) then case etat is when '0' => IF (j = '1' ) then etat <= '1'; end if; when '1' => if (k = '1' ) then etat <= '0'; end if; end case; end if; end process; end fsm;

Dans lexemple prcdent, la priorit de la mise zro asynchrone, sur le fonctionnement synchrone normal de la bascule JK, apparat par lordre des instructions de la structure if...elsif. Le processus est utilis l la fois pour modliser un oprateur essentiellement squentiel, la bascule, et pour faciliter la description de leffet de ses commandes par un algorithme squentiel. Pour modliser un comportement purement synchrone on peut indiffremment utiliser la liste de sensibilit ou une instruction wait :
architecture fsm_liste of jk_simple is signal etat : bit; begin q <= etat; process(clock) -- un seul signal d activation begin if(clock = '1'and clock'event) then

Circuits numriques et synthse logique


case etat is when '0' => IF (j = '1' ) etat <= end if; when '1' => if (k = '1' ) etat <= end if; end case; end if; end process; end fsm_liste;

143

then '1';

then '0';

Ou, de faon strictement quivalente, en utilisant une instruction wait :


architecture fsm_wait of jk_simple is signal etat : bit; begin q <= etat; process -- pas de liste de sensibilit begin wait until (clock = '1') ; case etat is when '0' => IF (j = '1' ) then etat <= '1'; end if; when '1' => if (k = '1' ) then etat <= '0'; end if; end case; end process; end fsm_wait;

Description par un processus dun oprateur combinatoire ou asynchrone Un processus permet de dcrire un oprateur purement combinatoire ou un oprateur squentiel asynchrone, en utilisant une dmarche algorithmique. Dans ces deux cas la liste de sensibilit, ou linstruction wait quivalente, est obligatoire ; le caractre combinatoire ou squentiel de loprateur ralis va dpendre du code interne au processus. On considre un signal qui fait lobjet dune affectation dans le corps dun processus : Si au bout de lexcution du processus, pour toutes les combinaisons possibles des valeurs de la liste de sensibilit la valeur de ce signal, objet dune affectation, est connue, loprateur correspondant est combinatoire. Si certaines des combinaisons prcdentes de la liste de sensibilit conduisent une indtermination concernant la valeur du signal examin, objet dune affectation, ce signal est associ une cellule mmoire. Prcisons ce point par un exemple :

Circuits numriques et synthse logique

144

entity comb_seq is port ( e1, e2 : in bit ; s_et, s_latch, s_edge : out bit ) ; end comb_seq ; architecture exproc of comb_seq is begin et : process(e1,e2) -- quivalent s_et <= e1 and e2 ; begin if( e1 = '1' ) then s_et <= e2 ; else s_et <= '0' ; end if ; end process ; latch : process(e1,e2) -- bascule D Latch, e1 est la commande. begin if( e1 = '1' ) then s_latch <= e2 ; end if; -- si e1 = '0' la valeur de s_latch est inconnue. end process ; edge : process(e1) -- bascule D Edge, e1 est l horloge. begin if( e1'event and e1 = '1' ) then -- e1 agit par un front. s_edge <= e2 ; end if ; end process ; end exproc ;

Dans lexemple qui prcde, le premier processus est combinatoire, le signal s_et a une valeur connue la fin du processus, quelles que soient les valeurs des entres e1 et e2. Dans le deuxime processus, linstruction if ne nous renseigne pas sur la valeur du signal s_latch quand e1 = 0. Cette mconnaissance est interprte, par le compilateur VHDL, comme un maintien de la valeur prcdente, do la gnration dune cellule mmoire dont la commande de mmorisation, e1, est active sur un niveau. Le troisime processus conduit galement, et pour le mme type de raison, la synthse dune cellule mmoire pour le signal s_edge. Mais la commande de mmorisation est, cette fois, active sur un front, explicitement mentionn dans la condition de linstruction if : e1 event. La faon dont est traite la commande de mmorisation e1 dpend donc de lcriture du test : niveau ou front75.

75

Il peut y avoir des petites diffrences dinterprtation, suivant les compilateurs, entre les deux types de bascules, si on omet lattribut 'event.

Circuits numriques et synthse logique

145

6.2 Elments du langage


6.2.1 Les donnes appartiennent une classe et ont un type
VHDL, hritier dADA, est un langage fortement typ. Toutes les donnes ont un type qui doit tre dclar avant lutilisation76 et aucune conversion de type automatique (une souplesse et un pige immense du C, par exemple) nest effectue. Pour passer du type entier au type bit_vector, par exemple, il faut faire appel une fonction de conversion. Une donne appartient une classe qui dfinit, avec son type, son comportement. Des donnes de deux classes diffrentes, mais de mme type, peuvent changer des informations directement : on peut affecter la valeur dune variable un signal, par exemple (nous verrons ci-dessous que variables et signaux sont deux classes diffrentes). La porte des noms est, en gnral, locale. Un nom dclar lintrieur dune architecture, par exemple, nest connu que dans celle-ci. Des objets globaux sont possibles, on peut notamment dfinir des constantes, comme zero ou one, extrieures aux units de programmes que constituent les couples entit-architecture. A lintrieur dune architecture les objets dclars dans un bloc (dlimit par les mots-cls begin et end) sont visibles des blocs plus internes uniquement. Les objets dclars dans une entit sont connus de toutes les architectures qui sy rapportent. Les classes : signaux, variables et constantes Signaux Les signaux reprsentent les donnes physiques changes entre des blocs logiques dun circuit. Chacun dentre eux sera matrialis dans le schma final par une quipotentielle et, ventuellement, une cellule mmoire qui conserve la valeur de lquipotentielle entre deux commandes de changement. Les ports dentre et de sortie, attachs une entit, par exemple, sont une varit de signaux qui permettent lchange dinformations entre diffrentes fonctions. Leur utilisation est similaire celle des arguments dune procdure en PASCAL, le sens de transfert de linformation doit tre prcis. Syntaxe de dclaration (se place dans la partie dclarative dune architecture77) :
signal nom1 , nom2 : type ;

Affectation dune valeur (se place dans le corps dune architecture ou dun processus) :
nom <= valeur_compatible_avec_le_type ;

La valeur affecte peut tre le rsultat dune expression, simple ou conditionnelle (when), ou la valeur renvoye par lappel dune fonction. A lextrieur dun processus toutes les affectations de signaux sont concurrentes, cest donc une erreur (smantique, pas syntaxique) daffecter plus dune fois une valeur un signal. Laffectation dune valeur un signal traduit, en fait, la connexion de la sortie dun oprateur lquipotentielle correspondante. Il sagit l dune opration permanente, une
76 77

Sauf, et cest bien pratique, les variables entires des boucles FOR . ou dun paquetage, voir plus loin.

Circuits numriques et synthse logique

146

soudure sur une carte, par exemple, quil est hors de question de modifier ailleurs dans le programme. Si un signal est lobjet daffectations multiples, ce qui revient mettre en parallle plusieurs sorties doprateurs (trois tats ou collecteurs ouverts, par exemple), il faut adjoindre ce signal, pour les besoins de la simulation, une fonction de rsolution qui permet de rsoudre le conflit78. Variables Les variables sont des objets qui servent stocker un rsultat intermdiaire pour faciliter la construction dun algorithme squentiel. Elles ne peuvent tre utilises que dans les processus, les procdures ou les fonctions, et dans les boucles generate qui servent crer des schmas rptitifs. Syntaxe de dclaration (se place dans la partie dclarative dun processus, dune procdure ou dune fonction) :
variable nom1 , nom2 : type [:= expression];

Lexpression facultative qui apparat dans la dclaration prcdente permet de donner une variable une valeur initiale choisie par lutilisateur. A dfaut de cette expression le compilateur, qui initialise toujours les variables79, utilise une valeur par dfaut qui dpend du type dclar. Affectation dune valeur :
nom := valeur_compatible_avec_le_type ;

La valeur affecte peut tre le rsultat dune expression ou la valeur renvoye par lappel dune fonction. Les variables de VHDL jouent le rle des variables automatiques des langages procduraux, comme C ou Pascal, elles ont une porte limite au module de programme dans lequel elles ont t dclares, et sont dtruites la sortie de ce module. La diffrence entre variables et signaux est que les premires nont pas dquivalent physique dans le schma, contrairement aux seconds. Certains outils de synthse ne respectent malheureusement pas cette distinction. On notera quil est possible daffecter la valeur dune variable un signal, et inversement, pourvu que les types soient compatibles. Constantes Les constantes sont des objets dont la valeur est fixe une fois pour toute. Exemples de valeurs constantes simples :
'0', '1', "01101001", 1995, "azerty"

On peut crer des constantes nommes :


constant nom1 : type [ := valeur_constante ] ;

78

Dans les applications de synthse les portes sorties non standard sont gnralement introduites dans une description structurelle. 79 Le programmeur ne doit, notamment, pas sattendre retrouver les variables dun processus dans ltat o il les avait laisses lors dune activation prcdente de ce processus.

Circuits numriques et synthse logique

147

On notera que les vecteurs de bits (bit_vector) sont traits comme des chanes, on peut prciser une base diffrente de la base 2 pour ces constantes :
X"3A007", O"237015" pour hexadcimal et octal.

De mme, les valeurs entires peuvent tre crites dans une autre base que la base 10 :
16#ABCDEF0123#, 2#001011101# ou 2#0_0101_1101#, pour plus de lisibilit.

En gnral les nombres flottants ne sont pas accepts par les outils de synthse. Des types adapts llectronique numrique VHDL connat un nombre limit de types de base, qui refltent le fonctionnement des systmes numriques (pour linstant, VHDL est en passe de devenir un langage de description des circuits analogiques), et offre lutilisateur de construire partir de ces types gnriques : des sous-types (sous-ensembles du type de base), obtenus en prcisant un domaine de variation limit de lobjet considr, des types composs, obtenus par la runion de plusieurs types de base identiques (tableaux) ou de types diffrents (enregistrements). En plus des types prdfinis et de leurs drivs, lutilisateur a la possibilit de crer ses propres types sous forme de types numrs. Les entiers VHDL manipule des valeurs entires qui correspondent des mots de 32 bits, soit comprises entre
-2147483648 et +2147483647.

Attention, sur les PC qui sont des machines dont les entiers continuent hsiter entre 16 et 32 bits, lutilisateur peut rencontrer de dsagrables surprises. Les nombres ngatifs ne sont pas toujours accepts dans la description des signaux physiques. Dclaration :
signal nom : integer ;

ou
variable nom : integer ;

ou encore :
constant nom : integer ;

Circuits numriques et synthse logique

148

que lon rsume classiquement par :


signal | variable |constant nom : integer ;

Le symbole | signifiant ou . On peut spcifier une plage de valeurs infrieure celle obtenue par dfaut, par exemple :
signal etat : integer range 0 to 1023 ;

permet de crer un compteur 10 bits. La mme construction permet de crer un sous-type :


subtype etat_10 is integer range 0 to 1023 ; signal etat1 , etat2 : etat_10 ;

Attention ! La restriction dtendue de variation est utilise pour gnrer le nombre de chiffres binaires ncessaires la reprsentation de lobjet, larithmtique sousjacente nest (pour linstant) pas traite par les compilateurs. Cela veut dire que
signal chiffre : integer range 0 to 9 ;

permet de crer un objet cod sur quatre bits, mais


chiffre <= chiffre + 1 ;

ne cre pas un compteur dcimal. Pour ce faire il faut crire explicitement :


if(chiffre < 9 ) then chiffre <= chiffre + 1 ; else chiffre <= 0 ; end if ;

La dclaration, au niveau le plus lev dune hirarchie, de ports dentre ou de sortie comme nombres entiers pose un problme de contrle par lutilisateur de lassignation des broches physiques du circuit final aux chiffres binaires gnrs. Cette assignation sera faite automatiquement par loutil de dveloppement. Si ce non contrle est gnant, il est possible de transformer un nombre entier en tableau de bits, via les fonctions de conversion de la librairie associe un compilateur. Les types numrs Lutilisateur peut crer ses propres types, par simple numration de constantes symboliques qui fixent toutes les valeurs possibles du type. Par exemple :
type drinkState is (zero,five,ten,fifteen,twenty,twentyfive,owedime); signal drinkStatus: drinkState;

Circuits numriques et synthse logique

149

Les bits Il sagit l, videmment, du type de base le plus utilis en lectronique numrique. Un objet de type bit peut prendre deux valeurs : '0' et '1', il sagit, en fait, dun type numr prdfini. Dclaration :
signal | variable nom : bit ;

Ce qui prcde sapplique aux descriptions synthtisables, pour les besoins de la simulation de nombreux compilateurs proposent un type bit plus toff, pouvant prendre, par exemple, les valeurs '0', '1', 'X' (X pour inconnu) et 'Z' (pour haute impdance). Ces types sont traduits, en synthse, par des types bit ordinaires. De mme la gestion des portes trois tat, qui se fait par une description structurelle, ncessite une extension du type bit. Par exemple :
entity basc_tri_state is port( clk, oe : in bit; sort : inout x01z ); -- type x01z dfini dans la librairie end basc_tri_state ;

Toutes ces extensions ne sont, priori, pas portables telles quelles. Mais les outils de dveloppement VHDL sont fournis avec les sources (en VHDL) de toutes les extensions au langage de base, ce qui permet de porter dun systme lautre les librairies ncessaires. Les boolens Autre type numr, le type boolen peut prendre deux valeurs : "true" et "false". Il intervient essentiellement comme rsultat dexpressions de comparaisons, dans des IF, par exemple, ou dans les valeurs renvoyes par des fonctions. Les tableaux A partir de chaque type de base on peut crer des tableaux, collection dobjets du mme type. Lun des plus utiliss est le type bit_vector, dfini dans la librairie standard par :
SUBTYPE Natural IS Integer RANGE 0 to Integer'high; TYPE bit_vector IS ARRAY (Natural RANGE <>) OF BIT;

Dans lexemple qui prcde, le nombre dlments nest pas prcis dans le type, ce sera fait lutilisation. Par exemple :
signal etat : bit_vector (0 to 4) ;

dfinit un tableau de cinq lments binaires nomm tat. On aurait galement pu dfinir directement un sous-type :
type cinq_bit is array (0 to 4) of bit; signal etat : cinq_bit ;

Circuits numriques et synthse logique

150

Le nombre de dimensions dun tableau nest pas limit, les indices peuvent tre dfinis dans le sens croissant (2 to 6) ou dcroissant (6 downto 2) avec des bornes quelconques (mais cohrentes avec le sens choisi). On notera quil faut passer par une dfinition de type, ce qui nest pas le cas en C ou en PASCAL. Une fois dfini, un objet compos peut tre manipul collectivement par son nom :
signal etat1 : bit_vector (0 to 4) ; variable etat2 : bit_vector (0 to 4) ; ... etat 1 <= etat2 ; -- parfaitement correct

Le compilateur contrle que les dimensions des deux objets sont les mmes. On remarquera, partir de lexemple prcdent, que les classes des deux objets peuvent tre diffrentes. On peut, bien sr, ne manipuler quune partie des lments dun tableau :
signal etat : bit_vector (0 to 4) ; signal sous_etat : bit_vector (0 to 1) ; signal flag : bit ; ... sous_etat <= etat ( 1 to 2 ) ; flag <= etat ( 3 ) ;

Il est possible de fusionner deux tableaux (concatnation) pour affecter les valeurs correspondantes un tableau plus grand :
signal etat : bit_vector (0 to 4) ; signal sous_etat2 : bit_vector (0 to 1) ; signal sous_etat3 : bit_vector (0 to 2) ; ... etat <= sous_etat2 & sous_etat3; -- concatnation.

Les enregistrements Les enregistrements (record) dfinissent des collections dobjets de types, ou de sous types, diffrents. Ils correspondent aux structures du C ou aux enregistrements de PASCAL. Dfinition dun type :
type clock_time is record hour : integer range 0 to 12 ; minute , seconde : integer range 0 to 59 ; end record ;

Dclaration dun objet de ce type :


variable time_of_day : clock_time ;

Utilisation de lobjet prcdent :


time_of_day.hour := 3 ; time_of_day.minute := 45 ;

Circuits numriques et synthse logique


chrono := time_of_day.seconde ;

151

Lensemble dun enregistrement peut tre manipul par son nom.

6.2.2 Les attributs prcisent les proprits des objets


Dterminer, de faon dynamique, la taille dun tableau, le domaine de dfinition dun objet scalaire, llment suivant dun type numr, dtecter la transition montante dun signal, piloter loptimiseur dun outil de synthse, attribuer des numros de broches des signaux dentres-sorties ... etc. Les attributs permettent tout cela. Un attribut est une proprit, qui porte un nom, associe une entit, une architecture, un type ou un signal. Cette proprit, une fois dfinie, peut tre utilise dans des expressions. Lutilisation dun attribut se fait au moyen dun nom compos : le prfixe est le nom de lobjet auquel est rattach lattribut, le suffixe est le nom de lattribut. Prfixe et suffixe sont spars par une apostrophe ' .
nom_objet'nom_de_l_attribut

Par exemple : hor'event and hor = '1' renvoie la valeur boolenne true si le signal hor, de type bit, vaut 1 aprs un changement de valeur, ce qui revient tester la prsence dune transition montante de ce signal. Certains attributs sont prdfinis par le langage, dautres sont attachs un outil de dveloppement ; lutilisateur, enfin, peut dfinir, et utiliser ses propres attributs. Attributs prdfinis dans le langage Les attributs prdfinis permettent de dterminer les contraintes qui psent sur des objets ou des types : domaine de variation dun type scalaire, bornes des indices dun tableau, lments voisins dun objet de type numr, etc. Ils permettent galement de prciser les caractristiques dynamiques de signaux, comme la prsence dun front, voque prcdemment.

Circuits numriques et synthse logique


attribut left left(n) right right(n) high high(n) agit sur type scalaire type tableau type scalaire type tableau valeur retourne lment de gauche borne de gauche de l indice de la dimension n, n=1 par dfaut lment de droite borne de droite de l indice de la dimension n, n=1 par dfaut lment le plus grand borne maximum de l indice de la dimension n, n=1 par dfaut lment le plus petit borne minimum de l indice de la dimension n, n=1 par dfaut nombre d lments de la dimension n, n=1 par dfaut position de l lment v dans le type valeur de l lment de position p dans le type

152

type scalaire type tableau low type scalaire low(n) type tableau length(n) type tableau pos(v) val(p) succ(v) pred(v) leftof(v) event base range(n) reverse_ range(n) type scalaire type scalaire

type scalaire valeur qui suit (position + 1) l lment de valeur v dans le type type scalaire valeur qui prcde (pos. 1) l lment de valeur v dans le type type scalaire signal tous types type tableau type tableau valeur de l lment juste gauche de l lment de valeur v valeur de l lment juste droite de l lment de valeur v valeur boolenne "TRUE" si la valeur du signal vient de changer renvoie le type de base d un type driv renvoie la plage de variation de l indice de la dimension n, dfaut n=1, dans une boucle : "for i in bus range loop..." renvoie la plage de variation, retourne (to downto), de indice de la dimension n, dfaut n=1

rightof(v) type scalaire

Le tableau ci-dessus prcise le nom de quelques uns des attributs les plus utiliss, les catgories dobjets quils permettent de qualifier et la valeur renvoye par lattribut. Attributs spcifiques un systme Chaque systme de dveloppement fournit des attributs qui aident piloter loutil de synthse, ou le simulateur, associ au compilateur VHDL. Ces attributs, qui ne sont videmment pas standard, portent souvent sur le pilotage de loptimiseur, permettent de passer au routeur des informations concernant le brochage souhait, ... etc. Par exemple :
attribute synthesis_off of som4 : signal is true ;

permet, avec loutil WARP , dempcher llimination du signal som4 par loptimiseur.
attribute pin_numbers of T_edge:entity is "s:20 ";

permet, avec le mme outil, de prciser que le port s, de lentit T_edge, doit tre plac sur la broche N 20 du circuit. Attributs dfinis par l utilisateur Syntaxe :

Circuits numriques et synthse logique

153

dclaration
attribute att_nom : type ;

spcification
attribute nom_att of nom_objet:nom_classe is expression ;

utilisation
nom_objet'att_nom

6.2.3 Les oprateurs lmentaires


Les oprateurs connus du langage sont rpartis en six classes, en fonction de leurs priorits. Dans chaque classe les priorits sont identiques ; les parenthses permettent de modifier lordre dvaluation des expressions, modifiant ainsi les priorits, et sont obligatoires lors de lutilisation doprateurs non associatifs comme nand . Le tableau ci-dessous fournit la liste des oprateurs classs par priorits croissantes, de haut en bas :

Classe

Oprateurs

Types d oprandes bits ou boolens tous types numriques tableaux (concatnation) numriques numriques (restrictions) entiers (restrictions) bit ou boolen numrique numriques (restrictions)

Rsultat bit ou boolen boolen numrique tableau numrique numrique entier bit ou boolen numrique numrique

Op. logiques and or nand nor xor Op. relationnels = /= < <= > >= Op. additifs Signe Oprateurs multiplicatifs Op. divers + & + / mod rem not abs

Ce tableau appelle quelques remarques : Les oprateurs multiplicatifs et loprateur dexponentiation () sont soumis des restrictions, notamment en synthse o seules les oprations qui se rsument des dcalages sont gnralement acceptes. Certaines librairies standard (int_math et bv_math) surdfinissent (au sens des langages objets) les oprateurs daddition et de soustraction pour les tendre au type bit_vector. On notera que tous les oprateurs logiques ont la mme priorit, il est donc plus que conseill de parenthser toutes les expressions qui contiennent des oprateurs diffrents de cette classe. La priorit intermdiaire des oprateurs unaires de signe interdit lcriture dexpressions comme a b , quil faut crire a (b) .

Circuits numriques et synthse logique

154

6.2.4 Instructions concurrentes


Les instructions concurrentes interviennent lintrieur dune architecture, dans la description du fonctionnement dun circuit. En raison du paralllisme du langage, ces instructions peuvent tre crites dans un ordre quelconque. Les principales instruction concurrentes sont : les affectations concurrentes de signaux, les processus (dcrits prcdemment), les instanciations de composants les instructions generate les dfinitions de blocs. Affectations concurrentes de signaux Affectation simple Laffectation simple traduit une simple interconnexion entre deux quipotentielles. Loprateur daffectation de signaux (<=)a t vu prcdemment :
nom_de_signal <= expression_du_bon_type ;

Affectation conditionnelle Laffectation conditionnelle permet de dterminer la valeur de la cible en fonction des rsultats de tests logiques :
cible <= source_1 when condition_boolenne_1 else source_2 when condition_boolenne_2 else ... source_n ;

On notera un danger de confusion entre loprateur daffectation et lun des oprateurs de comparaison, linstruction suivante est syntaxiquement juste, mais fournit vraisemblablement un rsultat fort diffrent de celui escompt par son auteur :
-- Rsultat bizarre : cible <= source_1 when condition else cible <= source_2; -- <= est ici une comparaison ! -- dont le rsultat est affect -- cible si la condition est fausse.

Affectation slective En fonction des valeurs possibles dune expression, il est possible de choisir la valeur affecter un signal :
with expression select cible <= source_1 when valeur_11 | valeur_12 ... , source_2 when valeur_21 | valeur_22 ... , ... source_n when others ;

Circuits numriques et synthse logique

155

Un exemple typique daffectation slective est la description dun multiplexeur. Instanciation de composant Le mcanisme qui consiste utiliser un sous-ensemble (une paire entit-architecture), dcrit en VHDL, comme composant dans un ensemble plus vaste est connu sous le nom dinstanciation. Trois oprations sont ncessaires : Le couple entit-architecture du sous-ensemble doit tre cr et annex une librairie de lutilisateur, par dfaut la librairie work . Le sous-ensemble prcdent doit tre dclar comme composant dans lensemble qui lutilise, cette dclaration reprend les lments principaux de lentit du sousensemble. Chaque exemplaire du composant que lon souhaite inclure dans le schma en cours dlaboration doit tre connect aux quipotentielles de ce schma, cest le mcanisme de linstanciation. Syntaxe de la dclaration80 :
component nom_composant -- mme nom que l entit port ( liste_ports ) ; -- mme liste que dans -- l entit end component ;

Cette dclaration est mettre dans la partie dclarative de larchitecture du circuit utilisateur, ou dans un paquetage qui sera rendu visible par une clause use . Instanciation dun composant :
Etiquette : nom port map ( liste_d association ) ;

La liste dassociation tablit la correspondance entre les quipotentielles du schma et les ports dentre et de sortie du composant. Cette association peut se faire par position, les noms des signaux connecter doivent apparatre dans lordre des ports auxquels ils doivent correspondre, ou explicitement au moyen de loprateur dassociation => :
architecture exemple of xyz is component et port ( a , b : in bit ; a_et_b : out bit ) ; end component ; signal s_a, s_b, s_a_et_b, s1, s2, s_1_et_2 : bit; begin .... -- utilisation : et1 : et port map ( s_a , s_b , s_a_et_b ) ; -- ou : et2 : et port map (a_et_b => s_1_et_2,a => s1, b => s2) ;
80

Simplifie, nous omettons volontairement ici la possibilit de crer des composants gnriques , cest dire dont dertains paramtres peuvent tre fixs au moment de linstanciation, une largeur de bus, par exemple.

Circuits numriques et synthse logique


.... end exemple ;

156

En raison de sa simplicit, lassociation par position est la plus frquemment employe. Generate Les instructions generate permettent de crer de faon compacte des structures rgulires, comme les registres ou les multiplexeurs. Elles sont particulirement efficaces dans des descriptions structurelles. Une instruction generate permet de dupliquer une bloc dinstructions concurrentes un certain nombre de fois, ou de crer un tel bloc si une condition est vrifie. Syntaxe :
-- structure rptitive : etiquette : for variable in debut to fin generate instructions concurrentes end generate [etiquette] ;

ou :
-- structure conditionnelle : etiquette : if condition generate instructions concurrentes end generate [etiquette] ;

Donnons titre dexemple le code dun compteur modulo 16, construit au moyen de bascules T, disposant dune remise zro (raz) et dune autorisation de comptage (en) actives 1 :
ENTITY cnt16 IS PORT (ck,raz,en : IN BIT; s : OUT BIT_VECTOR (0 TO 3) ); END cnt16; ARCHITECTURE struct OF cnt16 IS SIGNAL etat : BIT_VECTOR(0 TO 3); SIGNAL inter: BIT_VECTOR(0 TO 3); COMPONENT T_edge -- suppos prsent dans la librairie work port ( T,hor,zero : in bit; s : out bit); END COMPONENT; BEGIN s <= etat ; gen_for : for i in 0 to 3 generate gen_if1 : if i = 0 generate inter(0) <= en ; end generate gen_if1 ; gen_if2 : if i > 0 generate inter(i) <= etat(i - 1) and inter(i - 1) ;

Circuits numriques et synthse logique


end generate gen_if2 ; comp1_3 : T_edge port map (inter(i),ck,raz,etat(i)); end generate gen_for ; END struct;

157

Block Une architecture peut tre subdivise en blocs, de faon constituer une hirarchie interne dans la description dun composant complexe. Syntaxe :
etiquette : block [( expression_de_garde )] -- zone de dclarations de signaux, composants, etc... begin -- instructions concurrentes end block [etiquette] ;

Dans des applications de synthse, lintrt principal des blocs est de permettre de contrler la porte et la visibilit des noms des objets utiliss (signaux notamment) : un nom dclar dans un bloc est local celui-ci. Dans des applications de simulation les blocs permettent en outre de contrler les instructions quils contiennent par une expression de garde , de type boolen81.

6.2.5 Instructions squentielles


Les instructions squentielles sont internes aux processus, aux procdures et aux fonctions (pour les deux dernires constructions voir paragraphes suivants). Elles permettent dappliquer la description dune partie dun circuit une dmarche algorithmique, mme sil sagit dune fonction purement combinatoire. Les principales instructions squentielles sont : Laffectation squentielle dun signal, qui utilise loprateur <= , a une syntaxe qui est identique celle de laffectation concurrente simple. Seule la place, dans ou hors dun module de programme squentiel, distingue les deux types daffectation ; cette diffrence, qui peut sembler mineure, cache des comportements diffrents : alors que les affectations concurrentes peuvent tre crites dans un ordre quelconque, pour leurs correspondantes squentielles, rarement utilises hors dune structure de contrle, lordre dcriture nest pas indiffrent. Laffectation dune variable, qui utilise loprateur := , est toujours une instruction squentielle. Les tests if et case . Les instructions de contrle des boucles loop , for et while .

Les instructions de test Les instructions de tests permettent de slectionner une ou des instructions excuter, en fonction des valeurs prises par une ou des expressions. On notera que, dans un processus, si

81

Les expressions de garde ne sont pas gres par tous les compilateurs.

Circuits numriques et synthse logique

158

toutes les branches possibles des tests ne sont pas explicites, une cellule mmoire est gnre pour chaque affectation de signal. instruction if....then....else....end if Linstruction if permet de slectionner une ou des instructions excuter, en fonction des valeurs prises par une ou des conditions. Syntaxe :
if expression_logique then instructions squentielles [ elsif expression_logique then ] instructions squentielles [ else ] instructions squentielles end if ;

Son interprtation est la mme que dans les langages de programmation classiques comme C ou Pascal. instruction case....when....end case Linstruction case permet de slectionner une ou des instructions excuter, en fonction des valeurs prises par une expression. Syntaxe :
case expression is when choix | choix | ... choix => instruction sequentielle ; when choix | choix | ... choix => instruction sequentielle ; .... when others => instruction sequentielle ; end case ;

| choix , pour ou ... , et when others sont syntaxiquement facultatifs. Les choix reprsentent diffrentes valeurs possibles de lexpression teste ; on notera que toutes les valeurs possibles doivent tre traites, soit explicitement, soit par lalternative others . Chacune de ces valeurs ne peut apparatre que dans une seule alternative. Cette instruction est rapprocher du switch de C, ou de case of de Pascal. Les boucles Les boucles permettent de rpter une squence dinstructions. Syntaxe gnrale
[ etiquette : ] [ schma itratif ] loop squence d instructions end loop [ etiquette ] ;

Trois catgories de boucles existent en VHDL, suivant le schma ditration choisi : Les boucles simples, sans schma ditration, dont on ne peut sortir que par une instruction exit .

Circuits numriques et synthse logique

159

Les boucles for , dont le schma ditration prcise le nombre dexcution. Les boucles while , dont le schma ditration prcise la condition de maintien dans la boucle. Les boucles for
[ etiquette : ] for parametre in minimum to maximum loop squence d instructions end loop [ etiquette ] ;

Ou :
[ etiquette : ] for parametre in maximum downto minimum loop squence d instructions end loop [ etiquette ] ;

Les boucles while


[ etiquette : ] while condition loop squence d instructions end loop [ etiquette ] ;

Next et exit
next [ etiquette ] [ when condition ] ;

Permet de passer litration suivante dune boucle.


exit [ etiquette ] [ when condition ] ;

Permet de provoquer une sortie de boucle.

6.3 Programmation modulaire


Small is beautyfull, un gros programme ne peut tre crit, compris, testable et test que sil est subdivis en petits modules que lon met au point indpendamment les uns des autres et rassembls ensuite. VHDL offre, bien videmment, cette possibilit. Chaque module peut tre utilis dans plusieurs applications diffrentes, moyennant un ajustage de certains paramtres, sans avoir en rcrire le code. Les outils de base de cette construction modulaire sont les sous programmes, procdures ou fonctions, les paquetages et librairies, et les paramtres gnriques.

6.3.1 Procdures et fonctions


Les sous programmes sont le moyen par lequel le programmeur peut se constituer une bibliothque dalgorithmes squentiels quil pourra inclure dans une description. Les deux catgories de sous programmes, procdures et fonctions, diffrent par les mcanismes dchanges dinformations entre le programme appelant et le sous programme.

Circuits numriques et synthse logique

160

Les fonctions Une fonction retourne au programme appelant une valeur unique, elle a donc un type. Elle peut recevoir des arguments, exclusivement des signaux ou des constantes, dont les valeurs lui sont transmises lors de lappel. Une fonction ne peut en aucun cas modifier les valeurs de ses arguments dappel. Dclaration :
function nom [ ( liste de paramtres formels ) ] return nom_de_type ;

Corps de la fonction :
function nom [ ( liste de paramtres formels ) ] return nom_de_type is [ dclarations ] begin instructions squentielles end [ nom ] ;

Le corps dune fonction ne peut pas contenir dinstruction wait, les variables locales, dclares dans la fonction, cessent dexister ds que la fonction se termine. Utilisation :
nom ( liste de paramtres rels )

Lors de son utilisation, le nom dune fonction peut apparatre partout, dans une expression, o une valeur du type correspondant peut tre utilise. Exemple Les librairies dun compilateur VHDL contiennent un grand nombre de fonctions, dont le programme source est fourni. Lexemple qui suit, issu de la librairie bv_math du compilateur WARP, incrmente de 1 un vecteur de bits. On peut lutiliser, par exemple, pour crer un compteur binaire. Dclaration :
FUNCTION inc_bv (a : BIT_VECTOR) RETURN BIT_VECTOR ;

Corps de la fonction :
FUNCTION VARIABLE VARIABLE BEGIN carry := inc_bv (a : BIT_VECTOR) RETURN BIT_VECTOR IS s : BIT_VECTOR (a'RANGE); carry : BIT; '1';

FOR i IN a'LOW TO a'HIGH LOOP -- les attributs LOW et -- HIGH dterminent les -- dimensions du vecteur. s(i) := a(i) XOR carry; carry := a(i) AND carry;

Circuits numriques et synthse logique


END LOOP; RETURN (s); END inc_bv;

161

Utilisation dans un compteur :


ARCHITECTURE behavior OF counter IS BEGIN PROCESS BEGIN WAIT UNTIL (clk = '1'); IF reset = '1' THEN count <= "0000"; ELSIF load = '1' THEN count <= dataIn; ELSE count <= inc_bv(count); -- increment du bit vector END IF; END process; END behavior;

Les procdures Une procdure, comme une fonction, peut recevoir du programme appelant des arguments : constantes, variables ou signaux. Mais ces arguments peuvent tre dclars de modes in , inout ou out (sauf les constantes qui sont toujours de mode in ), ce qui autorise une procdure renvoyer un nombre quelconque de valeurs au programme appelant. Dclaration :
procedure nom [ ( liste de paramtres formels ) ];

Corps de la procdure :
procedure nom [ ( liste de paramtres formels ) ] is [ dclarations ] begin instructions squentielles end [ nom ] ;

Dans la liste des paramtres formels, la nature des arguments doit tre prcise :
procedure exemple ( signal a, b : in bit ; signal s : out bit ) ;

Le corps dune procdure peut contenir une instruction wait, les variables locales, dclares dans la procdure, cessent dexister ds que la procdure se termine. Utilisation :
nom ( liste de paramtres rels ) ;

Circuits numriques et synthse logique

162

Une procdure peut tre appele par une instruction concurrente ou par une instruction squentielle, mais si lun de ses arguments est une variable, elle ne peut tre appele que par une instruction squentielle. La correspondance entre paramtres rels (dans lappel) et paramtres formels (dans la description de la procdure) peut se faire par position, ou par associations de noms :
exemple (entree1, entree2, sortie) ;

Ou :
exemple (s => sortie, a => entree1, b => entree2);

6.3.2 Les paquetages et les librairies


Un paquetage permet de rassembler des dclarations et des sous programmes, utiliss frquemment dans une application, dans un module qui peut tre compil part, et rendu visible par lapplication au moyen de la clause use. Un paquetage est constitu de deux parties : la dclaration, et le corps (body). La dclaration contient les informations publiques dont une application a besoin pour utiliser correctement les objets dcrits par le paquetage82 : essentiellement des dclarations, des dfinitions de types, des dfinitions de constantes ...etc. Le corps, qui nexiste pas obligatoirement, contient le code des fonctions ou procdures dfinies par le paquetage, sil en existe. Lutilisation dun paquetage se fait au moyen de la clause use :
use work.int_math.all; -- rend le paquetage -- int_math, de la librairie work, -- visible dans sa totalit.

Le mot cl work indique lensemble des librairies accessibles, par dfaut, au programmeur. Ce mot cache, notamment, des chemins daccs des rpertoires de travail. Ces chemins sont grs par le systme de dveloppement, et lutilisateur na pas besoin den connatre les dtails. Le nom compos qui suit la clause use doit tre compris comme une suite de filtres : utiliser tous les lments du module int_math de la librairie work . Les paquetages prdfinis Un compilateur VHDL est toujours assorti dune librairie, dcrite par des paquetages, qui offre lutilisateur des outils varis : Dfinitions de types, et fonctions de conversions entre types : VHDL est un langage objet, fortement typ. Aucune conversion de type implicite nest autorise dans les expressions, mais une librairie peut offrir des fonctions de conversion explicites, et redfinir les oprateurs lmentaires pour quils acceptent des oprandes de types varis. Un bus, par exemple, peut tre vu, dans le langage, comme un vecteur (tableau une dimension) de bits, et il est possible dtendre les oprateurs arithmtiques et
82

On peut rapprocher la partie visible dun package des fichiers *.h du langage C, ces fichiers contiennent, entre autres, les prototypes des objets, variables ou fonctions, utiliss dans un programme. La clause use de VHDL est un peu lquivalent, dans cette comparaison, de la directive #include <xxx.h> du C.

Circuits numriques et synthse logique

163

logiques lmentaires pour quils agissent sur un bus, vu comme la reprsentation binaire dun nombre entier. Les blocs structurels des circuits programmables, notamment les cellules dentressorties, peuvent tre dclars comme des composants que lon peut inclure dans une description. Une porte trois tats, par exemple, sera vue, dans une architecture, comme un composant dont lun des ports vhicule des signaux de type particulier : aux deux tats logiques vient se rajouter un tat haute impdance. Lemploi dun tel oprateur dans un schma ncessite, outre la description du composant, une fonction de conversion entre signaux logiques et signaux trois tats . Un simulateur doit pouvoir rsoudre, ou indiquer, les conflits ventuels. Les signaux utiliss en simulation ne sont pas, pour cette raison, de type binaire : on leur attache un type numr plus riche qui rajoute aux simples valeurs 0 et 1 la valeur inconnue, des nuances de force entre les sorties standard et les sorties collecteur ouvert, etc. La bibliothque standard offre galement des procdures dusage gnral comme les moyens daccs aux fichiers, les possibilits de dialogue avec lutilisateur, messages derreurs, par exemple. Lexemple qui suit illustre lutilisation, et lintrt des paquetages prdfinis. Le programme dcrit le fonctionnement dun circuit qui effectue une division par 50 du signal dhorloge, en fournissant en sortie un signal de rapport cyclique gal un demi. Pour obtenir ce rsultat, on a utilis la possibilit, offerte par le paquetage int_math du compilateur WARP, de mlanger, dans des oprations arithmtiques et logiques, des lments de types diffrents : les vecteurs de bits et les entiers83.
-- div50.vhd entity div50 is port ( hor : in bit; s : out bit ); -- sortie end div50 ; use work.int_math.all ; -- rend le paquetage visible architecture arith_bv of div50 is signal etat : bit_vector(0 to 5) ; begin s <= etat(5); process begin wait until hor ='1' ; if etat = 24 then -- oprateur "=" surcharg. etat <= i2bv(39,6); -- fonction de -- conversion d un entier en -- bit_vector de 6 bits. else etat <= etat + 1; -- oprateur "+" surcharg.
83

VHDL est un langage objet qui permet de surcharger les oprateurs. A chaque oprateur il est possible dassocier une fonction quivalente, ce qui permet de traiter des oprandes et un rsultat de types diffrents de ceux qui sont dfinis par dfaut.

Circuits numriques et synthse logique


end if ; end process ; end arith_bv ;

164

Pour assurer la portabilit des programmes, dun compilateur un autre, les paquetages prdfinis sont fournis sous forme de fichiers sources VHDL. Cette rgle permet un utilisateur de passer dun systme de dveloppement un autre sans difficult, il suffit de recompiler les paquetages qui ne seraient pas communs aux deux systmes. Un autre exemple de paquetage prdfini concerne la description des oprateurs lmentaires connus dun systme. Pour synthtiser une application, avec pour cible un circuit de type 22V10, par exemple, le systme de dveloppement utilise un paquetage qui dcrit les composants disponibles dans ce circuit. Ce paquetage est accessible lutilisateur ; mentionnons, en particulier, que lutilisation dune description structurelle, en terme de composants instancis, est indispensable pour utiliser les portes trois tats de sortie du circuit. Les paquetages crs par lutilisateur Lutilisateur peut crer ses propres paquetages. Cette possibilit permet dassurer la cohrence des dclarations dans une application complexe, vite davoir rpter un grand nombre de fois ces mmes dclarations et donne la possibilit de crer une librairie de fonctions et procdures adapte aux besoins des utilisateurs. La syntaxe de la dclaration dun paquetage est la suivante :
package identificateur is dclarations de types, de fonctions, de composants, d attributs, clause use, ... etc end [identificateur] ;

Sil existe, le corps du paquetage doit porter le mme nom que celui qui figure dans la dclaration :
package body identificateur is corps des sous programmes dclars. end [identificateur] ;

Dans lexemple qui suit on ralise un compteur au moyen de deux bascules, dans une description structurelle. La dclaration du composant bascule est mise dans un paquetage :
package T_edge_pkg is COMPONENT T_edge -- une bascule T avec mise 0. port ( T,hor,raz : in bit; s : out bit); END COMPONENT; end T_edge_pkg ;

Le compteur proprement dit :


ENTITY cnt4 IS PORT (ck,razero,en : IN BIT; s : OUT BIT_VECTOR (0 TO 1)

Circuits numriques et synthse logique


); END cnt4; use work.T_edge_pkg.all ; -- rend le contenu du package -- prcdent visible. ARCHITECTURE struct OF cnt4 IS SIGNAL etat : BIT_VECTOR(0 TO 1); signal inter:bit; BEGIN s <= etat ; inter <= etat(0) and en ; g0 : T_edge port map (en,ck,razero,etat(0)); g1 : T_edge port map (inter,ck,razero,etat(1)); END struct;

165

Les librairies Une librairie est une collection de modules VHDL qui ont dj t compils. Ces modules peuvent tre des paquetages, des entits ou des architectures. Une librairie par dfaut, work, est systmatiquement associe lenvironnement de travail de lutilisateur. Ce dernier peut ouvrir ses propres librairies par la clause library :
library nom_de_la_librairie ;

La faon dont on associe un nom de librairie un, ou des, chemins, dans le systme de fichiers de lordinateur, dpend de loutil de dveloppement utilis.

6.3.3 Les paramtres gnriques


Lorsque lon cre le couple entit-architecture dun oprateur, que lon souhaite utiliser comme composant dans une construction plus large, il est parfois pratique de pouvoir laisser certains paramtres modifiables par le programme qui utilise le composant. De tels paramtres, dont la valeur relle peut ntre fixe que lors de linstanciation du composant, sont appels paramtres gnriques. Un paramtre gnrique se dclare au dbut de lentit, et peut avoir une valeur par dfaut :
generic (nom : type [ := valeur_par_defaut ] ) ;

La mme dclaration doit apparatre dans la dclaration de composant, mais au moment de linstanciation la taille peut tre modifie par une instruction generic map , de construction identique linstruction port map , prcdemment rencontre :
Etiquette : nom generic map ( valeurs ) port map ( liste_d association ) ;

Circuits numriques et synthse logique

166

Dans lexemple ci-dessous, on ralise un compteur, sur 4 bits par dfaut, qui est ensuite instanci comme un compteur 8 bits. Bien videmment, le code du compteur ne doit faire aucune rfrence explicite la valeur par dfaut.
entity compteur is generic (taille : integer := 4 ) ; port ( hor : in bit ; sortie : out bit_vector( 0 to taille - 1)); end compteur ; use work.int_math.all ; architecture simple of compteur is signal etat : bit_vector(0 to taille - 1) ; begin sortie <= etat ; process begin wait until hor = '1' ; etat <= etat + 1 ; end process ; end simple ;

Ce compteur est instanci comme un compteur 8 bits :


entity compt8 is port (ck : in bit ; val : out bit_vector(0 to 7) ) ; end compt8 ; architecture large of compt8 is component compteur generic (taille : integer ) ; port ( hor : in bit ; sortie : out bit_vector( 0 to taille - 1)); end component ; begin u1 : compteur generic map (8) port map (ck , val) ; end large ;

Les paramtres gnriques prennent toute leur efficacit quand leur emploi est associ la cration de librairies de composants, dcrits par des paquetages. Il est alors possible de crer des fonctions complexes au moyen de programmes construits de faon hirarchise, chaque niveau de la hirarchie pouvant tre mis au point et test indpendamment de lensemble.

6.4 Les paquetages de la librairie IEEE


La librairie IEEE joue un rle fdrateur et remplace tous les dialectes locaux. En cours de gnralisation, y compris en synthse, elle dfinit un type de base neuf tats,

Circuits numriques et synthse logique

167

std_ulogic (prsent prcdemment comme exemple de type numr) et des sous-types

drivs simples et structurs (vecteurs). Des fonctions et oprateurs surchargs permettent deffectuer des conversions et de manipuler les vecteurs comme des nombres entiers. A lheure actuelle la librairie IEEE comporte trois paquetages dont nous examinerons plus en dtail certains aspects au paragraphe II-7 : std_logic_1164 dfinit les types, les fonctions de conversion, les oprateurs logiques et les fonctions de recherches de fronts rising_edge() et falling_edge(). numeric_bit dfinit les oprateurs arithmtiques agissant sur des bit_vector interprts comme des nombres entiers. numeric_std dfinit les oprateurs arithmtiques agissant sur des std_logic_vector interprts comme des nombres entiers. Le paquetage ieee.std_logic_1164 dfinit le type std_ulogic qui est le type de base de la librairie IEEE :
type std_ulogic is ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' ); ---------Uninitialized Forcing Unknown Forcing 0 Forcing 1 High Impedance Weak Unknown Weak 0 Weak 1 Don't care

Le sous-type std_logic, qui est le plus utilis, est associ la fonction de rsolution
resolved :
function resolved ( s : std_ulogic_vector ) return std_ulogic; subtype std_logic is resolved std_ulogic;

Cette fonction de rsolution utilise une table de gestion des conflits qui reproduit les forces respectives des valeurs du type :
type stdlogic_table is array(std_ulogic, std_ulogic) of std_ulogic; constant resolution_table : stdlogic_table := ( -----------------------------------------------------------| U X 0 1 Z W L H | | ---------------------------------------------------------( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X | ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 | ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 | ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z | ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L | ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - | );

Le paquetage dfinit galement des vecteurs :


type std_logic_vector is array ( natural range <> )

Circuits numriques et synthse logique


of std_logic; type std_ulogic_vector is array ( natural range <> ) of std_ulogic;

168

Et les sous-types rsolus X01, X01Z, UX01 et UX01Z. Des fonctions de conversions permettent de passer du type binaire aux types IEEE et rciproquement, ou dun type IEEE lautre :
function To_bit ( s : std_ulogic; xmap : bit := '0') return bit; function To_bitvector ( s : std_logic_vector ; xmap : bit := '0') return bit_vector; function To_bitvector ( s : std_ulogic_vector; xmap : bit := '0') return bit_vector; function To_StdULogic ( b : bit ) return std_ulogic; function To_StdLogicVector ( b : bit_vector ) return std_logic_vector; function To_StdLogicVector ( s : std_ulogic_vector ) return std_logic_vector; function To_StdULogicVector ( b : bit_vector ) return std_ulogic_vector;

Par dfaut les fonctions comme To_bit remplacent, au moyen du paramtre xmap, toutes les valeurs autres que '1' et 'H' par '0'. La dtection dun front dhorloge se fait au moyen des fonctions :
function rising_edge (signal s : std_ulogic) return boolean; function falling_edge(signal s : std_ulogic) return boolean;

Tous les oprateurs logiques sont surchargs pour agir sur les types IEEE comme sur les types binaires. Ces oprateurs retournent les valeurs fortes '0', '1', 'X', ou 'U'.

6.4.1 Nombres et vecteurs


Un nombre entier peut tre assimil un vecteur, dont les lments sont les coefficients binaires de son dveloppement polynomial en base deux. Restent dfinir sur ces objets les oprateurs arithmtiques, ce que permet la surcharge doprateurs. Les paquetages numeric_std et numeric_bit correspondent lutilisation, sous forme de nombres, de vecteurs dont les lments sont des types std_logic et bit, respectivement. Comme les types dfinis dans ces paquetages portent les mmes noms, ils ne peuvent pas tre rendus visibles simultanment dans un mme module de programme ; il faut choisir un contexte ou lautre. Les deux paquetages ont pratiquement la mme structure, et dfinissent les types signed et unsigned :
-- ieee.numeric_bit : type UNSIGNED is array (NATURAL range <> ) of BIT; type SIGNED is array (NATURAL range <> ) of BIT; -- ieee.numeric_std : type UNSIGNED is array (NATURAL range <>) of STD_LOGIC; type SIGNED is array (NATURAL range <>) of STD_LOGIC;

Circuits numriques et synthse logique

169

Les vecteurs doivent tre rangs dans lordre descendant (downto) de lindice, de sorte que le coefficient de poids fort soit toujours crit gauche, et que le coefficient de poids faible, dindice 0, soit droite, ce qui est lordre naturel. La reprsentation interne des nombres signs correspond au code complment deux, dans laquelle le chiffre de poids fort est le bit de signe ('1' pour un nombre ngatif, '0' pour un nombre positif ou nul). Les oprations prdfinies dans ces paquetages, agissant sur les types signed et unsigned, sont : Les oprations arithmtiques. Les comparaisons. Les oprations logiques pour numeric_std, elles sont natives pour les vecteurs de bits. Des fonctions de conversion entre nombres et vecteurs :
function function function function TO_INTEGER (ARG: UNSIGNED) return NATURAL; TO_INTEGER (ARG: SIGNED) return INTEGER; TO_UNSIGNED (ARG, SIZE: NATURAL) return UNSIGNED; TO_SIGNED (ARG: INTEGER; SIZE: NATURAL) return SIGNED;

Une fonction de recherche didentit (std_match) qui utilise ltat dont care du type std_logic comme joker. Les recherches de fronts (rising_edge et falling_edge), agissant sur le type bit, dans numeric_bit.

6.4.2 Des oprations prdfinies


Les oprandes et les rsultats des oprateurs arithmtiques et relationnels appellent quelques commentaires. Ces oprateurs acceptent comme oprandes deux vecteurs ou un vecteur et un nombre. Dans le cas de deux vecteurs dont lun est sign, lautre pas, il est la charge du programmeur de prvoir les conversions de types ncessaires.
Les oprateurs arithmtiques

Laddition et la soustraction sont faites sans aucun test de dbordement, ni gnration de retenue finale. La dimension du rsultat est celle du plus grand des oprandes, quand lopration porte sur deux vecteurs, ou celle du vecteur pass en argument dans le cas dune opration entre un vecteur et un nombre. Le rsultat est donc calcul implicitement modulo 2n, o n est la dimension du vecteur retourn. Ce modulo implicite allge, par exemple, la description dun compteur binaire, vitant au programmeur de prvoir explicitement lincrmentation modulo la taille du compteur. La multiplication retourne un rsultat dont la dimension est calcule pour pouvoir contenir le plus grand rsultat possible : somme des dimensions des oprandes moins un, dans le cas de deux vecteurs, double de la dimension du vecteur pass en paramtre moins un dans le cas de la multiplication dun vecteur par un nombre. Pour la division entre deux vecteurs, le quotient a la dimension du dividende, le reste celle du diviseur. Quand les oprations portent sur un nombre et un vecteur, la dimension du rsultat ne peut pas dpasser celle du vecteur, que celui-ci soit dividende ou diviseur.
Les oprateurs relationnels

Quand on compare des vecteurs interprts comme tant des nombres, les rsultats peuvent tre diffrents de ceux que lon obtiendrait en comparant des vecteurs sans signification. Le tableau ci-dessous donne quelques exemples de rsultats en fonction des types des oprandes :

Circuits numriques et synthse logique


Expression Types des oprandes bit_vector unsigned signed

170

"001" "001" "100" "010" "100"

= > < < <

"00001" "00001" "01000" "10000" "00100"

FALSE TRUE FALSE TRUE FALSE

TRUE FALSE TRUE TRUE FALSE

TRUE FALSE TRUE FALSE TRUE

Ces rsultats se comprennent aisment si on garde lesprit que la comparaison de vecteurs ordinaires, sans signification numrique, se fait de gauche droite sans notion de poids attach aux lments binaires.

6.4.3 Compteur dcimal


Comme illustration de lutilisation de la librairie IEEE, donnons le code source dune version possible de la dcade, instancie comme composant dans un compteur dcimal :
library ieee ; use ieee.numeric_bit.all ; ARCHITECTURE vecteur OF decade IS signal countTemp: unsigned(3 downto 0) ; begin count <= chiffre(to_integer(countTemp)) ; -- conversion dix <= en when countTemp = 9 else '0' ; incre : PROCESS BEGIN WAIT UNTIL rising_edge(clk) ; if raz = '1' then countTemp <= X"0" ; -- ou : countTemp <= to_unsigned(0) ; elsif en = '1' then countTemp <= (countTemp + 1) mod 10 ; end if ; END process incre ; END vecteur ;

Lintrt de ce programme rside dans laspect vident des choses, le signal countTemp, un vecteur dlments binaires, est manipul dans des oprations arithmtiques exactement comme sil sagissait dun nombre. Seules certaines oprations de conversions rappellent les diffrences de nature entre les types unsigned et integer.

6.5 En guise de conclusion


VHDL est un langage qui peut dconcerter, au premier abord, le concepteur de systmes numriques, plus habitu aux raisonnements traditionnels sur des schmas que familier des langages de description abstraite. Il est vrai que le langage est complexe, et peut prsenter certains piges, la description des horloges en est un exemple. Nous esprons avoir aid le lecteur gagner un peu de temps dans sa dcouverte, et lui avoir mis en vidence quelques uns des chausse-trappes classiques.

Circuits numriques et synthse logique

171

Ayant fait leffort de rentrer dedans , lutilisateur dcouvre que ce type dapproche est dune trs grande souplesse, et dune efficacit redoutable. Des problmes de synthse qui pouvaient prendre des heures de calcul, dans une dmarche traditionnelle, sont traits en quelques lignes de programme. Renouvelons ici la mise en garde du dbut de ce chapitre : noubliez jamais que vous tes en train de crer un circuit, et que le meilleur des compilateurs ne peut que traduire la complexit sous-jacente de vos quations, il naugmentera pas la capacit de calcul des circuits que vous utilisez. Le simple programme de description dun additionneur 4 bits, comme le 74_283 :
ENTITY addit IS PORT (a,b: IN INTEGER RANGE 0 TO 15; cin: IN INTEGER RANGE 0 TO 1; som: OUT INTEGER RANGE 0 TO 31); END addit; ARCHITECTURE behavior OF addit IS BEGIN som <= a+b+cin; END behavior;

gnre plus dune centaine de termes, quand ses quations sont ramenes brutalement une somme de produits logiques. Charge reste lutilisateur de piloter loptimiseur de faon un peu moins sommaire que de demander la rduction de la somme une expression canonique en deux couches logiques. Exercices Du code VHDL au schma. On considre le programme VHDL suivant qui dcrit le fonctionnement dune bascule :
entity basc is port ( T,hor,raz : in bit; s : out bit); end basc; architecture primitive of basc is signal etat : bit; begin s <= etat ; process begin wait until (hor = '1') ; if(raz = '1') then etat <= '0'; elsif(T = '1') then etat <= not etat; end if; end process; end primitive;

Circuits numriques et synthse logique

172

1. 2. 3. 4.

A quoi reconnat-on quil sagit dun circuit squentiel synchrone ? La commande raz est-elle synchrone ou asynchrone ? Etablir le diagramme de transition de cette bascule. Dduire du diagramme prcdent les quations logiques et le schma dune ralisation avec une bascule D, avec une bascule J-K.

compteur modulo 4 sorties dcodes.


Hor En Ld Din 2 Calcul Futur combinatoire de l tat 2 futur Actuel Registre tat 2 Calcul des sorties, combinatoire ou squentiel S0 S1 S2 S3 Etat

Le code dune premire version du compteur est le suivant :


entity compteur is port ( hor, en, ld: in bit; din: in bit_vector(1 downto 0) ; etat:out bit_vector(1 downto 0);s:out bit_vector(0 to 3) ); end compteur ; use work.int_math.all; architecture comporte of compteur is signal actuel : bit_vector(1 downto 0) ; begin etat <= actuel ; -- instruction 1 with actuel select -- instruction 2 s <= "1000" when "00", "0100" when "01", "0010" when "10", "0001" when "11"; -- fin instruction 2 process -- instruction 3 begin wait until (hor = '1'); if(ld = '1') then actuel <= din ; elsif (en = '1') then actuel <= actuel + 1 ; end if ; end process ; -- fin instruction 3 end comporte ;

Peut-on permuter les instructions (ou blocs dinstructions) 1, 2 et 3 ? Dans le processus peut-on permuter les instructions, mme si on veille conserver une syntaxe correcte ? Rcrire linstruction 2 en utilisant une affectation conditionnelle au lieu dun slecteur parallle. Rcrire le programme en crant trois processus qui respectent le dcoupage donn dans le synoptique prcdent. Rcrire le programme prcdent en calculant les sorties s(i) dans un processus synchrone, mais en veillant ce que leurs valeurs restent identiques celles dcrites prcdemment (le pige rside dans un ventuel dcalage dune priode dhorloge).

Circuits numriques et synthse logique

173

Bibliographie
Circuits et oprateurs logiques Tran Tien Lang, Electronique numrique, Masson 1995. J.M. Bernard, J. Hugon, Pratique des circuits logiques, Eyrolles 1987. J.P. Vabre, Analyse binaire et circuits logiques, Editions Techniques 1980. P. Horowitz, W. Hill, The art of electronics, Cambridge University Press 1983. D.A. Hodges, H.G. Jackson, Analysis and design of digital integrated circuits, McGraw Hill 1988. J. Millman, A. Grabel, Microelectronics, McGraw Hill 1988 ; existe en traduction franaise chez le mme diteur. Programmable Logic, Cypress 1995. The Programmable Logic Data Book, Xilinx. Data Book, ALTERA. The TTL Data Book, Texas Instrument. Mthodes de synthse J.M. Bernard, Conception structure des systmes logiques, Eyrolles 1987 . A. Jacques, J.C. Lafont, J.P. Vabre, Logique programme et Grafcet, Ellipse 1987. PAL device Handbook, Advanced Micro Devices 1988; rfrence ancienne qui contient une excellente introduction la synthse logique. Applications Handbook, Cypress Semiconductor 1991. FPGA Applications Handbook, Texas Instrument 1993. F.J. Hill, G.R. Peterson, Computer aided logical design with emphasis on VLSI, Jonh Wiley & sons 1993. C. Mead, L. Conway, Introduction to VLSI systems, Addison-Wesley 1980. Langage VHDL R. Airiau, J.M. Berg, V. Olive, J. Rouillard, VHDL du langage la modlisation, Presses Polytechniques et Universitaires Romandes 1990. Z. Navabi, VHDL : Analysis and Modeling of Digital Systems, McGraw Hill 1993. J. Armstrong, Chip Level Modelling in VHDL, Prentice Hall 1988. Warp VHDL Synthesis Reference, Cypress 1995. Introduction to VHDL, Mentor Graphics 1992. VHDL Reference Manual, Mentor Graphics 1994. AutoLogic VHDL Reference Manual, Mentor Graphics 1994. IEEE Standard VHDL Language Reference Manual, Std 1076-1993, IEEE 1993.

Circuits numriques et synthse logique

174

IEEE Standard 1076 VHDL Tutorial, CLSI 1989.

Circuits numriques et synthse logique

175

Avant-propos.................................................................................................... 0 1 Informations numriques .............................................................................. 3 1.1 De lanalogique au numrique............................................................... 3 1.2 Deux niveaux lectriques : le bit............................................................ 4 1.2.1 Conventions logiques .................................................................... 4 1.2.2 Immunit au bruit .......................................................................... 5 1.3 Du bit au mot : des codes ...................................................................... 6 1.3.1 Pour les nombres ........................................................................... 6 1.3.2 Il ny a pas que des nombres........................................................ 11 2 Circuits : aspects lectriques ....................................................................... 15 2.1 Technologies....................................................................................... 15 2.1.1 Les familles TTL......................................................................... 15 2.1.2 Les familles CMOS ..................................................................... 16 2.1.3 Les familles ECL......................................................................... 18 2.1.4 Les familles AsGa ....................................................................... 18 2.2 Volts et milliampres .......................................................................... 19 2.2.1 Les niveaux de tension ................................................................ 19 2.2.2 Les courants changs ................................................................. 20 2.3 Nanosecondes et mgahertz................................................................. 22 2.3.1 Des paramtres observables en sortie : les temps de propagation . 22 2.3.2 Des rgles respecter concernant les entres ............................... 23 2.3.3 Des rgles respecter concernant les dcouplages ....................... 28 2.4 Types de sorties .................................................................................. 28 2.4.1 Sorties standard ........................................................................... 29 2.4.2 Sorties collecteur (ou drain) ouvert.............................................. 29 2.4.3 Sorties trois tats ......................................................................... 30 3 Oprateurs lmentaires.............................................................................. 33 3.1 Combinatoire et squentiel .................................................................. 33 3.2 Oprateurs combinatoires.................................................................... 35 3.2.1 Des oprateurs gnriques : NON, ET, OU.................................. 35 3.2.2 Un peu dalgbre ......................................................................... 39 3.2.3 Non-ET, Non-OU........................................................................ 41 3.2.4 Le ou exclusif , ou somme modulo 2....................................... 42 3.2.5 Le slecteur, ou multiplexeur deux entres................................ 48 3.3 Oprateurs squentiels......................................................................... 51 3.3.1 Les bascules asynchrones ............................................................ 52 3.3.2 Les bascules synchrones .............................................................. 58 4 Circuits : une classification ......................................................................... 73 4.1 Des fonctions prdfinies : les circuits standard................................... 73 4.1.1 Circuits combinatoires................................................................. 74 4.1.2 Circuits squentiels...................................................................... 78

Circuits numriques et synthse logique

176

4.1.3

Circuits dinterface ...................................................................... 81

4.2 Des fonctions dfinies par lutilisateur................................................. 81 4.2.1 Les circuits programmables par lutilisateur ................................ 82 4.2.2 Les circuits spcifiques................................................................ 84 5 Mthodes de synthse ................................................................................. 85 5.1 Les rgles gnrales ............................................................................ 86 5.2 Les machines synchrones nombre fini dtats ................................... 90 5.2.1 Horloge, registre dtat et transitions ........................................... 90 5.2.2 Des choix darchitecture dcisifs ............................................... 105 5.3 Fonctions combinatoires.................................................................... 122 5.3.1 Des tables de vrit aux quations : les formes normales ........... 122 5.3.2 Llimination des redondances : les minimisations .................... 124 5.4 Squenceurs et fonctions standard ..................................................... 130 5.4.1 Squenceurs cbls.................................................................... 131 5.4.2 Squenceurs micro-programms ................................................ 132 6 Annexe : VHDL........................................................................................ 136 6.1 Principes gnraux ............................................................................ 136 6.1.1 Description descendante : le top down design ...................... 136 6.1.2 Simulation et/ou synthse .......................................................... 137 6.1.3 Lextrieur de la bote noire : une ENTITE .......................... 138 6.1.4 Le fonctionnement interne : une ARCHITECTURE ............ 139 6.1.5 Des algorithmes squentiels dcrivent un cblage parallle : PROCESSUS ...................................................................................... 140 6.2 Elments du langage ......................................................................... 145 6.2.1 Les donnes appartiennent une classe et ont un type ............... 145 6.2.2 Les attributs prcisent les proprits des objets .......................... 151 6.2.3 Les oprateurs lmentaires....................................................... 153 6.2.4 Instructions concurrentes ........................................................... 154 6.2.5 Instructions squentielles........................................................... 157 6.3 Programmation modulaire ................................................................. 159 6.3.1 Procdures et fonctions.............................................................. 159 6.3.2 Les paquetages et les librairies................................................... 162 6.3.3 Les paramtres gnriques......................................................... 165 6.4 Les paquetages de la librairie IEEE ................................................... 166 6.4.1 Nombres et vecteurs .................................................................. 168 6.4.2 Des oprations prdfinies......................................................... 169 6.4.3 Compteur dcimal ..................................................................... 170 6.5 6.6 En guise de conclusion ...................................................................... 170 Bibliographie .................................................................................... 173

les

Circuits numriques et synthse logique

177