Question:
Comment mesurer la différence de phase de deux signaux de même fréquence dans un FPGA?
cksa361
2012-09-24 05:05:15 UTC
view on stackexchange narkive permalink

Comment mesurer la différence de phase de deux signaux de même fréquence dans un FPGA?

Par exemple, disons que j'ai deux signaux de 150 MHz (internes au FPGA) qui sont synchrones entre eux, mais ils sont compensés par une différence de phase constante, comment pourrais-je mesurer cela?

J'ai recherché des méthodes existantes d'un convertisseur temps-numérique sur un FPGA, mais celles-ci concernent principalement deux signaux de démarrage et d'arrêt et mesure du temps entre ces deux événements. Je me demande s'il existe une meilleure méthode si nous savons que les signaux se répètent avec une différence de phase constante?

Êtes-vous limité à quel appareil ou famille FPGA vous pouvez utiliser?
Avec quelle précision voulez-vous mesurer l'angle de phase?
Six réponses:
Chris Stratton
2012-09-24 06:47:35 UTC
view on stackexchange narkive permalink

Utilisez l'un des blocs d'horloge PLL du FPGA pour générer une fréquence légèrement différente, peut-être 140 MHz ou tout ce que vous pouvez faire. XOR ceci avec chacun des signaux d'intérêt (en accordant une certaine attention théorique aux problèmes de métastabilité possibles, mais en vous satisfaisant, cela fonctionnera assez souvent). Comparez les phases des deux résultats de fréquence inférieure.

En effet, c'est la même chose que le fonctionnement d'un récepteur radio hétrodyne - vous mélangez le signal entrant avec un oscillateur local et générez un résultat de fréquence plus basse plus pratique pour un traitement détaillé.

Puisque vous avez essentiellement un système numérique à un bit, votre résultat sera par étapes discrètes déterminées par la différence de fréquence - plus votre fréquence LO est proche de la fréquence d'entrée, plus le résultat est fin, mais moins fréquemment, vous produirez une réponse. La stabilité de phase et du cycle de service du bloc PLL à divers rapports mériterait d'être étudiée. La moyenne de plusieurs mesures vous donnera probablement une meilleure réponse.

