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

Présentations similaires


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

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

2 Toutes les unités sont concurrentes entre elles
Sémantique Deux types d’expressions : Séquentielles Expressions dans un PROCESS Concurrentes Expressions à l’extérieur d’un PROCESS Les PROCESS sont évalués de manière concurrente Bus d ’adresses Toutes les unités sont concurrentes entre elles Bus de données Bus de contrôle et de commande CPU (Séquentiel) Interfaces d’E/S Mémoire (Séquentiel) (Séquentiel) Cours 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 l’exé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 qu’avec la simulation mais peut par contre être endormi pour une durée plus ou moins longue. L’instruction 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 s’exécute au moins une fois jusqu’à rencontrer le WAIT, puis la condition de réveil une fois validée, l’exécution continue de façon séquentielle et cyclique (après la fin, le début) Cours VHDL M. MASMOUDI

4 Exemple process En VHDL les instructions d’une architecture sont évaluées en permanence et toutes simultanément. Pour avoir un fonctionnement séquentiel il faut définir un 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) if (CLK=‘ 1 ’) then Q <= D ; endif ; end process; end ACH_BASCULE_D; Un processus (Process) est un groupe délimité d’instructions caractérisé par : Exécution du processus à chaque changement d’état d’un 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 CLK D Q Cours VHDL M. MASMOUDI

5 Assignement Utilisables en mode concurrent (hors processus)
Assignation inconditionnelle Forme générale : signal <= expression ; Assignation conditionnelle signal <= {expression when condition} else expression; Assignation sélective with selecteur select signal <= {expression when valeur selecteur,} {expression when others}; Utilisables en mode concurrent (hors processus) Bus_in <= “0000” ; A <= B when (C=‘1’) else D; 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 ; Cours VHDL M. MASMOUDI

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

8 Séquentielles 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} Instructions « next » et « exit » : [label:] next [loop_label] [when condition]; [label:] exit [loop_label] [when condition]; Instruction de test « if » : [label:] if condition then instructions { elsif condition then instructions } else end if [label] ; Instruction de sélection « case» : [label:] case expression is { when choices} => {instructions } [ when others => {instructions } end case [label] ; Cours VHDL M. MASMOUDI

9 Exemples séquentiel IF a = ‘1’ THEN s := ‘1’; ELSIF b = ‘1’ THEN ELSE
END IF; 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; CASE entree IS WHEN ’11’ => s:= ‘1’; WHEN ’01’ => s:= ‘1; WHEN ‘10’ => s:= ‘1’; WHEN OTHERS => s :=‘0’; END CASE; Cours VHDL M. MASMOUDI

10 Concurrentes Entre le BEGIN et le END de l’ARCHITECTURE on est dans un contexte d’instructions concurrentes. Ce qui les caractérisent : L’ordre des instructions concurrentes est indifférent, Pour le compilateur, chaque objet concurrent est en fait un processus, Les objets concurrents (partie d’un circuit) sont reliés entre eux par des signaux. Cours 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 d’une : P1: PROCESS BEGIN WAIT ON a, b ; END PROCESS Cours 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; Cours VHDL M. MASMOUDI

13 Les sous programmes Ils sont des modules de code séquentiel qui n’utilisent pas l’instruction wait. Les 2 catégories de sous-programmes sont : in out inout a b c Procédure in F(a,b) a Fonction b 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 d’instructions séquentielles Cours VHDL M. MASMOUDI

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

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

18 Les attribues Cours VHDL M. MASMOUDI signal_name’event
returns the Boolean value True if an event on the signal occurred, otherwise gives a False signal_name’active returns the Boolean value True there has been a transaction (assignment) on the signal, otherwise gives a False signal_name’transaction 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_name’last_event returns the time interval since the last event on the signal signal_name’last_active returns the time interval since the last transaction on the signal signal_name’last_value gives the value of the signal before the last event occurred on the signal signal_name’delayed(T) gives a signal that is the delayed version (by time T) of the original one. [T is optional, default T=0] signal_name’stable(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_name’quiet(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] Cours VHDL M. MASMOUDI

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


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

Présentations similaires


Annonces Google