DDR3-Leiterplattendesign-Routing

Ich versuche, einen DDR3-128-MB-Chip und ein Spartan-6-FPGA zu entwerfen. DDR-Signalpins, die sich auf bestimmten Speichercontroller-Pins befinden und nicht ausgetauscht werden konnten. Ich habe noch nie DDR-Routing durchgeführt und mich für das Schema der SP605 Xilinx-Platine als Referenz entschieden, um menschliche Fehler zu minimieren. Ich habe nach ziemlich viel Literatur gesucht, aber ich habe absolut keine Erfahrung mit DDR-Speicher und irgendwie Angst. Also habe ich DDR3-Speichersignale in diese Gruppen (Netzklassen) aufgeteilt.

net class   L min   L max   vias/trace
sdram_ud    19.905  19.931  2
sdram_ld    20.244  20.293  0
sdram_clk   19.102  19.106  2
sdram_addr  31.775  32.77   0..2
sdram_ctl   31.736  32.082  0..2

sdram_ud (pink):
    dq(15..8)
    udqm
    udqsn, udqsp
sdram_ud (blue):
    dq(7..0)
    ldqm
    ldqsn, ldqsp
sdram_addr (orange):
    a(12..0)
    ba(2..0)
    we, cas, ras
sdram_clk (yellow):
    ckp, ckn
sdram_ctl (green):
    cs, clke, rst, odt

L1 L3 L6

Boden- und Antriebsflugzeuge werden auf den Screenshots weggelassen.

Alle Klassen wurden in der Reihenfolge ihrer Auflistung weitergeleitet. sdram_ld und sdram_ud auf verschiedenen Ebenen geroutet. Alle Mitglieder der sdram_ctl-Klasse wurden über 4k7 Ohm auf Masse gezogen. Alle Mitglieder der Klasse sdram_addr sind über ein 50-Ohm-Widerstandspaket auf der unteren Schicht mit vtt abgeschlossen. Ich habe so viele Entkopplungskappen wie möglich angebracht: 0603/0402 Keramik 0,1 uf + ein großes 4u7f-Polymer.

DDR3 layed out on 6-layer board with this stackup:
L1 signal/power
L2 gnd
L3 signal
L4 gnd
L5 power
L6 signal/power

Die Breite der Signalspur beträgt 0,125 mm. Mit dem Aufbau meines Standardherstellers liegt die Impedanz bei etwa 70 Ohm. Ist es genug oder muss ich ein Angebot für einen benutzerdefinierten Stapel erstellen?

DDR3-Signale auf L1 und L3. Abschluss, Entkopplung, vref und vtt befinden sich auf L6. Es gibt eine 1v5-Insel auf L5 unter dem Speicher- und FPGA-Teil.

Ich habe versucht, der S/3S-Regel zu folgen, aber das hat für mich nicht wirklich funktioniert, denke ich. Ich habe alles von Hand ausgelegt und abgestimmt. Die Addr-Klasse sieht für mich immer noch nach Chaos aus, aber dies ist mein bisher bester Lauf. DQ-Signale werden innerhalb von DQ[15..8] und DQ[7..0] vertauscht. sdram_ctl abgestimmt auf sdram_addr. sdram_ud ist nicht so eingestellt, dass es mit sdram_ld übereinstimmt, einfach so.

Meine Fragen sind: Funktioniert dieses Design zumindest bei niedrigstmöglicher Geschwindigkeit? Habe ich DDR3-Signale korrekt in Klassen aufgeteilt? Ist ein solcher Unterschied zwischen den Streckenlängen zwischen den Klassen in Ordnung? Soweit ich weiß, ist die DDR-Kalibrierung der Prozess der Kompensation von Verzögerungen von Netzklassen relativ zum Takt (ckp, ckn). Ist es in Ordnung, einige Adressleitungen auf der einen Seite und andere auf der anderen Seite zu führen? Habe ich genug Gleisfreiheit?

Außerdem sieht es so aus, als ob Altium die Länge der Durchkontaktierungen nicht berücksichtigt, sodass die Längentoleranzen für die Addr-Klasse + -1,5 mm mehr betragen können.

UPD: DDR3-Chip ist MT41J64M16LA in 96-Ball-FBGA (0,8 mm Abstand) FPGA-Chip ist XC6SLX45T in 484-Ball-BGA (1 mm Abstand)

UPD2: Dunkelrote Spuren bei L6 sind vref net.

Haben Sie die Paketverzögerungen an beiden Enden berücksichtigt?
@pericynthion Nein, ich gehe davon aus, dass das DDR-Paket ideal ist. Was die FPGA-Seite betrifft, denke ich, dass es sich eher um ein Synthese- / Implementierungsproblem handelt.
@pericynthion Außerdem gibt es Xilinx-Antwort forums.xilinx.com/t5/Processor-System-Design-and-AXI/…
Okay, macht Sinn!
Hat deine Lösung am Ende funktioniert? Welche PCB-Design-Software haben Sie verwendet?

Antworten (3)

Also habe ich endlich ein Board mit diesem Design zusammengebaut und der DDR3-Teil funktionierte schließlich bei 333 MHz. Obwohl ich jetzt denke, dass Spuren viel zu nahe beieinander liegen. Die W/3W-Regel muss eingehalten werden.

BEARBEITEN: Denken Sie daran, dass dieses Design eine sehr kurze (relativ) Taktlinie hat. Einige Kalibrierungsalgorithmen auf einigen Systemen funktionieren möglicherweise nicht.

EDIT: Ja, meine Leiterbahnimpedanz beträgt ~ 60 Ohm. Und auf diesen Bildern von meinem OP gibt es kein VTT / Vref-IC.

