Forum: FPGA, VHDL & Co. Spartan-3E-Starterboard ReD; Probleme mit dem DDR-SDRAM


von walterludwig (Gast)


Lesenswert?

Hallo,

ich habe ein Frage an die Experten für das Spartan-3E-Starterboard 
(RevD).
Bei Versuchen mit einem Microblaze-Core unter Verwendung des opb-ddr 
Controllers in die DDR-SDRAM zu schreiben versagen bei mir sämtliche 
Testprogramme. Auch mch-odb hilft nicht.
Schaue ich nach dem Schreibvorgang (z.B. sollte eine bin-Datei 
übertragen werden via USB-JTAG) mit dem xmd-Programm in die Memory des 
DDR_SDRAM (Start: 0x22000000) sehe ich nur Nullen; vom Anfang bis zum 
Ende des DDR-SDRAM.
Es sind Testprogramme dabei, die angeblich mit der RevC gelaufen sind 
(sagen die Autoren).
Ist inzwischen bekannt, was der Unterschied von RevC und RevD des 
Boardes ist ? In den entsprechenden Xilinx-Unterlagen habe ich nichts 
gefunden.
Ich habe kürzlich irgendwo im Internet gelesen, daß das Stepping des 
FPGA-Bausteins auf dem Board (bei RevD offensichtlich immer stepping = 
0)etwas damit zutun haben könnte. Es gibt vom gleichen FPGA auch 
stepping=1-Produkte, die wesentlich höhere MHz (ich glaube 133 MHz) 
erlauben als  stepping-0-Produktionen.

Hat jemand ein RevC-Board, bei dem der Microblaze-Standardtest 
"TestAppMemory" im EDK Testergebnisse beim DDR-SDRAM liefert ("Pass")? 
Noch nicht mal das funktioniert bei meinem Board.

Ich bin auf Eure Kommentare und Hinweise gespannt.

walterludwig (anfänger)


von Peter L. (phlug)


Lesenswert?

Hallo,

wollte nur berichten, dass ich genau das gleiche Problem habe. 
Allerdings mit einem Rev C Board. Bist du schon weiter gekommen?

Gruß, phlug

von walterludwig (Gast)


Lesenswert?

  Hallo phlug,

ich bin nicht weitergekommen (Phase-shifting-Versuche sind auch im Sand 
verlaufen); ich werde mit dem Board keine so "hochgestochenen" Dinge wie 
DDR_SDRAM-Verwendung mehr betreiben.
Bei Xapps von Xilinx wimmelt es von guten Ratschlägen zum Thema 
DDR-SDRAM. Das zeigt, daß dies ein "heißes" Thema bei Xilinx (und 
anderen FPGA-Herstellern, Altera etc. ist), kompliziert und offenbar 
sehr fehleranfällig. Und da darf man als Xlinx-Starterkit-Besitzer eben 
wochenlang üben (erfolglos)

Merkwürdig ist schon, daß Xilinx, das für alle möglichen Dinge einen 
Wizard hat, hier nichts vorzeigt.
Ein für Nichtspezialisten nachvollziehbares Tutorial zum DDR-SDRAM-/ 
Timing, Board-bezogen habe ich bei Xilinx auch nicht gefunden. So etwas 
gehört doch offensichtlich in den UserGuide vom Board / kit. Aber so 
teuer war das Starterkit nicht, wie kann man dann einen solchen 
"Service" erwarten ?!

Altera ist hier angeblich wesentlich weiter.

Also ab zu Altera.

Hier ein Link zu anderen "Leidtragenden"
(was natürlich nicht tröstet), vielleicht können die Dir helfen.

http://www10.edacafe.com/NewsPortal-0.37/article.php?id=114308&group=comp.arch.fpga


Gruß
walterludwig

von Lukasz Panek (Gast)


Lesenswert?

Hallo,

auch ich habe dieses Problem in meinem RevD-Board festgestellt:(. Ich 
denke nicht, dass es sich um einen Produktionsfehler handelt. Das neue 
Spartan3 Starterkit hat zum Glück auch ein DDR-Ram und ist auch sonst 
dem Spartan3-Kit sehr ähnlich. Die Community der unzufriedenen DDR-User 
und somit der Druck auf Xilinx etwas zu unternehmen dürften somit größer 
werden.

Lukasz

von walterludwig (Gast)


Lesenswert?

Hallo,

ein Nachtrag von mir.
Ein Hauptunterschied zwischen Rev C und Rev D habe ich in den 
Schematic.pdf's für die Boardvarianten auf Seite 12 doch noch entdeckt 
(hatte ich mehrmals am Bildschirm übersehen).
Der DDR-SDRAM IC ist unterschiedlich (jeweils von Micron):
 bei Rev C lt. Angabe  MT46V16M16TG-75
 bei Rev D lt. Angabe  MT46V32M16TG-6T (der ist auch auf meinem Board).

Lt. Micron-Datenblättern soll der Chip auf der Rev C ab 100 Mhz, die auf 
der Rev D aber ab 133 Mhz laufen !!!

Und auch ein Blick über den Gartenzaun:

Das neue Starterkit Spartan-3e- Microblaze-1600 hat den gleichen 
DDR-SDRAM-IC wie die Rev D-Variante , aber zusätzlich einen 
CMOS-Oszillator mit 66,6 Mhz.
Sagt das uns etwas ? Z. B. diesen Oszillator in die Rev D einbauen und 
die Voraussetzungen für eine Inbetriebnahme des DDR-SDRAMs sind deutlich 
verbessert. Oder eher:  Das bringt nichts, schade um die zusätzliche 
Geldausgabe.

Anmerkung: Xilinx hat vor wenigen Tagen den Preis für das Spartan-3e- 
Starterkit reduziert (wegen Promotion , muß vielleicht eher 
Winter-Schlußverkauf heißen) ; "Nachtigall ick hör dir trappsen".

Gruß
walterludwig

von Joerg (Gast)


Lesenswert?

Hallo,

> Ein Hauptunterschied zwischen Rev C und Rev D habe ich in den
> Schematic.pdf's für die Boardvarianten auf Seite 12 doch noch entdeckt
> (hatte ich mehrmals am Bildschirm übersehen).
> Der DDR-SDRAM IC ist unterschiedlich (jeweils von Micron):
>  bei Rev C lt. Angabe  MT46V16M16TG-75
>  bei Rev D lt. Angabe  MT46V32M16TG-6T (der ist auch auf meinem Board).

ACK, Ich habe hier auch auch Rev. D Board mit dem *-6T

> Lt. Micron-Datenblättern soll der Chip auf der Rev C ab 100 Mhz, die auf
> der Rev D aber ab 133 Mhz laufen !!!

Das glaube ich nicht -- es handelt sich wohl ehr um die max. Frequenz.

JEDEC-79E spezifiziert DDR herstellerunabhaenig, und da verlangt Seite 
56 "TABLE 11: ELECTRICAL CHARACTERISTICS AND AC TIMING" für DDR200, 
DDR266 und DDR333 ein maximales tclk von 12 ns. Also was um 85MHz.


Ausserdem habe ich auf genau dem Board einen selbstgeschriebenen DDR 
Controller mit 100MHz laufen. Der ist leider voll synchron, d.h. das 
restliche FPGA Design läuft mit 50MHz und sieht ein 64Bit breites 
Speicherinterface [1].
Der Controller braucht unbedingt mehr Doku und sollte mal mit FIFOs 
asynchron gemacht werden... wenn ich mal Zeit haette -- und genau 
wuesste wie am besten.

   j.


[1] https://roulette.das-labor.org/trac/wiki/wb_ddr

von walterludwig (Gast)


Lesenswert?

  Hallo,

habe ich richtig interpretiert:
 Der opb-ddr-Controller von Xilinx ist für das 
Xilinx-Spartan-3e-Starterkit ungeeignet, der Käufer muß sich seinen 
Controller selber schreiben / entwickeln ? ! Super !

gruß
walterludwig

von Joerg (Gast)


Lesenswert?

Hallo,

> habe ich richtig interpretiert:
> Der opb-ddr-Controller von Xilinx ist für das
> Xilinx-Spartan-3e-Starterkit ungeeignet, der Käufer muß sich seinen
> Controller selber schreiben / entwickeln ? ! Super !

Zum opb controller kann ich nichts sagen -- den habe ich nicht 
ausprobiert weil ich den MicroBlaze wegen der hohen Lizenzkosten 
unattraktiv fand.

Aber ich habe 3 Wochen lang zwei anderen Controller von Xilinx versucht 
zum laufen zu bekommen:

1) Einen MIG (1.5) generierten
2) Einen, den mir Scott Schlachter von Xilinx zugeschickt hat. Habe mich 
dabei auf diesen Thread aus comp.sys.fpga berufen: 
http://groups.google.com/group/comp.arch.fpga/browse_thread/thread/5b7b9ad71c8dcebe/75b7258c3fa9587e

