Cette page est la septième d'une série de pages présentant le transcepteur multi-gigabits (MGT).
Introduction
On pourrait naturellement s'attendre à ce que l'essentiel du travail de configuration d'un MGT de FPGA concerne le traitement des données et le choix du bon protocole. Il est donc souvent surprenant de constater tout le temps et tous les efforts nécessaires pour bien régler la génération des horloges (clocking). La majeure partie de cet effort consiste généralement à démêler les différentes options que le MGT propose concernant ses ressources d'horloge, ainsi que les restrictions qu'elles imposent.
Les règles de conception relatives aux horloges du MGT étant différentes d'un FPGA à l'autre, la seule source fiable d'informations précises et complètes sur le sujet est la documentation propre du MGT. Cette documentation est généralement axée sur les mécanismes et leurs détails, mais elle n'explique pas toujours pourquoi ces mécanismes sont nécessaires. Cette page tente de combler cette lacune en examinant les concepts et les difficultés liés aux horloges utilisées par un MGT.
PLL et VCO
De manière générale, les PLL multiplient la fréquence d'une horloge de référence par une constante. Cette constante est parfois un entier, mais elle peut aussi être un nombre fractionnaire, et même être inférieure à 1. Autrement dit, la fréquence en sortie d'une PLL peut être plus basse que celle de l'horloge de référence. C'est rarement le cas pour les PLL utilisées avec des MGT, mais cela peut être utile pour les PLL destinées à la logique programmable.
Dans un FPGA, il existe des PLL distinctes destinées à générer les horloges nécessaires aux MGT. Les PLL et les autres ressources d'horloge rattachées à la logique programmable ne sont pas capables de supporter les fréquences exigées par un MGT. En particulier, le MGT a besoin d'une horloge dont la fréquence est au moins égale à la moitié du débit. Pour les débits faibles, la fréquence requise peut être plus élevée.
Par exemple, pour un débit de 5 Gb/s, l'horloge binaire tourne généralement à 2,5 GHz. Cela tient au fait que le SERDES du MGT est activé sur les deux fronts de l'horloge (DDR). En revanche, si le débit est relativement faible, la sortie de la PLL du MGT peut être divisée pour obtenir une fréquence plus basse.
La quasi-totalité des PLL fonctionnent selon le même principe : la partie centrale est un VCO (oscillateur commandé en tension, Voltage Controlled Oscillator) capable de générer une horloge sur une plage de fréquences. La sortie du VCO est envoyée dans un diviseur d'horloge qui divise la fréquence par un nombre constant. La sortie du diviseur est comparée à l'horloge de référence de la PLL. Un mécanisme de contrôle ajuste la fréquence du VCO pour que l'horloge de référence et la sortie du diviseur soient alignées. Autrement dit, ces deux signaux ont la même fréquence et la même phase.
Revenons à l'exemple du débit de 5 Gb/s et supposons que la fréquence de l'horloge de référence soit de 125 MHz. Une implémentation possible pour la PLL consiste à diviser la sortie du VCO par 20. Le signal divisé est comparé et aligné sur l'horloge de référence. La fréquence du VCO doit donc être de 2500 MHz, car 2500 MHz / 20 = 125 MHz.
Cette méthode de création d'horloge convient à la transmission de bits : le MGT émetteur décide seul du début et de la fin de la période de chaque bit. En revanche, lorsque le MGT reçoit des bits, c'est l'autre côté qui impose le rythme de chaque bit. Le récepteur doit donc s'adapter au flux de données qui arrive. Comme mentionné sur l'une des pages précédentes, ce mécanisme d'adaptation s'appelle la récupération d'horloge et de données (Clock Data Recovery, CDR). L'implémentation de la CDR comprend une boucle de contrôle qui ajuste la fréquence du VCO afin de synchroniser l'horloge du récepteur sur le flux de données entrant. L'horloge de référence est utilisée de temps en temps pour placer le VCO à une fréquence initiale suffisamment proche de la fréquence attendue. L'horloge de référence est ensuite ignorée une fois la synchronisation obtenue.
Utilisation des PLL
Les PLL destinées aux MGT dans un FPGA sont un sujet compliqué. Chaque MGT peut recevoir son horloge de plus d'une PLL. S'il n'y a qu'une seule application utilisant des MGT dans le projet FPGA, les outils choisissent généralement la PLL la plus adaptée automatiquement. En revanche, si les MGT servent à des fins différentes dans un projet, il est important de veiller à ce que chaque MGT soit relié à la PLL la plus appropriée.
Dans un FPGA, il y a en général des PLL partagées entre plusieurs MGT. AMD (Xilinx) les appelle QPLL, et Altera dispose de fPLL et d'ATX PLL. À l'inverse, il existe des PLL locales à un MGT donné. Elles sont appelées CPLL (AMD / Xilinx) ou CMU PLL (Altera). Les PLL locales sont généralement de qualité inférieure et offrent moins de possibilités que les PLL partagées. Les différences peuvent concerner la plage de fréquences, la gigue (jitter) et les rapports de multiplication possibles par rapport à l'horloge de référence.
Chaque FPGA possède un ensemble de règles complexes qui définissent comment les PLL et les MGT peuvent être interconnectés. Ces règles définissent aussi les possibilités de relier les PLL aux entrées d'horloge de référence du FPGA. On ne peut donc pas tenir pour acquis que tous les MGT pourront être connectés aux horloges dont ils ont besoin. C'est très différent des horloges de la logique programmable, pour lesquelles il n'y a pratiquement aucune restriction.
Il est donc recommandé de lire attentivement la fiche technique avant de décider quelle PLL choisir pour chaque MGT. Il est notamment important de vérifier qu'il est possible d'alimenter tous les MGT avec leurs horloges lors de la conception d'un circuit imprimé (PCB). On peut le faire en créant un projet FPGA qui inclut tous les MGT nécessaires et en s'assurant que l'implémentation de ce projet réussit et que toutes les broches sont placées aux bons endroits.
Horloge de référence
Le FPGA dispose de broches séparées pour les horloges de référence destinées aux PLL des MGT. Dans la conception d'un PCB, il est important de vérifier qu'une entrée d'horloge de référence peut être utilisée avec les MGT auxquels cette horloge est destinée. L'interconnexion entre les entrées d'horloge de référence, les PLL et les MGT ne permet pas toutes les combinaisons possibles. Les combinaisons autorisées sont décrites dans la documentation du FPGA, mais il peut être difficile d'arriver à une conclusion définitive, car les règles sont parfois compliquées. Il vaut souvent mieux s'assurer que les besoins sont couverts à l'aide de projets FPGA.
Les horloges utilisées à cette fin doivent être de haute qualité en termes de précision et de faible gigue (jitter). Une erreur fréquente consiste à connecter une horloge générée par une puce d'horloge à usage général. Cela dégradera probablement les performances du MGT et provoquera des défauts qui ressemblent à des problèmes d'intégrité du signal ou à un bruit ajouté sur les fils de données.
Si le MGT est destiné à un protocole précis (par exemple PCIe, SuperSpeed USB ou SATA), il est recommandé de lire la documentation du fabricant du FPGA concernant les exigences relatives à l'horloge de référence. Certains composants électroniques étiquetés comme « source d'horloge à faible gigue » peuvent ne pas être assez bons.
La gigue est un processus aléatoire. Son amplitude est un paramètre important, mais pas toujours suffisant. Le caractère aléatoire de la gigue d'une horloge peut provoquer des variations rapides de la période, et ces variations peuvent aussi être lentes. Le comportement de la gigue à cet égard peut être déduit du spectre de bruit de la gigue.
La fiche technique du composant qui génère l'horloge ne donne parfois qu'un chiffre pour l'amplitude de la gigue (généralement mesurée en picosecondes). Les informations sur le spectre de bruit de la gigue sont souvent indisponibles. Il est possible qu'un tel composant convienne malgré cette absence d'information, en particulier si l'amplitude de la gigue est de toute façon extrêmement faible. Il n'y a souvent pas de réponse simple à cette question.
La qualité de l'horloge de référence n'en reste pas moins importante pour toute utilisation du MGT. Les exigences des protocoles bien connus constituent une bonne référence utilisable dans n'importe quel projet. Il est aussi utile de comparer avec les composants employés comme horloges de référence sur les cartes de développement.
Horloges pour la logique programmable
L'horloge utilisée pour l'interface entre le MGT et la logique programmable provient de la PLL propre du MGT. Cela est nécessaire, car à l'intérieur du PMA, le SERDES repose sur deux horloges : l'horloge correspondant aux bits sur le canal physique, et l'horloge utilisée avec les mots parallèles. Pour que le SERDES fonctionne correctement, ces deux horloges doivent être alignées à l'intérieur du PMA.
En revanche, toute horloge utilisée par la logique programmable doit être distribuée de manière à garantir un faible décalage d'horloge (clock skew). Un tampon d'horloge global (global clock buffer) est souvent choisi par les outils à cette fin. Le délai de propagation (propagation delay) du tampon d'horloge à tous les éléments logiques est presque identique, si bien que les fronts d'horloge arrivent simultanément à toutes les destinations. C'est une condition nécessaire pour que les outils puissent effectuer des calculs de timing corrects en ce qui concerne la logique programmable.
Même si ce délai de propagation est uniforme sur tous les fils, il n'est pas nécessairement faible. Au contraire, les fils à l'intérieur du FPGA qui relient le tampon d'horloge à ses destinations ajoutent un délai considérable. Cela n'a généralement pas d'importance, car les différences entre toutes ces connexions sont faibles.
Mais ce délai fait que les deux horloges utilisées par le PMA ne sont pas alignées avec l'horloge de la logique programmable. Il est impossible d'aligner ces trois horloges à l'aide des ressources de la logique programmable, car l'une d'elles a une fréquence trop élevée. Et pourtant, le MGT et la logique programmable doivent avoir une horloge avec laquelle les deux côtés sont synchrones. La seule solution est d'ajouter un autre signal d'horloge.
Tout cela revient au fait qu'il faut au moins trois signaux d'horloge pour chaque direction :
- L'horloge synchrone avec les bits sur le canal physique. Sa fréquence est souvent la moitié du débit (2,5 GHz dans l'exemple ci-dessus).
- L'horloge synchrone avec le mot parallèle à l'intérieur du PMA. Cette horloge est parfois appelée XCLK. Par exemple, si le PMA dialogue avec le PCS au moyen d'un mot parallèle de 32 bits, cette horloge vaut 156,25 MHz (car 5000 / 32 = 156,25).
- L'horloge de la logique programmable : c'est l'horloge utilisée avec l'interface entre le MGT et la logique programmable. Cette horloge porte généralement des noms comme TXUSRCLK2, RXUSRCLK2, tx_coreclkin, rx_coreclkin et d'autres noms similaires (« Tx user clock » et « Rx user clock » dans le schéma ci-dessous). Sa fréquence dépend de la largeur du mot parallèle utilisé pour l'interface avec la logique programmable.
Notons qu'il existe en général des horloges séparées pour l'émission et la réception. Ce schéma fonctionnel montre la distribution typique des horloges à l'intérieur d'un MGT :
Dans ce schéma, il y a quatre horloges pour chaque direction, et non trois comme mentionné plus haut. La suite l'explique.
Génération de l'horloge de la logique programmable
Comme expliqué ci-dessus, l'horloge commune à la logique programmable et au MGT doit être distribuée via le tampon d'horloge de la logique programmable. En revanche, cette horloge doit provenir de l'intérieur du MGT.
Commençons par la solution la plus simple possible à ces deux exigences contradictoires : le MGT génère effectivement une horloge et la rend disponible sur un port de sortie. Ce port s'appelle généralement TXOUTCLK, RXOUTCLK, tx_clkout, rx_clkout, etc. (c'est la quatrième horloge, nommée « Tx out clock » et « Rx out clock » dans le schéma ci-dessus). Ce signal entre dans un tampon d'horloge de la logique programmable. La sortie de ce tampon est le signal d'horloge utilisé pour l'interface entre le MGT et la logique programmable.
Grâce à cet agencement, la seule différence entre l'horloge de la logique programmable et celle générée par le MGT est le délai de propagation (propagation delay) du tampon d'horloge. Autrement dit, le MGT a un contrôle total sur l'horloge de la logique programmable, hormis sa phase. C'est important en particulier pour la réception des données, si l'horloge du CDR sert de base à l'interface avec la logique programmable (cette option est examinée plus bas). En effet, le CDR ajuste en permanence la fréquence de cette horloge afin de rester synchronisé avec le flux de données qui arrive.
Comme indiqué sur une page précédente, le PCS propose des mécanismes pour surmonter la différence de phase entre l'horloge de la logique programmable et celle du PMA. Le tampon Tx ou le tampon Rx sont les choix les plus simples, mais le PCS peut aussi être capable d'ajuster directement cette différence.
Mais quelle horloge est exposée sur le port de sortie d'horloge du MGT ? La réponse naturelle est XCLK, car c'est le candidat le plus proche de ce qu'exige l'horloge de la logique programmable. Il existe toutefois plusieurs autres possibilités pour générer l'horloge de la logique programmable. Par exemple, la sortie d'horloge du MGT peut être envoyée dans une PLL ordinaire de la logique programmable afin de générer une horloge de fréquence différente. Cette PLL est utilisée avec un tampon d'horloge, de sorte que le signal est adapté à son usage. Utiliser une PLL de cette manière ouvre de nouvelles possibilités, par exemple que le MGT fasse transiter sa propre horloge de référence vers son port de sortie d'horloge. La fréquence de cette horloge n'est peut-être pas la bonne pour l'interface avec le MGT, mais la PLL peut la multiplier par le rapport nécessaire.
Notons aussi que la fréquence de l'horloge de la logique programmable peut différer de celle de XCLK. Cela peut être nécessaire lorsqu'un module de conversion de largeur de mots asynchrone (asynchronous gearbox) est activé dans le PCS. Dans ce scénario, la différence de fréquence compense les largeurs différentes du mot parallèle entre le PMA et l'interface avec la logique programmable.
Les règles relatives à ce sujet sont complexes et diffèrent d'un FPGA à l'autre. Une grande partie de la documentation d'un MGT est souvent consacrée au détail des différentes possibilités. Malheureusement, prendre les bonnes décisions en matière de génération des horloges (clocking) exige de passer du temps à apprendre les règles propres au FPGA concerné.
Choix de l'horloge de la logique programmable pour la réception des données
Lorsqu'on choisit comment générer l'horloge de la logique programmable destinée à la réception des données, une décision fondamentale s'impose : cette horloge doit-elle être dérivée de l'horloge du CDR ou d'une horloge de référence fixe ? Autrement dit, l'horloge de la logique programmable doit-elle s'adapter au débit exact du flux de données qui arrive, ou non ?
Dans la plupart des applications, le MGT sert à communiquer des données dans les deux sens. Il existe souvent une relation étroite entre les données qui arrivent et celles qui sont transmises. Par exemple, le flux émis peut contenir des acquittements et des demandes de retransmission envoyés en réponse au flux qui arrive. Dans ce genre d'applications, il est commode que toute la logique soit synchrone avec la même horloge, c'est-à-dire que toute la logique se trouve dans le même domaine d'horloge (clock domain). En particulier, l'interface PIPE exige que toutes les interfaces avec le MGT soient synchrones avec une seule horloge (nommée PCLK dans le document du standard). Rappelons, comme mentionné plus haut, que PIPE est l'interface standard entre les MGT et plusieurs protocoles : PCIe, SuperSpeed USB et SATA.
Cependant, cette commodité a un prix : la fréquence de l'horloge de la logique programmable est potentiellement légèrement différente de celle utilisée pour le mot parallèle du PMA, c'est-à-dire la fréquence de XCLK. Cette différence entraîne un excédent ou un manque de données dans le PCS, car la logique programmable reçoit les mots parallèles plus lentement ou plus rapidement qu'ils n'arrivent au PMA. La solution consiste souvent à utiliser le tampon Rx et les symboles Skip, comme expliqué sur la page consacrée au PCS.
Autre possibilité : l'horloge de la logique programmable peut être dérivée de l'horloge du PMA. Avec cette méthode, la logique programmable consomme les données au même rythme qu'elles arrivent. C'est la solution naturelle lorsque le MGT ne sert qu'à recevoir des données. C'est aussi un choix possible pour une liaison bidirectionnelle lorsque la logique applicative se charge du changement de domaine d'horloge (clock domain crossing). Xillyp2p est un exemple de protocole qui a adopté cette approche, comme le montre son exemple complet de conception.
FPGA AMD : deux horloges provenant de la logique programmable
Les MGT des FPGA AMD (anciennement Xilinx) possèdent deux ports d'entrée d'horloge provenant de la logique programmable, c'est-à-dire deux ports pour chaque direction : TXUSRCLK et TXUSRCLK2 pour l'émission, et RXUSRCLK et RXUSRCLK2 pour la réception. Un exemple d'instanciation (instantiation) du MGT est présenté dans cet exemple de conception.
La quasi-totalité de l'interface avec la logique programmable est synchrone avec TXUSRCLK2 ou RXUSRCLK2 (selon la direction). Les deux autres entrées, TXUSRCLK et RXUSRCLK, ne sont utilisées qu'à l'intérieur de certaines parties du PCS.
TXUSRCLK est souvent le même signal d'horloge que TXUSRCLK2. Toutefois, les MGT des FPGA AMD offrent une fonctionnalité qui permet d'utiliser, dans l'interface avec la logique programmable, un mot parallèle deux fois plus large qu'à l'intérieur du PCS. Lorsque cette fonctionnalité est utilisée, la fréquence de TXUSRCLK est le double de celle de TXUSRCLK2. C'est une raison de plus d'utiliser une PLL de la logique programmable.
Le même principe s'applique à RXUSRCLK et RXUSRCLK2.
Résumé
Cette page a brièvement évoqué quelques sujets liés aux horloges d'un MGT. Il reste néanmoins nécessaire d'apprendre les particularités et les limitations du MGT pour prendre des décisions éclairées sur l'utilisation de ses ressources de génération d'horloges (clocking). Espérons que les explications de cette page aident à comprendre comment les horloges d'un MGT sont censées fonctionner et interagir entre elles.
Ceci clôt la septième page de cette série consacrée aux MGT. La page suivante termine la série avec une discussion sur le contrôle de flux (flow control).
