DDR-RAM mit BRAM emulieren

Gast #6511329
Lesenswert?

ich möchte eine private Applikation mit einem UC, welcher ein altes 
DDR-RAM verwendet auf einen FPGA umsetzen, der kein DDR-RAM verwenden 
soll.
Es existiert eine Zwischenstufe einer Core-Netzliste, die den UC und den 
DDR-Controller sowie weitere Peripherie wrapped. Diese Netzliste habe 
ich als IP, darf sie privat kostenlos einsetzen, kriege aber keine 
Sourcen.

Ich möchte daher ein BRAM wrappen und es als DDR2-Controller zur 
Verfügung stellen. Das DDR-RAM arbeitet auf 133MHz, der FPGA kann 
300MHz, sollte meines Wissens also gehen.

Jemand eine Idee, wie man das hinbekommt? Könnte man Modelle 
synthesefähig bekommen (oder machen)?
Gast #6511467
Lesenswert?

Baschtler schrieb:
> Könnte man Modelle
> synthesefähig bekommen (oder machen)?
Die Modelle, die ich kenne (frei verfügbar) eher nicht, da dort viel 
Timing-Kram drinsteht und nur die geschriebenen Speicherzellen simuliert 
werden.

Aber prinzipiell kann das gehen, wird aber Arbeit.

Alternativ kannst Du evtl. einen echten DRAM an das FPGA dranhängen. 
Dann ist zumindest die Speichergröße kein Punkt mehr.

Duke
Gast #6512597
Lesenswert?

Echtes DRAM wird nicht gehen, da HW bereits vorliegt. Es ist ein 
SOPC-System mit SoftCORE. Ich habe nur Block-RAM.

Soweit ich mich mit dem Speicher auskenne, müsste man die DQS decodieren 
und eine der ADR-Leitungen um die ADR zu generieren. (habe das nie 
richtig kapiert, wie das geht).

Ausserdem muss ich eine Art done für das Eintrainieren der Leitungen 
liefern.

Immerhin brauche ich keinen refresh :-)

Sieht jemand andere Falstricke?
#6516169
Lesenswert?

Baschtler schrieb:
> Jemand eine Idee, wie man das hinbekommt? Könnte man Modelle
> synthesefähig bekommen (oder machen)?

Mit den offen rumliegenden ueblichen Verdaechtigen nur so: von Hand 
emulieren. Das wird aufwendig, aber mit DDR2 ev. grade noch knapp 
machbar, haengt von deinem FPGA ab. Eine Aussage zu den Frequenzen 
laesst sich so nicht einfach machen.

Riecht aber nach spassiger Fehlersuche, wenn es Timing-Probleme gibt 
(die Chancen stehen hoch). Und (Co-)Simulation von closed-source gegen 
ein Emulations-Modell hat bei manchen Herstellern auch Tuecken.
Mehr Sinn ('wirtschaftlich') wuerde es machen, unliebsame Komponenten 
aus der Netzliste zu entfernen, wenn unverschluesselt.
Gast #6516212
Lesenswert?

> Ich habe nur Block-RAM.

> Sieht jemand andere Falstricke?

Ja wieviel hast du denn davon?

Vielleicht solltest du mal die Preisliste konsultieren,
die die BRAM-Groesse den $$$ gegenueberstellt.

Wenn du nicht gerade ein Board bei E.ay "geschossen" hast,
wo z.B. einer oder mehrere XC4VLX200 drauf sitzen,
wird das hinten und vorne nicht reichen.
Angehängte Dateien:
Gast #6524294
Lesenswert?

Von wieviel DDR2 RAM reden wir eigentlich? Eine mickrige APP braucht 
u.U. nicht viel, das kann schon passen (habe schon 
Microblaze-Anwendungen komplett im RAM laufen lassen). Ich nehme aber 
an, du hast das gecheckt?

Es gibt einen Emulator, der DDR-RAM in SRAM Zugriffe übersetzt. Da 
hängen BRAM als Caches / Command-FIFO davor. Sowas würde ich hernehmen.
Persönliche Seite #6524368
Lesenswert?

S.B.Z.ettler schrieb:
> Wenn du nicht gerade ein Board bei E.ay "geschossen" hast,
> wo z.B. einer oder mehrere XC4VLX200 drauf sitzen,
> wird das hinten und vorne nicht reichen.

Ich würde mal behaupten, solche Virtix Boards haben stehts etliche 100MB 
an RAM, die man dann gleich nutzen könnte.

Wie soll man den DDR FPGA intern emulieren? Sitzen die DDR-fähigen 
Register nicht nur in den I/Os?
#6524373
Lesenswert?

Nachfrage:
Du hast also Netzlisten und keinen Code. Hast du getrennt
UC und DDR Controller?
Oder anders gefragt:
Kommst du an das Interface zwischen uC und DDR Controller ran?
Dann müsstest du nämlich keinen DDR RAM emulieren, sondern es würde 
reichen einen RAM Controller für oder mit BRAM zu schreiben der das 
gleiche Interface hat wie aktuell der DDR Controller.
Das stelle ich mir deutlich einfacher vor.
Gast #6527173
Lesenswert?

Mampf F. schrieb:
> Wie soll man den DDR FPGA intern emulieren? Sitzen die DDR-fähigen
> Register nicht nur in den I/Os?

DDR braucht man nur, wenn man den doppelten Takt nicht selber hinbekommt 
und genau das will der TE ja tun.

Die Frage ist, wie die DDR-Funktion real ausgeführt ist. Man darf 
annehmen, dass es einfach ein entsprechend hoher Takt auf den 
Datenleitungen ist. Es ist ja nur ein DDR2. Das gleiche hat man im 
Übrigen bei GDDRx in Grafik-Chips. Alles Faktor 2!
Gast #6527231
Lesenswert?

