Hallo, In den Datenblättern von SDRAM steht ja, dass man beim einschalten eine ganz bestimmte Prozedur einhalten muss. Wenn man das nicht befolgt kann sich der RAM in einem undefinierten Zustand befinden. (z.B.Seite 11 von http://download.micron.com/pdf/datasheets/dram/sdram/64MSDRAMx32.pdf ) Jetzt steht da: 1. Simultaneously apply power to VDD and VDDQ. 2. Assert and hold CKE at a LVTTL logic LOW since all inputs and outputs are LVTTL-compatible. ... Jetzt stellt sich mir die Frage wie man das bewerkstelligen soll. Den ersten Punkt finde ich schonmal ziemlich ungeschickt. Es ist halt die frage was mit "Simultaneously" gemeint ist. Gleichzeitig innerhalb einer us? inerhalb einer ns? OK, ns sicher nicht mehr (da sind die Anstiegszeiten der Spannung ja auch viel langsamer). Welche Anforderungen ich jetzt wirklich erfüllen muss weiß ich nicht. Naja aber lieber zu meinem eigentichen Problem nämlich Punkt 2. Eigentlich hatte ich vor den SDRAM direkt an einem FPGA zu betreiben. Wenn CKE aber von Anfang an LOW sein muss wird das schwierig. Das Programmieren von FPGAs dauert ja so seine Zeit egal ob man es über JTAG oder einen Boot-EEPROM macht. Und so weit ich weiß sind die Ausgänge während des Programmierens ja alle zumindest mit einem Pull-Up versehen. Was mache ich also? Irgend einen Baustein zwischen FPGA und SDRAM? Separate Spannungsversorgung für den SDRAM? Wobei die Möglichkeit ja eigentlich auch weg fällt, da in dem Fall an den Eingängen der SDRAMS ja sogar Spannungan anliegen würden die außerhalb der Versorgungsspannung liegen. Also solange die Versorgungsspannung des SDRAMS noch nicht aktiviert ist. Oder ist es nicht so kritisch und ich kann FPGA und SDRAM gleichzeitig mit Spannung versorgen und nach der Programmierprozedur des FPGAs normal die Initialisierung durchführen? Meine Sorge ist an der Stelle halt, dass sich der SDRAM in einem undefiniertem Zustand befindet und mit Pech derart, dass auf den Datenausgängen etwas ausgibt und damit sich FPGA und SDRAM gegenseitig grillen. Viele Grüße, Christian
Christian H. wrote:
> 1. Simultaneously apply power to VDD and VDDQ.
Das heisst, dass du dafür keine getrennten Stromversorgungen verwenden
solltest sondern beide an die gleiche hängst. Und damit du trotzdem die
Pins für bessere Signalqualität und passenderes Layout auseinanderhalten
kann.
OK. Was ist beim Platinenlayout denn der Unterschied zwischen VDD und VDDQ? Muss man unterschiedliche Sachen z.B. bei Abblock-Kondensatoren beachten?
Hallo, auf allen üblichen SDRAM-Speichermodulen wurde im Platinenlayout nicht zwischen VDD- und VDDQ-Netz unterschieden. Beide werden als eine Versorgungsspannung und auf einer Versorgungslage ans SDRAM herangeführt. Erst beim Package des DRAMs und Package-intern auf dem die werden werden beide Netze unterschieden. Abblockkondensatoren nahe an allen Versorgungs-Pins des SDRAM empfehlen sich auf jeden Fall, und die sind dann sozusagen aufgrund ihrer Position (Nähe VDD-Pin oder Nähe VDDQ-Pin) dediziert für VDD bzw. VDDQ tätig. Der eventuell undefinierte Zustand der Datentreiber am DRAM wurde tatsächlich in der Vergangenheit schon manchmal zum Problem, vor allem bei größeren Systemen. Denn das Problem eines definierten Power Up hast nicht nur du mit deinem FPGA, das haben auch PCs und Server. Dort hängen dann ggf. mehrere DRAMs parallel an den selben Datenleitungen und treiben gegeneinander. Bei den Treiberstärken von single data rate SDRAMs wird zwar noch nichts gegrillt, aber durch die große Menge von DRAM-chips im System wird die Spannungsversorgung überlastet und das System gar nicht erst bis zur Speicherinitialisierung. Dieses Problem sollte bei einzelnen DRAMs an einem FPGA keine zu große Rolle spielen. Lass zur Not halt das DRAM ein paar Sekunden lang gegen die Pullups treiben, die Stromstärken dürften sich im ungefährlichen Rahmen halten. Wenn du ganz sicher gehen willst, dann spendiere dem CKE einen externen Pulldown. Er muss bis zur vollständigen Programmierung des FPGA die Leitung auf 0 halten, danach muss das FPGA in der Lage sein ihn problemlos zu übertreiben. Ein paar hundert Ohm sollten passen. Ach ja, noch ein Punkt: auf SDR SDRAM-DIMMs hatten die Datenleitungen jeweils einen Längswiderstand mit drinnen (27 Ohm wenn ich mich recht erinnere) um eine vernünftige Signal-Integrity auf den ggf. recht komplexen Bustopologien zu erlauben. Ich gehe mal davon aus, dass du eine kurze Point-to-Point Verbindung zwischen FPGA und DRAM haben wirst, und dass nicht mehrere DRAMs an der selben Datenleitung betrieben werden, oder? Ich weiß nicht, ob du diese Verbindung auf ihr Signalling-Verhalten hin simulieren wirst/kannst. Aus dem Bauch raus würde ich vermuten, dass auch bei deiner Schaltung ein Längswiderstand in jeder Leitung von Vorteil sein könnte (aber ohne konkrete Simulation oder Messung lässt sich schwer sagen, ob er wirklich nötig ist und welchen Wert er haben sollte). Diese externen Widerstände würden in jedem Fall auch eine Begrenzung des Stroms bei undefiniertem Einschaltverhalten garantieren. schöne Grüße Achim
Hallo Achim, > herangeführt. Erst beim Package des DRAMs und Package-intern auf dem die > werden werden beide Netze unterschieden. OK > sich auf jeden Fall, und die sind dann sozusagen aufgrund ihrer Position > (Nähe VDD-Pin oder Nähe VDDQ-Pin) dediziert für VDD bzw. VDDQ tätig. OK. > > Dieses Problem sollte bei einzelnen DRAMs an einem FPGA keine zu große > Rolle spielen. Lass zur Not halt das DRAM ein paar Sekunden lang gegen > die Pullups treiben, die Stromstärken dürften sich im ungefährlichen > Rahmen halten. Wenn du ganz sicher gehen willst, dann spendiere dem CKE > einen externen Pulldown. Er muss bis zur vollständigen Programmierung > des FPGA die Leitung auf 0 halten, danach muss das FPGA in der Lage sein > ihn problemlos zu übertreiben. Ein paar hundert Ohm sollten passen. > Warum so wenig? Ich meine selbst bei 500R fließen noch 6,6mA. Aber anderseits ist laut Datenblatt bei 3,3V der minimale Wert für den internen Pull-Up 2,4k. 1k als Pull-Down bringt da ja nicht viel. Aber wenn du meinst, dass das sowieso vermutlich nicht das Problem ist kann ich den ja mal nur als optionales Bauteil vorsehen. > Ach ja, noch ein Punkt: auf SDR SDRAM-DIMMs hatten die Datenleitungen > jeweils einen Längswiderstand mit drinnen (27 Ohm wenn ich mich recht > erinnere) um eine vernünftige Signal-Integrity auf den ggf. recht > komplexen Bustopologien zu erlauben. Ich gehe mal davon aus, dass du > eine kurze Point-to-Point Verbindung zwischen FPGA und DRAM haben wirst, > und dass nicht mehrere DRAMs an der selben Datenleitung betrieben > werden, oder? Ich weiß nicht, ob du diese Verbindung auf ihr > Signalling-Verhalten hin simulieren wirst/kannst. Aus dem Bauch raus > würde ich vermuten, dass auch bei deiner Schaltung ein Längswiderstand > in jeder Leitung von Vorteil sein könnte (aber ohne konkrete Simulation > oder Messung lässt sich schwer sagen, ob er wirklich nötig ist und > welchen Wert er haben sollte). Diese externen Widerstände würden in > jedem Fall auch eine Begrenzung des Stroms bei undefiniertem > Einschaltverhalten garantieren. > Simuliert habe ich schon mal. Das war aber noch für ein anderes Board. Die Terminierung machte schon so einiges aus. Damals waren die Leitungen (in der Simulation 20 cm lang. Ich denke ich werde aber mit deutlich weniger auskommen. Geplant ist auch nur einen Ram-Stein einzusetzen. SDRAM ist für meine Anwendung eigentlich auch schon überdimensioniert, aber ich wollte schon immer mal lernen wie man damit umgeht. So oder so ist die Serienterminierung sicher eine gute Idee. Wie kommt man eigentilch grade auf die 27 Ohm? sind die gleich der Leitungsimpednaz? Ich weiß nicht wie gut ich die definieren können werde. Der SDRAM soll mit 60MHz laufen. Da langsamere Typen als die für 143MHz kaum zu bekommen sind wollte ich so einen dafür nehmen. Im Datenblatt kann ich keine untere Beschränkung für doe Taktrate finden. Mal abgesehen von Refreh und maximaler Zeit zwischen Active und Precharge. Aber die Zeiten sind ja so lang, dass 60MHz noch kein Problem sein sollten. Ist es überhaupt sinnvoll 143Mhz Bausteine anstelle von 166MHz zu verwenden? Dass es sinnvoll ist langsame Komponenten zu verwenden ist klar. Aber sind die Flanken hier überhaupt langsamer? Das einzige was ich dazu im Datasheet finden konnte sind die Transition-Times und die sind für alle Speedgrades gleich. Es ist ja so, dass die langsamen ja sogar teurer sind. Und zu der Topologie: Dank der Flexibilität der FPGAs hoffe ich die Leitungen vollkommen entflechtet zu bekommen. Kontrolliert habe ich das noch nicht, aber ich wüsste nicht warum das nicht gehen sollte. Viele Grüße und Danke Christian
Hi Christian, die paar hundert Ohm für den externen CKE-Pulldown hätte ich ich gewählt um einen potentiellen Pull-Up im FGPA sicher zu übersteuern. Ich hatte dich so verstanden, dass dein FPGA während der Konfigurierung die Leitung nach oben zieht (wobei ich eher erwartet hätte, dass die IOs des FPGA während dieser Zeit hochohmig sind). Dimensioniere den Pulldown so hochohmig, dass er ausreicht, um CKE unter 1V zu ziehen. Wenn ein paar kOhm reichen ist's auch gut. Die 27 Ohm auf den DIMMs entsprachen nicht der Leitungsimpedanz - die lag auf dem DIMM und auf dem Motherboard irgendwo um 50-60 Ohm. Tatsächlich dienten sie auch nicht als einfache Längsterminierung sondern mussten mit diversen, unterschiedlichen Schaltsituationen klarkommen. SDR Systeme hatten bis zu 4 Speicherslots pro Kanal (d.h. die Datenleitung von bis zu DIMMs waren parallel geschaltet). Wenn z.B. der am weitest entfernte DIMM ein Signal in Richtung Controller treiben soll muss sein Widerstand noch genügend Signal durchlassen. Auf den vorderen DIMMs, an denen das Signal vorbeiläuft, müssen die Widerstände das einlaufende Signal hinreichend stark dämpfen, damit die Reflektionen aus diesen Stubs nicht zu groß werden. Sie hätten ansonsten die unangenehme Eigenschaft sich wieder phasenrichtig zu überlagern und das Signal am Controller zu killen. Warum es dann gerade 27 Ohm geworden sind ist schwer zu sagen. Wahrscheinlich haben 2 Jahre vor der Markteinführung von SDRAM Dutzende Simulanten von Intel, AMD, Via, ..., diversen Boardmachern und DRAM-Herstellern solange bei Jedec miteinander diskutiert, bis es ihnen zu langweilig wurde. Und dann haben sie sich auf den Mittelwert ihrer jeweiligen Vorschläge geeinigt. Kann natürlich auch sein, dass es aus physikalischen Grundgesetzen heraus unbedingt genau 27 Ohm sein müssen, glaube ich aber nicht. Ich glaube kaum, dass der Speed-Sort des DRAM eine große Rolle für dich spielt (da du das Teil am unteren Ende seiner Speedbereichs betreiben willst). Er ist im wesentlichen durch DRAM interne Beschränkungen limitiert, die du alle nicht ausreizen willst. Langsamer sollte immer gehen. Ich würde an deiner Stelle den Speed nehmen, der am einfachsten/billigsten zu besorgen ist. Zum Signalling: wahrscheinlich dürften auch die langsameren Speedsorts die gleiche Flankensteilheit haben wie die schnellen. Wenn nicht, sind die Unterschiede gering. Ein SDRAM über 20 cm lange Anschlüsse bei 143 MHz hätte sportlich werden können. Wenn du wie von dir geplant die Leitungen nett entflechtest, auf einige cm beschränkst, mit einem Längswiderstand versiehst und dich auf 60MHz beschränkst, dann traue ich dir schon eine funktionierede Schaltung zu. Es wird zwar ggf. immer noch nett zu Reflektionen kommen, aber das Signal hat viele Roundtrips Zeit um sich einzupendeln ehe es mit der nächsten Taktflanke übernommen wird. Entweder aussagekräftig simulieren (liefert Micron auf der Webpage Treibermodelle?) oder im fertigen PCB mal mit einem Widerstandswert loslegen und mit einem ausreichend guten Scope nachmessen und optimieren. Ich hätte sowas in meiner Bastelecke zwar nicht zur Verfügung, aber vielleicht hast du am Arbeitsplatz/an der Hochschule oder wo auch immer ja mal leihweise Zugriff auf passendes Messequipment. Ansonsten muss man halt schon sagen, dass DRAMs nicht unbedingt die angenehmsten Teile zum Basteln sind. Es gibt zwar nicht ein einzelnes, unlösbares Problem, aber man muss sicher erst durch die tausend Kleinigkeiten kämpfen, die's beim SRAM nicht gibt: die Initialisierung, den Split der Adresse in RAS/CAS/BS, die Statemachine zum Ansteuern der verschiedenen SDRAM-Bänke, der Refresh, .... Beim Einsatz im PC werden diese Problemchen natürlich durch Preis- und Dichtevorteil völlig überwogen. Aber beim Einsatz eines einzelnes Bausteins als Bastler sieht die Sache anders aus... Aber andererseits bin ich auch der Meinung, dass man sich zwischendurch das Leben ruhig mal absichtlich unnötig schwer machen darf, damit man was dazu lernt. viel Spaß bei deinem Projekt Achim
>... ich eher erwartet hätte, dass die IOs des FPGA während >der Konfigurierung hochohmig sind ... Zumindest bei Xilinx lässt sich das einstellen (Bild)...
Achim wrote: > hochohmig, dass er ausreicht, um CKE unter 1V zu ziehen. Wenn ein paar > kOhm reichen ist's auch gut. > Laut Datenblatt des Spartan 3 liegt der effektive Pull-Up Widerstand im Bereich 2,4k -10,8k. Hochohmig würde ich das noch nicht so richtig nennen, aber hohe Ströme treten da ja auch nicht grade auf. > ... > vorderen DIMMs, an denen das Signal vorbeiläuft, müssen die Widerstände > das einlaufende Signal hinreichend stark dämpfen, damit die Reflektionen > aus diesen Stubs nicht zu groß werden. Sie hätten ansonsten die > unangenehme Eigenschaft sich wieder phasenrichtig zu überlagern und das > Signal am Controller zu killen. Bin ich froh, dass ich nur einen Chip verwenden will ;-) > > Warum es dann gerade 27 Ohm geworden sind ist schwer zu sagen. > Wahrscheinlich haben 2 Jahre vor der Markteinführung von SDRAM Dutzende > Simulanten von Intel, AMD, Via, ..., diversen Boardmachern und > DRAM-Herstellern solange bei Jedec miteinander diskutiert, bis es ihnen > zu langweilig wurde. Und dann haben sie sich auf den Mittelwert ihrer > jeweiligen Vorschläge geeinigt. Kann natürlich auch sein, dass es aus > physikalischen Grundgesetzen heraus unbedingt genau 27 Ohm sein müssen, > glaube ich aber nicht. > Ok. Dann werde ich mal in einer Ibis Simulation ein paar Werte ausprobieren. > limitiert, die du alle nicht ausreizen willst. Langsamer sollte immer > gehen. Ich würde an deiner Stelle den Speed nehmen, der am > einfachsten/billigsten zu besorgen ist. Mir ging es drum, dass die ja evtl langsamere flanken haben und dadurch einfacher zu handhaben sind. Aber wenn dem eh nicht so ist. > Entweder aussagekräftig simulieren (liefert Micron auf der Webpage > Treibermodelle?) oder im fertigen PCB mal mit einem Widerstandswert Wenn du damit ibis-Modelle meinst: ja. > loslegen und mit einem ausreichend guten Scope nachmessen und > optimieren. Ich hätte sowas in meiner Bastelecke zwar nicht zur > Verfügung, aber vielleicht hast du am Arbeitsplatz/an der Hochschule > oder wo auch immer ja mal leihweise Zugriff auf passendes Messequipment. > In der Uni habe ich ausreichend schnelle Oszilloskope zur Verfügung. > Ansonsten muss man halt schon sagen, dass DRAMs nicht unbedingt die > angenehmsten Teile zum Basteln sind. Es gibt zwar nicht ein einzelnes, > unlösbares Problem, aber man muss sicher erst durch die tausend > Kleinigkeiten kämpfen, die's beim SRAM nicht gibt: die Initialisierung, > den Split der Adresse in RAS/CAS/BS, die Statemachine zum Ansteuern der > verschiedenen SDRAM-Bänke, der Refresh, .... Beim Einsatz im PC werden > diese Problemchen natürlich durch Preis- und Dichtevorteil völlig > überwogen. Aber beim Einsatz eines einzelnes Bausteins als Bastler sieht > die Sache anders aus... Ja, wird sicher Komplizierter. Aber ich will es nicht überbewerten. Einzige Aufgabe ist nur viele Daten im Burst Modus reinzuschreiben und anschließend alles wieder auszulesen. Gewissermaßen ein riesiges Fifo. Daher will ich auch lieber nicht einen fertigen Controller Core nehmen sondern einen selber schreiben. Bei den wenigen aufgaben die zu erfüllen sind könnte ich mir vorstellen, dass es schwieriger ist den fertigen Controller anzusteuern als selber einen zu schreiben der zwar weniger kann, aber genau das was ich brauche. Und wenn es doch mehr Arbeit ist habe ich eben was dabei gelernt. Auch gut. > > Aber andererseits bin ich auch der Meinung, dass man sich zwischendurch > das Leben ruhig mal absichtlich unnötig schwer machen darf, damit man > was dazu lernt. Ja. Ist bei mir ja auch ein Hobby. Wenn ich mir das Leben nicht schwer machen wollte sollte ich es lieber ganz bleiben lassen ;-) > > viel Spaß bei deinem Projekt > Danke und vielen dank für die Hilfe! Lothar Miller wrote: >>... ich eher erwartet hätte, dass die IOs des FPGA während >>der Konfigurierung hochohmig sind ... > > Zumindest bei Xilinx lässt sich das einstellen (Bild)... Bist du sicher, dass es da um die IOs WÄHREND der Konfiguration geht? Ich hätte jetzt gedacht, da stellt man ein was man mit den Pins macht, die das Design nicht verwendet. Viele Grüße, Christian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.