Vous allez avoir besoin d'une sorte de filtre passe-bas pour séparer la fréquence de battement inférieure de la fréquence supérieure.
@DaveTweed En fait, vous ne le ferez pas - la fréquence la plus élevée est théoriquement présente si vous interprétez le flux de données de 140 ou 150 Msps par seconde en travaillant à l'envers via la règle de Nyquist, mais sa représentation littérale serait une fréquence négative, ce qui dans ce cas est indiscernable . Il peut être plus facile d'y penser en termes de logique numérique, où vous obtiendrez une sortie qui est de 1 pendant un certain temps, jusqu'à ce qu'elle passe à 0, puis finalement à 1.
Je vous suggère d'exécuter votre idée sur n'importe quel simulateur logique standard. Ce que vous verrez à la sortie de la porte XOR est une forme d'onde qui a essentiellement une fréquence de 290 MHz, mais dont le rapport cyclique varie de 0% à 100% et inversement avec une période de 10 MHz. Si vous rééchantillonnez ce signal (avec quelle horloge?), Vous devez le dire.
J'aurais probablement dû dire explicitement le rééchantillonnage; en fait, il est implicite dans l'hypothèse d'utiliser la logique synchrone (à l'une ou l'autre des horloges) pour évaluer le résultat.
Je peux comprendre ce que Dave a dit. Comment "rééchantillonner" le signal XOR (c'est-à-dire rééchantillonner avec quelle horloge?)?
Vous n'avez pas besoin de le faire - en supposant que vous traitez dans un bloc synchrone à l'une ou l'autre des horloges, le rééchantillonnage est déjà fait pour vous car vous ne "regardez" en fait que le signal au bord de l'horloge (configuration plus / moins / temps d'attente)
Jay Carlson
2012-09-24 05:19:34 UTC
view on stackexchange narkive permalink

Vous recherchez un détecteur de phase. Presque tous les FPGA ont un module PLL conçu principalement pour générer des signaux d'horloge. Certains d'entre eux peuvent être pilotés avec un signal interne. Je ne sais pas si vous pouvez retirer le signal du détecteur de phase de la PLL, mais j'en doute fortement.

Vous pouvez implémenter un détecteur de phase dans un FPGA haut de gamme (voir ce Vertex note d'application), mais cela semble demander beaucoup de travail, en particulier pour quelque chose qui est une opération analogique relativement simple, pour laquelle il existe des circuits intégrés standard, comme les Analog Devices AD8302. Mais vous connaissez votre plate-forme mieux que moi - peut-être n'avez-vous pas accès aux modifications matérielles.

user3624
2012-09-24 23:44:31 UTC
view on stackexchange narkive permalink

Les FPGA Xilinx ont une fonction dans le bloc "Digital Clock Manager" qui permet un biais de sortie programmable. Cette asymétrie de sortie peut être modifiée au moment de l'exécution par petits incréments (10 de pS si je me souviens bien).

Vous avez 2 horloges, nous les appellerons A et B. L'horloge A est votre horloge principale dont presque toute votre logique est exécutée. L'horloge B est exécutée à travers un DCM avec inclinaison, puis vers un T-Flip-Flop, créant un signal qui bascule sur chaque bord de B.Cette sortie de basculement est ensuite exécutée vers un D-Flip-Flop qui est cadencé avec A.

Ce que vous faites maintenant est de balayer le biais sur B et de regarder les résultats lorsqu'il est échantillonné par A. Lorsque vous balayez le réglage du décalage d'horloge, la sortie de ce D-Flip-Flop commencera à une valeur, puis passez à une autre.

À certains égards, cette méthode est similaire à ce que @JasonMorgan a proposé - mais ne nécessite pas beaucoup de retards logiques pour s'assurer que ces 360 tampons ont un délai cohérent de la compilation à la compilation (cela a gagné 't).

J'ai fait quelque chose de très similaire dans un Xilinx Spartan-3 et cela a très bien fonctionné.

pourquoi auriez-vous besoin du T-flip-flop?
Les FPGA @cksa361 ont généralement des ressources de routage d'horloge et des ressources de routage de signal et (presque) jamais les deux ne doivent être mélangés. Cela évite simplement beaucoup de problèmes. Le T-Flip-Flop est fondamentalement un moyen de déplacer les "informations" d'horloge d'un réseau d'horloge vers un réseau de signaux sans avoir à faire quelque chose de bizarre (comme le mixage des ressources d'horloge et de routage du signal)
Jason Morgan
2012-09-24 20:41:48 UTC
view on stackexchange narkive permalink

Je ne sais pas si cela fonctionnerait, c'est juste une idée. Mais cela évite d'avoir besoin d'une horloge d'échantillonnage à haute vitesse pour mesurer la distance dans le temps entre vos signaux.

Vous pouvez utiliser les retards (assez) déterministes dans l'appareil et le grand nombre de portes, en particulier si vous travaillez dans un environnement à température restreinte ou contrôlée. Vous aurez besoin d'un filtre de boucle externe, un circuit CR et peut-être un tampon schmidt devrait faire le travail. Vous devrez dire à votre installateur de ne pas optimiser les portes.

Prenez votre référence et appliquez-la à une porte XOR. Prenez le signal mesuré et retardez-le, par exemple 360 tampons en série.Prenez les 360 sorties des tampons et (avec les contraintes appropriées) passez-les à travers un multiplex 360: 1 (portes 360 ET et un décodeur) .Passez la sortie du multiplexeur dans la porte XOR.Passez la sortie de la porte XOR dans le filtre de boucle, puis prenez l'entrée et utilisez-la pour cadencer un compteur. 1 ms Le circuit de contrôle parcourt le multiplex toutes les 1 ms, à la recherche du plus petit nombre. L'état du multiplexeur à ce moment-là est l'angle de phase en degrés.

Alan Campbell
2014-09-22 10:29:01 UTC
view on stackexchange narkive permalink

Supposons que vous ayez une horloge à 600 MHz et un compteur. Commencez à compter avec la première tranche d'un signal, arrêtez le compteur [résultat de lecture] avec le front montant du deuxième signal.
La résolution est fonction de la différence entre les fréquences d'échantillonnage et d'horloge.
600/150 = 4 donc vous obtenir une résolution de phase de 4 étapes [ou 90 degrés].

Vous voulez une meilleure résolution, tout en restant avec un FPGA? OK, mais ça devient un peu génial ...

Tout d'abord, vous avez besoin de 2 circuits, "lead" et "lag". Nous devons également étiqueter nos signaux "T" [Test] et "R" [Référence]. Le "lead" est: T AND (NOT R). "Lag" est: R AND (NOT T)
En fonction de l'avance ou du retard, l'un d'eux produira un signal avec une largeur d'impulsion proportionnelle à la différence de phase. Mettez chaque sortie à travers des filtres passe-bas séparés, probablement à environ 1 MHz.
Enfin, lisez: http://www.latticesemi.com/~/media/Documents/WhitePapers/AG/CreatingAnADCUsingFPGAResources.PDF?document_id=36525
Ceci explique comment implémenter un CAN SAR dans un FPGA. Numérisez les signaux filtrés "lead" et "lag": le plus grand vous donnera la magnitude de phase et le signe.

EDIT: Ma description de la porte logique n'est pas correcte. Recherchez un détecteur de phase pour un schéma approprié

betontalpfa
2019-10-21 12:48:05 UTC
view on stackexchange narkive permalink

Utilisez deux PLL.Générez une fréquence aussi basse que possible, à partir des deux signaux haute fréquence.Disons 150 MHz -> 15 MHz.La différence de phase restera la même entre les deux signaux basse fréquence.Mesurez ensuite la phase de ces signaux lents.(XOR-les ou utilisez toute autre logique)



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...