DDR3-Datenfehler

Ich suche nach Post-Layout-Lösungen für DDR3-Datenfehler.

Ich habe eine Platine mit einem FPGA und einem DDR3-RAM-Setup mit 2 Bänken (2 Reihen).Topologie

Datenfehler treten entweder auf, wenn der RAM (FPGA ist nicht bestätigt, könnte aber sein) höhere Temperaturen erreicht (40°C) oder von Anfang an und immer (von 20 getesteten fehlerhaften PCBs, der Fehler trat am gleichen RAM auf) auf 16 Bits, die dqs[1..0] zugeordnet sind, die die X1-RAMs in jeder Bank sind.

In der folgenden Abbildung ist ein Ausschnitt von Nulldaten zu sehen, die in Bank B geschrieben wurden. Die erste Zeile enthält geschriebene Daten, die zweite Zeile enthält gelesene Daten.Fehlerbild

Infos zum Routing: Die Leiterbahnen sind alle auf 50Ohm (+-0,4Ohm, gemessen von Pin zu Pin) impedanzabgeglichen. Es ist eine T-Topologie (kein Fly-by). Die "T"-Zweige sind längenangepasst. Abschlusswiderstände (51Ohm 0,1%) werden verwendet, ich habe versucht, Daten zu senden, indem ich sie und verschiedene ODT-Einstellungen entfernt habe. Ich hatte eine leichte Verbesserung, kann aber nicht sicher sagen, ob es an der ODT lag. Ich habe mir die Versorgung angesehen, vor dem Entfernen der Abschlusswiderstände war die VTT der RAMs außerhalb der Grenzen, nach dem Entfernen sah die Versorgung in Ordnung aus.

Das RAM ist von Alliance Memory , das FPGA ist ein Cyclone V von Intel, Uniphy IP-Kern wird verwendet (ich habe verschiedene Einstellungen ausprobiert, mit sich ändernden Board-Skews und so weiter, bin aber später in Timing-Verletzungen gelaufen).

Ich habe versucht, den Fehler mit Board-Simulationen (Hyperlynx) zu finden und konnte ihn nicht vollständig finden (Die-to-Die-Simulation). Das Bild unten ist eine Simulation (Slow-Weak-Modell) der Clock- und DQs-Signale, während das FPGA schreibt. Weiß ist die Uhr. Das Setup-Timing wird verletzt, aber die DQS-Signale beider RAMs überlappen sich (warum also nur Daten von RAM 1?).DQS-Schreiben

Beim Simulieren einer Leseoperation: Lese-DQSIch sehe, dass meine read-dqs-Signale ziemlich durcheinander sind.

Was sind meine Lösungen? Oder besser gesagt, was und wie kann ich prüfen, um den Fehler zu finden? Die Lesesignale sehen fehlerhaft aus, aber mit dem Verhalten der Platinen bin ich nicht 100% zufrieden, viele sind in Ordnung, einige haben Fehler bei höheren Temperaturen, und einige haben den Fehler ständig.

Bearbeiten 1:

Ich habe folgende Einstellungen mit ODT versucht (FPGA rzqin = 100 Ohm, jeder RAM hat einen ZQ von 240 Ohm), die Abschlusswiderstände wurden entfernt:

  • Kein ODT, aber die Impedanz des Treibers (RAM) von 40 Ohm auf 32 Ohm geändert - Keine Verbesserung, ich habe alle folgenden Einstellungen ausprobiert, auch mit diesen Einstellungen
  • ODT - 120 Ohm, 60 Ohm und 40 Ohm (RAM), bestes Ergebnis war mit einer Treiberimpedanz von 32 Ohm und 40 Ohm ODT
  • Dyn ODT: Keine offensichtliche Verbesserung, fühlte sich eher wie eine Verschlechterung der Signale an

Bearbeiten 2:

  • Versorgungsspannungen sehen aus wie in den Spezifikationen. Angesteuert mit einem 60 MHz Oszi, daher bin ich mit der Messung nicht zufrieden (300 MHz Datentakt)

  • Ich betreibe den Takt mit 300 MHz, was der niedrigste Wert für den DDR3-Standard ist

  • Die Zeitvorgaben sind eng. Taktgruppen, Wege mit mehreren Zyklen und keine uneingeschränkten Takte.

  • Ich habe mehrere Boards ausprobiert: einige sind in Ordnung, einige haben Fehler bei höheren Temperaturen, einige haben Fehler von Anfang an.

  • Ich habe das Löten unter einem Mikroskop überprüft, scheint in Ordnung zu sein, kann aber nicht unter fbga-Pakete schauen

  • Ich habe versucht, mit Druck auf einen oder beide ICs zu schreiben/lesen. - Keine Verbesserung

  • Ich habe es mit einer Triebstärke von RZQ/7 und RZQ/6 versucht. Im Moment fand ich die beste Einstellung mit einem ODT von RZQ/6 (40 Ohm - RAM) und einer Antriebsstärke von RZQ/7.

  • Ich habe es mit dynODT versucht, aber der Zyklon V kann nur mit 50-Ohm-Paralleleingangsabschluss fahren. Mit den oben genannten Einstellungen würde ich es gerne mit 40 Ohm versuchen, aber es wird nicht mit 40 kompiliert. Die Einstellung befindet sich im Uniphy-IP-Kern, sodass ich nur hoffen kann, dass ODT beim Lesen verwendet wird. Kann ich das messen?

  • Ich habe das EMIF-Toolkit von Intel ausprobiert und es hat mir ein OK bezüglich Kalibrierung und Marge meiner Signale gegeben.

