1 / 19

Cours VHDL Chap 3 : sémantique VHDL

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.

hunter
Download Presentation

Cours VHDL Chap 3 : sémantique VHDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cours VHDLChap 3: sémantique VHDL Ing Mohamed MASMOUDI Mohamed.masmoudi@alphatec.com.tn

  2. 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

  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. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  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 ; s <= a AND b AFTER 10 ns; 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. 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

  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. 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

  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; Cours VHDL M. MASMOUDI

  17. 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

  18. 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

  19. 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

More Related