Vous êtes sur la page 1sur 27

lments de VHDL

8.1

BREF HISTORIQUE DES LANGAGES DE DESCRIPTION DU MATRIEL

Dunod La photocopie non autorise est un dlit.

Les approches modernes de la conception des circuits (logiques) lectroniques ncessitent que lon puisse dcrire, dune manire la plus abstraite possible, la fonctionnalit souhaite pour ces montages (cest--dire leur spcication). Un long effort, a permis de dgager les notions de base de telles descriptions. Dun point de vue externe, la syntaxe de ces formalismes ressemble celle des langages de programmation (VHDL est un driv du langage ADA), mais leur smantique est lie au comportement des montages lectroniques. Aprs une vingtaine dannes de recherches, de tels formalismes ont t normaliss dans les annes 1990 (langages VHDL et Verilog). Ceux-ci sont loin dtre parfaits, ce qui montre que la smantique de llectronique na pas encore t compltement assimile. Laspect ngatif de cette normalisation a t darrter toutes les recherches dans ce domaine pour se concentrer sur lassimilation et la mise en uvre des nouveaux venus. Dun point de vue industriel, ces langages de description du matriel lectronique sont une ncessit. Ils sont trs utiliss. Ils permettent de simuler les circuits avant leur ralisation, dchanger des descriptions de circuits, de constituer des bibliothques de modules, de prciser la spcication dun circuit et dalimenter des outils automatiques de conception. Il existe un march (dit dIntellectual Property) pour des descriptions synthtisables de blocs internes complexes de circuits intgrs. La description pralable du comportement dun futur circuit devient une tape oblige dans son processus de conception. Cette description constitue souvent un lment

contractuel. Elle est souvent exige dans les marchs militaires, arospatiaux, tlcom, scuritaires Le passage du fer souder la description para-informatique des futurs circuits constitue un vritable bouleversement dans les habitudes des lectroniciens qui voient leur mtier voluer profondment et adopter des mthodes de raisonnement inspires de celles des informaticiens. Lexistence dun formalisme prcis permet aussi de raliser des traitements formels sur les descriptions des futurs circuits tels que des transformations, des optimisations et surtout des vrications. Par exemple, les annes 1980 et 1990 ont vu apparatre des outils capables de vrier que les comportements de deux descriptions sont formellement quivalents (outils V-Formal et Chrysalys). Le langage VHDL rsulte dun effort conjoint des compagnies Intermetrics, IBM et Texas dans les annes 1980 sous lgide du DoD (Ministre de la dfense des tats-Unis). Le rsultat de cet effort a t normalis en 1987 (norme IEEE 1076). Curieusement, VHDL est surtout utilis en Europe et cest lun de ses concurrents : Verilog qui est le plus utilis aux tats-Unis. La dmarche qui consiste capturer la smantique de llectronique est en passe dtre abandonne au prot de descriptions purement algorithmiques qui nont pour objectif que la description du comportement des futurs circuits. Ces formalismes sont bass sur des extensions de langages de programmation existant, comme SystemC qui est bas sur C++. Le langage VHDL est assez complexe car il prtend un vaste domaine dapplications (peut tre quun ensemble de langages coupls aurait t prfrable). VHDL a apport des ides trs intressantes mais ses lacunes sont assez gnantes et dnotent une mauvaise prise en compte des spcicits du matriel. Cela a amen les ralisateurs de compilateurs donner des interprtations diverses certains points mal dnis. Trs souvent, les descriptions VHDL sont de bas niveau et nutilisent quun petit sous-ensemble du langage. Lobjectif de ce chapitre nest pas de donner une description exhaustive du langage VHDL, mais den prsenter les grandes lignes et de mettre en vidence ses profondes diffrences avec un langage informatique. Mme si la syntaxe dune description VHDL possde une forme informatique, sa smantique est lectronique et il est trs important de conserver le point de vue dun lectronicien lors de lcriture des descriptions de circuits. Il est trs important de bien distinguer entre le temps dexcution des algorithmes de simulation et le temps des phnomnes simuls. Ces deux temps nont rien voir. Le temps dexcution des algorithmes de simulation dpend de la puissance de lordinateur utilis, de la taille de la description et de sa complexit. Le temps simul dpend des caractristiques des circuits dcrits. Lvolution du temps simul se fait trs rarement en temps rel. La complexit du processus de simulation fait quil se droule souvent (beaucoup) plus lentement que le temps du circuit simul. La simulation VHDL dun dispositif matriel ne peut donc pas tre utilise comme une substitution de cet organe dans un systme physique. Dans la suite de ce document, nous ne parlerons que du temps simul.

La description dun circuit en VHDL ne concerne que le circuit lui-mme. Celle-ci ne comporte rien de ce qui constitue lenvironnement du circuit : les dispositifs qui assurent son excitation (gnrateurs, autres circuits) ; ceux qui analysent son fonctionnement (sondes, analyseur digital, oscilloscope). La fonction de ces organes est gnralement assure, de manire spcique, par les systmes informatiques qui permettent la mise en uvre des descriptions VHDL. Les systmes VHDL sont souvent orients vers la synthse ou la paramtrisation de circuits (par exemple des FPGA). Il existe aussi quelques systmes assez complets qui permettent de simuler des descriptions qui utilisent toutes les ressources du langage. Les outils de la premire famille sont gnralement beaucoup moins onreux que ceux de la seconde, toutefois leurs possibilits de simulation sont souvent rduites linterface externe des circuits ainsi cres ou paramtrs.

8.2

STRUCTURE DUNE DESCRIPTION VHDL

Une description VHDL se compose de deux parties : La description de linterface du circuit (appele entity) avec le monde qui lutilise (connecteur, brochage, interface). Celle-ci est constitue par la liste des signaux de cette interface, leur sens, leur nature, etc. La description de la ralisation du circuit (appele architecture) qui peut contenir trois formes de descriptions : La description de linterconnexion de sous-circuits dont lassemblage constitue le circuit tudi (cette forme de description peut tre appele structurelle). La description des fonctions boolennes mises en uvre (cette forme de description peut tre appele fonctionnelle). Des algorithmes dont lexcution simule le comportement du circuit ou de certains de ses sous-ensembles (cette forme de description peut tre appele procdurale). Ces trois formes peuvent tre utilises conjointement dans la description de larchitecture dun circuit. Plusieurs architectures peuvent tre associes une mme entit pour montrer lvolution du processus de conception. Toutefois, cette facilit est souvent illusoire car le rafnement des descriptions ne seffectue pas que dans le dtail des fonctions logiques mais aussi par : le passage de types numrs (avant codage) des types bit_vector (aprs codage) ; la transformation du squencement qui devient plus n en dtaillant les oprations complexes, ainsi que pour la prise en compte de contraintes temps rel. Ces transformations peuvent remettre en cause profondment linterface des entits et ainsi limiter leur substitution des formes plus abstraites.

Dunod La photocopie non autorise est un dlit.

8.2.1 Lentit La description dune entit correspond celle dun composant, dun sous-circuit, dun module ou dune carte. Elle comporte ncessairement une interface constitue dun brochage, dun connecteur Une entit est constitue dune entte contenant son nom suivi de la liste ordonne des diffrents signaux qui constituent son interface. Chaque connexion est constitue : du nom du, ou des, signaux considrs ; de leur sens qui peut tre : in pour des signaux entrants, out pour des signaux sortants (non visibles lintrieur de lentit), buffer pour les signaux sortants qui peuvent tre aussi utiliss lintrieur de lentit, inout pour les signaux bidirectionnels ; de leur type qui peut tre : bit pour de simples ls, bit_vector(<dimension>) dans le cas dune nappe de ls. Les dimensions seront donnes par les deux indices extrmaux. Les ls dune nappe peuvent tre indics dans le sens croissant (par exemple de 0 15 (0 to 15)) ou dans le sens dcroissant (par exemple de 32 1 (32 downto 1)), un type spcique (qui doit tre pr-dclar) ; de leur valeur de rappel sils ne sont pas connects (optionnelle) : := 1, pour un rappel 1 dun bit (pull-up), := 0, pour un rappel 0 dun bit (pull-down). Nous allons utiliser comme exemple la description dune cellule dadditionneur. Entity Full_Adder is port( X, Y : in bit; -- entres (fils) Cin : in bit := 0; -- entre avec rappel 0 Sum, Cout : out bit); -- sorties (fils) end Full_Adder; Il faut noter que, dans sa forme actuelle, VHDL est insensible la case des caractres. 8.2.2 Larchitecture Une description darchitecture correspond un niveau particulier de description du montage lectronique qui ralise lentit. Elle dbute par une entte contenant le nom de cette architecture et celle de lentit laquelle elle se rfre. Format : Architecture <nom> of <nom dentit> is <dclarations> begin

<description de larchitecture> end <nom> Les descriptions darchitectures contiennent pratiquement toujours la dclaration de signaux internes. Celles-ci comportent le nom de ces signaux, leur type, ventuellement leurs dimensions et ventuellement leurs valeurs par dfaut. Exemples : signal S1, S2, S3 : bit; Ces signaux, ainsi que les entres, les bus inout, et les sorties buffer, sont utilisables dans la description interne de larchitecture du circuit.

8.3

LES DIFFRENTS TYPES DE DESCRIPTION

8.3.1 Descriptions structurelles Cest la forme la plus naturelle de description dun circuit lectronique. Elle consiste, tout simplement, dcrire la mise en uvre et linterconnexion de ses composants. Elle est directement inspire des techniques de description des cartes lectroniques (liste de cblage). Elle consiste en : la liste des signaux internes qui sont de simples ls, ou des nappes de ls, utiliss pour interconnecter les composants ; Exemples : signal AU : bit; -- un simple fil signal VZ : bit_vector (31 downto 0); -- une nappe de 32 fils la liste des types de composants utiliss dans la description structurelle avec la liste de leurs connexions telle quelle apparat dans la description de ces entits ; la liste des entits utilises pour raliser ces types de composants ainsi que des architectures utilises ; la liste des composants interconnects constitue : du nom de chaque composant, de son type, de la liste de ses connections dans le mme ordre que celle de la dclaration de son type (dautres formes existent). Ce type de description permet une conception hirarchique en sparant la conception des composants et celle de lentit globale Exemple : Description structurelle de la cellule dadditionneur (gure 8.1). Architecture Structural of Full_Adder is signal S1, S2, S3 : bit; -- declaration des types de composants component XOR_G -- portes XOR port( X1, X2 :in bit;

Dunod La photocopie non autorise est un dlit.

X Y Cin

XOR1 S1 XOR2 Sum AND2 S2 OR1 AND1 S3 Cout

Figure 8.1

Schma logique de la cellule dadditionneur

XO1 :out bit); end component; component AND_G -- portes AND port( A1, A2 :in bit; AO1 :out bit); end component; component OR_G -- portes OR port( O1, O2 :in bit; OO1 :out bit); end component; -- liaison avec les descriptions des types des composants for all :XOR_G use entity XOR_G port map (x1, x2, xo1); for all :AND_G use entity AND_G port map (x1, x2, xo1); for all :OR_G use entity OR_G port map (x1, x2, xo1); begin -- description de linterconnexion des composants XOR1 : XOR_G port map (X, Y, S1); -- une porte XOR XOR2 : XOR_G port map (S1, Cin, Sum); -- une autre porte XOR AND1 : AND_G port map (X, Y, S3); -- une porte AND AND2 : AND_G port map (S1, Cin, S2); -- une autre porte AND OR1 : OR_G port map (S2, S3, Cout); -- une porte OR end Structural; Cet exemple met en vidence le caractre verbeux de VHDL qui allonge les descriptions. Les commentaires sont simplement prcds de -- (il est dconseill dy faire gurer des lettres accentues). La spcication des entits composantes peut prciser leur architecture. videment, si lon souhaite simuler le comportement de cette description de ladditionneur, il faut lui adjoindre celles des diffrents types de portes quelle utilise.