> solche Virtix Boards haben stehts etliche 100MB an RAM

Aber:
> Ich möchte daher ein BRAM wrappen

XC4VLX200
Block-RAM: 6048 Kilobit + 1392 Kilobit Distributed RAM

Dann schau auch mal nach den Preisen. Aber vorher hinsetzen.

Klingt fuer mich insgesamt eher nach Hirnfurz.
#6527249
Lesenswert?

S.B.Z.ettler schrieb:
> Klingt fuer mich insgesamt eher nach Hirnfurz.

Exakt. Da hat mittlerweile selbst das obere Ende der Einsteigerklasse 
(Artix7) mehr BRAM.

Dickster Spartan7 (92 € bei Mouser):
4320 + 1100 kBit
Dickster Artix7 (164 € bei Mouser):
13140 + 2888 kBit

Außerdem ist Baustein ist schon etwas alt und bietet dadurch weniger 
andere nette Features. Bei dem DSPs sind das 96 XC4VLX200, 160 XC7S100, 
740 XC7A200. Und von der aktuellen Entwicklungsumgebung Vivado wird der 
auch nicht unterstützt.
Gast #6682110
Lesenswert?

Baschtler schrieb:
> Ausserdem muss ich eine Art done für das Eintrainieren der Leitungen
> liefern.

Bei DDR wird nichts groß trainiert, bei BRAM garnicht. Hauptaufgabe ist
CAS und RAS zu einer linearen BRAM Adresse zusammenzusetzen und bei 
Burst Zugriffen, brav zu unkrementieren.
Die 2-Flankensteuerung bei DDR musste wohl mit doppelten BRAM-Takt oder 
mit 2-BRAM-Hälften in unterschiedlichen Taktdomainen mit 180° 
Phasenversatz emulieren. Wobei die Frage ist, ob in der ominösen, nicht 
änderbaren, Netzliste IO-FF oder Fab-FF Prims instanziert sind.

Aber vorher solltest du klar ansagen, wieviel DDR-RAM du minimal 
emulieren musst.  Wenn es mehr als die paar Mbyte an BRAM sind, die ein 
FPGA mitbringt, kannst du gleich aufhören.
Wieviel Speicher braucht den 'dein' Mikrocontroller minimal? Was soll da 
drauf laufen? Nur ein bisserl Endloschleife oder ein gut mit sich selbst 
beschäftigtes OS?
Und isses nun DDR oder DDR2?
Gast #6682128
Lesenswert?

Da ne ref-Card zum selber nachschauen wieviel kilo-bit an Speicher drin 
stecken: 
https://www.xilinx.com/support/documentation/selection-guides/7-series-product-selection-guide.pdf

und nicht vergessen, für 1 Gbyte braucht es 8*1024*1024 kbit.

Bei intel könnte man auch mal schauen ob's da mehr internen Speicher 
hat:

https://www.intel.com/content/www/us/en/products/details/fpga/cyclone/10.html
Persönliche Seite #6684608
Lesenswert?

Baschtler schrieb:
> Soweit ich mich mit dem Speicher auskenne, müsste man die DQS decodieren
> und eine der ADR-Leitungen um die ADR zu generieren. (habe das nie
> richtig kapiert, wie das geht).
Die Frage ist doch, an welcher Stelle das Block-RAM ins Spiel kommen 
soll- vor oder nach dem DDR-Controller?

Baschtler schrieb:
> Es existiert eine Zwischenstufe einer Core-Netzliste, die den UC und den
> DDR-Controller sowie weitere Peripherie wrapped.
Wenn aus dieser Netzliste ein low-level DDR-RAM-Timing heraus kommt, 
muss der konkrete Baustein nachgebildet werden, zumindest, was dessen 
RAS/CAS Verhalten angeht.

Fpgakuechle K. schrieb:
> Hauptaufgabe ist
> CAS und RAS zu einer linearen BRAM Adresse zusammenzusetzen
Das sollte noch hinzubekommen sein, aber wenn eine Anwendung ein 
externes RAM benutzt, ist das meist ein Großes. Das gibt garantiert ein 
Platzproblem. Vom reinen Timing her sind Block-RAMs super schnell.
Gast #6684670
Lesenswert?

Jürgen S. schrieb:
> Baschtler schrieb:
>> Soweit ich mich mit dem Speicher auskenne, müsste man die DQS decodieren
>> und eine der ADR-Leitungen um die ADR zu generieren. (habe das nie
>> richtig kapiert, wie das geht).
> Die Frage ist doch, an welcher Stelle das Block-RAM ins Spiel kommen
> soll- vor oder nach dem DDR-Controller?

Ich geh davon aus, das der TO den DDR-Speicher nach dem Controller 
ersetzen will und deshalh eine Art Bridge DDR-IO - BRAM einschiebt. Die 
anderen Stellen sind ihm wohl verwehrt, weil der CPU-Core und 
DDR-Speicher-controller nur als feste Netzliste vorliegt.

Bei den DQS (Data-Strobe) sollte er mal nachforschen, ob er diese 
überhaupt braucht und vorliegen hat.
Das ist ein Feature der IO-Pads des FPGA das nicht bei allen DDR 
Revisionen vorkommt und nicht bei jeder Betriebsart (read oder write) 
oder Geschwindigkeitsklasse nötig ist. Man kann den DDR-Datenbus auch 
komplett über den Takt CLK 'timen', DQS ist gut um Schwankungen auf den 
PCB-Tracks zu kompensieren. wird also unnötig , wenn das Interface 
komplett intern ist. DQS (mit einstellbaren IO-delay) ist wie DDR-FF ein 
feature der IO-Pads, das bei internen FF nachgestellt werden müßte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren