SDRAM-Timing

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Einleitung

SDRAM ist mittlerweile ein Standardbauteil im Bereich der Mikroprozessoren. Doch wie kann man prüfen, ob das Timing des Businterface eingehalten wird?

Timing synchroner Systeme

Jede synchrone Logikschaltung folgt einem grundlegenden Prinzip. Viele FlipFlops speichern Bits, mit denen Daten und Zustandsvariablen von State Machines kodiert sind. Zwischen den FlipFlops gibt es im einfachsten Fall eine direkte Verbindung, z. B. in einem Schieberegister. Wenn Daten logisch verarbeitet werden sollen, befindet sich zwischen FlipFlops eine logische Verknüpfung mehrerer Signale, die je nach Komplexität eine kurze oder lange Durchlaufverzögerung aufweist. Alle FlipFlops werden über ein spezielles Netzwerk mit einem Takt versorgt. Das Netzwerk sorgt dafür, daß der Takt von einer Quelle nahezu gleichzeitig bei allen FlipFlops ankommt (typisch +/-100ps bei modernen FPGAs). Das ist auch notwendig, darauf baut die synchrone Schaltungstechnik auf.

Wie bestimmt man von so einem System die maximale Taktfrequenz? Indem man sich den zeitlichen Ablauf der Signale verdeutlicht und letztendlich in Zahlen ausdrückt. Was passiert während einer Taktperiode? Mit dem gleichzeitigen Eintreffen der aktiven (meist steigenden) Taktflanke geben alle FlipFlops neue Daten aus, die am Eingang anliegen. Das sind die Daten, die in der vorherigen Taktperiode berechnet wurden. Das dauert eine kleine Weile. Wie lange ist von der Technologie des ICs abhängig (Bruchteile von Nanosekunden bis einige Dutzend Nanosekunden). Allgemein wird diese Zeit als Clock-to-Output-Time bezeichnet. Es ist die Zeit die ein FlipFlop braucht, um nach der Taktflanke neue Daten auszugeben. Danach müssen die Signale die kombinatorische Logik durchlaufen (wenn es welche gibt). Diese Zeit nennt man Propagation Delay Time (kombinatorische Durchlaufverzögerung). Wenn keine Logik zwischen den FlipFlops liegt kommt nur die reine Laufzeit auf den Verbindungsleitungen zum Tragen. Auf den ersten Blick scheint das komisch, schliesslich breiten sich elektrische Signale auf Leitungen mit ca. halber Lichtgeschwindigkeit aus, wie kann da die Laufzeit von ein paar μm auf einem IC bzw. ein paar cm zwischen ICs eine Rolle spielen? Nun, wenn man sich die Taktraten moderner ICs vor Augen führt, dann erscheint die Lichtgeschwindigkeit doch schon eher moderat. Ein Signal legt pro Nanosekunde ca. 15..20cm auf einer Leiterplatte oder einem Kabel zurück. Wir werden noch sehen, daß das bisweilen langsam sein kann. (In einem FPGA bestehen die Verbindungen nicht aus einfachem Metall sondern sind konfigurierbare Schalter, welche aus Transistoren aufgebaut sind. Nicht selten ist Laufzeit auf den Leitungen genauso hoch wie die Verzögerung der reinen Logikfunktionen.) Doch nachdem unsere neuen Daten ausgegeben, logisch verknüpft wurden und die Leitungen hinter sich gelassen haben, müssen sie rechtzeitig vor der nächsten Taktflanke am Ziel ankommen, sprich am FlipFlop, welches die Daten erhalten soll. Und zwar nicht "fünf vor Zwölf", sondern mindestens die sog. Setup-zeit vorher. Diese ist wieder von der IC-Technologie abhängig. Wenn all diese Dinge nacheinander passiert sind kann die nächste Taktflanke die neuen Daten in die FlipFlops übernehmen. Damit ist der Zyklus fast vollständig. Was noch fehlt ist die sog. Hold-time, also die Zeit, welche die Daten noch nach der Taktflanke stabil anliegen müssen. Bei den meisten ICs ist diese Zeit 0ns, aber einige ICs brauchen ein paar ns. Das Datenblatt sagt hier was notwendig ist.