8.3.2 Descriptions fonctionnelles Cest la forme la plus courante de description VHDL. Elle est souvent appele behavioral dans la littrature. Elle consiste dcrire les quations boolennes qui dnissent les diffrents signaux. Elle contient : la liste des signaux internes que nous assimilerons, dans un premier temps, de simples ls qui vhiculent les valeurs qui leur sont donnes ; la liste des fonctions boolennes qui dnissent les valeurs des diffrents signaux. Ces fonctions boolennes sont dcrites comme des instructions dun langage informatique volu. La partie gauche correspond au signal qui doit tre dni et connect. Elle est spare de la dnition de la fonction (lexpression) par un signe <= dit de connexion. La fonction boolenne est crite comme une expression utilisant des oprateurs boolens. Les connexions servent dnir la valeur future dun l ou celle, totale ou partielle, dune nappe de ls partir de la valeur prcdente de ses arguments. Exemples : BT01 <= VZ; -- connexion de 32 bits HC16 <= VZ(17 downto 2); -- connexion de 16 bits VZ <= x"A15F"; -- valeur immdiate hexadcimale Bien que cette forme dcriture ressemble celle des programmes informatiques, son comportement (sa smantique) est trs diffrent. Elle dcrit un rseau de fonctions boolennes interconnectes. Ce qui signie que : Ces instructions de connexion sont toujours valides (comme lest le matriel lectronique !). Il ny a pas de notion de point dexcution comme dans un programme informatique. Pour respecter la causalit physique, la valeur des signaux dnis par les instructions de connexion apparat un certain temps aprs celle des arguments des expressions qui les calculent. Ce temps peut tre explicitement spci par une clause after situe la n de linstruction ou tre implicite. Dans ce cas, il est gal une valeur t considre comme incommensurable vis--vis des temps de fonctionnement du systme dcrit. Il ny a aucun ordre de prsance entre les instructions de connexion. Lordre dcriture na aucune inuence sur leur comportement. Il est tout fait possible dutiliser un signal comme argument dune instruction crite avant celle qui dnit la valeur de ce signal. Les signaux ne doivent tre dnis quune seule fois (sinon il pourrait y avoir des conits). Toutefois, nous verrons ultrieurement comment rsoudre de tels conits. Les instructions de connexion peuvent tre arbitrairement complexes ce qui peut amener la suppression de signaux internes. La notion dinstructions toujours valides nest pas directement ralisable lors de la simulation du circuit sur un ordinateur. Elle peut tre simule de diffrentes manires : Soit par une excution vnementielle . Dans ce cas, une instruction est excute chaque fois que lun de ses arguments est modi. Par abus de langage, ce type de description VHDL est souvent appel data-ow.

Dunod La photocopie non autorise est un dlit.

Soit par une excution rptitive de lensemble des instructions jusqu ce que la valeur des signaux se stabilise. Les retards explicites ou t assurent le respect de la causalit dans le circuit dcrit en faisant en sorte que les effets se produisent toujours aprs les causes. Ce fonctionnement asynchrone est la base du mcanisme de simulation des descriptions VHDL. Le caractre incommensurable des retards t fait que ceux-ci peuvent saccumuler sans tre visibles. Cela permet de dire que VHDL utilise deux axes de temps (le temps simul et les t). Laccumulation des t ne correspond qu une approximation des retards technologiques cumuls. Elle peut tre diffrente des retards rels et ne doit donc pas tre fonctionnellement exploite. Par exemple : C <= A and B; Si les valeurs des signaux A et B sont respectivement retardes de t et de 2t par rapport une rfrence temporelle alors, la valeur de C peut subir une altration (ala) entre 2t et 3t. Dans un montage rel, les retards des portes seront diffrents et lala pourra ne pas exister ou apparatre un autre instant. Exemple : Description fonctionnelle de la cellule dadditionneur : architecture Dataflow of Full_Adder is signal S1, S2 : bit; begin Cout <= S2 or (X and Y) after 2ns; S2 <= S1 and Cin after 2ns; Sum <= S1 xor Cin after 3ns; S1 <= X xor Y after 3ns; end Dataflow; 8.3.3 Descriptions procdurales Cest une forme trs courante de description VHDL. Cest la forme dans laquelle les compilateurs transforment toutes les autres formes de description pour pouvoir les simuler. Une telle description consiste dcrire un ou des programmes dont lexcution simule le comportement du circuit. Elle consiste en : la liste des signaux internes ; la liste des programmes appels process qui simulent tout ou partie du circuit. Ces programmes sont constitus de : la dclaration des variables quils utilisent, qui ne sont que des intermdiaires de calcul, les instructions de simulation qui peuvent avoir des signaux et des variables comme arguments. Celles ci peuvent : . soit dnir la valeur de signaux (instructions de connexions), . soit dnir la valeur de variables (instructions procdurales). La structure dun processus na gnralement rien voir avec lorganisation du matriel dont il simule le fonctionnement.

