Zwischenspeicher

M

Martin Kerner

Guest
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.
 
On 17 Apr 2004 01:50:08 -0700, martin_kerner@web.de (Martin Kerner)
wrote:

Hi!

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.
"Er sucht einen Ringpuffer" - "Gibts da nich auch was von R*tioph*rm?"

Also so eine Art "First in - last out"-Speicher.
Wieso "last out"!? Willst Du die Reihenfolge umdrehen?

Gruß,
Michael
 
Gibt es soetwas?
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
 
In article <60b21534.0404170050.5572a7b6@posting.google.com>,
martin_kerner@web.de (Martin Kerner) writes:
Guten Morgen,

Ein Gerät liefert in unregelmäßigen Abständen Daten an (in 1Byte-Blöcken),
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.

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.
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.

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.
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.

eine Art "First in - last out"-Speicher. Eigentlich müßte ein solcher
IC auch in MP3-Playern drin sein. Gibt es soetwas?
Umgedreht .. LiFo .. evt. findest du damit ja eine passenden Baustein.

Tschüss
Martin L.
 
Martin Kerner wrote:

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.
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
 
Dual-Port RAMs
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.

(ich glaube VRAM genannt), ... als Grafik-RAMs ...
meist dynamisch,
Video-DRAMs sind wirklich nur für die Anwendung
brauchbar. Seriell ausgelesen soweit ich mich
erinnere. Hersteller war glaube ich TI.

MfG JRD
 

Welcome to EDABoard.com

Sponsor

Back
Top