Aus der eben dargestellten Erklärung können wir die minimale Taktperiode (=maximale Taktfrequenz) berechnen.

[math]\displaystyle{ T_{CLK}\gt =T_{C2O}+T_{PD}+T_{RT}+T_{S} }[/math]

[math]\displaystyle{ T_{CLK} }[/math] Periodendauer des Taktes
[math]\displaystyle{ T_{C2O} }[/math] Clock to Output Time (Ausgabezeit des FlipFlops)
[math]\displaystyle{ T_{PD} }[/math] Propagation Delay Time (Durchlaufzeit kombinatorischer Logik)
[math]\displaystyle{ T_{RT} }[/math] Run Time (Laufzeit auf Verbindungsleitungen)
[math]\displaystyle{ T_{S} }[/math] Setup Time (Stabilisierungszeit für Daten)
[math]\displaystyle{ T_{H} }[/math] Hold Time (Haltezeit für Daten)

Für die Hold Time kann folgende Beziehung aufgestellt werden

[math]\displaystyle{ T_H \lt = T_{C2O}+T_{PD}+T_{RT} }[/math]

Wie man sieht macht die Hold Time wahrscheinlich selten Probleme, zumal sie oft Null ist. Doch Vorsicht! Selten heißt nicht niemals! Also besser nachrechnen und messen!

Die Differenz aus minimaler Taktperiode und der realen Taktperiode, mit der die Schaltung betrieben wird, steht als Timingreserve zur Verfügung, (englisch Slack). Wieviel Reserve eine Schaltung braucht ist bisweilen gar nicht so einfach zu sagen. Ein AVR mit 20MHz (50ns) ist mit 5ns sehr gut bedient (55ns, 18 MHz). Ein DDR-RAM mit 200MHz hat gerade mal 5ns Periodendauer, da sind 500ps schon 10%!

SDRAM Timing bei sternförmiger Taktverteilung

Aufbauend auf dem oben beschriebenen Prinzip kann man nun das Zusammenspiel zwischen Mikrocontroller und SDRAM bei sternförmiger Taktverteilung beschreiben. Dabei wird von einer zentralen Taktquelle (meist ein Quarz) über einen Takttreiber, welcher ein Eingangssignal auf mehrere Ausgänge sehr gleichmäßig verteilt, sternförmig an alle Teilnehmer des synchronen Busses verteilt. Die einzelnen Stränge vom Takttreiber zu den einzelnen Verbrauchern sind dabei gleich lang und haben die gleiche Ausbreitungsgeschwindigkeit. Damit kommt das Taktsignal sehr synchron bei allen Verbrauchern an, +/-500ps und weniger sind hier recht problemlos machbar. Zu beachten ist, daß die Ausbreitungsgeschwindigkeit elektrischer Signale auf Leiterbahnen unterschiedlich sein kann! Aussenlagen sind schneller als Innenlagen in Multilayerplatinen (ca. 20cm/ns zu 15 cm/ns). Paßt man da nicht auf haben gleich lange Taktleitungen unterschiedliche Laufzeiten! Doch das nur am Rande.

Mit dem beschriebenen Aufbau kann man nun das Timing analysieren. Dabei muß man zwei wesentliche Fälle unterscheiden.

Schreibzugriff

Die Daten laufen vom Mikrocontroller zum SDRAM. Das gilt immer für den Adress- und Steuerbus sowie den Datenbus bei einem Schreibvorgang.

[math]\displaystyle{ T_{CLK}\gt =T_{C2O}+T_{RT}+T_{S} }[/math] [math]\displaystyle{ T_H \lt = T_{C2O}+T_{RT} }[/math]

[math]\displaystyle{ T_{Clk} }[/math] Periodendauer des Taktes
[math]\displaystyle{ T_{C2O} }[/math] maximale Ausgabezeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_{RT} }[/math] Laufzeit auf Verbindungsleitungen
[math]\displaystyle{ T_{S} }[/math] minimale Stabilisierungszeit der Daten am SDRAM, Datenblatt
[math]\displaystyle{ T_H }[/math] minimale Haltezeit der Daten am SDRAM, Datenblatt

Lesezugriff