Bearbeiten 3: einige Gedanken

Was mich wirklich stört, ist, dass bis auf die DQ- und DQS-Signale alle Signale für beide RAMs auf jeder Bank verwendet werden. Länge angepasst und so weiter. Gleiche Einstellungen, Platzierung der Kondensatoren, Werte, alles ist gleich. Ich habe einen anderen RAM von Micron ausprobiert und das gleiche Ergebnis erhalten. Damit schließe ich die Möglichkeit einer defekten RAM-Ladung aus. Ich versuche es mit verschiedenen FPGA-Designs (weniger Ressourcen, mehr Platz für die DDR3-Schnittstelle) und erhalte auch die Fehler. Also breche ich die Möglichkeit des FPGA-Designs ab. Ich schreibe viele Nulldaten (wiederhole dieselben Adressen) in den RAM und bekomme falsche Werte zurück - ich glaube, es ist ein Lesefehler.

Ich glaube, dass der Fehler in den DQS- und DQ-Signalen liegen muss, aber ich bekomme fast die gleichen Ergebnisse mit der SI-Simulation für das fehlerhafte RAM und das Arbeits-RAM. Vielleicht versuchen, die ICs zu erhitzen, um sie neu zu löten? Ich habe kein Oszi, das mit 300MHz mithalten kann, aber gibt es eine Möglichkeit, eine Verschlechterung auf den Signalwegen zu messen? Kann es sein, dass der Leiterplattenhersteller die ICs bei der Herstellung beschädigt hat? Wenn es ein Redesign gibt, wie kann ich verhindern, dass dieser Fehler auftritt?

Bearbeiten 4

Ich hatte gerade 3 PCBs, wo 3 verschiedene RAMs Probleme verursachen (A2, B1, B2) und ich sah, dass die Fehler bei der internen Adresse (FPGA-Adressraum) 0x400 000 beginnen - also wird eine neue Adresszeile verwendet. Wenn alle Adresszeilen simuliert werden, sehen sie fast gleich aus, wobei die mit der niedrigsten Anstiegsrate die 3. und 4. Adresszeile sind, die korrekt zu funktionieren scheinen (sie werden verwendet, bevor der Fehler auftritt).Adresszeilen

Haben Sie durch Messung bestätigt, dass alle Versorgungsspannungen gemessen an ihren Lasten den Spezifikationen entsprechen? Haben Sie verschiedene Taktraten ausprobiert, nur um zu sehen, was passiert? Sind Sie sicher, dass für das FPGA-Design die richtigen Timing-Einschränkungen festgelegt sind und dass der Timing-Analysator behauptet, dass sie vom synthetisierten/implementierten Design erfüllt werden? Haben Sie mehr als ein Board ausprobiert? Sind Sie sicher, dass keine Lötfehler vorliegen?
Versuchen Sie auch, während der Fehlfunktion einen mäßigen Fingerdruck auf die Oberseite des FPGA- und/oder RAM-Pakets (ein paar Newton) auszuüben, und prüfen Sie, ob sich dadurch etwas ändert.
Angesichts der Tatsache, dass Sie eine Temperaturabhängigkeit sehen (die E / A-Treiber haben im heißen Zustand langsamere Flankenraten), vermute ich ein Timing-Problem. der Lese-DQS (vom Speichergerät angesteuert) scheint nicht übereinzustimmen - überprüfen Sie, welche Laufwerksstärke vom DDR3 angewendet wird.
Setzen Sie während eines Lesezyklus ODT im FPGA ein?
Ich habe die Informationen zu Ihren Fragen unter Bearbeiten 2 hinzugefügt
Das Benutzerhandbuch gibt an, dass es für eine Single-Slot-Chipauswahl keinen ODT für Lesevorgänge gibt, obwohl sich dies auf den ODT innerhalb des Speichergeräts beziehen kann.
Korrigieren Sie mich, wenn ich falsch liege, aber Sie brauchen nur eine On-Die-Terminierung am Ende einer Zeile? Wenn also das RAM die Datenleitungen steuert, wäre es schlecht, wenn die Ausgabe des RAM beendet wird? Nur das FPGA muss terminiert werden, wenn es aus dem RAM liest? Ansonsten würde ich das Klingeln verstärken, da in der Mitte des Signalwegs keine Terminierung verwendet wird.

Antworten (1)

Die Tatsache, dass Sie Fehler auf ganzen Spuren haben, scheint auf die Adress-/Cmd-Seite hinzuweisen, obwohl auch DQS in Frage kommen könnte. Was ist mit deinem ODT los?

Meine ODT-Versuche wurden der Frage hinzugefügt. Ich werde die Adressspuren noch einmal überprüfen. Was wäre Ihre Vermutung? Zeitliche Koordinierung? Spannungspegel?
Funktioniert VREF für diese Spur in Ordnung?
VREF sieht in Ordnung aus, aber ich habe keine schnellen Messgeräte, daher kann ich nicht sicher sagen, ob es stabil ist.