Ces programmes sexcutent normalement, cest--dire de manire squentielle. Leur temps dexcution est suppos nul vis--vis du temps de simulation. Les conditions de dmarrage dun programme permettent de lassimiler globalement une super-instruction de connexion dune description fonctionnelle. Ce dmarrage seffectue : soit parce quun signal, spci dans une liste de sensibilit, varie ; soit parce que le programme tait mis en attente par une instruction wait et que cette attente est chue. Pendant lexcution du process, la valeur des signaux qui ont provoqu son dclenchement est celle postrieure la transition. La valeur des signaux modis par un process ne sera rellement actualise que t aprs linstant de son excution. La rutilisation dun signal qui vient dtre positionn dans un process portera sur lancienne valeur de ce signal et non pas sur celle qui rsulte de linstruction qui la positionn (erreur frquente !). Exemple : signal A : bit := 0; process (A) begin A<= 1; if A = 1 then ..... end process; Au premier tour du process, le test trouve une valeur de A gale 0, car son affectation 1 ne sera effective que t aprs la n de ce process. La smantique des instructions de connexion invoques dans un process est diffrente de celle des mmes instructions situes dans les parties fonctionnelles de la description. En effet, dans un process les connexions ne durent quun moment trs bref, linstant dexcution du process. Les signaux de destination de ces instructions sont donc isols pendant tout le reste du temps et ils se comportent comme des bascules. Lvolution dun process peut tre suspendue par des instructions wait. Celles-ci peuvent attendre :
Dunod La photocopie non autorise est un dlit.

loccurrence dune condition (wait until <condition>;) ; la variation dun signal dune liste de sensibilit (wait sensibilit>;) ; une dure spcie (wait for <dure>;).

on

<liste

de

La dure (en temps simul) de lexcution du process entre deux instructions wait est nulle. Toutefois les nouvelles valeurs des signaux ne sont effectives que t, ou un temps spci par une clause after, aprs cette excution. Lutilisation dune liste de sensibilit est exclusive de celle de linstruction wait. Lutilisation dune liste de sensibilit est quivalent lutilisation dune instruction wait sur cette mme liste au dbut de la description.

Les dtails de lexcution dun process, ainsi que la valeur de ses variables ne sont gnralement pas visibles via linterface dun simulateur car ils nont aucune correspondance physique. Exemple : Description procdurale de la cellule dadditionneur architecture Computationnal of Full_Adder is begin process (X, Y, Cin) -- liste de sensibilite variables s1, s2, s3 : bit; begin s1 := X xor Y; -- calcul de la variable s1 s2 := s1 and Cin; s3 := X and Y; Sum <= s1 xor Cin; -- definition des signaux de sortie Cout <= s2 or s3; end process; end Computationnal; 8.3.4 Descriptions mixtes Les trois types de descriptions (structurelles, fonctionnelles, procdurales) peuvent coexister dans une mme architecture. La dnition smantique de leurs actions sur les signaux les rend compatibles entre elles.

8.4

TYPES DES SIGNAUX ET DES VARIABLES

8.4.1 Types standard et drivs Les types des signaux et des variables peuvent tre : des types physiques simples (ls ou nappes de ls). Exemples : signal Z : bit; -- un simple fil signal A : bit_vector (0 to 15); -- une nappe de 16 fils variable B : bit_vector (32 downto 1); -- une nappe de 32 fils signal C : bit := 0; -- une valeur de repos gale 0 des types abstraits pour des signaux dont on ne souhaite pas encore prciser le codage : Type entier. Exemple : variable J2 : integer; Type boolen ( ne pas confondre avec le type bit !). Cest le type des conditions. Il est sans correspondance matrielle. Ses valeurs sont true et false. Type numr (celui-ci ncessite une dclaration pralable de type). Exemple :

type Com is (Marche, Arret, Attente); signal Commande : Com; Lutilisation de types abstrait est trs importante. Elle permet de retarder au maximum les choix techniques dans le processus de conception (manuel ou automatique). des types structurs qui reprsentent des nappes de ls composes de sous-nappes (ceux-ci ncessitent une dclaration pralable de type) Exemple : type Couleurs is (Rouge, Vert, Bleu); type Pixel is record lumin : bit_vector (7 downto 0); af : integer; cd : Couleur; end record; variable I4, I5 : Pixel; A := I4.af; I4.cd := Vert; I5 := I4; des structures bi-dimensionnelles (par exemple des mmoires) (qui ncessitent une dclaration pralable de type) Exemple : type mem is array (0 to 512) of bit; signal memoire :mem; Il faut remarquer que ces structures ne peuvent tre adresses que par des variables entires, ce qui rduit leur correspondance physique au seul cas de mmoires munies de dcodeurs (gure 8.2).

Variable entire
Dunod La photocopie non autorise est un dlit.

Tableau

dcodeur (implicite)
Figure 8.2 Adressage implicite dun tableau

En particulier, la description de la slection directe des lignes dune matrice par une nappe de ls suppose lintroduction dun matriel dencodage-dcodage parfaitement inutile.

Il est galement possible de dclarer des sous-types : Exemple : subtype word is bit_vector (15 downto 0); type mem is array (0 to 255) of word; type octet is range 0 to 255; et de donner un nom particulier un sous-ensemble (contigu) de ls dune nappe. Exemple (gure 8.3) : alias code_op : bit_vector (5 downto 0) is IR (15 downto 10);

IR 31 15 10 0

code_op
Figure 8.3 Rednition dun sous-champ dun bit_vector

8.4.2 Types IEEE La socit savante IEEE dvelopp de nouveaux types pour les variables et de nouvelles fonctions pour les manipuler. Ces nouveaux types permettent de mieux grer et dtecter les conits lectriques. Ce module (appel library) contient : Un package appel std_logic_1164 qui dnit un nouveau type ainsi que des fonctions de conversion et de dtection des fronts. Les oprateurs standard sont automatiquement tendus la manipulation de ces nouveaux types. Le type std_ulogic comporte 9 valeurs : 0 et 1 issus dune sortie forte L et H issus dune sortie faible (positionnement 0 et 1 via une rsistance) Z ltat de haute impdance (sortie isole) X ltat de conit entre deux sorties fortes W ltat de conit entre deux sorties faibles - un tat indiffrent (pour optimiser la logique)