Die Daten laufen vom SDRAM zum Mikrocontroller. Das gilt für den Datenbus bei einem Lesevorgang.

[math]\displaystyle{ T_{CLK}\gt =T_{C2O}+T_{RT}+T_{S} }[/math] [math]\displaystyle{ T_H \lt = T_{C2O}+T_{RT} }[/math]

[math]\displaystyle{ T_{CLK} }[/math] Periodendauer des Taktes
[math]\displaystyle{ T_{C2O} }[/math] maximale Ausgabezeit der Daten am SDRAM, Datenblatt
[math]\displaystyle{ T_{RT} }[/math] Laufzeit auf Verbindungsleitungen
[math]\displaystyle{ T_{S} }[/math] minimale Stabilisierungszeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_H }[/math] minimale Haltezeit der Daten am Mikrocontroller, Datenblatt

Das war's eigentlich schon. Für beide Fälle müssen beide Formeln für [math]\displaystyle{ T_{CLK} }[/math] und [math]\displaystyle{ T_H }[/math] erfüllt sein. [math]\displaystyle{ T_{PD} }[/math] ist immer Null, da hier keine weitere Logik zwischen SDRAM und Mikrocontroller liegt, nur Leiterbahnen.

SDRAM Timing bei Taktverteilung vom Mikrocontroller

Etwas kniffliger wird die Angelegenheit wenn der Takt vom Mikrocontroller geliefert wird. Sämtliche Timings im Datenblatt beziehen sich auf das Taktsignal direkt am Gehäuse. Wenn nun aber eine etwas längere Taktleitung gebraucht wird, verschieben sich die Zeiten. Aber wie? Das Wort zur Beschreibung von verschobenen Taktflanken in synchronen Systemen heißt Skew. Im Idealfall ist er Null, real aber leider einiges größer. Betrachten wir zunächst die Datenrichtung vom Mikrocontroller zum SDRAM. Takt und Daten bewegen sich in die gleiche Richtung. Was hier scheinbar gut klingt kann böse ins Auge gehen. Wie? Nehmen wir an, die Taktleitung ist sehr viel länger als die Datenleitungen. Dann kann es bei schnellen ICs passieren, daß die Daten eher am nächsten FlipFlop sind (hier der SDRAM) als der Takt! Wenn dann der Takt verspätet eintrifft werden nicht die Daten des vorherigen Zyklus eingetaktet sondern die neuen! Es scheint dann so, als ob ein Taktzyklus fehlt! Demzufolge muß der Takt immer als erster ankommen. Wobei der Takt meist den Vorteil hat, daß die Daten noch von den FlipFlops ausgegeben werden müssen. Mathematisch heißt das.

[math]\displaystyle{ T_{RT-CLK}\lt =T_{RT-DATA}+T_{C2O}+T_H }[/math]

[math]\displaystyle{ T_{RT-CLK} }[/math] Laufzeit des Taktes
[math]\displaystyle{ T_{RT-DATA} }[/math] Laufzeit der Daten
[math]\displaystyle{ T_{C2O} }[/math] minimale Ausgabezeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_H }[/math] minimale Haltezeit der Daten am SDRAM, Datenblatt

Es ist also ratsam, die Taktleitung so kurz wie möglich zu halten. Auf grösseren Boards mit vielen SDRAMs und hohen Taktfrequenzen ist das manchmal schwierig bis unmöglich. Abhilfe schafft hier ein sog. PLL-Takttreiber. Dieser hat zusätzlich zum normalen Takttreiber eine PLL eingebaut, mit deren Hilfe Taktsignale "gespiegelt" werden können, d.h. Leitungslängen werden komplett kompensiert und an allen Verbrauchern liegt der Takt mit sehr geringer Phasenverschiebung an. Damit ist wieder ein System mit sternförmiger Taktverteilung entstanden und die Betrachtung vereinfacht sich. In FPGAs von Xilinx verwendet man DLLs (Delay Locked Loop) bzw. in den neueren Familien DCMs (Digital Clock Manager). Mit diesen Komponenten ist es möglich, den Takt im FPGA sowie am SDRAM in der Phase auszurichten, genauso wie es die PLL-Takttreiber auch machen. Siehe Links.

