Sie sind auf Seite 1von 20

IntroductionVHDL

Initiation au conception des circuits


Language VHDL Dc 2009

Labrviation VHDL : VHSIC: Very High Speed Integrated Circuit Hardware, ardware Description, escription Language Ce langage a t crit dans les annes 70 pour raliser la simulation de circuits lectroniques. Etendu ensuite pour permettre la conception (synthse) de circuits logiques programmables (P.L.D. Programmable Logic Device). VHDL ( et VERILOG) )p permettent de matrialiser les structures lectroniques q dun circuit. Les instructions se traduisent par une configuration logique de portes et de bascules qui est intgre lintrieur des circuits. VHDL ( et VERILOG) sont des langages de haut niveau et font alors abstraction des contraintes technologies des circuits. Gnrent du code p portable, , cest dire quune q description p crite p pour un circuit peut tre facilement utilise pour un autre circuit.

IntroductionVHDL
Le VHDL est le fruit du besoin de normalisation des langages de description de matriel (Premire norme IEEE1076-87 en dcembre 1987). Au dbut des annes 80, le ministre de la dfense des Etats Unis (D.O.D) confiait le soin Intermetrics, IBM et Texas Instruments de mettre au point ce langage. Lobjectif tait bien sre de sassurer une certaine indpendance vis vis des fournisseurs de matriels et de logiciels et ainsi une assurance de maintenabilit des quipements. En 1994 la version IEEE 1076-93 suivie du standard IEEE 1164 fut tablie. En 1995, afin de normaliser les mthodes de modlisation des retards des circuits ASIC ou FPGA, de grands industriels se sont associs dans la VITAL VITAL initiative (VHDL Initiative Toward ASIC Libraries) fournissant des bibliothques normalises VITAL. Ceci est concrtis par la norme IEEE 1076.4 Trs rcemment, le VHDL a connu une nouvelle extension avec la premire norme IEEE-1076.1-1999 IEEE 1076 1 1999 d du l langage d de modlisation dli i mixte i et multili technologique VHDL-AMS

Organisationfonctionnellededveloppement

Entre schmatique

Entree syntaxique LangageVHDL

Diagramme dtats

Organisationfonctionnellededveloppement
Entre schmatique
VHDL

IntroductionVHDL
Au p plus haut niveau dabstraction, un systme digital est vu comme une bote noire avec : un interface avec lextrieur l extrieur -un -Un contenu En VHDL la bote noire est nomm entit (entity) j tre associe avec au moins une description p de Une entit doit toujours son contenu: cest larchitecture ( architecture )

Entree syntaxique LangageVHDL


VHDL VHDL

Diagrammedtats

Modelsim

Vrification des erreurs de syntaxe


VHDL

Simulation fonctionnelle
STIMULI Ou TESTBENCH

Leonardo Spectrum

S th Synthse
EDIF, XNF

VHDL STIMULI Ou TESTBENCH

Simulation Aprs synthse

Xilinx Integrated Software Environnement ISE

O ti i ti Optimisation Placement / routage dans le circuit choisi


JEDEC

VHDL, SDF

Simulation temporelle
STIMULI Ou TESTBENCH

La programmation du circuit se fait soit: En utilisant un programmateur En tlchargeant le code JEDEC sur lobjet technique (JTAG ou ISP)

IntroductionVHDL

