Zwischenspeicher

Guten Morgen,

es geht um folgendes: Ein Gerät liefert in unregelmäßigen Abständen Daten an (in 1Byte-Blöcken), auf die ein anderes Gerät in regelmäßigen Abständen zugreift. Damit jetzt diese Daten immer abrufbar sind, ist ein Zwischenspeicher nötig. Ich könnte dafür ein normales statisches RAM mit ca. 32kByte Speicher nehmen, was aber umständlich wäre, wenn beim Schreiben und Lesen jedesmal die Speicherstellen berechnet werden müßten.

Da dachte ich, vielleicht gibts einen fertigen IC, der beim Lesezugriff immer das "älteste" Datenbyte ausgibt und beim Schreibzugriff das Byte automatisch in die Speicherstelle reinschreibt, die noch frei ist. Also so eine Art "First in - last out"-Speicher. Eigentlich müßte ein solcher IC auch in MP3-Playern drin sein. Gibt es soetwas?

Danke für Eure Tips, Martin.

Reply to
Martin Kerner
Loading thread data ...

Hi!

"Er sucht einen Ringpuffer" - "Gibts da nich auch was von R*tioph*rm?"

Wieso "last out"!? Willst Du die Reihenfolge umdrehen?

Gruß, Michael

Reply to
Michael Eggert

Nominell gibt es FIFOs als fertige ICs unter dem Namen "FIFO". Sind jedoch Exoten und die älteren Typen werden typisch nicht

32kByte tief sein. In DSP-Anwendung jedoch oft unumgänglich. Nur wenn die "Geräte" über einen Mikroprozessor-Bus gekoppelt werden sinnvoll.

MfG JRD

Reply to
Rafael Deliano

Ein Gerät? Kann das "Gerät" nich so lange warten bis das "anderen" "Gerät" bereit ist? Verrate doch mal was das für Geräte sind.

Wie schnell liefern denn deine "Geräte" die Daten? Und wie viel Speicher brauchst du wirklich? Ich weis ja nicht ob es solche "Schlangenspeicher" in diesen größen gibt. So ein LiFo (last in, first out) könnte man aber gut mit einen uC realisieren.

In Software realisiert man das mit einem Puffer und zwei Zählern. In Hardware ist das sogar noch einfacher weil man die Zähler einfach überlaufen lassen kann und somit nicht den gesammten Inhalt nach vorn kopieren muss.

Also wenn du keine passenden Chip findest einfach einen 8-Bit Ram und zwei Zähler die du über latches an die Adressleitungen schaltest.

Ob es aber auch sein kann das der Sender gleichzeitig mit dem Empfänger lesen/schreiben will hast du uns nicht gesagt. Da wäre es echt prima wenn man wüsste welches Gerät du nun verwendest.

Also wenn du das auch noch syncron machen willst entweder einen dualport Ram oder aber eine etwas klügere Logik in einem FPGA oder so.

Umgedreht .. LiFo .. evt. findest du damit ja eine passenden Baustein.

Tschüss Martin L.

Reply to
Martin Laabs

So etwas habe ich seiner Zeit in ein FPGA (+ Static-RAM) gebrannt. Das FPGA brauchte ich sowieso.

Die Logik war aber relativ einfach:

Zwei zähler, einer zum Lesen, einer zum Schreiben. Bei jedem Zugriff wird der jeweilige Zähler automatisch hochgezählt.

Ein wenig kniffelig wird die Sache, wenn die Devices kein "wait" von einigen 10 ns auf dem Bus akzeptiert. Denn dann kann der schreibende Zugriff mit einem gerade laufenden Lesezugriff kollidieren und vice versa. So war es in meinem Fall.

Als Abhilfe nimmt man entweder Dual-Port RAMs (ich glaube VRAM genannt), oder einen Read-Ahaed- und Write-Back-Cache. Dual-Port RAMs wurden früher als Grafik-RAMs verbaut. Die Haben einen lesenden und einen schreibenden Bus (jeweils A- und D-Bus). Sie sind meist dynamisch, was aber ob des regelmäßigen Zugriffsmusters kein Problem darstellt. Das erleichtert die Sache erheblich.

Für die Synchronisation habe ich bein Wechsel des höchstwertigen Schreibzählerbits jeweils einen IRQ ausgelöst, woraufhin die CPU die gerade unbenutzte Speicherhälfte ausgelesen hat. Also 1/2 Speichergröße Latenz.

Bei mir sind allerdings damals alle 1-3 µs nur 16 Bit angefallen, weshalb ich mich für die Cache-Lösung mit statischen Cache-RAMs entschieden habe.

Bei 1k großen Blöcken macht man so etwas aber üblicherweise in Software. (So tun es auch die MP3 Player.)

Marcel

Reply to
Marcel Müller

Dürfte guter guter Suchbegriff für google sein und wird auch Richtung FIFOs führen. Die sind im Kern typisch statische RAMs. Übliche Verdächtige wohl IDT, Cypress usw.

Video-DRAMs sind wirklich nur für die Anwendung brauchbar. Seriell ausgelesen soweit ich mich erinnere. Hersteller war glaube ich TI.

MfG JRD

Reply to
Rafael Deliano

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.