Posted on décembre 1st, 2007 par Patrice Nouel
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
No Comments »
Filed under: Conseils
Posted on décembre 1st, 2007 par Patrice Nouel
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)
No Comments »
Filed under: Conseils
Posted on novembre 23rd, 2007 par Patrice Nouel