Détecter le front d’un signal lent

On a souvent besoin de de traiter l’événement que constitue un front (montant ou descendant) d’un signal quelconque (donc lent par rapport à l’horloge). Pour rester conforme à la contrainte du synchronisme, il faut donc créer pour le signal lent une détection de front. On échantillonne le signal, on mémorise sa valeur, une succession 01 détecte un front montant, une succession 10 détecte un front descendant.

Detection: PROCESS
        VARIABLE detect : std_logic_vector(1 DOWNTO 0);
        BEGIN
            WAIT UNTIL rising_edge (clk); — c’est donc synchrone de clk
              front_montant <= ’0′;  front_descendant <= ’0′ ;
             detect(1) := detect(0);
             detect(0) := signal_lent;
             IF detect = « 01″ THEN
front_montant <= ’1′;
END IF;

             IF detect = « 10″ THEN
front_descendant <= ’1′;
END IF;

        END PROCESS; 

Observation:

  • Les signaux front_montant ou front_descendant vont servir de condition logique (ENABLE) dans un PROCESS de traitement
  • On n’a toujours qu’une seule horloge qui est clk

Écriture standard (circuit synchrone)

L’horloge choisie doit être le signal le plus rapide du système c’est à dire celui qui donnera le temps minimal d’échantillonnage des autres signaux (qualifiés de lent). ==> UNE SEULE HORLOGE
Chaque fois que l’on écrit h’event AND…, le synthétiseur comprend que h est une horloge.

Si le circuit est synchrone, tous les processus avec mémorisation par registres devront s’écrire:

synchrone: PROCESS
BEGIN
WAIT UNTIL rising_edge (clk); — c’est donc synchrone de clk
IF clear = ’1′ THEN
q <= OTHERS => ’0′; — remise à zéro synchrone
ELSIF condition_logique THEN — Entrée Enable des bascules D
q <= entree_particuliere;
END IF;
END PROCESS;

Remarques:

  • Préférer le WAIT UNTIL plus explicite à la liste de sensibilité (Clk) suivie d’un IF rising_edge(clk)
  • Autant de rising_edge sur des signaux différents autant d’horloges. Dans les cas simple, une seule horloge suffit
  • Si l’on doit traiter des signaux lents par rapport à l’horloge, ils interviennent au niveau de l’ »enable » c’est à dire de la condition logique du PROCESS. Par exemple, l’horloge est à 50 MHz, on veut compter un signal qui provient touts les Millisecondes. La condition logique sera vraie pendant une seule période de base toutes les millisecondes ( voir aussi exemple suivant)

Mon école préférée

Mon école préférée