Des packages appels numeric_bit et numeric_std qui dnissent des oprateurs arithmtiques qui oprent sur les bit_vector et sur les std_logic_vector interprts comme des nombres entiers.

8.5

EXPRESSIONS

Les expressions interviennent dans les instructions des descriptions fonctionnelles et dans lcriture des process pour dnir les nouvelles valeurs des signaux et des variables. Il est possible dutiliser des constantes dans lcriture de ces expressions. Celles-ci correspondent des connexions directes aux niveaux logiques 1 ou 0. pour les bit : 0 et 1 pour les bit_vector : Exemples : "001100" (constante binaire) X"AD01" (constante hexadcimale) Il est aussi possible de dclarer des constantes symboliques. Exemple : constant <nom> : <type> := <valeur>; 8.5.1 Attributs des signaux Ils correspondent lextraction de proprits des signaux laide de sufxes. Leurs valeurs dpendent du type du signal sur lequel porte le sufxe. Ils sont relativement nombreux et ils peuvent tre enrichis par lutilisateur. rsultat boolen sur des signaux : event (retourne true si la valeur du signal varie), stable (retourne true si la valeur du signal na pas vari), quiet (retourne true si le signal na aucune source (tat isol)) ; rsultat entier sur les tableaux, les vecteurs : left right (bornes gauches et droites dun tableau, dun vecteur), length (taille dun tableau, dun vecteur), range (couple des bornes dun tableau, dun vecteur). Exemple dutilisation : A <= Z when CLKevent; Z est (brivement) connect A lors de chaque variation de CLK (pratiquement, cette connexion dure t).

Dunod La photocopie non autorise est un dlit.

8.5.2 Oprateurs Les oprateurs qui sont utilisables dans les expressions sont : oprateurs boolens (sur les bit et bit_vector) not, and, or, xor, nor, nand oprateurs arithmtiques (sur les bit_vector de mme taille) (via une bibliothque particulire). Les poids forts sont ceux dclars gauche . +, -, - (unaire), *, /, mod (modulo), rem (reste division) oprateurs de dcalage sll (gauche), srl (droit), sra (arithmtique), rol (rotation gauche), ror (rotation droite) Concatnation de deux bit_vector A&B 8.5.3 Temps de transit Le temps de transit dune expression, sera indiqu par une clause after. Il reprsente celui du circuit combinatoire reprsent par lexpression. RES <= A xor B after 10ns; Le temps de transit sera donn en s, ms, us, ns, ps. Il sera de t si rien nest mentionn. Lexistence dun temps de transit obligatoire assure la causalit de la description. Il interdit la description de certains montages irralisables . La clause after est par dfaut inertielle, cest--dire quelle ne transmet que des variations de valeur dont la dure est suprieure au retard (gure 8.4).
valeur prise en compte

retard valeur prise en compte

ignore retard

Figure 8.4

Fonctionnement de la clause after inertielle

Il faut mentionner lexistence dune autre forme de la clause after appele transport qui correspond lutilisation dune ligne retard. S1 <= transport X xor Y after 3ns; Dans ce cas, toutes les variation du signal initial seront reproduites aprs le dlais indiqu.

8.6

INSTRUCTIONS DE CONNEXION CONDITIONNELLE

Il est possible de rendre conditionnelle une instruction de connexion, ce qui correspond lusage dun multiplexeur ou de portes 3 tats. 8.6.1 Multiplexeurs Une condition permet de choisir entre deux expressions pour dnir la valeur dun signal (gures 8.5 et 8.6). Exemple : U <= K when A=B else X when A>=B else Z
A,B K U X Z

Figure 8.5

Le multiplexeur correspondant

Dunod La photocopie non autorise est un dlit.

Une seconde forme permet de dcrire des multiplexeurs plus complexes. Exemple : with Z select D <= <expression1> when x"00", <expression2> when x"01" | x"02", <expression3> when others; La variable z doit tre numrable et non structure (record).

Z Exp1 D Exp2 Exp3

Figure 8.6

Le multiplexeur correspondant

8.6.2 Logique 3 tats et latches Une forme conditionnelle peut reprsenter une porte 3 tats si toutes les alternatives ne sont pas utilises. Dans ce dernier cas, Le comportement de VHDL fait que la connexion nest pas ralise et que le signal garde sa valeur prcdente jusqua ce quil soit de nouveau connect une expression. Cela ne correspond pas compltement au comportement habituel du matriel, puisquun l isol ne garde sa valeur par rtention capacitive quun bref instant qui dpend de limportance du courant de fuite. Exemple : Z <= A when (Clk=1); Z <= A when (Clk=1 and Clkevent); Les signaux A et Z ne sont connects que si la condition est vraie. Cette particularit de VHDL permet : de raliser des signaux sources multiples (bus). Ces sources doivent : soit tre mutuellement exclusives, soit un ventuel conit doit tre gr par une fonction spciale appele fonction de rsolution des conits ; aussi de raliser des latches dynamiques implicites. Cette confusion entre les latches et les signaux est regrettable. Elle nest leve que pour les types de signaux dit gards dont lutilisation est plus complexe. Remarque : Il est possible de raliser des latches statiques sans utiliser la rtention dynamique : D <= E when Ch else D; Il faut toutefois faire trs attention aux connexions conditionnes par des vnements (event). La connexion ralise nest pas instantane. Elle peut permettre des rebouclages asynchrones. Exemple : A <= A(0)& A(15 downto 1) when Clkevent and Clk = 1; Le signal A risque dtre dcal de plusieurs positions loccurrence de chaque transition montante de Clk.

