La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours VHDL Chap 3: sémantique VHDL Ing Mohamed MASMOUDI

Présentations similaires


Présentation au sujet: "Cours VHDL Chap 3: sémantique VHDL Ing Mohamed MASMOUDI"— Transcription de la présentation:

1 Cours VHDL Chap 3: sémantique VHDL Ing Mohamed MASMOUDI

2 Sémantique Deux types dexpressions : Séquentielles Expressions dans un PROCESS Concurrentes Expressions à lextérieur dun PROCESS Les PROCESS sont évalués de manière concurrente CPU Mémoire Interfaces dE/S Bus d adresses Bus de contrôle et de commande Bus de données (Séquentiel) Toutes les unités sont concurrentes entre elles 2Cours VHDL M. MASMOUDI

3 Les process Les processus constituent les éléments calculatoires de base du simulateur. Au niveau descriptif, ils peuvent être explicites (PROCESS) ou implicites (instructions concurrentes). Du point de vue de lexécution, on peut affirmer que « tout est processus ». Un processus vit toujours depuis le chargement du code exécutable dans le simulateur. Il ne peut prendre fin quavec la simulation mais peut par contre être endormi pour une durée plus ou moins longue. Linstruction WAIT, obligatoire au moins une fois, synchronise le processus. Elle possède trois formes pouvant être combinées : WAIT ON événement; WAIT FOR durée; WAIT UNTIL condition; WAIT; Le processus sexécute au moins une fois jusquà rencontrer le WAIT, puis la condition de réveil une fois validée, lexécution continue de façon séquentielle et cyclique (après la fin, le début) 3Cours VHDL M. MASMOUDI

4 Exemple process En VHDL les instructions dune architecture sont évaluées en permanence et toutes simultanément. Pour avoir un fonctionnement séquentiel il faut définir un processus. Un processus (Process) est un groupe délimité dinstructions caractérisé par : Exécution du processus à chaque changement détat dun des signaux auxquels il est déclaré sensible Exécution séquentielle des instructions du processus Les modifications apportées aux valeurs de signaux par les instructions prennent effet à la fin du processus Library ieee; use ieee.std_logic_1164.all ; entity BASCULE_D is port(D, CLK: in std_logic; Q: OUT std_logic ); end BASCULE_D; architecture ACH_BASCULE_D of BASCULE_D is begin process (CLK) begin if (CLK= 1 ) then Q <= D ; endif ; end process; end ACH_BASCULE_D; CLK D Q 4Cours VHDL M. MASMOUDI

5 Assignement Assignation inconditionnelle Forme générale : signal <= expression ; Assignation conditionnelle Forme générale : signal <= {expression when condition} else expression; Assignation sélective Forme générale : with selecteur select signal <= {expression when valeur selecteur,} {expression when others}; Utilisables en mode concurrent (hors processus) Bus_in <= 0000 ; A <= B when S=T else C when S=U else 0; architecture ARCH_MUX of MUX is signal ETAT : std_logic_vector(1 downto 0); signal X, A, B, C, D : std_logic ; begin with ETAT select X <= A when 00, B when 01, C when 10, D when others ; end ARCH_MUX ; A <= B when (C=1) else D; 5Cours VHDL M. MASMOUDI

6 Génération Forme générale : etiquette : for variable_de_boucle in val_debut to val_fin generate {instruction concurrente}; end generate etiquette; Il est possible dimbriquer plusieurs instructions generate, chacune possédant son étiquette et sa variable de boucle propres Forme conditionnelle : etiquette : for variable_de_boucle in val_debut to val_fin generate {if instruction then generate {instruction combinatoire} end generate; } end generate etiquette; 6Cours VHDL M. MASMOUDI

