Forum: FPGA, VHDL & Co. Cache-Controller für SDRAM


von seennoob (Gast)


Lesenswert?

Hallo liebe Spezialisten,

Ich seh immer wieder das Problem wenn man eine Anwendung mit einem FPGA 
hat und mehr Speicher braucht (ab 1MB ) wird SRAM einfach zu teuer. Ich 
glaub heutzutage ist auch nicht mehr Stand der Technik.

Jetzt ist aber das Problem ich brauch für einen 32 bit Soft-Core 
(50Mhz+) 4MB+ RAM und SRAM ist unbezahlbar (über 20 euronen). Leider 
sind mit normalen SDRAM ja nur so 20MHz herum zu schaffen ohne Cache.

Daher meine Fragen an euch:

-kennt ihr einen fertigen und freien Controller ?

-Wie siehts bei soetwas mit der Geschwindigkeit/Reaktionszeit aus (Hit, 
miss)?

-Das wichtigste und schwerste ist wie siehts mit den Ressourcen aus die 
benötigt werden. Wär ja wirklich blöd wenn dann das FPGA um einiges 
größer/teurer sein muss um das ganze zu implementieren.

Ich Danke schon mal für ein paar Denkanstöße!

von Lothar (Gast)


Lesenswert?

Erst mal gibt es reichlich FPGA mit integriertem DDR1 bis DDR4 je nach 
Preis.

Ansonsten kann man den einen DDR1 Controller im FPGA mit wenig Platz 
implementieren:

Google: Synthesizable High Performance SDRAM Controller

von J. S. (engineer) Benutzerseite


Lesenswert?

ist Dein Problem jetzt der RAM Controller als solcher oder die 
Implementierung eines Caches? Bei wahlfreiem Zugriff muss der ins BRAM 
oder eben doch wieder in ein SRAM. Wenn Du das DDR nämlich nicht 
entsprechend ansteuerst, geht die Bandbreite nämlich in den Keller und 
es ist auch nicht mehr so viel günstiger, pro effektiv nutzbarem RAM.

von seennoob (Gast)


Lesenswert?

Hauptsächlich gehts mir um den Cache. DDR Controller sind in modernen 
FPGAs ala Spartan 6 und Cyclone 4/5 drin, wie es Lothar angesprochen 
hat.


Jürgen Schuhmacher schrieb:
> Wenn Du das DDR nämlich nicht
> entsprechend ansteuerst, geht die Bandbreite nämlich in den Keller und
> es ist auch nicht mehr so viel günstiger, pro effektiv nutzbarem RAM.

Das mit der Performance ist mir klar (Burst zugriffe, refresh usw). Aber 
wie meinst jetzt, dassjetzt genau mit dem effektiv nutzbarem RAM ?

von Fpgakuechle K. (Gast)


Lesenswert?

seennoob schrieb:
> Hallo liebe Spezialisten,
>
> Ich seh immer wieder das Problem wenn man eine Anwendung mit einem FPGA
> hat und mehr Speicher braucht (ab 1MB ) wird SRAM einfach zu teuer. Ich
> glaub heutzutage ist auch nicht mehr Stand der Technik.
>
> Jetzt ist aber das Problem ich brauch für einen 32 bit Soft-Core
> (50Mhz+) 4MB+ RAM und SRAM ist unbezahlbar (über 20 euronen). Leider
> sind mit normalen SDRAM ja nur so 20MHz herum zu schaffen ohne Cache.

> Ich Danke schon mal für ein paar Denkanstöße!


Der 32bit microblaze von Xilinx bringt einen I-Cache mit, bspw. 
http://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf 
S.66

Da kannst du mal nachschauen was cache an FPGA-resourcen kostet. Dann 
könnte auch beim Coregenerator etc was unter Memory - CIM/CAM (Content 
indexed Memory/Content-addressable memory -> typische Cache Struktur).

Wichtig ist die genaue Spezifikation deines caches:
-cacheable area
-assoziativität
-writeback-strategie

Mit ein paar kilobyte kann man schon etliche MByte effektiv cachen wenn 
man örtliche und zeitliche Lokalität optimal nutzt.

MfG,

von seennoob (Gast)


Lesenswert?

Der Microblaze ist von aussehen gesehen eine von Neumann Architektur 
(gemeinsamer Daten und Befehlsspeicher) legt aber intern die Daten in 
getrennten Regionen ab.

Wie würde man dies dann für eine reine von Neumann Architektur machen ?

Fpga Kuechle schrieb:
> Wichtig ist die genaue Spezifikation deines caches:
> -cacheable area

16 KByte lassen sich schon finden

> -assoziativität

Gute Frage 4 bis 8 fach sollte sich ja noch mit überschaubaren 
Ressourcen implementieren lassen.

> -writeback-strategie

Wird wohl das cut-through Verfahren am Besten sein, um auch noch mit 
DMAs am hintergrund arbeiten zu können (mit Konsistänzüberwachung für 
den DMA)

von Fpgakuechle K. (Gast)


Lesenswert?

seennoob schrieb:
> Der Microblaze ist von aussehen gesehen eine von Neumann Architektur
> (gemeinsamer Daten und Befehlsspeicher) legt aber intern die Daten in
> getrennten Regionen ab.
>
> Wie würde man dies dann für eine reine von Neumann Architektur machen ?

Meines Erachtens unterscheidet sich ein Instruction-Cache und 
Daten-Cache nicht außer von den Adress- und datenbussen an denen sie 
angeschlossen sind. Es ist dir überlassen ob du einen gemischten oder 2 
(1) getrennten cache anschliesst. FFT profitiert bspw vom I und D-cache 
gleichermassen, andere Anwendungen nur vom I-Cache.

>> -writeback-strategie
>
> Wird wohl das cut-through Verfahren am Besten sein, um auch noch mit
> DMAs am hintergrund arbeiten zu können (mit Konsistänzüberwachung für
> den DMA)

In zusammenhang mit cache ist mir cut-through nicht geläufig, ich dachte 
da eher a write back oder write through. Wobei die Frage ist, ob man das 
bei einem Instrucion_cache (I) wirklich benötigt (selbstmodifizierender 
code).

Lesetipps bezüglich cache im FPGA:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.81.6371&rep=rep1&type=pdf
http://ic.ese.upenn.edu/pdf/dmhc_fpga2013.pdf

von seennoob (Gast)


Lesenswert?

Fpga Kuechle schrieb:
> In zusammenhang mit cache ist mir cut-through nicht geläufig, ich dachte
> da eher a write back oder write through. Wobei die Frage ist, ob man das
> bei einem Instrucion_cache (I) wirklich benötigt (selbstmodifizierender
> code).

Meinte natürlich Write-through ich bin einfach schon so belastet durch 
so manche Feldbusse...

Beim Instruction-Cache muss ich dir Recht geben.

Danke für die Unterstützung!

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.