1- Lentit ( ENTITY )
Elle dfinit les entres et sorties : Exemple : Un dcodeur 1 parmi 4 4.
library ieee;Use ieee.std_logic_1164.all; Useieee.numeric_std.all; Commentaires, en VHDL ils commencent par - dcodeur Unparmiquatre entity DECOD1_4 is port( p (IN0, ,IN1:instd_logic; g ; D0,D1,D2,D3:outstd_logic); endDECOD1_4; Dclarationdesbibliothques

Dclaration de lentit l entit du dcodeur Corres pondance schmatique

2-Larchitecture ( ARCHITECTURE )

1- Lentit ( ENTITY )
library ieee;Use ieee.std_logic_1164.all; Useieee.numeric_std.all;

Dclarationdesbibliothques

Commentaires, en VHDL ils commencent par - dcodeur Unparmiquatre entity i DECOD1_4 DECOD1 4 is i port(IN0,IN1:instd_logic; D0,D1,D2,D3:outstd_logic); endDECOD1_4; DECOD1 4; Dclaration de lentit du dcodeur Corres pondance schmatique

Dclarationdelarchitecturedu dcodeurCorrespondance schmatique

Dclarationdelarchitecturedu dcodeurCorrespondance schmatique

architecture DESCRIPTIONofDECOD1_4is begin D0 <=(not(IN1)and not(IN0)); D1 <= < (not(IN1)and IN0); D2 <=(IN1andnot(IN0)); D3<=(IN1andIN0); end DESCRIPTION;

architecture DESCRIPTIONofDECOD1_4is begin D0 <=(not(IN1)and not(IN0)); D1 <=(not(IN1)and IN0); D2 < <=(IN1andnot(IN0)); D3<=(IN1andIN0); end DESCRIPTION;

10

Dclarationdesbibliothques.
Toute description p VHDL utilise p pour la synthse y a besoin de bibliothques. L IEEE ( I nstitut of E lectrical and E lectronics E ngineers) les a normalises li et t plus l particulirement ti li tl la bibli bibliothque th IEEE1164 . Ell Elles contiennent les dfinitions des types de signaux lectroniques, des fonctions et sous programmes permettant de raliser des oprations arithmtiques et logiques,

Dclarationdelentitetdesentres/sorties
Elle permet de dfinir le NOM de la description VHDL ainsi que les entres et sorties utilises utilises, linstruction l instruction qui les dfinit cest c est port : Syntaxe:
entity NOM_DE_L_ENTITE is port ( Description des signaux dentres /sorties ); end NOM_DE_L_ENTITE;

Exemple :

entity SEQUENCEMENT is port (CLOCK : in std_logic; RESET : in std_logic; Q : out std_logic_vector(1 downto 0));

end SEQUENCEMENT; Remarque : Aprs la dernire dfinition de signal de linstruction port il ne faut jamais mettre de point virgule. 11 12

Dclarationdelentitetdesentres/sorties
Linstruction port : Syntaxe : NOM_DU_SIGNAL : sens type Exemple : CLOCK : in BUS : out std_logic; std_logic_vector (7 downto 0);

Dclarationdelentitetdesentres/sorties
Le NOM DU SIGNAL
- in : pour un signal en entre entre. - out : pour un signal en sortie. - inout : pour un signal en entre sortie - buffer : pour un signal en sortie mais utilis comme entre dans la description.

On doit dfinir pour chaque signal : - Le NOM_DU_SIGNAL, NOM DU SIGNAL - Le sens et - Le type. yp

13

14

Dclarationdelentitetdesentres/sorties
LE TYPE Le TYPE utilis pour les signaux dentres / sorties est : - le std_logic pour un signal. - le std_logic_vector std logic vector pour un bus compos de plusieurs signaux signaux. Par exemple un bus bidirectionnel de 5 bits scrira : LATCH : inout std_logic_vector std logic vector (4 downto 0) ; O LATCH(4) correspond au MSB et LATCH(0) correspond au LSB . Les valeurs que peuvent prendre un signal de type std_logic sont : - 0 ou L : pour un niveau bas. - 1 ou H : pour un niveau haut. - Z Z : pour tat haute impdance impdance. - - : Quelconque, cest dire nimporte quelle valeur.

Dclarationdelarchitecture
Correspondante lentit : description du fonctionnement
Larchitecture dcrit le fonctionnement souhait pour un circuit ou une partie du circuit. p -Le fonctionnement dun circuit est gnralement dcrit par plusieurs modules d l VHDL (couple ( l ENTITE/ARCHITECTURE). ENTITE/ARCHITECTURE) Larchitecture L architecture tablit travers les instructions les relations entre les entres et les sorties. On peut avoir un fonctionnement purement combinatoire, squentiel voire les deux squentiel et combinatoire.

15

16

Exemple

Exemple
Description VHDL dun d un dcodeurs BCD 7 Segments
Dcodeurs7segments entityDEC7SEG4 is port (DEC :instd_logic_vector(3downto 0); SEG:outstd_logic_vector(0downto 6)); end DEC7SEG4; architectureDESCRIPTION of DEC7SEG4 is begin SEG <="1111110"when DEC =0 else "0110000"when DEC =1else "1101101"when DEC =2 else l "1111001"when h DEC =3 else l "0110011"when h DEC =4 else "1011011when DEC =5else "1011111"when DEC =6 else"1110000"when DEC =7else "1111111"when DEC =8 else "1111011when DEC =9else ""; end DESCRIPTION; 17 18

D Description i ti VHDL dun dcodeurs BCD 7 Segments

Exemple 2 : Dcodage dadresses


Mmoire R0M FFFF RAM0 0000 RAM1 0400 RAM2 0800 RAM3 0C00 ( ) (8K) (1K) (1K) (1K) (1K)

Exemple 2 : Dcodage dadresses


Dcodaged dadresses adresses Libraryieee; Use ieee.std_logic_1164.all; _ ; Use ieee.numeric_std.all; entity DECODAGE is port(A15,A14,A13,A12,A11,A10 RAM0 :outstd_logic; RAM1 :outstd_logic; RAM2 :outstd_logic; RAM3 :outstd_logic; ROM :outstd_logic; INTER1 :out std_logic; INTER2 :outstd_logic; d l i INTER3 :outstd_logic); end DECODAGE;

Entres Sorties ( ) INTER1 8000 (2)


INTER2 A000 (2) INTER3 C000 (16)

: instd_logic;
Mmoire R0M entre t RAM0 entre RAM1 entre RAM2 entre t RAM3 entre

Mmoire R0M entre RAM0 entre RAM1 entre RAM2 entre RAM3 entre

E000 0000 0400 0800 0C00

FFFF 03FF 07FF 0BFF 0FFF

(8K) (1K) (1K) (1K) (1K)

E000 0000 0400 0800 0C00

FFFF 03FF 07FF 0BFF 0FFF

(8K) (1K) (1K) (1K) (1K)

19

20

Dcodage dadresses (suite )


architecture DESCRIPTIONof DECODAGEis signalADRESSE:std_logic_vector(15downto 0); g begin ADRESSE<=A15&A14&A13&A12&A11&A10&""; definitiondubusdadresses ROM <='0'when (ADRESSE >=x"E000")and (ADRESSE <=x"FFFF")else '1'; RAM0 <='0'when (ADRESSE >=x"0000")and (ADRESSE <=x"03FF")else '1'; RAM1 <='0'when (ADRESSE >=x"0400")and (ADRESSE <=x"07FF")else '1'; RAM2 <='0' when(ADRESSE >=x"0800")and (ADRESSE <=x"0BFF")else '1'; RAM3 <='0'when (ADRESSE >=x"0C00")and (ADRESSE <=x"0FFF")else '1'; INTER1 <='0'when (ADRESSE ( >=x"8000") )and (ADRESSE ( <=x"8001") )else '1'; INTER2 <='0'when (ADRESSE >=x"A000")and (ADRESSE <=x"A001")else '1'; INTER3 <='0'when (ADRESSE >=x"C000")and(ADRESSE <=x"C00F")else '1'; endDESCRIPTION; 21

Les Instructions de base


mode concurrente
Quest ce que le mode concurrent ? Pour une description VHDL toutes les instructions sont values et affectent les signaux de sortie en mme temps. La description gnre des structures lectroniques lectroniques, cest c est la grande diffrence entre une description VHDL et un langage informatique classique. Lordre L d des d instructions i t ti concurrentes t est t indiffrent i diff t Les objets concurrents sont relis entre eux par des signaux Pour le compilateur, compilateur chaque objet concurrent est un processus. Se situent entre BEGIN et END de larchitecture

22

Mode concurrente
Exemple :dcodeur 1 parmi 4, lordre dans lequel seront crites les instructions na n a aucune importance importance.
architecture DESCRIPTION ofDECOD1_4 isbegin D0<=(not(IN1)andnot(IN0)); 1reinstruction D1 <=(not(IN1)and IN0); 2meinstruction D2 <=(IN1 andnot(IN0)); 3meinstruction (IN1 andIN0); ); 4meinstruction D3 <=( end DESCRIPTION; Larchitecturecidessousestquivalente: architectureDESCRIPTIONofDECOD1_4 DECOD1 4is begin D1 <=(not(IN1)and IN0); 2emeinstruction D2 <= (IN1 and not(IN0)); 3emeinstruction D0 <=(not(IN1)ANDnot(IN0)); 1erinstruction D3 <=(IN1 AND IN0); 4imeinstruction end DESCRIPTION; 23 Linstruction D0 t dplace la troisime ligne, la synthse de cette architecture est quivalente la premire.

Example: 2-to-4 decoder


entity decoder is port ( A : in std_logic_vector(1 downto 0); Z : out t std_logic_vector(3 td l i t (3 downto d t 0) ); End decoder; Z(3) A(1) A(0) Z(2) Z(1) Z(0)

F Functio onality

architecture when_else of decoder is b i begin Z <= "0001" when A = "00" else "0010" when A = "01" else "0100" when A = "10" else "1000" when A = "11" else "XXXX"; end architecture when_else;

Interface

A(1..0) 0 0 1 1 0 1 0 1 0 0 0 1

Z(3..0) 0 0 1 0 0 1 0 0 1 0 0 0

24

Example :Multiplexeur 4 -> 1


entity mux is port ( a, b, c, d: in std_logic; s : in std_logic_vector(1 downto 0); y :out std_logic); end entity mux;
y

LesSignaux(introduction)
Pour connecter les diffrents composants dun systme, VHDL utilise les signaux (signal), (signal) quivalent des fils ou cbles dinterconnexion d interconnexion dans le monde rel caractris par Un type dclar Un tat en rfrence ce type Un ou plusieurs pilotes (driver) qui lui sont associs Le pilote du signal contient une liste de couples tat tat-heure heure celle-ci celle ci tant compte relativement lheure actuelle du simulateur Pilote du signal : s <= 0, 1 AFTER 10 ns,0 AFTER 25 ns ; placera dans le pilote de s Le pilote est en fait une mmoire associe au signal.
25

a b c d

S(1)

S(0)

architecture mux1 of mux is begin process (a, b, c, d, s) begin case s is when "00 => y <= a; when "01" => y <= b; when "10" => y <= c; when h "11" => y <= d d; end case; end process; end architecture mux1;

Heure 0 10 25

tat 0 1 0

26

Affectation de signal
E Exemple l : S1 <= S2 or S3 after ft 5 ns;

LesSignaux(introduction)
On peut associer certains attributs aux signaux, qui produisent une valeur. Deux exemples dattributs valeur d attributs sont: - s'event : vrai si un vnement arrive pendant le delta prsent (cest--dire, si le signal s change de valeur) - s'active : vrai si une transaction arrive pendant le delta prsent (cest--dire, si le signal s est valu, quil change ou pas de ) valeur) Un signal est toujours global une architecture donne Le signal nest modifi qu la fin du cycle, alors que la variable est modifie tout de suite. Comme le signal nest n est modifi qu qu la fin du cycle, lutilisation l utilisation des signaux augmente le nombre de delta-cycles alors que les variables naffectent pas le nombre de delta-cycles.

27

28

LesSignauxetvariables

LesSignauxetvariables

29

30

LesOprateurs
1 ) Laffectation simple : <=
Dans une description VHDL, VHDL c cest est certainement loprateur l oprateur le plus utilis. utilis
- il permet de modifier ltat dun signal en fonction dautres signaux et/ou dautres oprateurs. Exemple : S1 <= E2 and E1 ;