8.6.3 Blocs Les blocs VHDL correspondent plusieurs usages : la dclaration de composants locaux constitus dinstructions fonctionnelles ou de processus. Il sagit alors de structurer la description : l interface du bloc peut tre explicite par une liste de ports, comme celle dune entit, le bloc peut utiliser des signaux locaux ; la possibilit de conditionner collectivement un ensemble dinstructions fonctionnelles par la mme condition. Les instructions concernes seront alors gardes : Par exemple : Basc : block(Clkevent and Clk=1) begin BA <= guarded Tr15; BB <= guarded Mu37; end block; la dclaration de signaux register et bus qui doivent obligatoirement tre gards. Ces signaux doivent tre munis de fonction de rsolution des conits, spciant leur valeur lorsque plusieurs sources sont simultanment actives, ou toutes dconnectes. Ce type de description est orient vers la logique monophase, alors que le langage permet de dcrire des latch par le simple dtournement des signaux normaux . Ces formes sont utilises par certains outils de synthse qui reconnaissent ainsi les registres et les bus.

8.7

COMPORTEMENT TEMPOREL DES DESCRIPTIONS

La smantique de VHDL peut rserver quelques surprises qui peuvent poser des problmes difciles localiser. 8.7.1 Intervalle temporel de dnition des signaux Un signal externe est dni sur une succession dintervalles [ti, ti+1[ sur lesquels il porte ses valeurs. Le test dun signal externe porte donc sur ses valeurs aprs ses transitions (gure 8.7).

Dunod La photocopie non autorise est un dlit.

a)

ti
Figure 8.7

b)

tj

a) Le signal vaut 1 en ti. b) Le signal vaut 0 en tj

La nouvelle valeur dun signal interne, dni linstant t, apparatra linstant t+t. Ceci signie que les signaux internes sont dnis sur des intervalles ]ti, ti+1]. Il existe donc un dcalage entre la dnition des signaux externes et internes. Ceci a vraisemblablement t fait pour viter la gymnastique intellectuelle qui consisterait devoir considrer les valeurs dun signal externe avant ses transitions. Il faut toutefois remarquer que le paradigme data-ow, utilis pour le dclenchement des process, fait que ceux-ci dmarrent sur la transition dun signal. Pendant leur excution, la valeur de ce signal sera donc celle aprs la transition, ce qui est cohrent avec le traitement des signaux externes (gure 8.8). Il est utile de rappeler que dans toute instruction de connexion VHDL, toutes les valeurs de ses arguments sont prises en ti, tandis que le rsultat est fourni en ti+t.

ti
Figure 8.8

ti+ t

Dcalage entre les arguments et le rsultat dune instruction de connexion

8.7.2 Cas des dispositifs temps de rponse trs long La description de dispositifs temps de rponse trs long (PLA, ROM, circuits combinatoires complexes) ncessite lutilisation de la clause after. Toutefois, son utilisation se heurte plusieurs difcults : Ce genre de dispositif fait appel des valeurs de retard explicites qui ne sont pas toujours connus lors des premires tapes de la conception dun systme. Il serait souhaitable de pouvoir seulement mentionner quun retard est trs long (gure 8.9).
point de calcul signaux rels tablis

temps d'tablissement signaux calculs

Figure 8.9 Diffrence entre les instants de production des signaux simuls et ceux issus dun circuit combinatoire long temps de rponse

La meilleure solution pour contourner ce problme consiste utiliser une valeur symbolique comme unit de temps de fonctionnement du systme :

constant PERIODE : time := 1us; (prenons arbitrairement 1 microseconde) ...... A <= f(Z) after 1.5*PERIODE; (le rsultat de f napparat quau bout de 1,5 priodes) Cette valeur de la priode devra tre imprativement rutilise lors de la simulation. Il faut toutefois remarquer que VDHL calculera la valeur de sortie au dbut du cycle et transportera le rsultat au moment o il doit tre utilis pour simuler le temps dtablissement. Cela ne donne aucune garantie sur le maintient des oprandes pendant toute cette priode. Une forme de retard stipulant que les oprandes doivent avoir t continment prsents depuis le dclenchement du calcul jusqu la sortie du rsultat aurait t utile. La valeur de sortie du dispositif est souvent considre comme indnie pendant la dure dtablissement. La simulation de ces dispositifs devrait aussi tenir compte de ce phnomne.

8.8

INSTRUCTIONS SPCIFIQUES AUX PROCESSUS

Les processus sont programms laide dun langage algorithmique qui correspond un sous-ensemble dADA. La programmation des processus na rien voir avec la structure matrielle quils reprsentent. 8.8.1 Instructions conditionnelles Premire forme : if A = B then <instruction>; end if; Deuxime forme : if not (C = 1) then <instruction1>; else <instruction2>; end if; Troisime forme : if Z >= W then <instruction1>; elsif A /= E then <instruction2>; else <instruction3>; end if; Les oprateurs de relation sont : =, /=, >=, <=.

Dunod La photocopie non autorise est un dlit.