Danke fürs Nachmachen! Hat es bei höheren Geschwindigkeiten nicht funktioniert? Was war das Symptom?
Wie lange hat es gedauert, dieses PCB-Layout fertigzustellen und das Stadium der Hardwaretests zu erreichen? Welche PCB-Design-Software haben Sie verwendet?
@pericynthion Ich habe die MIG von Xilinx verwendet, um einen MCB-Kern zu generieren. Ich habe nur den angebotenen Höchstgeschwindigkeitswert angegeben.
@ Quantum0xE7 Der DDR3 war meine Startportion, also ~ 6 Monate. Denken Sie daran, dass ich es in meiner Freizeit gemacht habe. Außerdem ist das Board etwas komplex mit SRAM, FMC LPC, HDMI, PCIe und so weiter. Das Projekt wird irgendwann Open Source sein, sobald ich das Testen und Schreiben von Demos abgeschlossen habe. Ich benutze Altium Designer.
Haben Sie eine Simulation der DDR3-Traces und anderer Hochgeschwindigkeits-Traces in Altium Designer durchgeführt? Haben Sie Hyperlynx verwendet? Wenn Sie sagen, es in der Freizeit zu tun, wie viel kostet das pro Tag oder pro Woche?
@ Quantum0xE7 Nein, ich habe nichts simuliert. Aber ich habe eine Menge DDR3/DDR2-Boards gegoogelt und Screenshots entworfen. Und ich habe gesehen, dass einige Designs so erfolgreich geroutet wurden. Da ich SRAM im Design habe, hatte ich Backup, also yolo ich es einfach. Es verging sehr viel Zeit, um wirklich zu verstehen, was und wie Dinge erledigt werden sollen. Teile auswählen, Dokumente lesen, andere Designs überprüfen, Tutorials ansehen usw. Manchmal verbringe ich einen ganzen Tag pro Woche und manchmal 3/4 Stunden pro Tag für die ganze Woche. Ich würde auf 1 Stunde pro Tag oder weniger aufrunden. Das hängt davon ab, ob einige Designphasen Spaß machen und andere langweilig sind.
@batyastudios es wäre großartig, wenn du die Erfahrung irgendwie teilen könntest, die Ressourcen, die du verwendet hast, um die Ziellinie dafür zu erreichen. Ich bin überrascht zu sehen, dass Sie nichts simuliert haben :O
@ Quantum0xE7 Ich habe kürzlich zum ersten Mal in meinem Leben ein DDR3-Design gemacht und es hat auch scheinbar 6 Monate gedauert und ich habe es auch nicht simuliert :) Ich denke auch darüber nach, eine ähnliche Frage wie OP zu stellen ... wahrscheinlich ...
@PF4Public, du hast nicht simuliert? Wie sicher können Sie sein, dass es funktioniert? Ich bin überrascht, dass Sie 6 Monate gebraucht haben, ohne eine SI-Simulation durchzuführen. Hat es am Ende nicht funktioniert?
@ Quantum0xE7 Ich habe einen Allwinner-Chip verwendet, daher waren die Informationen wirklich knapp, geschweige denn Simulationsmodelle. Wie beim OP habe ich das nicht den ganzen Tag gemacht, ich hatte andere Aufgaben zu erledigen, aber etwas beim ersten Mal zu tun, braucht tatsächlich viel Zeit, um die Informationen zu sammeln, sie aufzunehmen und so weiter. Am Ende funktionierte mein Board nicht vollständig, nur teilweise und ich vermute eine Sache, dass ich glaube, ich habe etwas falsch gemacht, was DDR ruiniert, deshalb überlege ich auch, eine ähnliche Frage zu stellen :)

Ihre Klassen clk, addr und ctl sollten eigentlich nur eine Klasse sein. Typischerweise als CA bezeichnet. Ihre Uhr ist in der Tat kurz. Es sollte mit CA übereinstimmen.

Einige Tipps, um Ihr Leben in Zukunft einfacher zu machen:

  • Leiten Sie ALLE Signale in einer Klasse auf der gleichen Ebene. Auf diese Weise haben alle Signale in einer Klasse genau die gleiche Anzahl und Art von Vias und die gleiche Dielektrizitätskonstante und Ausbreitungsgeschwindigkeit. Damit sich alles automatisch aufhebt.

  • Die 50-Ohm-Abschlusswiderstände können in den meisten Fällen in Punkt-zu-Punkt-Designs wie diesem weggelassen werden, wo CA nur ein einzelnes SDRAM speist. Spart jede Menge Strom, vereinfacht das Layout und macht einen VTT-Regler überflüssig. Aber vielleicht möchten Sie den Taktabschlusswiderstand behalten.

  • Bei Hochleistungsdesigns müssen Paketverzögerungen auf der CPU/FPGA-Seite kompensiert werden. Die Gehäuseverzögerung ist im Wesentlichen die Bonddrähte unterschiedlicher Länge vom Silizium zur BGA-Kugel. Es hat nichts mit Synthese/Implementierung zu tun.

Aber bei 333 MHz hat man ziemlich viel Spielraum für Fehler.

Wie Sie bereits erwähnt haben, ist die Hauptuhr sehr kurz. Ich denke, die rote Spur ist für die Vref-Spannung. Sie müssen es mit einer breiteren Spur oder einem breiteren Polygon verbinden. Sie können L4 als Signal im Stackup ausprobieren. L3-L4 muss dickeres Kernmaterial sein als der andere Kern oder die Prepregs. Sie sollten sich nicht gegenseitig beeinflussen.