LesOprateurs
Exemple
Library ieee; Use ieee.std_logic_1164.all; entity AFFEC is port( E1,E2 E1 E2 :in std_logic; std logic; BUS1,BUS2,BUS3:out std_logic_vector(3downto0); S1,S2,S3,S4 :out std_logic); end AFFEC; architecture DESCRIPTION ofAFFEC is begin ; S1=1 S1 <='1'; S2 <='0'; S2=0 S3<=E1; S3=E1 S4 <='1'when (E2 ='1')else 'Z'; S4=1siE1=1sinonS4 prendlavaleurhauteimpdance BUS1<="1000"; BUS1="1000" BUS2<=E1 &E2 &"10"; BUS2=E1&E2&10 BUS3<=x"A"; valeurenHEXA>BUS3=10(dc) end DESCRIPTION;

Les valeurs numriques que lon peut affecter un signal sont les suivantes :
1 ou H pour un niveau haut avec un signal de 1 bit. 0 ou L pour un niveau bas avec un signal de 1 bit. Z pour un tat haute impdance avec un signal de 1 bit. - pour un tat quelconque, cest dire 0 ou 1. Cette valeur est trs utilise avec les i instructions i : when h else l et with i h . Select S l .

- Pour les signaux composs de plusieurs bits on utilise les guillemets " " , voir les exemples ci dessous : - Les bases numriques utilises pour les bus peuvent tre :
BINAIRE, HEXA, OCTAL, exemple : BUS <= "1001" ; exemple : BUS <= X X"9" 9 ; exemple : BUS <= O"11" ; -- BUS = 9 en dcimal -- BUS = 9 en dcimal -- BUS = 9 en dcimal