7 Exemple registre à décalage Library ieee; use ieee.std_logic_1164.all ; entity REG_SP is port(CLK,RESET,SI: in std_logic; PO: OUT std_logic_vector(0 to 31); end REG_SP; use work.RTLPKG.all ; -- accès aux comp. architecture ACRHREG_SP of REG_SP is signal TEMP: std_logic_vector(0 to 31); begin premier: DFF port map (SI, CLK, TEMP(0)); autres : for I in 0 to 30 generate boucle: DFF port map (TEMP(I),CLK,TEMP(I+1)); end generate PO <= TEMP; end ARCHREG_SP; CLK SI PO(0) PO(1)PO(31) DFF est la déclaration d un composant (bascule D) du paquetage RTLPKG Génération du 1er étage du registre à décalage Génération itérative des 31 étages suivants Génération itérative des 31 étages suivants 7Cours VHDL M. MASMOUDI

8 Séquentielles Instruction de test « if » : [label:]if condition then instructions { elsif condition then instructions } else instructions end if [label] ; Instruction de sélection « case » : [label:] case expression is { when choices} => {instructions } [ when others => {instructions } end case [label] ; Instruction de boucle « for…loop » : [label:]for variable_boucle in intervalle loop {instructions} end loop [label]; Instruction de boucle « while…loop » : [label:]while condition loop {instructions} end loop [label]; Instructions « next » et « exit » : [label:]next [loop_label] [when condition]; [label:]exit [loop_label] [when condition]; 8Cours VHDL M. MASMOUDI

9 Exemples séquentiel IF a = 1 THEN s := 1; ELSIF b = 1 THEN s := 1; ELSE s := 0; END IF; CASE entree IS WHEN 11 => s:= 1; WHEN 01 => s:= 1; WHEN 10 => s:= 1; WHEN OTHERS => s :=0; END CASE; boucle1: -- étiquette optionnelle FOR i IN 0 TO 10 LOOP b := 2**i; - - calcul des puissances de 2 WAIT FOR 10 ns; -- toutes les 10 ns END LOOP; 9Cours VHDL M. MASMOUDI

10 Concurrentes Entre le BEGIN et le END de lARCHITECTURE on est dans un contexte dinstructions concurrentes. Ce qui les caractérisent : Lordre des instructions concurrentes est indifférent, Pour le compilateur, chaque objet concurrent est en fait un processus, Les objets concurrents (partie dun circuit) sont reliés entre eux par des signaux. 10Cours VHDL M. MASMOUDI

11 Exemple équivaux à une instruction concurrente Affectation simple s <= a AND b AFTER 10 ns; Le processus équivalent demande cinq lignes au lieu dune : P1: PROCESS BEGIN WAIT ON a, b ; s <= a AND b AFTER 10 ns; END PROCESS 11Cours VHDL M. MASMOUDI

12 Exemple équivaux à une instruction concurrente Affectation conditionnelle Neuf <= 1 WHEN etat = 1001 ELSE ´0´ ; Le processus équivalent remplace le WHEN par une instruction IF : P2: PROCESS BEGIN WAIT ON etat ; IF etat = 1001 THEN neuf <= ´1´ ; ELSE neuf <= ´0´ ; END PROCESS; 12Cours VHDL M. MASMOUDI

13 Les sous programmes wait Ils sont des modules de code séquentiel qui nutilisent pas linstruction wait. Les 2 catégories de sous-programmes sont : in out inout a b c Procédure in F(a,b) a Fonction b in Paramètres de classe : signal, constant, variable ou file Paramètres de classe : signal, constant ou file jamais variable Partie déclarative : définition des objets (données, types, …) Corps du sous-programme : suite dinstructions séquentielles 13Cours VHDL M. MASMOUDI

14 Syntaxe sous programme Subprogram_body ::= procedure nom [(liste_des_paramètres_formels)] |function nom [(liste_des_paramètres_formels)] return type is zone déclarative begin zone dinstructions séquentielles end [procedure |function] [nom]; [:=expression] liste_paramètres_formels ::= [classe] liste_de_noms: [mode] sous_type [:=expression] Function_call ::= function_name [formal_part =>] actual_part; Procedure_call ::= [label:] procedure_name [formal_part =>] actual_part; Description des sous-programmes Appel des sous-programmes 14Cours VHDL M. MASMOUDI

15 Exple function entity func is port (a: in bit_vector (0 to 2); m: out bit_vector (0 to 2)); end func; architecture example of func is function simple (w, x, y: bit) return bit is begin return (w and x) or y; end; begin process (a) begin m(0) <= simple(a(0), a(1), a(2)); m(1) <= simple(a(2), a(0), a(1)); m(2) <= simple(a(1), a(2), a(0)); end process; end example; 15Cours VHDL M. MASMOUDI

16 Exple procédure entity proc is port (a: in bit_vector (0 to 2); m: out bit_vector (0 to 2)); end proc; architecture example of subprograms is procedure simple (w, x, y: in bit; z: out bit) is begin z <= (w and x) or y; end; begin process (a) begin simple(a(0), a(1), a(2), m(0)); simple(a(2), a(0), a(1), m(1)); simple(a(1), a(2), a(0), m(2)); end process; end example; 16Cours VHDL M. MASMOUDI

17 Les fichiers use STD.TEXTIO.all; type TEXT is file of STRING; type LINE is access STRING; file TOTO: TEXT is in toto.txt; file TITI: TEXT is out titi.txt; procedure READLINE(F: in TEXT; L: out LINE); procedure WRITELINE(F: out TEXT; L: out LINE); procedure READ(L: inout LINE; VALUE: out BIT; GOOD: out BOOLEAN); procedure READ(L: inout LINE; VALUE: out BIT); procedure WRITE(L: inout LINE; VALUE: in BIT; JUSTIFIED: in SIDE := RIGHT; FIELD: in WIDTH := 0); 17Cours VHDL M. MASMOUDI

18 Les attribues Cours VHDL M. MASMOUDI18 signal_nameevent returns the Boolean value True if an event on the signal occurred, otherwise gives a False signal_nameactive returns the Boolean value True there has been a transaction (assignment) on the signal, otherwise gives a False signal_nametransaction returns a signal of the type bit that toggles (0 to 1 or 1 to 0) every time there is a transaction on the signal. signal_namelast_event returns the time interval since the last event on the signal signal_namelast_active returns the time interval since the last transaction on the signal signal_namelast_value gives the value of the signal before the last event occurred on the signal signal_namedelayed(T) gives a signal that is the delayed version (by time T) of the original one. [T is optional, default T=0] signal_namestable(T) returns a Boolean value, True, if no event has occurred on the signal during the interval T, otherwise returns a False. [T is optional, default T=0] signal_namequiet(T) returns a Boolean value, True, if no transaction has occurred on the signal during the interval T, otherwise returns a False. [T is optional, default T=0]

19 Les attribues 19Cours VHDL M. MASMOUDI S<=« 010 »; Wait for 10 ns; S<=« 001 »; Wait for 10 ns; S<=« 100 »; Wait for 10 ns; S<=« 100 »; Wait for 10 ns; S<=« 000 »; Wait for 15 ns; S<=« 011 »; Wait for 5 ns; S<=« 011 »; Wait for 10 ns; S<=« 011 »; Wait for 10 ns; S<=« 010 »;


Télécharger ppt "Cours VHDL Chap 3: sémantique VHDL Ing Mohamed MASMOUDI"

Présentations similaires


Annonces Google