Je cherche à implémenter un verrouillage de phase dans un FPGA sans utiliser de composants externes (autres que l'ADC). Pour plus de simplicité, le verrouillage sur une simple impulsion binaire est adéquat. La fréquence des signaux est de ~ 0,1-1% de l'horloge. Je ne peux pas utiliser les PLL d'horloge embarquée car elles sont généralement:
- Non configurable (défini lors de la synthèse).
- Nerveux.
- Ne supporte pas la fréquence dont j'ai besoin.
J'ai parcouru la littérature et trouvé quelques boucles à verrouillage de phase binaire. Le plus remarquable est une conception de "vol de pouls" à laquelle je peux poster un lien si vous le souhaitez. J'ai implémenté et synthétisé avec un certain succès, mais sa plage de gigue et de verrouillage n'était pas aussi bonne que celle annoncée. J'ai également réussi à utiliser un DVCO externe, mais je préférerais que je puisse tout implémenter sur puce.
Une conception de circuit numérique ou même un indice dans la bonne direction serait utile (je me suis cogné la tête contre cela pendant un certain temps), une mise en œuvre éprouvée du FPGA serait merveilleuse mais non attendue.
ADDED 10-27-2010
La conception DPLL réelle que j'ai utilisée a un "Random Walk Filter" comme filtre de boucle (pas le "pouls de vol" décrit plus haut, passant par mes notes qui ne fonctionnaient pas trop bien), qui entraîne ensuite les impulsions d'horloge vers le DCO . La plage de verrouillage est définie via un diviseur dans le DCO. La sensibilité de la boucle est établie en variant la longueur de la marche aléatoire.
Le document dans lequel cela se trouve est cité à la fin de ce post. Après avoir implémenté moi-même des parties de celui-ci, j'ai constaté qu'il était en fait déjà implémenté sur OpenCores, mais il s'avère qu'au cours des derniers mois, le projet a été supprimé, mais j'ai les fichiers Verilog enregistrés si quelqu'un le veut.
Yamamoto, H .; Mori, S .; , «Performance of Binary Quantized All Digital Phase-Locked Loop with a New Class of Sequential Filter», Communications, IEEE Transactions on, vol. 26, no 1, pp. 35-45, janv. 1978
doi: 10.1109 / TCOM.1978.1093972
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1093972&isnumber=23895
Réponses:
Pouvez-vous publier plus de détails concernant la fréquence cible, la gigue et la bande passante de la boucle (temps de stabilisation requis)? Aussi, quel type d'oscillateur souhaitez-vous utiliser (externe avec un DAC, avec / sans tramage?, Un compteur / accumulateur numérique sur puce)?
Si vous êtes satisfait d'un "oscillateur" numérique (c'est-à-dire un accumulateur débordant) et de sa gigue, le reste du circuit peut être assez simple:
Quant à la bande passante de la boucle, si elle n'est pas imposée par le temps de stabilisation, décidez-la en fonction des contributions de bruit de tous les composants.
Dans le cas où le signal de référence est modulé en phase ou en fréquence - utilisez une bande passante de boucle inférieure à la plus petite fréquence du signal modulant la référence.
Des techniques plus délicates sont utilisées si la fréquence de sortie est proche ou égale à la fréquence d'horloge et / ou si la faible gigue ou la plage de verrouillage très rapide est requise. Peut-être que dans votre cas, ils ne sont pas nécessaires, en plus ils peuvent ne pas être bien adaptés à une implémentation FPGA.
la source
Si vous pouvez tolérer un peu de gigue mais que vous avez surtout besoin d'une synchronisation précise par rapport à une horloge dérivante pour la récupération de données, vous voudrez peut-être implémenter quelque chose comme la PLL CAN Standard (commence à la page 67 de ce PDF). Cela fonctionne sur la base d'un compteur de débordement qui doit être réglé nominalement correctement, mais se synchronise jusqu'aux fronts du flux d'impulsions entrant.
la source