Forum: FPGA, VHDL & Co. Sdram mit niedrigem Takt an Cpld


von Matthias N. (strassenkind)


Lesenswert?

Hallo!
Ich möchte ein Sdram (hynix hy57v28820hct, 128mbit, 8bit Datenbus, 
pc133) als Ersatz für parallele Maskroms mit 120ns Zugriffszeit an einer 
betagten Videospielkonsole benutzen.
Hatte geplant, das Interface mit nem Cpld zu realisieren, wahrscheinlich 
xc95144.
Systemtakt ist 21,28Mhz, also deutlich langsamer als für das Sdram 
üblich. Laut Datenblatt liegt die maximal erlaubte Dauer eines Clock 
Cycles für das Sdram bei 1000ns, entspricht wenn ich mich nicht irre nem 
Takt von 1Mhz, sollte also theoretisch kein Problem sein.
Ich habe vorher noch nie mit Sdram gearbeitet, aber Erfahrung mit Cplds 
und Vhdl.

Soweit die Vorgeschichte, jetzt zum Problem:
Habe nach genauem Studium diverser Sdram-Datenblätter das Timing 
durchgerechnet und fürchte, dass ich die 120ns Zugriffszeit vorne und 
hinten nicht einhalten kann.

Soweit ich das sehe, dauert ein Clock Cylce bei 21,28Mhz ca 47ns.
Grob überschlagen würde z.B. ein Lesezugriff wohl folgende Schritte 
beinhalten:

1.Cpu der Konsole gibt Adresse auf den Bus
2.Cpld startet nen Lesevorgang, aktiviert row, setzt row adress
(Ras to Cas Delay von 20ns entfällt hoffentlich, ein Clock Tick dauert 
über 23ns)
3.Cpld sendet read command, setzt column adress
4.Cpld wartet 2 oder 3 cycles abhängig von cas latency
5.Cpld liest Daten mit Auto Precharge
6.Daten erscheinen auf dem Datenbus der Konsole

Macht soweit ich das sehe mindestens 7 Cycles bzw. 329ns Zugriffszeit 
und ist damit viel zu langsam.

Meine Frage an Sdram-Erfahrene ist nun, ob ich irgendwo einen Denkfehler 
gemacht habe, ob eine niedrige Taktung von Sdrams erfahrungsgemäss zu 
Problemen führen kann und wie ich die vorgegebe Zugriffszeit aus eurer 
Sicht am Besten erreichen kann.

Logisch wäre natürlich, das Ganze einfach höher zu takten. Das würde 
aber bedeuten, 2 unterschiedliche Clockdomains zu benutzen, was ich wenn 
möglich vermeiden möchte.

von Benedikt K. (benedikt)


Lesenswert?

Matthias N. wrote:
> Hallo!
> Ich möchte ein Sdram (hynix hy57v28820hct, 128mbit, 8bit Datenbus,
> pc133) als Ersatz für parallele Maskroms mit 120ns Zugriffszeit an einer
> betagten Videospielkonsole benutzen.

Wie bekommst du die Daten in das SDRAM ?

> Meine Frage an Sdram-Erfahrene ist nun, ob ich irgendwo einen Denkfehler
> gemacht habe, ob eine niedrige Taktung von Sdrams erfahrungsgemäss zu
> Problemen führen kann

Wenn du die mindest Werte im Datenblatt einhälst, dann sollte  es keine 
Probleme geben.

> und wie ich die vorgegebe Zugriffszeit aus eurer
> Sicht am Besten erreichen kann.

Dürfte schwer werden. Du hast die Schwierigkeit von (S)DRAMs schon 
erkannt: Diese sind nur bei Sequentiellen Zugriffen wirklich schnell, 
bzw. haben eine hohe Latenzzeit ehe die Daten anstehen.
Außer einem ehöhten Takt (z.B. per PLL, dann sollten die beiden 
Clockdomains nicht ganz soviele Probleme machen) fällt mir jetzt keine 
Lösung ein. Ich würde daher auf 4x Frequenz, also 85MHz gehen, dann 
brauchst du etwa 8-9 Takte für ein Byte, macht 105ns.

Ein weiteres Problem ist eventuell noch: Wie erkennst du einen neuen 
Lesezugriff ? Wird OE\ bei jedem zu lesenden Byte erneut aktiviert, oder 
kann es auch sein, dass nur die Adresse geändert wird ?

von Matthias N. (strassenkind)


Lesenswert?

Danke für deine Antwort!

> Wie bekommst du die Daten in das SDRAM ?

Erstmal auf ähnlichem Weg wie sie rauskommen, über einzelne 
Schreibbefehle der Konsolen-Cpu. Emulieren möchte ich ein Maskrom, aber 
im Endeffekt soll es dann von der Cpu wie ein Sram angesprochen werden 
können, irgendwie müssen die Daten ja, wie du schon sagtest, ins Sdram 
rein.


> Dürfte schwer werden. Du hast die Schwierigkeit von (S)DRAMs schon
> erkannt: Diese sind nur bei Sequentiellen Zugriffen wirklich schnell,
> bzw. haben eine hohe Latenzzeit ehe die Daten anstehen.
> Außer einem ehöhten Takt (z.B. per PLL, dann sollten die beiden
> Clockdomains nicht ganz soviele Probleme machen) fällt mir jetzt keine
> Lösung ein. Ich würde daher auf 4x Frequenz, also 85MHz gehen, dann
> brauchst du etwa 8-9 Takte für ein Byte, macht 105ns.

Das hört sich sehr gut an.
Die Konsole läuft mit 5V, deswegen hatte ich auch ursprünglich an den 
xc95144 von Xilinx gedacht, weil der bei 3,3V Versorgungsspannung noch 
5V Inputs akzeptiert. Nen PLL hat der natürlich nicht an Bord.

Ich möchte das Design was die Bauteile angeht so kompakt und simpel wie 
möglich gestalten und auch noch in der Lage sein, es selbst zu löten, 
deshalb bin ich Fpgas gegenüber eher skeptisch. Insbesondere die 
verschiedenen Versorgungsspannungen, externe Konfigurationsspeicher und 
die notwendige Bus-Translation auf 5V schrecken mich ab.

Ich habe mich ein bisschen umgesehen und hab nach längerem Suchem die 
ispXpld 5000 Cpld-Serie von Lattice entdeckt, da speziell das lc5512mv.
5V-tolerante Eingänge bei 3,3V Corespannung, PLL und dazu noch ne Menge 
Macrocells etc.
Nachteil wären der recht hohe Preis von ca $30 bei Mouser und die 
kleinen Pins, aber das ist noch im Rahmen denke ich.

Möglich wäre wohl auch ein externes PLL-Ic an nem normalen Xilinx-Cpld, 
aber ich tendiere momentan eher zum Lattice. Werde mich jetzt erstmal 
weiter in die Materie einlesen.

> Ein weiteres Problem ist eventuell noch: Wie erkennst du einen neuen
> Lesezugriff ? Wird OE\ bei jedem zu lesenden Byte erneut aktiviert, oder
> kann es auch sein, dass nur die Adresse geändert wird ?

OE wird bei jedem Zugriff erneut aktiviert, ja, das sollte kein Problem 
sein.
Vielen Dank nochmal für deine Hilfe!

von Falk B. (falk)


Lesenswert?

@ Matthias N. (strassenkind)

>Ich möchte ein Sdram (hynix hy57v28820hct, 128mbit, 8bit Datenbus,
>pc133) als Ersatz für parallele Maskroms mit 120ns Zugriffszeit an einer
>betagten Videospielkonsole benutzen.

Um es kurz zum machen. Vergiss es.
Es gibt einen wesentlichen Unterschied zwischen SRAM und S_D_RAM.
Siehe Speicher.
Nimm einfach SRAM oder EEPROM/FLASH.

MfG
Falk

von Olaf (Gast)


Lesenswert?

Hi,
wieso spendierst du dem CPLD/SDRAM nicht eine eigenen takt?

Ein ROM besizt ja keine takt-leitung an sich. Addresse anlegen Read-pin 
geht low und nach 120ns müssen die daten bits stabil am ausgang 
anliegen.

Was hindert dich den CPLD mit 66MHz zu betreiben? Oder 100? Du must ja 
'nur' ein latch implementieren das die daten vom SDram aufnimmt und 
solange hält wie der read-pin low ist.

Nur so ne idee...

mfg.
Olaf

von Gast (Gast)


Lesenswert?

Wieso braucht eine betagte Videokonsole 128MBit Speicher? Gibts kein 
passender SRAM?

Wenn es darum geht Catridges zu kopieren, dann fürde ich die Flash 
empfehlen ...

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.