200 likes | 478 Views
Cours VHDL Chap 3 : sémantique VHDL . Ing Mohamed MASMOUDI Mohamed.masmoudi@alphatec.com.tn. 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.
E N D
Cours VHDLChap 3: sémantique VHDL Ing Mohamed MASMOUDI Mohamed.masmoudi@alphatec.com.tn
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 Interfaces d’E/S (Séquentiel) Mémoire (Séquentiel) (Séquentiel) Cours VHDL M. MASMOUDI
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
D Q CLK 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) begin 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 Cours VHDL M. MASMOUDI
Assignement Utilisables en mode concurrent (hors processus) 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 : withselecteur select signal <= {expression when valeur selecteur,} {expression whenothers}; 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
Génération Forme générale : etiquette : forvariable_de_boucleinval_debuttoval_fingenerate {instruction concurrente}; end generateetiquette; Il est possible d’imbriquer plusieurs instructions generate, chacune possédant son étiquette et sa variable de boucle propres Forme conditionnelle : etiquette : forvariable_de_boucleinval_debuttoval_fingenerate {if instruction thengenerate {instruction combinatoire} end generate; } end generateetiquette; Cours VHDL M. MASMOUDI
SI CLK PO(0) PO(1) PO(31) Exemple registre à décalage Library ieee; use ieee.std_logic_1164.all ; entityREG_SP is port(CLK,RESET,SI: instd_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; 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
Séquentielles Instruction de boucle « for…loop » : [label:] for variable_bouclein intervalle loop {instructions} end loop[label]; Instruction de boucle « while…loop» : [label:] whilecondition loop{instructions} end loop[label]; Instructions « next » et « exit » : [label:] next[loop_label] [whencondition]; [label:] exit [loop_label] [whencondition]; Instruction de test « if » : [label:] if conditionthen instructions { elsifcondition then instructions } else instructions end if [label] ; Instruction de sélection « case» : [label:] case expression is {whenchoices} => {instructions } [whenothers=> {instructions } end case [label] ; Cours VHDL M. MASMOUDI
Exemples séquentiel IF a = ‘1’ THEN s := ‘1’; ELSIF b = ‘1’ THEN s := ‘1’; ELSE s := ‘0’; 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
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
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 ; s <= a AND b AFTER 10 ns; END PROCESS Cours VHDL M. MASMOUDI
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
in a a in out F(a,b) b b in inout c Procédure Fonction 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 : 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
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
Explefunction entityfuncis port (a: in bit_vector (0 to 2); m: out bit_vector (0 to 2)); end func; architecture exampleof funcis functionsimple (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; Cours VHDL M. MASMOUDI
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; Cours VHDL M. MASMOUDI
Les fichiers procedure READLINE(F: in TEXT; L: out LINE); procedure WRITELINE(F: out TEXT; L: out LINE); useSTD.TEXTIO.all; type TEXT is file of STRING; type LINE is access STRING; procedure READ(L: inoutLINE; VALUE: out BIT; GOOD: out BOOLEAN); procedure READ(L: inoutLINE; VALUE: out BIT); procedure WRITE(L: inoutLINE; 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
Les attribues • 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
Les attribues 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 5ns; S<=« 011 »; Wait for 10 ns; S<=« 011 »; Wait for 10 ns; S<=« 010 »; Cours VHDL M. MASMOUDI