8.8.2 Instruction de choix Exemple : case CX is when "001100" => <instruction1>; when "000000" | "110000" => NULL; --OU de deux conditions when others => <cas rsiduels>; end case; La variable CX doit tre numrable et non structure (record). Remarques : Comme un process sexcute en temps nul, le test des signaux, dont la variation la fait dmarrer, concerne les valeurs de ces signaux aprs cette transition. Le langage dcriture des process se veut puriste et nadmet pas de goto ce qui peut obliger une criture plus lourde des algorithmes. Labsence dinstructions est interdite en VHDL. Il faut utiliser linstruction null. 8.8.3 Instructions de bouclage Boucles for : Exemple : for i in 1 to Klength loop <instructions>; end loop; Lindice na pas tre dclar : Boucles while : Exemple : while <condition> loop <instructions>; end loop; Il est possible de programmer un bouclage inni : loop <instructions>; end loop; do lon sort par : exit [when <condition>]; (sortie de boucle) next [when <condition>]; (saut litration suivante) Les boucles situes dans les process ne servent pas dcrire des processus squentiels mais sont utilises pour parcourir des structures spatiales (bit_vector, tableaux.

8.8.4 Mise en attente dun processus Comme nous lavons dj mentionn, la mise en attente dun process se fait laide dinstructions wait. Lusage de celles-ci est exclusif de lutilisation dune liste de sensibilit. Les diffrentes formes de linstruction wait sont : wait [on <liste de sensibilit>] [until <condition>] [for <dure]; Linstruction wait suspend lexcution du processus jusqu ce quun signal change de valeur, ou que la condition soit vraie, ou pour la dure indique. Exemple de la gnration dune horloge polyphase : signal phase1, phase2 : bit; constant Non_recouv : time := 3ps; constant Duree_phase : time := 100ps; process begin phase1 <= 1; wait for Duree_phase; phase1 <= 0; wait for Non_recouv; phase2 <= 1; wait for Duree_phase; phase2 <= 0; wait for Non_recouv; end process; Exemple : La gnration dun signal dhorloge peut se faire de diffrentes manires. Par une instruction fonctionnelle : Clk <= not Clk after Demi_periode; Par un process :
Dunod La photocopie non autorise est un dlit.

process begin Clk <= not Clk after Demi_periode; wait on Clk; end process; Ou encore : process begin Clk <= not Clk; wait for Demi_periode; end process;

8.8.5 Filtrage des vnements lors de lexcution dun process La slection des vnements pour lesquels on dsire effectuer certaines oprations seffectue laide dinstructions if qui testent la valeur ou les attributs des signaux de dclenchement du process. Exemple : process (RST, CLK) -- demarrage sur toutes les variations de RST et CLK begin ............... -- filtrage des fronts avants de CLK if (CLKevent and CLK=1) then A <= B; end if; ............... end process; 8.8.6 Choix du front de dclenchement dun process
Dclenchement sur un front montant

Exemple : process(Clk) -- Declenchement a chaque transition begin if Clk=1 then -- Filtrage des montees 1 <corps du process> end if Cela peut aussi scrire : process begin wait until clkevent and Clk=1; -- Attente montee 1 <corps du process>
Dclenchement sur un front descendant

Exemple : process(Clk) -- Declenchement a chaque transition begin if Clk=0 then -- Filtrage descente 0 <corps du process> Cela peut aussi scrire : process begin wait until clkevent and Clk=0; -- Attente descente 0 <corps du process>

Comme lexcution du process se droule juste aprs la transition de Clk, la valeur de ce signal pendant lexcution est celle aprs la transition.

8.9

DESCRIPTIONS COMPORTEMENTALES

Il sagit dun type de description dans lequel on souhaite dcrire le comportement temporel dun organe complexe sous la forme dune suite dactions rythmes par une horloge. Pour cela, on suppose un squencement rel entre des instructions qui manipulent des signaux. Malheureusement, VHDL ne permet pas lcriture de ce type de description. La solution habituellement utilise consiste utiliser un process dans lequel on prcise le squencement laide dinstructions wait ce qui est trs lourd ! Une autre possibilit consiste dtourner un simple process dont on utilisera le squencement descriptif . Ce process sera dclench par une horloge macroscopique sans ralit physique. Dans ce cas, la squence se trouvera donc tre exprime en un temps simul nul ! Pour crire une telle description, il faudra bien prendre soin de recopier les signaux dans des variables au dbut de lexcution pour pouvoir les manipuler librement, puis de les mettre jour la n. Les variables complexes, telles que des mmoires, ne seront pas recopies si leur valeur nest modie quau plus une fois pendant chaque excution. Nous verrons une telle description dans le chapitre consacr la conception algorithmique.

8.10 FONCTIONS
Il est possible dutiliser des fonctions (dclares ou prises dans une bibliothque) dans les expressions. Leur excution simule le fonctionnement dun rseau combinatoire. Lexcution dune fonction se produit chaque modication de lun de ses arguments (paradigme data-ow) et laffectation du rsultat se produit donc t aprs lexcution de la fonction (ou plus tard si lon utilise une clause after). Exemple : Transformation bit_vector -> entier (pour indicer les tableaux) :
Dunod La photocopie non autorise est un dlit.

A <= memoire(to_natural(Adresse)); (bibli spcique) Test de nullit dun bit_vector : signal Z : bit; Z <= Is_zero(Adresse); (fonction locale ) 8.10.1 Programmation des fonctions Les fonctions sont des programmes squentiels. Elles utilisent les mmes instructions que les processus. Par rapport ceux-ci, elles doivent prsenter des caractres de gnralit. Par exemple, la taille de leurs arguments ne doit pas tre spcie et la fonction doit donc tre capable de sadapter toutes les tailles possibles.

Comme pour un process, la programmation dune fonction na rien voir avec la structure matrielle quelle reprsente. Exemple dune fonction qui retourne une valeur de type bit suivant quun bit_vector est nul ou non : function Is_zero ( a : bit_vector ) return bit is begin for i in arange loop if a(i)=1 then return 0; end if; end loop; return 1; end Is_zero; Cette fonction admet nimporte quel bit_vector comme argument. La programmation est indpendante de sa taille. 8.10.2 Fonctions de rsolution de conits Celles-ci sont gnralement utilises pour rsoudre les cas o plusieurs sources veulent dnir simultanment la valeur dun signal. Elles sont utilises pour reprsenter des bus ralisant des OU ou des NI de connexion. Elles peuvent aussi tre utilises pour donner une valeur ces signaux lorsque aucune source ne les excite (cas des registres). Exemple (cas dun bus ralisant un OU de connexion) : function wired_or (input : bit_vector) return bit is begin for i in inputrange loop if input(i)=1 then return 1; end if; end loop; return 0; end wired_or; Largument de la fonction est un bit_vector auxiliaire, gnr automatiquement pour reprsenter ltat de toutes les sources du bus. Cette fonction est gnrale. Elle nest pas spcique un signal donn. Son utilisation doit tre prcise lors de la dclaration dun bus. Exemple : signal B : wired_or bit;

8.11 PACKAGES
Ceux-ci sont utiliss pour dclarer des types et des fonctions globales. Ils permettent, entre autres, dutiliser des types dclars dans les connexions dune entity. package <nom> is <dclaration de types globaux>

<entte de fonctions globales> end <nom>; package body <nom> is <corps des fonctions> end <nom>; Le corps dun package est inutile si celui-ci ne contient que des dclarations de type. 8.11.1 Mise en uvre des packages Lutilisation des packages est propre chaque entity. Les instructions library et use doivent tre rptes avant chaque entity. Les packages peuvent tre : soit dans le mme chier que la description : use work.<nom du package>.all; (.all pour utiliser la totalit du contenu du package) soit dans une bibliothque : library <nom de bibliothque>; use <nom de bibliothque>.<nom du package>.all; Exemple : Dclaration de constante et de types dans un package : package N_types is constant PERIODE : time := 1us; -- priode arbitraire subtype word is bit_vector(31 downto 0); -- mots de 32 bits type COM is (Marche, Arret, Veille); -- commande non code end N_types; -- utilisation des types globaux dans lentit suivante use work.N_type.all; entity My_box is port( IN1 : in word; -- entree de 32 bits Fonction : in COM; -- entree non encore code ......... architecture AR102 of My_box is signal Z : word; ... U <= Z xor IN1 after 1.5*PERIODE;

Dunod La photocopie non autorise est un dlit.

8.12 DUPLICATION ET PARAMTRISATION DU MATRIEL


8.12.1 Structures vectorielles et matricielles La description dun dispositif matriel constitu par la rptition linaire ou matricielle dun mme motif peut tre dcrite conomiquement laide dun petit programme de gnration utilisant une instruction particulire generate. Le programme de gn-

ration est constitu dune ou de plusieurs boucles for generate imbriques. Des instructions if generate servent isoler les irrgularits de la duplication (par exemple les premiers et les derniers lments). Chaque instruction for generate ou if generate doit tre tiquete et termine par un end generate suivit du rappel de cette tiquette. Une boucle for generate duplique les composants quelle invoque. Elle donne le mme nom toutes les copies. Exemple : signal lien : bit_vector(1 to taille-1); ...... module : for i in 1 to taille generate cond : if i<taille generate DecadeB : decade port map(, , ,lien(i)); end generate cond; n : if i=taille generate DecadeF :decade port map(, , ,sortie); end generate fin; end generate module; Malheureusement, cette construction automatique est trs limite. Elle ne peut agir lintrieur mme des instructions ni dans la dnition des constantes, ni dans lcriture des noms. 8.12.2 Paramtrisation du matriel Il est possible de dcrire en VHDL du matriel gnrique qui peut tre adapte chaque cas dutilisation (par exemple la dimension dun registre). Cela peut tre obtenu par la clause generic qui permet de dcrire la liste des paramtres utiliss pour dcrire une telle entit. Exemple : FIFO paramtrable. entity FIFO is generic( Larg : integer := 8; -- valeur par dfaut Long : integer); port( Entree : in bit_vector(Larg 1 downto 0); .... Lors de linstantiation de cette entit, La valeur des paramtres sera donne par une clause generic. Exemple : FIFO de 5 mots de 32 bits. FIFO1 : FIFO generic( Larg => 32, Long =>5) port map (IN1,... Gnralement, la gnricit et la gnration algorithmique de matriel vont de pair. Toutefois, les limitations de ces mcanismes en rduisent beaucoup lintrt. Un vritable mcanisme de macro-gnration syntaxique aurait t prfrable.

8.13 MATRIEL COMPLMENTAIRE


Pour permettre la simulation de certaines descriptions, il est quelquefois ncessaire de leur adjoindre des signaux et des instructions qui ne correspondent pas au matriel souhait. Cela peut avoir deux origines : Le contournement dune particularit smantique gnante de VHDL. Ce cas doit tre, si possible, vit. Par exemple, le fait que les tableaux ne puissent tre indics que par des variables entires et non par des bits_vectors. Lamlioration de laccs au matriel simul. Ces extensions correspondent alors au matriel dessai qui est souvent utilis lors du test dun montage lectronique. Il ne faut pas oublier de lenlever lorsque la description est au point. 8.13.1 Environnement de simulation De mme que le test dun montage lectronique fait appel des appareils de laboratoire (gnrateurs de signaux, oscilloscopes, analyseurs logiques, la simulation dune entity VDHL fait appel des fonctions spciques du simulateur pour : dnir la forme des signaux dexcitation ; visualiser les signaux de sortie et internes ; Les variables des process nayant aucune ralit physique ne peuvent pas tre visualises par les simulateurs.

BIBLIOGRAPHIE
[1] R. Airiau, J.-M. Berg, V. Olive, J. Rouillard, VHDL, Presses Polytechniques et Universitaires Romandes.

Dunod La photocopie non autorise est un dlit.

Vous aimerez peut-être aussi