-- Fichier : verif_pkg.vhd -- Synthetisable ? : NON -- Société : ENSERB -- Auteur : P.Nouel -- Date de création : Mars 97 d'apres AIRIAU et all -- Contenu : Procedures de vérifications de timing -- : Attributs, procédures, surcharge -- Type bit uniquement , à adapter à std_logic -------------------------------------------------------------------------------- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; -- USE ieee.numeric_std.ALL; PACKAGE verif_pkg IS TYPE min_max IS (minimum ,maximum); TYPE bas_haut IS (bas,haut); CONSTANT borne : natural := 7; PROCEDURE verif_precond (SIGNAL h, d : IN bit; Tsetup : IN TIME); PROCEDURE verif_precond (SIGNAL h, d : IN STD_ULOGIC; Tsetup : IN TIME); PROCEDURE verif_precond (SIGNAL h : IN bit; SIGNAL d : IN bit_VECTOR; Tsetup : IN TIME); PROCEDURE verif_maintien (SIGNAL h, d : IN bit; Thold : IN TIME); PROCEDURE verif_maintien (SIGNAL h, d : IN STD_ULOGIC; Thold : IN TIME); PROCEDURE verif_impulsion (SIGNAL s : IN std_ulogic; niveau : IN bas_haut; sens : IN min_max; Duree : IN TIME); END; PACKAGE BODY verif_pkg IS PROCEDURE verif_precond (SIGNAL h, d : IN bit; Tsetup : IN TIME) IS BEGIN WAIT UNTIL h'LAST_VALUE = '0' AND h = '1' ; ASSERT d'LAST_EVENT > Tsetup REPORT "Violation du temps de preconditionnement" SEVERITY WARNING; END verif_precond; PROCEDURE verif_precond (SIGNAL h, d : IN STD_ULOGIC; Tsetup : IN TIME) IS BEGIN WAIT UNTIL h'LAST_VALUE = '0' AND h = '1' ; ASSERT d'LAST_EVENT > Tsetup REPORT "Violation du temps de preconditionnement" SEVERITY WARNING; END verif_precond; PROCEDURE verif_precond (SIGNAL h : IN bit; SIGNAL d : IN bit_VECTOR; Tsetup : IN TIME) IS BEGIN WAIT UNTIL h'LAST_VALUE = '0' AND h = '1' ; ASSERT d'LAST_EVENT > Tsetup REPORT "Violation du temps de preconditionnement" SEVERITY WARNING; END verif_precond; PROCEDURE verif_maintien (SIGNAL h, d : IN bit; Thold : IN TIME)IS VARIABLE t : time; BEGIN WAIT UNTIL h'LAST_VALUE = '0' AND h = '1' ; t := NOW; WAIT FOR Thold; ASSERT d'LAST_EVENT > (NOW-t) REPORT "Violation du temps de maintien" SEVERITY WARNING; END verif_maintien; PROCEDURE verif_maintien (SIGNAL h, d : IN STD_ULOGIC; Thold : IN TIME)IS VARIABLE t : time; BEGIN WAIT UNTIL h'LAST_VALUE = '0' AND h = '1' ; t := NOW; WAIT FOR Thold; ASSERT d'LAST_EVENT > (NOW-t) REPORT "Violation du temps de maintien" SEVERITY WARNING; END verif_maintien; PROCEDURE verif_impulsion (SIGNAL s : IN std_ulogic; niveau : IN bas_haut; sens : IN min_max; Duree : IN TIME) IS VARIABLE t1, t0 : TIME; TYPE chaine IS ARRAY( 0 TO 1 ) OF string (1 TO 4); CONSTANT Message : chaine := ("bas ", "haut"); BEGIN WAIT UNTIL s = std_ulogic'val(bas_haut'pos(niveau)+2); t0 := NOW; WAIT UNTIl s /= std_ulogic'val(bas_haut'pos(niveau)+2); t1 := NOW; IF sens = minimum THEN ASSERT t1-t0 >= Duree REPORT " Duree minimale à l'état " & Message(bas_haut'pos(niveau)) & " non respectee"; ELSE ASSERT t1-t0 <= Duree REPORT " Duree maximale à l'état " & Message(bas_haut'pos(niveau)) & " non respectee"; END IF; END verif_impulsion; END;