• [^] # Re: Il manque une synchronisation

    Posté par (site web personnel, Mastodon) . En réponse au journal Un composant électronique TapTempo avec Chisel3. Évalué à 2.

    Si je ne trompes pas (ça fait des années que je n'ai pas fait de Chisel, et encore moins du Chisel3), il manque une resynchronisation du signal button par rapport à l'horloge timepulse...

    Nope, pas de problème de resynchronisation entre timepulse et count, car timepulse n'est pas une horloge. C'est un signal qui passe à '1' quand le compteur déborde (et repasse à zero) :

     val (pulsecount, timepulse) = Counter(true.B, PULSE_NS/tclk_ns)

    La valeur de timpulse est ensuite utilisée avec la fonction risingedge() définie avant :

     def risingedge(x: Bool) = x && !RegNext(x)

    Cette fonction «sauvegarde» la valeurs précédente du signal 'x' et s'en sert pour détecter un front montant en regardant la valeur présente du même signal. La sauvegarde se fait avec un registre (RegNext()).

    Tout le code présenté est cadencé avec une seule horloge. Cette horloge est implicite, on ne la voit pas dans le code. Il n'y a donc pas de franchissement de domaine d'horloge ... sauf pour le signal d'entrée mais comme dit dans l'article : c'est quelque chose qu'il faut ajouter à l'intégration dans le FPGA.

    J'ai plus qu'une balle