1 / 23

Polytech'Orléans

Polytech'Orléans. Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE 2006-2007 SPE 4 Option “SE” Dr. Rodolphe WEBER. Compléments VHDL. Faire du code générique Compilation conditionnelle Les testbenchs Les règles de conception

vince
Download Presentation

Polytech'Orléans

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. Polytech'Orléans Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE 2006-2007 SPE 4 Option “SE” Dr. Rodolphe WEBER Compléments VHDL - R.WEBER - Polytech'Orleans

  2. Compléments VHDL • Faire du code générique • Compilation conditionnelle • Les testbenchs • Les règles de conception • Les machines d'états Compléments VHDL - R.WEBER - Polytech'Orleans

  3. Rappel Structure d’un fichier VHDL Permet d’accéder à d’autres descriptions définies dans des diverses librairies. Rem. : Plusieurs couples entity/architecture sont possibles au sein d ’un même fichier. Les clauses library et use ne sont pas globales. Leur effet s’arrête dès la déclaration d’une nouvelle entity. D'office il y a Standard et Work library ieee; use ieee.std_logic_1164.all; entity essai is port (a,b : instd_logic; c : out integer); end essai; architecture archi1 of essai is Signal s1, s2 : std_logic; begin . . end archi1; Description de l’interface a Description du comportement de l’entité. Pour une même entité plusieurs architectures sont possibles. c s1 s2 b Compléments VHDL - R.WEBER - Polytech'Orleans

  4. Code Générique Les paramètres génériques • Ils sont déclarés dans l'entity • Ils permettent de paramétrer des composants • une valeur par défaut peut être définie (":=") • l'instanciation se fait grâce à "generic map(…)" entity mux is generic(width : integer :=8); port (sel :in std_logic; a,b : instd_logic_vector (width-1 downto 0); c : out std_logic_vector (width-1 downto 0)); end mux; architecture behav of mux is begin c<=a when sel='0' else b; end behav; comp1 : mux generic map( 4) port map(sel=>seldata, a=> dataa, b=> datab, c=>data); comp2 : mux port map(sel=>seladr, a=>adra, b=> adrb, c=>adr); Compléments VHDL - R.WEBER - Polytech'Orleans

  5. Code Générique Utilistation d’attributs • Ils permettent de récupérer de l'information sur la nature des objets type etat is (lundi, mardi, mercredi, jeudi, vendredi); signal indice :integer range 0 to 255; signal tab : std_logic_vector (3 downto 0); signal clk : std_logic; à éviter Compléments VHDL - R.WEBER - Polytech'Orleans

  6. Code Générique Les fonctions • Appel d'une fonction x <= fonction(a,b) ou x:=fonction(a,b) • Elle doit être spécifiée au préalable dans un package, une entity ou une architecture. • Elle peut ne rien générer, comme générer de la logique. • Une fonction dont le nom est entre " devient un opérateur. La surcharge est possible. • Il existe des fonctions toutes faites : • exemple : la librairie ieee.std_logic_1164 : • 9 états possibles (1,0,Z,'-',…) • fonctions logiques (and,nand, or,nor…) • détection de front : rising_edge,falling_edge function maxval (in1,in2 :signed) return signed is variable resultat : signed (in1'range) ; begin … return resultat; end maxval; Compléments VHDL - R.WEBER - Polytech'Orleans

  7. Code Générique Les Procédures • Appel d'une procédure procedure(a,b,c,d) • Elle doit être spécifiée au préalable dans un package, une entity ou une architecture. procedure Nom_proc({<class>Nom_para: <mode> <type_spec>}) is --<class>: signal | variable | constant --<mode>: in | inout | out begin -- description de la procédure end; -- example: adder procedure ADD (signal A0, A1, B0, B1: in STD_LOGIC; signal C0, C1: out STD_LOGIC) is variable X, Y: STD_LOGIC; begin x := B0 and A0; Y := B1 xor A1; C0 <= (B0 and not A0) or ( not B0 and A0); C1 <= (Y and not X) or (not Y and X); end; Compléments VHDL - R.WEBER - Polytech'Orleans

  8. Code Générique Les Packages • package unité de compilation permettant de regrouper constant, type, signal, component, function et procedure package nom_du_package is -- description du package -- vue externe end package nom_du package; package body nom_du_package is -- description interne end package body nom_du_package; • Le package est compilé à part soit dans une librairie spécifique soit dans la librairie courante work. • On peut l'utiliser par la clause use : • use work.nom_du_package.all; • library tutu; use tutu.nom_du_package.all; Compléments VHDL - R.WEBER - Polytech'Orleans

  9. Compilation conditionnelle Duplication de composants ou d'équations • Forme générale : label : for indice in val_debut to val_fin generate … end generate label; • Possibilité d'insérer des conditions dans la boucle : if condition then generate … end generate; pas de else ni de elsif. architecture archi of essai is signal temp : std_logic_vector( 0 to 31); signal vcc : std_logic ; begin vcc <= '1'; boucle : for i in 0 to 31 generate premier :if i=0 generate dffa: DFF port map ( SI,CLK,reset,vcc,temp(0)); end generate; autres : if i>0 generate dffb: DFF port map ( temp(i-1),CLK,reset,vcc,temp(i)); end generate; end generate; po<=temp; end archi; -- constant vcc : std_logic :='1'; Compléments VHDL - R.WEBER - Polytech'Orleans

  10. Compilation conditionnelle Configuration • configuration permet d'établir la correspondance avec un composant existant : • Pour cibler un composant seul forlabel: composant_cibleuse entitylibrairie.composant_source(nom_architecture); end for; • Pour cibler une famille de composantfor allcomposant_cibleuse entitylibrairie.composant_source(nom_architecture); end for; • Pour cibler le resteforothers composant_cibleuse entitylibrairie.composant_source(nom_architecture); end for; • Mis en œuvre : • directe dans la partie déclarative de l'architecture • par le biais d'un bloc configuration : configuration tutu of composant_cible is -- description des configurations end; • Possibilité de hiérarchiser les configurations : • forlabel: composant_cibleuse configurationlibrairie.nom_configuration end for; Compléments VHDL - R.WEBER - Polytech'Orleans

  11. Les Testbenchs Les Testbenchs • Pour générer des stimulis et valider le design vhdl. • Possibilité ( nécessité) d'utiliser des ressources VHDL non synthétisable, description uniquement fonctionnelle • Vérification manuelle sur chronogramme : • fastidieux, voire impossible si design complexe • taux de couverture ? stimuli Vhdl à tester • Vérification automatique : • Efficace mais • validité du modèle comportementale ? • Vitesse ? stimuli Vhdl à tester Comparaison Des résultats Modèle comportementale Fichier stimuli Modèle C, Matlab, Scilab…. Fichier Résultat Comparaison Des résultats • Vérification automatique : • Très efficace lecture stimuli Vhdl à tester Ecriture Résultat Compléments VHDL - R.WEBER - Polytech'Orleans

  12. Les Testbenchs Génération d’un chronogramme • la durée s'exprime avec un type physique : fs, ps, ns, us, ms • now représente le temps courant (sous modelsim) • signal <= valeurafterdurée absolue, valeurafterdurée absolue ,… ; H <= "00", "01" after 10 NS, "10" after 20 NS; clk<= not clk after 50 ns;-- génération d’une horloge à 10 MHz, attention initialiser clk à la déclaration label : wait on liste_signal until condition for durée; -- dans des process • wait on : attente sur évènements • wait until : attente de conditions (s’il a eu un événement sinon la condition n’est pas testée) • wait for : attente pour un certains temps -- méthode simple mais lourde constant Period: TIME := 25 NS; ... Stimulus: process begin A <= "0000"; B <= "0000"; wait for Period; A <= "1111"; wait for Period; B <= "1111"; wait for Period; wait; end process; wait on clk until now=1ms ; --attente synchrone d’une durée de simulation wait until now=1ms ; wait for 10 ns ; wait until clk=‘1’ ; -- attente d’un front montant Compléments VHDL - R.WEBER - Polytech'Orleans

  13. Testbench Les assertions • Les assertions permettent d'avoir des informations dynamiques sur la simulation : assert test report message severity action si le test est négatif on affiche le message avec arrêt ou non de la simulation Arrêter le simulateur : assert false severity failure ; Afficher un message : assert false report " Fin OK" severity note; ou report "Fin Ok" severity note exemple : assert (now< 10 ms) report " Fin de simu" severity failure Compléments VHDL - R.WEBER - Polytech'Orleans

  14. Les Testbenchs Le Package TEXTIO (VHDL 93) process file F : TEXT open WRITE_MODE is "testout.txt"; variable L: line; begin while true loop -- on peut tester une durée NOW < finsimu write(L,NOW,LEFT,10); -- NOW = temps de simulation write(L,to_integer(a)); writeline(F,L); wait until clk='1'; end loop; end process; • use std.textio.all; • Les modes peuvent être : • READ_MODE, • WRITE_MODE, • APPEND_MODE • Cadrage possible avec WRITE : • LEFT, + taille minimum du chanp • RIGHT,+ taille minimum du chanp • les types standards sont utilisés : • TIME, • INTEGER • CHARACTER • STRING • BIT et BIT_VECTOR • REAL • avec use ieee.std_logic_textio.all, on peut utiliser • STD_LOGIC et STD_LOGIC_VECTOR • lire et écrire de l'hexa ou octal : • HREAD et HWRITE • OREAD et OWRITE 0 ns 0 25 ns 0 75 ns 1 125 ns 2 process file G : TEXT open READ_MODE is "test.txt"; variable L: line; variable bvar,cvar : integer range 0 to 7; variable dvar : real; begin while not ENDFILE(G) loop wait until clk='1'; readline(G,L); read(L,bvar); -- on ne lit que des variables read(L,cvar); read(L,dvar); b <= bvar; c <= cvar; d <= dvar; end loop; wait; -- fin end process; 2 5 1.1 7 3 5e3 1 4 4.2e-1 4 2 2.3 Compléments VHDL - R.WEBER - Polytech'Orleans

  15. Règles de Conception mémoire a ≈ Fonctionnellement Vision comportementale f(a3,a2,a1,a0) b [b2,b1,b0] [a3,a2,a1,a0] Niveaux logiques 1 2 3 delay Rappels d’électronique numérique Système combinatoire (asynchrone) : [b2,b1,b0]=f(a3,a2,a1,a0) a0 b0 and a1 or b1 mult a2 xor b2 a3 not Mais temporellement : si niveaux logiques  alors delay • Mauvaise performance en temps • Difficultés pour mettre au point • Difficultés pour tester tous les cas Compléments VHDL - R.WEBER - Polytech'Orleans

  16. Règles de Conception (Registre = flip-flop = bascule D = Z-1) « Q=D au front de clk1, sinon Q=Q » Feed-back combinatoire D Q registre registre registre registre clk1 logique combinatoire a(n-1) b(n-1) clk2 c(n)=b(n-1) d(n) e(n+1)=d(n)) f(n+1) ^ ^ ^ ^ g(n+2)) Design Synchrone logique combinatoire logique combinatoire logique combinatoire a b c d e f g • Améliore les performances en vitesse • Simplifie la vérification fonctionnelle •  Autorise des analyses statiques du timing • Assure une parfaite testabilité • Architectures des composants calquent cette vision (cf. architecture virtex) Compléments VHDL - R.WEBER - Polytech'Orleans

  17. Règles de Conception Règles de conception • Systèmes synchrones(simu fonctionnelle simplifiée et puissante, analyse temporelle statique possible,) : • 1 SEULE horloge (broche globale du composant) • Si plusieurs domaines d horloges, il faut des FIFOs tampons • resynchroniser tous les signaux asynchrones pour éviter la métastabilité exemple :Synchronisation du reset, actif de manière asynchrone et inactif de manière synchrone : Compléments VHDL - R.WEBER - Polytech'Orleans

  18. Règles de Conception Règles de conception • Four-input LUT • Any 4-input logic function • Or 16-bit x 1 sync RAM • Or 16-bit shift register • Adopter une démarche qualité (dénomination, hierarchisation, testbench…) • Attention aux assignations incomplètes (mémorisation implicite) • Attention à l’utilisation des variables • Penser implantation (orienter le compilateur) : il faut connaître l’architecture du composant Ecrire un registre à décalage 32 bits à partir de l’architecture ci-contre Proposer un schéma pour la fonction suivante : sortie= (a+b) ou (c+d) • Trouver le bon compromis entre ressources et vitesses en choisissant le bon degré de parallélisation (pas compact mais rapide) ou de sérialisation (compact mais lent) : cf. transparent suivant Compléments VHDL - R.WEBER - Polytech'Orleans

  19. Règles de Conception Exemple : implantation d’un filtre d’ordre 2 Compléments VHDL - R.WEBER - Polytech'Orleans

  20. Les machines d’états Machines d’états Autre concept Compléments VHDL - R.WEBER - Polytech'Orleans

  21. Les machines d’états Machine à états codés ENTITY machine IS PORT ( clk, rst : in bit ; cond : in bit-vector(2 DOWNTO O) ; sortie: out bit-vector(2 DOWNTO 0)) ; END machine ; ARCHITECTURE arch OF machine IS TYPE etats is (etatO, etatl, etat2, etat3, etat4) ; SIGNAL etat: etats ; BEGIN PROCESS(clk, rst) BEGIN IF rst='l' THEN etat <= etat0 ; ELSIF ( clk ' EVENT and clk= ' l' ) then CASE etat IS WHEN etat0 => etat <= etatl ; WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ; ELSIF cond = "001" THEN etat <= etat4 ; ELSIF cond = "010" THEN etat <= etat3 ; ELSIF cond = "011" THEN etat <= etat2 ; ELSE etat <= etatl ; END IF ; WHEN etat2 => etat <= etat3 ; WHEN etat3 => IF cond = "110" THEN etat <= etat0 ; ELSE etat <= etat4 ; END IF ; WHEN OTHERS => etat <= etat0 ; END CASE; END IF; END PROCESS; sortie <= "001" WHEN (etat=etat0) ELSE "110" WHEN (etat=etat1) ELSE "001" WHEN (etat=etat2) ELSE "010" WHEN (etat=etat3) ELSE "101" ; END ARCH; Gestion des états Gestion des sorties version synchronisée Compléments VHDL - R.WEBER - Polytech'Orleans

  22. Les machines d’états Machine à états décodés ENTITY machine IS PORT ( clk, rst : in std_logic ; cond : in std_logic_vector(2 DOWNTO O) ; sortie: out std_logic_vector(2 DOWNTO 0)) ; END machine ; ARCHITECTURE arch OF machine IS CONSTANT etat0 : std_logic_vector(4 DOWNTO 0) := "00001"; CONSTANT etat1 : std_logic_vector(4 DOWNTO 0) := "00010"; CONSTANT etat2 : std_logic_vector(4 DOWNTO 0) := "00100"; CONSTANT etat3 : std_logic_vector(4 DOWNTO 0) := "01000"; CONSTANT etat4 : std_logic_vector(4 DOWNTO 0) := "10000"; SIGNAL etat: std_logic_vector(4 DOWNTO 0) ; BEGIN PROCESS(clk, rst) BEGIN IF rst='l' THEN etat <= etat0 ; ELSIF ( clk ' EVENT and clk= ' l' ) then CASE etat IS WHEN etat0 => etat <= etatl ; WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ; ELSIF cond = "001" THEN etat <= etat4 ; ELSIF cond = "010" THEN etat <= etat3 ; ELSIF cond = "011" THEN etat <= etat2 ; ELSE etat <= etatl ; END IF ; WHEN etat2 => etat <= etat3 ; WHEN etat3 => IF cond = "110" THEN etat <= etat0 ; ELSE etat <= etat4 ; END IF ; WHEN OTHERS => etat <= "-----" ; END CASE; END IF; END PROCESS; sortie <= "001" WHEN (etat=etat0) ELSE "110" WHEN (etat=etat1) ELSE "001" WHEN (etat=etat2) ELSE "010" WHEN (etat=etat3) ELSE "101" ; END ARCH; Gestion des états • 2 versions du One-Hot Encoding : • One-Hot-One : chaque état correspond à un bit • One-Hot-Zero : idem sauf pour l’état de repos qui correspond à tous les bits à 0 (gain de 1 bit) Gestion des sorties Compléments VHDL - R.WEBER - Polytech'Orleans

  23. Les machines d’états ENTITY machine IS PORT ( clk, rst : in std_logic ; cond : in std_logic_vector(2 DOWNTO O) ; sortie: out std_logic_vector(2 DOWNTO 0)) ; END machine ; ARCHITECTURE arch OF machine IS CONSTANT etat0 : std_logic_vector(3 DOWNTO 0) := "0001"; CONSTANT etat1 : std_logic_vector(3 DOWNTO 0) := "0110"; CONSTANT etat2 : std_logic_vector(3 DOWNTO 0) := "1001"; CONSTANT etat3 : std_logic_vector(3 DOWNTO 0) := "0010"; CONSTANT etat4 : std_logic_vector(3 DOWNTO 0) := "0101"; SIGNAL etat: std_logic_vector(4 DOWNTO 0) ; BEGIN PROCESS(clk, rst) BEGIN IF rst='l' THEN etat <= etat0 ; ELSIF ( clk ' EVENT and clk= ' l' ) then CASE etat IS WHEN etat0 => etat <= etatl ; WHEN etatl => IF cond = "OOO" THEN etat <= etat0 ; ELSIF cond = "001" THEN etat <= etat4 ; ELSIF cond = "010" THEN etat <= etat3 ; ELSIF cond = "011" THEN etat <= etat2 ; ELSE etat <= etatl ; END IF ; WHEN etat2 => etat <= etat3 ; WHEN etat3 => IF cond = "110" THEN etat <= etat0 ; ELSE etat <= etat4 ; END IF ; WHEN OTHERS => etat <= etat0; END CASE; END IF; END PROCESS; sortie <= etat(2 downto 0); END ARCH; Machine à états codés avec les sorties Gestion des états Compléments VHDL - R.WEBER - Polytech'Orleans

More Related