31

32

LesOprateurs
2 ) Oprateur de concatnation : &. Cet oprateur permet de joindre des signaux entre eux . Exemple p :
SoitAetBdetype3bitsetS1detype8bits A="001" 001 etB= ="110" 110 S1 <=A &B &"01"; S1prendralavaleursuivanteaprscetteaffectation S1="00111001"

LesOprateurs
3) Oprateurs logiques.
Oprateur ET NONET OUor NONOU OUEXCLUSIF NONOUEXCLUSIF NON VHDL and nand Remarque : Pour raliser des dcalages logiques en synthse logique, il est prfrable dutiliser d utiliser les instructions suivantes : Dcalage droite :
SiAestdetypestd_logic_vector(7 std logic vector(7downto 0) S1 <=0&A(7downto 1); dcalagedunbitdroite S1 <="000"&A(7downto 3); dcalagedetroisbitsdroite

nor xor xnor not DECALAGEAGAUCHEsll DECALAGEADROITEsrl ROTATIONAGAUCHErol ROTATIONADROITE ror

Dcalage gauche :
SiAestdetypestd_logic_vector(7downto 0) S1 <=A(6 downto 0)&0; dcalagedunbitgauche

ValeurdeA001

ValeurdeB110

33

S1 <=A(4downto 0)&"000"; dcalagedetroisbits Exemples : gauche h S1 <=A sll 2; S1=Adcalde2bitsgauche. S2 <=A rol 3; S2=Aavecune rotationde3bitsgauche S3<=not(R); S3=R 34

LesOprateurs
4) Oprateurs arithmtiques
Oprateur VHDL Oprateur VHDL ADDITION + SOUSTRACTION MULTIPLICATION * DIVISION / Remarque N1 : Pour pouvoir utiliser les oprateurs ci-dessus il faut rajouter les bi- bliothques suivantes au dbut du fichier VHDL : Use ieee.numeric_std.all ; Use ieee.std_logic_arith.all ; Exemples : S1 <= < A 3; S1=A 3 On O soustrait t it3la l valeur l d del lentre t /signal i lA S1 <= S1+ 1; Onincrmentede1lesignalS1 Remarque N2 lutilisation de ces oprateurs avec des signaux comportant un nombre de bits important peut gnrer de grandes structures lectroniques. Exemples : S1 <=A * B ; S1=AmultipliparB:AetBsontcodssur4bits S2 <=A / B ; S2=AdivisparB:AetBsontcodssur4bits 35

LesOprateurs
5) Oprateurs relationnels
Oprateur Egal Infrieur Suprieur VHDL = < >

Non gal /= / Infrieur ou gal <= Suprieur ou gal >=

Ils permettent de modifier ltat dun signal ou de signaux suivant le rsultat dun test ou dune condition. En logique combinatoire ils sont souvent utiliss avec les instructions : - when else - with . Select .

36

Les instructions concurrentes


1) Affectation conditionnelle :
Cetteinstructionmodifiel ltat tatd dun unsignalsuivantlersultatdune d unecondition logiqueentreunoudessignaux,valeurs,constantes.
SIGNAL<=expressionwhen condition [elseexpressionwhen condition ] [elseexpression]

Les instructions concurrentes


Affectation conditionnelle Exemple : OUT <= S2 when cond1 else S3 when cond2 else S4;

Remarque:l linstruction instruction[elseexpression]estfortementconseille,ellepermetde


dfinirlavaleurduSIGNAL danslecasolaconditionnestpasremplie.
-- Structure evolue dun -multiplexeur 4 vers S2 <= E1 when (SEL= E2 when (SEL= E3 when (SEL= E4 when (SEL= else 0; 0; 1 00 ) 01 ) 10 ) 11 )

Exemple l N1: S1prendlavaleurdeE2quandE1=1sinonS1prendla valeur0 S1 <=E2 when (E1=1)else 0; Schmacorrespondant p


37

Schma correspondant aprs synthse 38

Les instructions concurrentes


2) Affectation slective Cetteinstructionpermetdaffecter
diffrentesvaleursunsignal,selonlesvaleursprisesparunsignalditde slection.
withSIGNAL_DE_SELECTIONselect SIGNAL <=expressionwhenvaleur_de_selction, [expressionwhenvaleur_de_selction,] [expression [ p whenothers] ]; Remarque:linstruction[expressionwhenothers]nestpasobligatoiremais fortementconseille,ellepermetdedfinirlavaleurduSIGNALdanslecaso laconditionnestpasremplie. Multiplexeur4vers1 withSEL select Remarque:whenothersestncessairecaril S2 <= < E1 when h "00", "00" fauttoujoursdfinirlesautrescasdusignalde E2 when "01", slectionpourprendreencomptetoutesles E3 when "10", valeurspossiblesdeceluici. Exemple 1 E4 when"11" 11 , '0'whenothers;

Les instructions concurrentes


2) Affectation slective
with CODE select OUT < <= S1 after ft 5 ns when h val1, l1 S2 after 5 ns when val2, ......; ;

39

40

Les instructions concurrentes


