Chargement…
Chargement…
Le bloc lance une mesure à la demande, attend un premier front montant, puis compte les cycles jusqu'au front montant suivant.
Comportement
i_signal passe d'abord dans un synchroniseur à deux bascules et un détecteur de front.i_start est acceptée lorsque o_ready='1'.o_period_cycles contient l'écart exact entre les deux fronts synchronisés.o_done pulse pendant un cycle avec le résultat.g_max_period_cycles, la sortie est saturée à cette valeur et o_overflow pulse avec o_done.Le signal mesuré doit rester suffisamment longtemps à 0 et à 1 pour être observé par l'horloge système après synchronisation. Le circuit mesure des fronts échantillonnés, pas une fréquence supérieure à ce que l'horloge peut observer.
La fréquence peut être calculée ensuite avec f_signal = f_clk / o_period_cycles. Cette division ne fait pas partie de l'exercice.
| Élément | Direction | Largeur | Description |
|---|---|---|---|
g_max_period_cycles | Générique | entier positif | Plus grande période acceptée, 100 000 000 par défaut |
i_clk | Entrée | 1 bit | Horloge système |
i_reset | Entrée | 1 bit | Reset asynchrone actif haut |
i_start | Entrée | 1 bit | Lance une mesure lorsque le bloc est prêt |
i_signal | Entrée | 1 bit | Signal asynchrone à mesurer |
o_ready | Sortie | 1 bit | Une nouvelle mesure peut commencer |
o_done | Sortie | 1 bit | Résultat valide pendant un cycle |
o_overflow | Sortie | 1 bit | Période supérieure à la limite |
o_period_cycles | Sortie | 32 bits | Période mesurée en cycles système |