Interfacing von DDR-Speicher mit AMD/Xilinx FPGAs

Phil Salmony
|  Erstellt: Juli 18, 2023  |  Aktualisiert am: Mai 14, 2024
Interfacing von DDR-Speicher mit AMD/Xilinx FPGAs

Einführung

Die Anbindung von flüchtigem DDR-Speicher an FPGA ohne vorherige Erfahrung kann anfangs ziemlich entmutigend erscheinen. Trotz der inhärenten Flexibilität eines FPGAs, wo wir annehmen könnten, dass wir die I/Os des externen DDR-Speichers scheinbar überall an beliebige freie Pins anschließen können, müssen wir dennoch viele Einschränkungen berücksichtigen.

Zum Beispiel, wo bestimmte DDR-Speicher Pin-Gruppen platziert werden sollen, welche Spannungen die Bänke haben sollen, welche Uhren wir benötigen und wo wir sie anschließen, wie wir Timing-Verletzungen vermeiden und so weiter.

Neben der bloßen 'schematischen' Anbindung müssen wir uns auch um die 'reale' Schnittstelle auf der Leiterplatte kümmern, wie Stromversorgung und -lieferung, Entkopplung, Terminierung, Spurimpedanz und -länge, Verzögerungsabgleich und mehr.

Dieser Artikel wird sich mit der Anbindung von DDR-Speicher an FPGAs aus einer system- und schemabezogenen Sichtweise beschäftigen. Als praktisches Beispiel werden wir uns ein auf AMD/Xilinx Spartan-7 basierendes Audio-DSP-Design (genannt ‘Xerxes’) ansehen, das mit etwas DDR2-Speicher verbunden ist.

Anbindung von DDR-Speicher an AMD/Xilinx FPGAs_Xerxes

Xerxes Audio-DSP-Hardware (AMD/Xilinx Spartan-7 FPGA mit DDR2-Speicher)

Art des Speichers

Welche Art von Speicher wir verwenden, hängt vom Design ab. Es hängt von unseren Anforderungen an Speicherkapazität und Speicherbandbreite ab, sowie davon, was unser gewählter FPGA leisten kann.

Allgemein gesprochen können die meisten modernen FPGAs mit DDR2- und DDR3-Speicher (und deren stromsparenden, niedrigvoltigen Varianten) umgehen. Natürlich ist auch schnellerer DDR4-Speicher und darüber hinaus möglich, aber in der Regel nur für fortschrittlichere FPGAs.

Nicht nur die maximal mögliche Datenrate ist wichtig, sondern auch Spannungs- und Leistungsanforderungen, Gehäusetyp, Kosten und Verfügbarkeit müssen frühzeitig im Designstadium berücksichtigt werden.

DDR-Speichervergleich (Quelle: synopsys.com)

DDR-Speichervergleich (Quelle: synopsys.com)

Bei der Auswahl unseres Speichertyps müssen wir auch auf die Geschwindigkeitsklasse des Speicherbausteins und die Geschwindigkeitsbewertung des Speichercontrollers im FPGA achten. Wir können uns dafür entscheiden, unseren Speicher oder Controller zu 'deraten', also nicht mit voller Bandbreite zu betreiben, was uns wiederum mehr Timing-Spielraum gibt.

Typische Speicher-Derating-Tabelle (Quelle: AMD/Xilinx UG933)

Typische Speicher-Derating-Tabelle (Quelle: AMD/Xilinx UG933)

Speziell für AMD/Xilinx FPGAs würde ich vorschlagen, ihre Vivado IDE herunterzuladen und mit dem kostenlosen Memory Interface Generator (MIG) IP herumzuspielen.

Dies wird Ihnen schnell zeigen, welche Speichertypen, Geschwindigkeitsklassen und kompatible Teile Sie verwenden können.

Beispiel für Vivado MIG-kompatible Speicherteile

Beispiel für Vivado MIG-kompatible Speicherteile

Sie fragen sich vielleicht, warum ich mich für DDR2-Speicher für das Xerxes-Board entschieden habe?

Obwohl es ein ziemlich alter Standard ist, bedeutete die Verwendung von DDR2-Speicher, dass ich den bereits vorhandenen 1,8V-Regler auf dem Board nutzen konnte (dieser versorgt auch andere Teile des FPGA) und musste keinen weiteren separaten Regler hinzufügen.

Zusätzlich hat das Xerxes-Design keine besonders hohen Anforderungen an die Speicherbandbreite, und daher war eine DDR2-Schnittstelle ausreichend.

Darüber hinaus erleichtert eine Schnittstelle mit geringerer Bandbreite die PCB-, Terminierungs- und Timing-Restriktionen.

 

DDR-Speicher und FPGA-Schnittstelle

Nachdem ein geeignetes Speichergerät ausgewählt wurde, ist es an der Zeit, dieses mit dem FPGA in Ihrem Schaltplan zu verbinden.

Zuerst müssen wir eine geeignete Bank wählen. Wenn Sie eine 16-Bit breite (oder schmalere) Daten-Schnittstelle verwenden, kann dies bei den meisten FPGAs normalerweise in einer Bank untergebracht werden. Wenn nicht, müssen wir die Speicherschnittstelle über mehrere Banken verteilen.

Der Einfachheit halber werden wir uns für eine 16-Bit breite Speicherschnittstelle entscheiden, wie es beim Xerxes-Board der Fall ist. Wählen Sie eine freie Bank, die mit der gleichen Spannung wie der DDR-Speicher selbst betrieben werden kann (im Fall von Xerxes ist dies Bank 34 bei 1,8V aufgrund der Verwendung von DDR2-Speicher).

FPGA Bank 34 mit geeigneter Entkopplung, betrieben von der 1,8V-Versorgung