Conclusion
Les descriptions prcdentes donnent le mme schma schma,. Ltude des deux instructions montre toute la puissance du langage VHDL pour dcrire un circuit lectronique en effet si on avait t oblig dcrire les quations avec des oprateurs de base pour chaque sortie sortie, on aurait eu les instructions suivantes : S2 <=(E1 andnot(SEL(1))andnot (SEL(0)))or(E2 andnotSEL(1)and (SEL(0))or(E3and SEL(1)andnot (SEL(0)))or (E4 and SEL(1)and SEL(0)); L Lquation i l logique i ci-dessus id d donne aussi i le mme schma, mais elle est peu comprhensible, cest pourquoi on prfre utiliser tili les l instructions i t ti VHDL volues l 41

Les instructions concurrentes


Exemple : Affectation slective avec les autres cas forcs 0
Library ib i ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; U ieee.std_logic_unsigned.all Use i td l i i d ll ; entity TABLE1 is port (E1,E2 :in std_logic; SEL :in std_logic_vector(1 std logic vector(1downto0); S2 :out std_logic); endTABLE1; architecture DESCRIPTIONofTABLE1 is begin with SEL select S2 < <=E1 when "00", 00 , E2when "01", '0'whenothers; PourlesautrescasdeSELS2 prendralavaleur0logique end DESCRIPTION;

Schmacorrespondant aprssynthse:

42

Les instructions concurrentes


Exemple : Affectation slective avec les autres cas une valeur quelconque -.
Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; ieee std logic unsigned all; entity TABLE3 is port (E1,E2 :in std_logic; SEL :instd_logic_vector(1 std logic vector(1downto 0); S2:out std_logic); end TABLE3; f TABLE3 is architecture DESCRIPTION of begin with SELselect S2<=E1when "00", E2when "01", ''whenothers; PourlesautrescasdeSELS2 prendralavaleurquelconque end DESCRIPTION;

Les instructions squentielles


le langage VHDL propose un jeu trs complet d'instructions squentielles q identiques q celles q que l'on trouve dans les langages g g de programmation volus C++, Pascal,etc P Probleme bl ces types d'instructions ne peuvent tre utiliss pour dcrire les phnomnes ( p (volution de signaux g indpendants) p )q que l'on rencontre dans les montages base de composants logiques sol solution tion le langage VHDL propose une solution simple qui consiste crer g des instructions des ensembles appels process, regroupant squentielles et se comportant, d'un point de vue externe, comme des instructions concurrentes

Schmacorrespondant aprssynthse:

43

44

Les instructions squentielles


Exemple d'quivalence entre deux descriptions, l'une base
d instructions concurrentes et l'autre d'instructions l autre base d'instructions d instructions squentielles regroupes au sein d'un

Les instructions squentielles


1) Dfinition dun PROCESS.
Un process est une partie de la description dun d un circuit dans laquelle les instructions sont excutes squentiellement. Il permet deffectuer des oprations sur les signaux en utilisant les instructions standard de la programmation structure comme dans les systmes microprocesseurs. Lexcution L excution dun d un process est dclenche par un ou des changements dtats de signaux logiques. Le nom de ces signaux est dfini dans la liste de sensibilit lors de la dclaration du process.
[Nom_du_process [Nom du process : ] process(Liste_de_sensibilit_nom_des_signaux) process(Liste de sensibilit nom des signaux) Begin -- instruction du process end process [Nom_du_process] ;

Remarque: Le nom du process entre crochet est facultatif, mais il peut tre trs utile pour reprer un process parmi dautres d autres lors de phases de mise au point ou de simulations
45 46

Les instructions squentielles

Les instructions squentielles


Rsultat de l synthse la th

47

48

Les instructions squentielles


2) Rgles de fonctionnement dun process : 1. Lexcutiondunprocess alieuchaquechangementdtat dunsignaldelalistedesensibilit. ( Ex: le process dont la
dclaration est la suivante : process (A, B) va tre excut chaque changement d'tat d tat de l'un l un (ou des deux) signal (aux) A et B B.)

3) Les deux principales structures utilises dans un process.


Lassignation conditionnelle if condition then I t ti Instructions [elsif conditionthen instructions] [else instructions] endif; Exemple: if(RESET =1)then SORTIE <=0000; endif; Lassignation slective case signal_de_slection is when h valeur_de_slection l d l ti =>instructions i t ti [when others =>instructions] end case; Exemple: case SEL is when 000=>S1 <=E1; when 001 001 =>S1 <=0; 0 ; when 010|011=>S1<=1; Labarre|permetderaliser unoulogiqueentrelesdeux valeurs010et011 when others =>S1 <=0; ; end case; 50

2. L'excution d'un process est concurrente mme si les instructions qu'il


contient sont squentielles squentielles.

3. Leschangementsdtatdessignauxparlesinstructionsdu process sontprisencomptelafinduprocess. process

49

Remarque : ne pas confondre => (implique) et <= (affecte).

Instruction "if...then....else
IFcondition1THEN instructionssquentielles; ELSIF condition2THENinstructionssquentielles; ELSIF condition3THENinstructionssquentielles; ELSEinstructionssquentielles; ENDIF; SI condition1ALORS instructionssquentielles; q ; SINONSIcondition2ALORSinstructionssquentielles SINONSIcondition3ALORSinstructionssquentielles; SINONinstructionssquentielles; FINDUSI;

Instruction "case"
CASE signalIS WHEN valeur1=>instructionssquentielles; WHEN valeur2=>instructionssquentielles; WHEN valeur3=>instructionssquentielles; WHENOTHERS=>instructionssquentielles; ENDCASE; CAS possiblesdelexpressionEST LORSQUE signal=valeur1=>instructionssquentielles; LORSQUE signal=valeur2=>instructionssquentielles; LORSQUE signal=valeur3=>instructionssquentielles; LORSQUE signal=AUTRES =>instructionssquentielles;
FINDECAS; Conditionn Instructions squentielles

INSTRUCTIONCASE
L'instructionWhenothers n'estpasobligatoire,elle reprsenteunefacilit d'criture.

INSTRUCTIONIF
DbutdeIF

Dbutdecase

Condition1 Instructions squentielles

vqleur1 When valeur1 When valeur2 Instructions squentielles Instructions squentielles vqleur l n Instructions squentielles Instructions squentielles When others

C diti 2 Condition2 Instructions squentielles

vqleur2

IF
ESLSIF

When valeurn Instructions squentielles ESLS FinCASE

ESLSIF

FindeIF

51

52

Instruction "for...while...loop"

Exemples de process
Dclaration dune bascule D

architecture rtl of D_FF is begin process (Clock, Reset) is begin if Reset = 1 then Q <= 0; 0; if rising_edge(Clock) then Q <= D; end if; end process; end architecture rtl;

Flip-flop D
D Q

Clock Reset

53

54

Commentaires :
Seul le signal CLK fait partie de la liste de sensibilit. Daprs les rgles l d de f fonctionnement ti t nonces prcdemment, d t seul l un changement dtat du signal CLK va dclencher le process et par consquent valuer les instructions de celui-ci. Linstruction if (CLK'event and CLK='1') then permet de dtecter un front montant du signal CLK. La dtection de front est ralise par lattribut l attribut event appliqu lhorloge l horloge CLK. CLK Si on veut un dclenchement sur un front descendant, il faut crire linstruction suivante : if (CLK'event and CLK='0'). Les L bibli bibliothques th IEEE possdent d t deux d instructions i t ti permettant tt t de d dtecter les fronts montants ) rising_edge(CLK) ou descendants falling_edge(CLK). Si la condition est remplie alors le signal de sortie S sera affect avec la valeur du signal dentre D.

