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

Compléments VHDL - R.WEBER - Polytech'Orleans

Présentations similaires


Présentation au sujet: "Compléments VHDL - R.WEBER - Polytech'Orleans"— Transcription de la présentation:

1 Compléments VHDL - R.WEBER - Polytech'Orleans
Polytech'Orléans Filière ESI MODULE Conception Numérique avancée Complements VHDL FASCICULE DE COURS ANNÉE SPE 4 Option “SE” Dr. Rodolphe WEBER Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

2 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

3 Compléments VHDL - R.WEBER - Polytech'Orleans
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 : in std_logic; c : out integer); end essai; architecture archi1 of essai is Signal s1, s2 : std_logic; begin . end archi1; Description de l’interface Description du comportement de l’entité. Pour une même entité plusieurs architectures sont possibles. a c s1 s2 b Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

4 Compléments VHDL - R.WEBER - Polytech'Orleans
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 : in std_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 Compléments VHDL - R.WEBER - Polytech'Orleans

5 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

6 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

7 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

8 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

9 Compléments VHDL - R.WEBER - Polytech'Orleans
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)); po<=temp; end archi; -- constant vcc : std_logic :='1'; Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

10 Compléments VHDL - R.WEBER - Polytech'Orleans
Compilation conditionnelle Configuration configuration permet d'établir la correspondance avec un composant existant : Pour cibler un composant seul for label: composant_cible use entity librairie.composant_source(nom_architecture); end for; Pour cibler une famille de composant for all composant_cible use entity librairie.composant_source(nom_architecture); end for; Pour cibler le reste for others composant_cible use entity librairie.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 : for label: composant_cible use configuration librairie.nom_configuration end for; Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

11 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

12 Compléments VHDL - R.WEBER - Polytech'Orleans
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 <= valeur after durée absolue, valeur after duré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"; B <= "1111"; 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 Compléments VHDL - R.WEBER - Polytech'Orleans

13 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Action Effets NOTE poursuite néant WARNING écriture sur fichier .log ERROR écriture sur écran FAILURE arrêt écriture sur fichier 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 Compléments VHDL - R.WEBER - Polytech'Orleans

14 Compléments VHDL - R.WEBER - Polytech'Orleans
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 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; e3 e-1 Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

15 Vision comportementale
Règles de Conception Rappels d’électronique numérique Système combinatoire (asynchrone) : [b2,b1,b0]=f(a3,a2,a1,a0) [b2,b1,b0] [a3,a2,a1,a0] mémoire f(a3,a2,a1,a0) Fonctionnellement Vision comportementale Niveaux logiques 1 2 3 a0 and b0 a1 delay or mult b1 a2 a3 xor not b2 Mais temporellement : a b 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 Compléments VHDL - R.WEBER - Polytech'Orleans

16 Design Synchrone Améliore les performances en vitesse
Règles de Conception Design Synchrone clk1 (Registre = flip-flop = bascule D = Z-1) « Q=D au front de clk1, sinon Q=Q » registre D Q Feed-back combinatoire logique combinatoire logique combinatoire logique combinatoire a b c d e f g logique combinatoire clk2 a(n-1) b(n-1) c(n)=b(n-1) d(n) e(n+1)=d(n)) f(n+1) g(n+2)) ^ 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 Compléments VHDL - R.WEBER - Polytech'Orleans

17 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

18 Compléments VHDL - R.WEBER - Polytech'Orleans
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 Compléments VHDL - R.WEBER - Polytech'Orleans

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

20 Compléments VHDL - R.WEBER - Polytech'Orleans
Les machines d’états Machines d’états Autre concept s(2) s(1) s(0) E0 1 E1 E2 E3 E4 Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

21 Compléments VHDL - R.WEBER - Polytech'Orleans
Les machines d’états 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) 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 ; 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; Machine à états codés Gestion des états des sorties Gestion version synchronisée Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

22 Compléments VHDL - R.WEBER - Polytech'Orleans
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(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) 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 ; 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; Machine à états décodés 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) des sorties Gestion Compléments VHDL - R.WEBER - Polytech'Orleans Compléments VHDL - R.WEBER - Polytech'Orleans

23 Compléments VHDL - R.WEBER - Polytech'Orleans
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) 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 ; 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 Compléments VHDL - R.WEBER - Polytech'Orleans


Télécharger ppt "Compléments VHDL - R.WEBER - Polytech'Orleans"

Présentations similaires


Annonces Google