Principe de l'interface source‑synchronisée
Les mémoires DDR transmettent deux mots par cycle d'horloge en utilisant le signal d'horloge de données DQS. Le contrôleur envoie DQS en même temps que les bits DQ, ce qui crée une interface source‑synchronisée : les retards du trajet du PCB affectent DQ et DQS de façon identique et s'annulent lors de l'échantillonnage. En écriture, le contrôleur centre DQS entre deux bits ; en lecture, le DRAM aligne les transitions de DQS sur les changements de bits et le récepteur décale le signal d'un quart de période pour placer l’échantillonnage au centre du bit. Cette architecture nécessite que chaque voie de données (byte lane) soit réglée séparément, car les longueurs de trace varient d’une lane à l’autre.
Mécanismes de nivellement et calibrage
Le « write leveling » utilise le registre MR1 bit A7 (DDR3/DDR4) pour placer le DRAM en mode d’alignement. Le contrôleur émet des impulsions DQS ; le DRAM capture son horloge CK à chaque front montant et renvoie la valeur sur DQ. Le contrôleur décale progressivement DQS jusqu’à ce que DQ passe de 0 à 1, ce qui indique que DQS est aligné avec CK du puce cible. Cette opération ne peut être réalisée que si le PHY possède des délais de sortie (Kintex‑7, Virtex‑7 HP, UltraScale). L’Artix‑7, dépourvu de tels délais, ne peut aligner que quelques lanes, et recourt à un décalage de phase CK (mode with_ck_phase_shift) pour compenser.
Après le write leveling, le calibrage de latence d’écriture décale chaque lane par des « bitslips » (déplacements d’un cycle complet) jusqu’à ce que le motif écrit soit correctement reçu. Ensuite, le DQ‑DQS training balaye les délais de sortie des broches DQ, écrit et relit un motif à chaque pas, et conserve le centre de la fenêtre valide. Le résultat est une marge d’erreur maximale, mesurée en picosecondes (78 ps par pas sur les séries 7 avec référence 200 MHz).
Le read leveling, quant à lui, doit déterminer deux paramètres par lane : un réglage grossier (bitslip) et un réglage fin (délai d’entrée). Le BIOS écrit un motif, balaye les bitslips puis les délais d’entrée, et analyse la fenêtre d’œil de données. Une fenêtre large indique une interface robuste, tandis qu’une fenêtre étroite signale un problème d’intégrité du signal ou de synchronisation. Sur les PHY Xilinx, le DQS n’est pas utilisé pour la lecture ; le DQ est échantillonné par un horloge interne rapide via un délai d’entrée réglable. Les PHY Lattice et Gowin utilisent le bloc DQS du FPGA, ouvrent la porte uniquement pendant les bursts et exploitent le signal burstdet_seen pour confirmer la fenêtre de lecture.
Implémentation dans LiteDRAM
LiteDRAM expose chaque étape de calibration via des registres. wlevel_en active le mode write leveling, wlevel_strobe génère une impulsion DQS, et les registres wdly_dq_bitslip et wdly_dq contrôlent respectivement les bitslips et les délais de sortie DQ. Le BIOS exécute sdram_write_leveling, puis write_latency_calibration, write_dq_dqs_training et enfin read_leveling. Chaque PHY indique les capacités supportées (write_leveling, write_latency_calibration, write_dq_dqs_training, read_leveling) ainsi que le nombre de taps de délai et de bitslips disponibles (paramètres delays et bitslips).
Implications de la topologie fly‑by
Les signaux d’adresse, de commande et d’horloge sont routés en topologie « fly‑by », où chaque puce reçoit le signal CK légèrement plus tard que la précédente. Cette configuration maintient la qualité du signal à haute fréquence, mais introduit un skew pouvant dépasser une période d’horloge entre la première et la dernière puce. Par conséquent, chaque lane doit disposer de son propre délai DQS pour compenser ce skew, d’où l’importance du write leveling et du read leveling. Sans ces ajustements, le DRAM écrirait ou lirait des mots décalés, entraînant des erreurs de données irréversibles dès le démarrage du système.