Exemples de process
Exemple N2 :
Mme exemple que prcdemment mais avec des entres de prslections de mise zro RESET prioritaire sur lentre de mise un SET, toutes les deux sont synchrones de lhorloge C CLK. Set D
D Q

Clk Reset 55

56

Exemples de process
Schma correspondant aprs synthse:

Exemples de process
Exemple N3 :
Mme exemple que prcdemment mais avec des entres de rslections, de mise zro RESET prioritaire sur lentre de mise un SET SET, toutes les deux sont asynchrones de lhorloge CLK.

57

58

Exemples de process
Commentaire
Lentre L entre RESET est prioritaire sur lentre l entre SET qui est son tour prioritaire sur le front montant de lhorloge CLK. Cette description est asynchrone y car les signaux g dentre SET et RESET sont mentionns dans la liste de sensibilit du process.

Exemples de process
Exemple N4 : Bascule T

Bascule T D
D Q

Schma correspondant aprs synthse

Clk

59

60

Exemples de process
Schma S h correspondant aprs synthse

Exemples de process
Si on ne dclare pas de signal interne, le synthtiseur renverra certainement une erreur du type : E Error, cannot t read d output: t t s; [use [ mode d buffer b ff or inout]. i t] Le synthtiseur signale quil ne peut pas lire la sortie S et par consquent celle-ci consquent, celle ci doit tre du type buffer ou inout. inout Remarque : Si on souhaite ne pas utiliser de variable interne on peut dclarer le signal S de type buffer ou inout. Ce qui donne pour descriptions

Commentaires :
La description ci-dessus fait appel un signal interne appel S_INTERNE, pourquoi faire appel celui-ci ? La rponse est que le signal S est dclar comme une sortie dans lentit, et par consquent on ne peut pas utiliser une sortie en entre. Pour contourner cette difficult on utilise un signal interne qui peut tre la fois une entre ou une sortie. Avec cette faon dcrire, les signaux de sortie dune p ne sont j jamais utiliss comme des entres. Cela p permet une p plus description grande portabilit du code. 61

62

Exemples de process
Commentaires : On peut constater que S est bien du type inout. Commentaires : On peut constater que S est bien du type buffer.

