-- Fichier : test_compteur_gen.vhd -- Societe : ENSEIRB -- Auteur : P.Nouel -- Date de creation : 12-93 -- Genericite, package, Test -- Revu en 1999, 2003 --------------------------------------------------------------- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE ieee.numeric_std.ALL; ENTITY test_compteur_gen IS END; --------------------------------------------------------------- USE WORK.utils.all; --pour acces a la fonction horloge ARCHITECTURE par_assertion OF test_compteur_gen IS COMPONENT compt GENERIC (Nb_Bits : natural ; --les valeurs par defaut Modulo : natural); -- sont optionelles PORT ( h, compter, raz : IN STD_ULOGIC; sortie : OUT std_logic_vector(Nb_bits-1 DOWNTO 0); retenue : OUT STD_ULOGIC); END COMPONENT; -- FOR C1 : compt USE ENTITY work.compteur_gen(asynchrone); FOR C1 : compt USE ENTITY work.compteur_gen(synchrone); CONSTANT Temps : TIME := 10 ns; CONSTANT M : natural := 17; CONSTANT N : natural := 5; SIGNAL h,ra,c, re : STD_ULOGIC; SIGNAL s : std_logic_vector(N-1 downto 0); BEGIN H1: horloge(h,Temps,Temps); -- frequence 50 Meg C1: compt GENERIC MAP ( N,M) -- compteur modulo 17 PORT MAP (h, c, ra, s, re); ra <= '1', '0' AFTER (Temps + Temps/2); c <= '1'; verif:PROCESS VARIABLE s0 : unsigned(N-1 downto 0); -- puisque le compteur fonctionne sur front montant, on le teste -- sur front descendant BEGIN WAIT UNTIL FALLING_EDGE(h); ASSERT unsigned(s) < To_unsigned(M,N) REPORT "sortie hors intervalle"; ASSERT (unsigned(s) - s0) < "00010" REPORT "on doit etre en fin de comptage"; s0 := unsigned(s); END PROCESS; END par_assertion;