240 likes | 529 Views
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
E N D
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Règles de Conception Exemple : implantation d’un filtre d’ordre 2 Compléments VHDL - R.WEBER - Polytech'Orleans
Les machines d’états Machines d’états Autre concept Compléments VHDL - R.WEBER - Polytech'Orleans
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
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
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