Pourquoi certains microcontrôleurs ont-ils des retards de synchronisation aussi importants?


11

Sur les microcontrôleurs de la série Atmel SAM-D21, de nombreux périphériques utilisent une horloge qui est asynchrone à l'horloge du processeur principal, et les accès à ces périphériques doivent passer par une logique de synchronisation; sur les périphériques dont l'horloge est lente par rapport au temps CPU, cela peut ajouter des retards vraiment énormes. Par exemple, si le RTC est configuré pour utiliser une horloge de 1024 Hz (comme cela semble être l'intention de conception) et que le CPU fonctionne à 48 MHz, la lecture du registre "heure actuelle" entraînera l'insertion par la logique du bus de plus de 200 000 états d'attente (un minimum de cinq cycles de l’horloge 1024 Hz). Bien qu'il soit possible que le CPU émette une demande de lecture, exécute un autre code non lié et renvoie plus de 200 000 cycles plus tard pour récupérer l'heure, il ne semble pas y avoir de moyen de lire l'heure plus rapidement.

D'après ma compréhension de la synchronisation, un circuit de synchronisation à un bit retardera un signal de 2-3 cycles de l'horloge de destination; la synchronisation d'une quantité multi-bits est un peu plus difficile, mais il existe une variété d'approches qui peuvent garantir un comportement fiable dans les cinq cycles de l'horloge de destination si elle est plus rapide que l'horloge source, et seulement quelques cycles de plus si ce n'est pas le cas. Que ferait l'Atmel SAM-D21 qui nécessiterait six cycles dans le domaine de l'horloge source pour la synchronisation, et quels facteurs favoriseraient une conception dont les délais de synchronisation sont suffisamment longs pour nécessiter une interruption "synchronisation effectuée", par rapport à une interruption qui assure les délais de synchronisation sont suffisamment courts pour rendre ces interruptions inutiles?


2
Merci pour cette question. Cela m'a finalement permis de comprendre le problème à ma portée. Je suis venu ici parce que je ne comprenais pas pourquoi l'effacement du Watchdog Timer (WDT) prendrait près de 5 millisecondes énormes sur le SAMD20 / 21. Maintenant, je sais que c'est par la conception matérielle, pas une erreur. (Le WDT est cadencé à 1024 Hz, ce qui est la seule option raisonnable.) Maintenant, je peux au moins y faire face en conséquence.
T-Bull

2
@ T-Bull: La chose vraiment amusante à propos du chien de garde sur ces parties est qu'il est désactivé entre le moment où le logiciel émet la commande de réinitialisation et le moment où la commande passe par le synchroniseur. Si l'appareil se met en veille pendant cet intervalle, le chien de garde ne fonctionnera que si ou jusqu'à ce que quelque chose d' autre réveille la pièce.
supercat

Réponses:


2

C'est une façon différente de faire les choses pour moi, je suis habitué à mes architectures où mes registres sont soit sur mon horloge CPU, soit au moins la moitié de cette horloge. Vous écrivez donc vos registres et ils sont prêts tout de suite. Peut-être le font-ils de cette façon pour économiser de l'énergie? S'ils placent des registres périphériques dans leur propre domaine d'horloge très lent, ils n'ont peut-être pas à se réveiller et à exécuter l'oscillateur principal ou l'horloge du processeur, mais peuvent continuer à mettre à jour les valeurs sur le périphérique.

Si c'est le cas, vous pouvez écrire un registre dans votre bloc périphérique super lent, puis désactiver l'îlot d'alimentation pour l'ensemble du processeur ou de l'horloge, et laisser le synchroniseur lent le lire jusqu'à ce qu'il soit satisfait, puis interrompre le processeur pour le faire ressortir de sommeil.

Alternativement, il pourrait vous permettre de charger le maximum d'instructions dans votre temps de veille, au lieu de faire tourner six cycles et d'attendre chaque écriture.

Quant à savoir pourquoi ils utilisent autant de cycles de synchronisation, cela pourrait être de la paranoïa, ou ils pourraient répondre à une norme de fiabilité élevée pour l'un de leurs clients. Je ne peux pas le dire avec certitude, mais je sais que j'ai vu des clients ayant des demandes, comme chaque vérin doit avoir ecc et être préchargé à une valeur définie, etc.

Je suppose que ce n'est pas une réponse définitive, mais ce sont mes pensées après avoir parcouru un peu la fiche technique.


2
Les «six cycles» sont six cycles de l'horloge périphérique; si l'on règle par exemple le module d'horloge en temps réel à alimenter à 1024Hz (ce qui semble être la recommandation d'Atmel) et que l'horloge CPU est à 48MHz, six cycles de l'horloge périphérique seront 281,250 cycles de l'horloge CPU qui est terriblement longue le temps de tourner, surtout s'il y a des interruptions qui nécessitent un entretien. La rotation n'est modérément horrible que si l'horloge lente est de 8 MHz (ce qui signifie une rotation de 36 cycles CPU), mais une faute grave serait meilleure qu'une rotation sur une horloge de 1024 Hz.
supercat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.