Beides ohne Erfolg. Unklar ob ich mich einfach zu dumm angestellt habe. 
Waren halt meine ersten Schritte mit FPGAs. Der eigene, noch 
verbesserungsfaehige, lief dann nach 2 Wochen.


Gerüchteweise ist bei der neusten MIG Version aber ein speziell auf das 
Board angepasster DDR Controller dabei. Habe das aber nicht verifiziert.


  j.

von walterludwig (Gast)


Lesenswert?

   Hallo Jörg,

vielen Dank für Deinen ausführlichen Bericht zu Deinen Ergebnissen. Ich 
vermute allerdings, daß er den meisten Starterkit-Verwendern, die 
Probleme mit ihrem DDR-SDRAM via Microblaze und pdb-ddr-Controller 
haben, nicht viel hilft. Mir auf keinen Fall, ich bin Anfänger.
Deine Ergebnisse sagen aus, daß mit der Starterkit-DDR-SDRAM-Hardware 
unter bestimmten Bedingungen (z. B anderer Microcontroller-Softcore 
(Leon3)) und mit entsprechendem FPGA-Know-how gearbeitet werden kann.

Man darf also nicht sagen, daß das DDR-SDRAM auf dem Starterkit nur gut 
fürs Xilinx-Marketing ist und technisch nicht ernst zu nehmen. Auf diese 
Idee kann man bei so viel Frust auch kommen. Für Anfänger muß
Xilinx zum Thema DDR-SDRAM_-Verwendung auf preiswerten Starter-kits 
"nachsitzen" . Tutorial etc.
Daß man eine Lösung für den Controller im MIG versteckt, sagt meiner 
Meinung nach auch aus, daß sich Xilinx auf dem Gebiet "DDR-Controller 
fürs Starterkit" seiner Sache (noch ?) nicht sicher ist.


Gruß
walterludwig

von Joerg (Gast)


Lesenswert?

Hallo walterludwig,

Ja, ich muss dir auf jeden Fall zustimmen -- das DDR Ram ist nicht 
sonderlich anfängerfreundlich.

Ich finde es auch --sagen wir mal-- unverstaendlich, dass Xilinx da 
nicht an exponierrter Stelle einen passenden Controller mitliefert. 
Zumindest dass der opb-controller aus dem EDK funktioniert haette ich 
erwartet.

Da hat wohl das Cyclone II Starter Kit [1] die Nase vorn. Altera hat 
neben SDRAM auch noch 512k SRAM verbaut. Simpel, flexibel zu benutzen 
und Anfängerfreundlich.



Andererseits: Ich wollte meinen DDR Controller noch so aufbohren, dass 
er asynchron ist und 2 Taktdomaenen hat: Einmal ca. 120 MHz (optimal 
133MHz, aber mal gucken ob das ohne Hand-Placing geht) fuer die DDR 
Seite, und einmal einen bel. anderen Takt mit dem man dann mit seinem 
eigenen Design gegen den Controller spricht.
Dann gäbe es zumindest einen einfach zu benutzenden Controller.

Eventuell haben die "alten Hasen" hier ja ein paar allg. Tips wie man an 
solche 2-Taktdomaenen-Probleme rangeht?



  j.


[1] http://www.altera.com/products/devkits/altera/kit-cyc2-2C20N.html

von Mike (Gast)


Lesenswert?

In den Releasenotes für den aktuellen MIG steht:

"Spartan-3E Starter Kit DDR1 design files are available only in Verilog 
from MIG v1.6. The VHDL version of the files can be downloaded from: 
ftp://ftp.xilinx.com/pub/applications/misc/s3e_starter_revd_mig_ddr[1].z 
ip"

Das ist natürlich nicht sehr vertrauenserweckend. Erst recht wenn man 
bedenkt wie lange Xilinx dafür gebraucht hat. Aber immerhin: die älteren 
Versionen davor konnten anscheinend überhaupt nichts brauchbares 
erzeugen. Ich würde hier aber eher den Boardhersteller (Digilent) in der 
Pflicht sehen. Irgendwie müssen die doch das Board getestet haben...