Schreibzugriff

Doch zurück zu unserem Takt, welcher eine gewisse Laufzeit bis zum SDRAM braucht. Wenn der später am Ziel (SDRAM) ankommt, dann haben die Daten auch ein klein wenig mehr Zeit, sich bis zum Ziel "durchzuschlagen". Mathematisch heißt das

[math]\displaystyle{ T_{CLK}\gt =T_{C2O}+T_{RT}+T_{S}- T_{RT-CLK} }[/math]

[math]\displaystyle{ T_{CLK} }[/math] Periodendauer des Taktes
[math]\displaystyle{ T_{C2O} }[/math] maximale Ausgabezeit der Daten am SDRAM, Datenblatt
[math]\displaystyle{ T_{RT} }[/math] Laufzeit auf Verbindungsleitungen
[math]\displaystyle{ T_{S} }[/math] minimale Stabilisierungszeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_{RT-CLK} }[/math] Laufzeit des Taktes

Wer jetzt aber meint mit einer großen Laufzeit des Taktes die maximale Taktfrequenz erhöhen zu können irrt! Was hier scheinbar höhere Taktfrequenzen zuläßt, ist bei der Hold Time kontraproduktiv. Ausserdem darf man den Lesezugriff nicht vergessen.

[math]\displaystyle{ T_H \lt = T_{RT-DATA}+T_{C2O}- T_{RT-CLK} }[/math]

[math]\displaystyle{ T_{RT-CLK} }[/math] Laufzeit des Taktes
[math]\displaystyle{ T_{RT-DATA} }[/math] Laufzeit der Daten
[math]\displaystyle{ T_{C2O} }[/math] minimale Ausgabezeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_H }[/math] minimale Haltezeit der Daten am SDRAM, Datenblatt

Lesezugriff

Zu guter Letzt müssen wir noch die Datenrichtung vom SDRAM zum Mikrocontroller prüfen. Wie wirkt sich hier eine Laufzeit des Taktes aus? Nun, wenn der Takt später am SDRAM ankommt werden die Lesedaten später "auf die Reise gehen". Das bedeutet, daß sie später am Mikrocontroller ankommen.

[math]\displaystyle{ T_{CLK}\gt =T_{C2O}+T_{RT}+T_{S}+T_{RT-CLK} }[/math]

[math]\displaystyle{ T_{CLK} }[/math] Periodendauer des Taktes
[math]\displaystyle{ T_{C2O} }[/math] maximale Ausgabezeit der Daten am SDRAM, Datenblatt
[math]\displaystyle{ T_{RT} }[/math] Laufzeit auf Verbindungsleitungen
[math]\displaystyle{ T_{S} }[/math] minimale Stabilisierungszeit der Daten am Mikrocontroller, Datenblatt
[math]\displaystyle{ T_{RT-CLK} }[/math] Laufzeit des Taktes vom Mikrocontroller zum SDRAM

Immerhin ändern sich damit die Daten nicht so schnell wie im Normalfall, so daß die Hold Time hier keine Probleme macht, da Takt und Daten entgegengesetzt laufen.

[math]\displaystyle{ T_H \lt = T_{RT-DATA}+T_{C2O}+ T_{RT-CLK} }[/math]

[math]\displaystyle{ T_{RT-CLK} }[/math] Laufzeit des Taktes
[math]\displaystyle{ T_{RT-DATA} }[/math] Laufzeit der Daten
[math]\displaystyle{ T_{C2O} }[/math] minimale Ausgabezeit der Daten am SDRAM, Datenblatt
[math]\displaystyle{ T_H }[/math] minimale Hold Time der Daten am Mikrocontroller, Datenblatt

Zusammenfassung

  • Wenn Takt und Daten in die gleiche Richtung laufen können Probleme mit der Hold Time auftreten
  • Wenn Takt und Daten in die entgegengesetzte Richtung laufen können Probleme mit der Setup Time auftreten
  • Eine sternförmige Taktverteilung ist einfacher zu analysieren
  • Bei langen Taktleitungen und vielen Taktempfängern sind PLL-Takttreiber hilfreich

Forumsbeiträge

Links