Les compteurs
Ils sont trs utiliss dans les dun compteur peut tre trs simple comme trs complique. pp aux p process. Ils font appels 4.1) Compteur simple :
Library ieee; Use ieee.std_logic g _1164.all; ; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITS is PORT ( CLOCK : in std_logic; Q end CMP4BITS; architecture DESCRIPTION of CMP4BITS is Begin g process (CLOCK) Begin if (CLOCK ='1' and CLOCK'event) then Q <= Q + 1; end if;
Compteur de "0" "15", et qui fonctionne sur front montant

: inout std_logic_vector(3 downto 0));

end process; end DESCRIPTION;

63

64

Les compteurs
Commentaires :
Le dclenchement du process se fera sur un changement du CLOCK, CLOCK lincrmentation de la sortie Q se fera sur le front montant de lhorloge CLOCK. Lincrmentation du compteur est ralise par loprateur + associ la valeur 1. Cela est logique, mais elle lest beaucoup moins pour les PLDs et les synthtiseurs, pourquoi ? La rponse est que les entres et sorties ainsi que les signaux sont dclars de type std_logic ou std_logic_vector, et par consquent on ne peut t pas leur l associer i d de valeur l entire ti d dcimale. i l Un signal peut prendre comme valeur les tats 1 ou 0 et un bus nimporte quelle valeur, du moment quelle est crite entre deux guillemets "1010" ou X"A" ou o"12", mais pas une valeur comme par exemple 1,2,3,4. Ces valeurs dcimales sont interprtes par le synthtiseur comme des valeurs entires (integer), on ne peut pas par dfaut additionner un nombre entier 1 avec un bus de type l t i lectronique ( (st_logic_vector), t l i t ) cest t pour cela l que l lon rajoute j t d dans l la partie ti dclaration des bibliothques les lignes :

Les compteurs
Commentaires : _ Use ieee.numeric_std.all; Use ieee.std_std_ligic_unsigned.all; Ces deux bibliothques ont des fonctions de conversions de types et elles permettent dassocier un entier avec des signaux lectroniques. Elles permettent dcrire facilement des compteurs, dcompteurs, additionneurs, soustracteurs, .. soustracteurs Remarque 1: Il ne faut pas oublier de les rajouter dans les descriptions. Remarque 2 : Le signal Q est dclar dans lentit de type inout, cela est logique car il est utilis la fois comme entre et comme sortie pour permettre lincrmentation du compteur. Ce type dcriture est peu utilis car elle ne permet pas au code dtre portable, on prfra utiliser un signal interne, celui-ci peut tre la fois une entre et une sortie. 66

65

Les compteurs
Library ieee;

Les compteurs
Use ieee.std_logic_1164.all; U ieee.numeric_std.all; Use i i d ll Use ieee.std_logic_unsigned.all; entity CMP4BITS is PORT ( CLOCK : in std_logic; Q : out std_logic_vector(3 downto 0)); end CMP4BITS;

Avec bus interne : Mmedescriptionen utilisantunbusinterne:

Compteur mise un SET et mise zro ro RESET


Compteur 3 bits avec remise zro asynchrone.

CMP4BITS
CLOCk
Q0 Q1 Q2 Q3

architecture DESCRIPTION of CMP4BITS is Signal Q_BUS_INTERNE : std_logic_vector(3 downto 0)); Begin process (CLOCK) Begin g if ( (CLOCK ='1' and CLOCK'event) ) then Q_BUS_INTERNE <= Q_BUS_INTERNE + 1; end if; end process; Q <= Q_BUS_INTERNE affectation du Bus interne Q end DESCRIPTION;

CMP3BITS CLOCk Reset


Q0 Q1 Q2

Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; ieee numeric std all; Use ieee.std_logic_unsigned.all; entity CMP3BITS is PORT (CLOCK : in std_logic; RESET : in std_logic; Q : out std_logic_vector(2 downto 0)); end CMP3BITS; architecture DESCRIPTION of CMP3BITS is signal CMP: std_logic_vector (2 downto 0); Begin process (RESET,CLOCK) Begin if RESET ='1' then CMP <= "000"; elsif (CLOCK ='1' 1 and CLOCK CLOCK'event) event) then CMP <= CMP + 1; end if; end process; Q <= CMP; CMP end DESCRIPTION;

67

68

Les compteurs
Compteur3bitsavecremise zrosynchrone
Quelle diffrence entre les deux descriptions ? Le signal RESET nest plus dans la liste de sensibilit, le process ne sera dclench que par le CLOCK. CLOCK La remise zro ne se fera que si un front montant sur CLOCK a lieu CMP3BITS
CLOCk
Q0 Q1 Q2

Les compteurs
Libraryieee; g _1164.all; ; Useieee.std_logic Useieee.numeric_std.all; Useieee.std_logic_unsigned.all; entityCMP3BITSis PORT(CLOCK:in i std_logic; td l i RESET:instd_logic; Q:outstd_logic_vector(2downto0)); ; endCMP3BITS; architectureDESCRIPTIONofCMP3BITSis signalCMP:std_logic_vector(2downto0); Begin process(CLOCK) Begin elsif(CLOCK='1'andCLOCK'event)then ifRESET='1'then CMP<="000";elseCMP<=CMP+1; endif; endif; endprocess; Q<=CMP; endDESCRIPTION;

Compteur gnrique avec mise ZERO Compteur gnrique n sorties

use ieee.numeric_std.all; y counter is entity generic (n : integer := 4); port ( clk : in std_logic; reset: t in i std_logic; td l i count: out std_logic_vector(n-1 downto 0) ); end entity counter; architecture binary of counter is begin process (clk, reset) variable ariable cnt : unsigned(n-1 nsigned(n 1 downto do nto 0); 0) begin if reset = '1' then -- async reset (others => '0'); ); cnt := ( elsif rising_edge(clk) then cnt := cnt + 1; end if; count <= std_logic_vector(cnt); std logic vector(cnt); end process; end architecture binary;

CMP3BITS
CLOCK
Q0 Q1

Qn-1

Reset

Reset

69

70

Les compteurs
Compteur / Dcompteur entre de p prchargement g UP = 1 compteur UP =0 dcompteur Remarque : CMP <= "0000"; mise zro des sorties Autre faon dcrire cette instruction est : CMP <= (others => 0) ; Cette dernire est trs utilise dans les descriptions car elle permet de saffranchir s affranchir de la taille du bus bus. others =>0 correspond mettre tous les bits du bus zro quelque soit le nombre de bits du d b bus. s

Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITSLUD is PORT ( RESET, CLOCK, LOAD, UP: in std_logic; DATA : in std_logic_vector (3 downto 0); Q : out std_logic_vector (3 downto 0)); end CMP4BITSLUD; architecture DESCRIPTION of CMP4BITSLUD is signal CMP: std_logic_vector (3 downto 0); begin process (RESET,CLOCK) begin if RESET ='1' then CMP <= "0000"; -- Remise zero asy du compteur elsif (CLOCK ='1' and CLOCK'event) then if (LOAD =1) then CMP < <= DATA; -- Prchargement synchrone else if (UP =1) then CMP <= CMP + 1; -- Incrm else CMP <= CMP 1; -- Dcrmsynchrone end if; end if; end if; end d process; Q <= CMP; end DESCRIPTION; 71

Les compteurs
Les erreurs classiques avec lutilisation l utilisation de process Exemple : compteur avec retenue (fonctionnement incorrect) incorrect).

Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; ieee.numeric std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITSRET is PORT ( RESET, CLOCK : in std_logic; RET : out std_logic; Q : out std_logic_vector std logic vector (3 downto 0)); end CMP4BITSRET; architecture DESCRIPTION of CMP4BITSRET is signal CMP: std_logic_vector (3 downto 0); begin process (RESET,CLOCK) begin if RESET = ='1' 1 then CMP <= "0000"; 0000 ; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; if (CMP = "1111") then RET <= '1 - La retenue passera un quand CMP = 14 dcimal Else RET <= '0'; end if; end if; end process; Q <= CMP; end DESCRIPTION; 72

Les compteurs

Les compteurs
Comment faire pour pallier ce p problme ? deux solutions 1) Il faut anticiper dun coup dhorloge d horloge, on valide la retenue quand la valeur du compteur vaut 14, cest dire n n-1. 1. Remarque : Dans ce cas la validation de la retenue seffectue s effectue de faon synchrone car elle est dans le process, mais la description est peu lisible. lisible

Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; ieee.numeric std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITSRET is PORT ( RESET, CLOCK : in std_logic; RET : out std_logic; Q : out std_logic_vector std logic vector (3 downto 0)); end CMP4BITSRET; architecture DESCRIPTION of CMP4BITSRET is signal CMP: std_logic_vector (3 downto 0); begin process (RESET,CLOCK) begin if RESET = ='1' 1 then CMP <= "0000"; 0000 ; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; if (CMP = "1110") then RET <= '1 - La retenue passera un quand CMP = 14 dcimal Else RET <= '0'; end if; end if; end process; Q <= CMP; end DESCRIPTION; 74

Les rsultats de simulation appellent quelques commentaires : On saperoit que le signal de retenue RET passe au niveau logique haut quand la valeur du compteur vaut 0, pourquoi ? car la rgle 3 des process qui dit que les valeurs de signaux lintrieur dun process ne sont mis jour qu la fin de celui-ci. Dans notre cas, prenons ltat o CMP=14, au coup dhorloge suivant on p CMP, mais la nouvelle valeur ne sera affecte incrmente le compteur CMP qu la fin du process, donc quand le test pour valider le signal de retenue est effectu, la valeur de CMP est gale 14, et celui-ci nest pas valide. Au coup dhorloge suivant CMP=15 et CMP est incrment donc prendra la valeur 0 la fin du process., mais la condition CMP= "1111" sera valide et le signal de retenue RET passera au niveau logique un.

73

Les compteurs
2) Le test de validation de la retenue est effectue en dehors du process Remarque : Dans ce cas la validation de la retenue seffectue de faon asynchrone car elle est en dehors du process, mais la description est lisible. .

architecture DESCRIPTION of CMP4BITSRET is signal CMP: std_logic_vector (3 downto 0); begin process (RESET,CLOCK) (RESET CLOCK) begin if RESET='1' then CMP <= "0000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; end if; end process; Q <= CMP; -- Validation de la retenue RET <= '1' 1 when (CMP = "1111") 1111 ) else '0'; 0; end DESCRIPTION;

Les compteurs
Compteur BCD deux digits Ce type des compteurs compte de "0" 0 jusqu' "99", il est 8 bits, il est compos de deux sous-Compteurs : LSB et t MSB, MSB chacun h est t 4 bits, bit le l signal MSB s'incrmente que lorsque g LSB p passe de "9" "0". le signal
Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; ieee numeric std all; Use ieee.std_logic_unsigned.all; entity CMP_BCD8 is PORT ( RESET, CLK : in std_logic; Q : out std_logic_vector (7 downto 0)); end CMP_BCD8; CMP BCD8

architecture DESCRIPTION of CMP_BCD8 is signal g DIGIT_MSB, _ DIGIT_LSB: _ std_logic_vector _ g _ (3 downto 0); begin process (RESET,CLK) begin if RESET ='1' then DIGIT_LSB <= (others=>'0'); DIGIT_MSB _ <= ( (others=>'0'); ); elsif (CLK ='1' and CLK'event) then if DIGIT_LSB < 9 then DIGIT_LSB <= DIGIT_LSB + 1; else l DIGIT_LSB <= (others=>'0'); if DIGIT_MSB < 9 then DIGIT MSB < DIGIT_MSB <= DIGIT_MSB DIGIT MSB + 1 ; else DIGIT_MSB <= (others=>'0'); end if; end if; end if; end process; Q <= DIGIT_MSB DIGIT MSB & DIGIT_LSB; DIGIT LSB; end DESCRIPTION;

75

76

Library ieee; Use ieee.std_logic_1164.all; U ieee.numeric_std.all; Use i i td ll Useieee.std_logic_unsigned.all; entity CMP_BCD8 is PORT (RESET, RESET CLK:instd_logic; std logic; Q:outstd_logic_vector(7downto 0)); end CMP_BCD8; architecture DESCRIPTION of CMP_BCD8 CMP BCD8 is signal DIGIT_MSB,DIGIT_LSB: std_logic_vector(3downto 0); begin process (RESET,CLK) begin f RESET='1'then if DIGIT_LSB <=(others=>'0');

DIGIT_MSB<=(others =>'0'); elsif(CLK ='1'andCLK'event)then ifDIGIT_LSB DIGIT LSB <9then th DIGIT_LSB <=DIGIT_LSB+1; else DIGIT LSB <=(others=> DIGIT_LSB (others=>'0'); 0 ); ifDIGIT_MSB <9then DIGIT_MSB <=DIGIT_MSB+1; else DIGIT_MSB <=(others=>'0'); endif; endif; endif; endprocess; Q<= DIGIT_MSB&DIGIT_LSB; ; end DESCRIPTION;

77

Das könnte Ihnen auch gefallen