1MB SRAM wie auf dem Spartan 3 Board sind natürlich deutlich 
einsteigerfreundlicher. Aber solche Rams sind vergleichsweise teuer und 
werden dann doch schnell zu klein. Wenn es zum DDR SDRAM noch gleich 
noch einen brauchbaren Core gegeben hätte, dann wäre das auf jeden Fall 
die bessere Lösung gewesen.

Mässte ich mir jetzt ein neues Board kaufen, dann wäre es wohl das 
Terasic/Altera Cyclone II geworden. Aber jetzt muss ich aus dem was ich 
habe das Beste machen ;).

von Axel (Gast)


Lesenswert?

>Eventuell haben die "alten Hasen" hier ja ein paar allg. Tips wie man
>an solche 2-Taktdomaenen-Probleme rangeht?

Da der andere Takt beliebig ist, kommst du um eine per-Hand 
Synchronisation nicht herum. Wie man das bei einem single-RAM hinlegt, 
weiss ich. Mit DDR habe ich das noch nicht gemacht. Ich denke, du 
brauchts eine annehmende doppelte-FF-Architektur für den schreibenden 
Takt, sowie ein Multiplexer-Architektur für den lesenden Takt, weil Die 
die Daten nicht notwendigerweise mit einem DDR-Takt RAmseitig lesen 
kannst, sondern aufgrund desEintakten des Busses und der Steuerleitungen 
die RAm-Seite einen Takt dazwischenschalten könnte.

von walterludwig (Gast)


Lesenswert?

  Hallo,

wenn wir jetzt schon beim Altera-Cyclone-II-Starterkit landen.
Wo kauft man das kostengünstig (Versandkosten etc. nicht zu hoch, also 
nicht unbedingt in USA bestellen) ein, hier bei Digi-Key ?
Oder gibt es noch andere Adressen hier in Deutschland.
Wäre für ein Tip sehr dankbar.

Gruß
walterludwig

von Joerg (Gast)


Lesenswert?

Hallo,

> Da der andere Takt beliebig ist, kommst du um eine per-Hand
> Synchronisation nicht herum. Wie man das bei einem single-RAM hinlegt,
> weiss ich. Mit DDR habe ich das noch nicht gemacht. Ich denke, du
> brauchts eine annehmende doppelte-FF-Architektur für den schreibenden
> Takt, sowie ein Multiplexer-Architektur für den lesenden Takt, weil Die
> die Daten nicht notwendigerweise mit einem DDR-Takt RAmseitig lesen
> kannst, sondern aufgrund desEintakten des Busses und der Steuerleitungen
> die RAm-Seite einen Takt dazwischenschalten könnte.


Ich bin mir nicht sicher ob ich dich richtig verstehe.

Dass ich Leseperationen source-synchron machen muss ist klar -- das habe 
ich auch schon.

Schreib Operationen mache ich mit PI/2 verschoben gegenueber dem Takt 
den ich dem DDR RAM gebe. Zum samplen der gelesenen Daten benutze ich 
einen zweiten, phasenverschobenen Takt den ich mit mit Hilfe der 
Takt-Feedbackleitung und einem DCM erzeuge. Das funktioniert soweit auch 
wunderbar.

Ich moechte jetzt aber, dass das Speicherinterface immer mit ~133 MHz 
lauft, waerend das restliche Design mit einem bel. Takt gegen den 
Controller spricht. Und es waere wohl gut wenn moeglichst viel 
Controller Logik mit dem (langsameren) Systemtakt lauft. (einfacheres 
P&R)

So haette ich also drei Tacktuebergaenge:

 1)  sys_clk   => ddr_w_clk    (fuer schreiben und ctrl-cmds)
 2)  ddr_r_clk => sys_clk      (klar, fuer gelesene daten)
 3)  ddr_w_clk => ddr_r_clk

Zu 3): der ddr_r_clk komponente muss taktgenau gesagt werden, wann
die Daten zu samplen sind. Das weiss wohl nur ddr_w_clk. Das hat die 
Steuerleitungen unter Kontrolle und lauft immerhin mit der gleichen 
Frequenz. Allerdings phasenverschoben.

Fuer 1) und 2) wuerde ich kleine async. FIFOs einsetzen.

Für 3) sollte ein FF reichen. Allerdings koennte es natuerlich sein,
dass der Phasenunterschied genau so ist, dass es haufig in den metastate 
gelangt. Dafuer wuerde ich einen zweiten Übergabe FF machen das PI 
Phasenverschoben taktet. Mind. einer der beiden FF muss doch 
zuverlaessig funktionieren.