FPGA Bank 34 mit geeigneter Entkopplung, betrieben von der 1,8V-Versorgung

Für AMD/Xilinx FPGAs, unter Verwendung der Vivado- und MIG-Tools, ist das Erhalten des Pin-Outs für unseren DDR-Speicher sehr einfach. Das Tool schlägt entweder ein geeignetes Pin-Out für diese Bank vor, oder wir können Pins manuell zuweisen und das Pin-Out überprüfen.

Vivado MIG Pin-Out-Tool

Vivado MIG Pin-Out-Tool

Wenn Sie das Pin-Out manuell konfigurieren, stellen Sie sicher, dass die einzelnen DDR-Byte-Lanes die gleiche Bank-Byte-Nummer haben und dass die differentiellen Strobes auf den differentiellen FPGA DQS-fähigen Pins liegen.

Denken Sie daran, dass das Pin-Out wahrscheinlich während der PCB-Layout- und Routing-Phase angepasst wird. Dank der Flexibilität des FPGA kann das Tauschen von Pins während des PCB-Designprozesses das Routing vereinfachen und Schichtübergänge minimieren.

Für dieses Beispiel, da wir von einer einzigen Bank ausgehen, müssen wir den internen VREF verwenden, was die maximale Speicherbandbreite begrenzt.

Zusätzlich müssen wir auf die Taktung achten. Idealweise sollte die Taktquelle in derselben Bank an einem taktungsfähigen Pin (oder Pins, wenn eine differentielle Taktquelle verwendet wird) angeschlossen sein.

Schließlich sollten Sie sicherstellen, dass Sie die Werkzeuge des Anbieters verwenden, um das Design und das Timing zu überprüfen. Sobald das initiale Pin-Out festgelegt ist, definieren Sie in Ihrem Schaltplan Netzklassen, differentielle Paare und Regeln und verwenden Sie Farbcodierung, um Ihr PCB-Design-Leben einfacher zu machen.

FPGA Bank 34 DDR2 Verbindungen und Taktquelle

FPGA Bank 34 DDR2 Verbindungen und Taktquelle

Für ein einzelnes Gerät müssen wir einfach Punkt-zu-Punkt-Verbindungen auf der DDR-Speicher Komponente durchführen.

Terminierung sollte bei den Adress-/Befehls-/Steuerungssignalen (ACC) vorhanden sein; jedoch können wir bei niedrigeren Datenraten oft darauf verzichten. Ich füge jedoch immer eine Terminierung am differentiellen Takt-Paar hinzu. Die Datenbyte-Lanes sind intern an beiden Enden terminiert.

Es wird empfohlen, 4,7k Pull-Down-Widerstände an den CKE-, ODT- und optional an den CS#-Leitungen anzubringen.

DDR2 Speichermodul Signal- und Stromverbindungen

DDR2 Speichermodul Signal- und Stromverbindungen

Schließlich muss das Speichermodul natürlich mit Strom versorgt werden. Im Fall des Xerxes-Boards ist das DDR2-Modul mit demselben 1,8V-Regler wie unsere FPGA-Bank 34 verbunden. Eine angemessene Entkopplung ist erforderlich – als Faustregel, wenn nicht anders in Datenblättern oder Anwendungshinweisen angegeben, zielen Sie darauf ab, einen kleinen (~100nF) Kondensator pro zwei VDD-Pins und einen größeren Bulk-Kondensator pro zehn VDD-Pins zu verwenden.

Die VREF-Pin-Spannung kann über einen einfachen Potenzialteiler mit einem Filterkondensator erzeugt werden, wie im Bild oben gezeigt.

Outro

In diesem Artikel haben wir die grundlegenden Strategien für die Einbindung externer, nicht-flüchtiger DDR-Speicher in unsere FPGA-basierten Designs aus einer system- und schaltplanbasierten Perspektive dargelegt.

Denken Sie daran, dass dies die absoluten Grundlagen sind und je nach Ihren Systemanforderungen das Design viel komplexer sein wird. Besonders, wenn Sie planen, schnellere Speicherteile und Schnittstellen sowie mehrere Module zu verwenden.

Wenn Sie fortschrittliche FPGA- und DDR-basierte Systeme entwerfen, stellen Sie sicher, dass Sie die Werkzeuge und Funktionen nutzen, die in weltklasse ECAD-Tools wie Altium Designer enthalten sind. Sichern Sie sich hier Ihre kostenlose Testversion von Altium Designer und Altium 365.

Über den Autor / über die Autorin

Über den Autor / über die Autorin

Phil Salmony ist ein professioneller Hardware-Design-Entwickler und Ersteller von didaktischen technischen Inhalten. Nach seinem Master-Abschluss in Electrical and Control Systems Engineering an der University of Cambridge begann er seine Ingenieurskarriere bei einem großen deutschen Luft- und Raumfahrtunternehmen. Später war er Mitbegründer eines Drohnen-Startups in Dänemark, wo er als leitender Elektronik- und Leiterplatten-Design-Entwickler mit einem Fokus auf eingebettete Mixed-Signal-Systeme tätig war. Derzeit betreibt er seine technische Beratungsfirma von Deutschland aus, mit der er sich hauptsächlich auf digitale Elektronik und Leiterplattendesign konzentriert.

Neben seiner Beratertätigkeit betreibt Phil seinen eigenen YouTube-Kanal (Phil's Lab), wo er didaktische Technikvideos zu Themen wie PCB-Design, digitaler Signalverarbeitung und Mixed-Signal-Elektronik erstellt.

Ähnliche Resourcen

Verwandte technische Dokumentation

Zur Startseite
Thank you, you are now subscribed to updates.