Macht das Sinn? Oder gibt es ein schoeneres Design?


  j.

von Tobias (Gast)


Lesenswert?

Hallo,

bei mir (Rev.D Board) funktioniert die DDR-Speicheransteuerung ebenfalls 
nicht.
Ich habe deswegen auch schon mit einem Xilinx Applikationsingenieur 
unterhalten. Dabei stellte sich heraus, dass eine von mir erzeugter 
Memorytest auf meinem Board fehlschlug, auf seinem Board ( ebenfalls 
Rec.D) aber lief. Auch auf einem zweiten Board, das ich testete, lief 
der Test nicht erfolgreich. Dieses zweite Board habe ich nun an den 
Ingenieur geschickt, der sich die Sache genauer ansehen will.
Auf meinen beiden Board ist ein MT46V32M16TG-6T Speicherbaustein 
verbaut, auf dem Board des Ingenieurs befindet sich ein  MT46V16M16TG-75 
Baustein.
Sobald ich neuere Information habe melde ich mich wieder.

Tobias

von Peter L. (phlug)


Lesenswert?

Hallo zusammen,

ich habe jetzt eine relativ einfache Lösung (zumindest für mein Problem) 
gefunden. Die "Configuration Mode Jumpers" M0:M1:M2 müssen 0:1:0 gesetzt 
sein (JTAG Mode). Im Spartan-3E Board User Guide Seite 27. Der Memory 
Test läuft nun anstandslos mit "Passed" durch. Bitte nicht fragen wieso 
und warum :).

Grüße, phlug

von walterludwig (Gast)


Lesenswert?

    Hallo,

theoretisch darf auf der Rev D lt. offiziellem schematic.pdf überhaupt 
kein MT46V16M16TG-75 sein.
Vielleicht hat der Ingenieur aber etwas verwechselt.
Und wenn doch ? Dann muß ein schönes Durcheinander muß bei der 
Produktion des Boardes bei Digilent geherrscht haben. Die armen 
Xilinx-App-Leute ! Kein Wunder, daß die keine passende Lösung 
präsentieren (können).

Hallo phlug, das mit dem M0:M1:M2 =0:1:0 funktioniert bei meinem Rev. D 
Board nicht, vor Wochen schon probiert.
Ein schönes Durcheinander !

Gruß walterludwig

von Tobias (Gast)


Lesenswert?

Hallo,

Nach seinen Angaben hat der Ingenieur ein Rev.D mit MT46V16M16TG-75 
Speicher.
Das Umjumperen hat mir geholfen. Mit Jumper auf M1 und M0,M2 offen läuft 
der Speichertest einwandfrei.
Allerdings ist mir nicht ganz klar ob 1 oder 0 kein Jumper bedeutet, aus 
Tab 4-1 S.27 in der User Guide geht das nicht hervor. Vergleicht mal die 
Abbildungen mit den Zahlenangaben, da bedeutet eine 0 mal Jumper und mal 
kein Jumper. Nach dem Schaltplan 6/14 auf S.141 in der User Guide, 
bedeutet kein Jumper eine Verbindung mit 3,3V.

Tobias

von phlug (Gast)


Lesenswert?

hi zusammen,

ich hatte mal wieder probleme mit meinem DDR-speicher. allerdings trat 
dieser fehler nur mit der aktuellen EDK-version auf (9.x), bei 8.x läuft 
ein standard-design aus dem base system builder einwandfrei. ein 
unverändertes projekt von 8.x in 9.x übersetzt funktioniert auch. ich 
denke es liegt an irgendeiner neuen ip-version. habe leider keine zeit 
und lust es genauer zu testen. die lösung beseteht aus folgenden 
zusätzlichen zeilen in der UCF:

NET "*/DDR_DQ_I*" IOBDELAY=NONE;
NET "*/DDR_DQ_O*" IOBDELAY=NONE;
NET "*/DDR_DQ_T*" IOBDELAY=NONE;
NET "*/DDR_DQS_I*" IOBDELAY=NONE;
NET "*/DDR_DQS_O*" IOBDELAY=NONE;
NET "*/DDR_DQS_T*" IOBDELAY=NONE;

(die bezeichnungen können bei euch natürlich auch anders sein...)

viele grüße,
phlug

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
Noch kein Account? Hier anmelden.