Forum: Mikrocontroller und Digitale Elektronik Erweiterung: Buffer wird zum Cache


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe einen Bus, an dem ein "Register" hängt. Es soll den Bus-Wert
zur nächsten Stage zwischenspeichern. Es ist nur ein Buffer bzw. ein
übliches Latch (LE/'OE) mit einem Byte.

Das Register soll nun erweitert werden zum 256 Byte Cache. Also brauche
ich weiteren Buffer, und einen kleinen RAM.

Das "alte" darf die Adresse für den Cache halten:  Buff-A (address).
Das neue bekommt das Byte vom Bus:                 Buff-B (byte).
Dazu kommt nun der eigentliche RAM Cache:          Buff-C (cache).
Soweit so gut.

Anforderungen: Die "alte Ansteuerung" und Datenpfade sollten erhalten
bleiben. Der alte Buffer und der neue Cache sollten vollständig 
adressierbar sein. Komponenten mittels -ce in "Standby" schaltbar. Es 
sollte alles mit nur einem einzigen weiteren "Adress-Pin" (A0) 
passieren. Und die beiden Datenpfade (am Ausgang) dürfen sich nicht in 
die Quere kommen, falls Buff-B und Cache gleichzeitig in Richtung "Out" 
schreiben. (Der "Cycle" für das extra Byte und A0 ansteuern sind kein 
Problem! Ist eigentlich nur die Frage ob die Hardware so klappt!?)

Ich musste mir für "die Aufstellung" ein Diagramm zeichnen. Diagramme
sind nicht mein Fach - also verzeiht mir dieses hin-geklatschte Dings da
oben.

Kann mir jemand auf die Sprünge helfen, und mir verraten ob das so
klappt? Und vor allem: Kann man das noch "verkürzen" mit weniger
Gattern? Ich komm nicht von selber drauf.

Ich danke für helfende Helfer, und schenke jenen liebe Grüße.

: Bearbeitet durch User
von DSGV-Violator (Gast)


Lesenswert?

Tim S. schrieb:
> Hallo,
> ich habe einen Bus, an dem ein "Register" hängt.

Für einen klassischen Cache aka Speicherblöcke unterschiedlicher 
Zugriffszeiten haste zwei Busse, einen Adress- und einen datenbus.

Mit nur einem Bus kannste nur ne FIFO aufbauen.

Cache ist eigentlich ganz gut in diversen Arbeiten zur 
Computerarchitektur beschrieben. Stichwort dazu ist gern CAM - Contens 
addressed Memeory, weil der Tag-RAM (auch ein Suchwort) als CAM 
aufgebaut ist.

von Michael B. (laberkopp)


Lesenswert?

Tim S. schrieb:
> Anforderungen

Unklar.

OE in deinem ersten Bild macht keinen Sinn, weil nur 1 Leitung zu OUT 
geht, das kann immer enabled sein, es gäbe keine Kollisionen die 
verhindert werden müssen.

A0 in deinem zweiten Bild macht keinen Sinn, du willst doch

Tim S. schrieb:
> Die "alte Ansteuerung" und Datenpfade sollten erhalten
> bleiben

also bloss auf LE jedes Mal ein weiteres Byte schreiben.

Interessanter ist OE im zweiten Bild, denn wenn ein cache vorliegt, 
würde man per OE jedesmal ein Byte abholen, msn braucht den Takt als 
Signal dass ein Byte gelesen wurde.

Das Interface taugt aber nichts, weil man gar nicht weiss, ob überhaupt 
noch ein Byte vorliegt, das man lesen kann.

Man braucht 2 zusätzliche Leitungen im Interface, auf Ausgangsseite ein 
DR data ready das gesetzt wird wenn man Eingang mit LE ein Byte 
hineingespeichert wurde und gelöscht wird wenn am Ausgang mit OE das 
Byte gelesen wurde. Und auf Eingangsseite ein LF katch full Signal, das 
gesetzt wird wenn mit LE ein Byte reingeschrieben wurde und gelöscht 
wird wenn man Ausgang mit OE gelesen wurde.

Diese Erweiterung und 2 FlipFlops ist schon für dein erstes Bild nötig, 
und sollte dann beim zweiten Bild mit identischem Interface aber 
angepasster interner Verarbeitung erhalten bleiben.

DANN kann man über die Erweiterung vom latch zum cache bzw. FIFO stack 
nachdenken. Ein dual port RAM, 2 Zähler, einer liefert die 
Schreibadresse der andere die Leseadresse, und für LF und DR je ein 
Comparator der die Adressen vergleicht.

von Peter D. (peda)


Lesenswert?

Tim S. schrieb:
> Das Register soll nun erweitert werden zum 256 Byte Cache.

Ich vermute mal, Du meinst einen 256 Byte FIFO.
Ein Cache braucht zusätzlich noch die Adressen der zu chachenden Daten. 
Auch muß er bei Cache Miss die Daten nachfordern, d.h. das Auslesen 
verzögern.

Wie schnell soll denn das Ganze werden?
Man könnte es in einen MC implementieren, bzw. FPGA, wenns schnell sein 
muß.

von Falk B. (falk)


Lesenswert?

Tim S. schrieb:
> Ich musste mir für "die Aufstellung" ein Diagramm zeichnen. Diagramme
> sind nicht mein Fach - also verzeiht mir dieses hin-geklatschte Dings da
> oben.

Das hätte man sich auch sparen können, das verwirrt um Größenordnungen 
mehr als es erklärt!

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

DSGV-Violator schrieb:
> Für einen klassischen Cache aka Speicherblöcke unterschiedlicher
> Zugriffszeiten haste zwei Busse, einen Adress- und einen datenbus.

[Latch ist natürlich viel schneller als der Ram. Gatter verzögern das ja 
auch noch mal. Angenommen das Timing ist kein Problem - Ich weiß nicht 
ob du das meintest mit Zugriffszeiten - Ein "weiterer Cycle" mit A0 ist 
kein Problem!] Der "Adressbus" wird auf dem zweiten Bild erzeugt. Es ist 
ja ein Latch hinzugekommen. Nein es soll kein FIFO / Verzögerung oder 
"Ring-Buffer" mit "eigenem Counter" o.Ä. werden, sondern:
Tim S. schrieb:
> Der alte Buffer und der neue Cache sollten vollständig
> adressierbar sein.

Das LE-Signal kann man fast als "Clock" für dieses "Interface" sehen... 
Durch den RAM (Buff-C) werden es dann 257 statt nur einem Register. Das 
neue Adress-Register muss nicht separat am OUT ausgelesen werden können.

Tim S. schrieb:
> Die "alte Ansteuerung" und Datenpfade sollten erhalten
> bleiben
Michael B. schrieb:
> also bloss auf LE jedes Mal ein weiteres Byte schreiben.

(Erstes Bild) JA zuerst Daten auf den Bus legen. LE schreibt in Buffer. 
Mit -ce / OE liegt das Byte am OUT.

Im zweiten Bild schreibt LE zuerst durch beide Buffer durch. Selbe Sache 
wie vorher Mit -ce / OE liegt das Byte am OUT. (alte Daten Pfade).
Anschließend mit A0 und WEITEREM (Adress-)Byte vom BUS das vordere Latch 
bespaßen und mit nächsten LE (=ClockPule) die Adresse dort setzen UND 
somit Adresse und Daten ins RAM mit 'write enable' schreiben. Die Daten 
"dürfen" dabei kurz an OUT anliegen (also OE, nicht schlimm, lässt sich 
unterbinden mit DRITTEN! Buffer, den ich vermeiden will). Das OUT sieht 
aber von der neuen Adresse "in allen Konstellationen" nichts.

Naja dann muss ich wohl ganz traditionell eine Wahrheitstabelle aus dem 
zweiten Bild machen oder am besten simulieren. Ich hatte hier nur "zur 
Sicherheit" gefragt, vielleicht "sieht" das ja gleich jemand, und kann 
mir sofort die "Funktion bestätigen". Liebe Grüße

: Bearbeitet durch User
von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Habe einen "Fehler" gefunden:
> Im zweiten Bild schreibt LE zuerst durch beide Buffer durch.
Das geht nur während OE - was nicht immer ist (OUT)

> Mit -ce / OE liegt das Byte am OUT. (alte Daten Pfade).
Da kommt DANN wenn ich es brauche -> nichts! Der erste Buffer hat noch 
nicht "durchgeschaltet"

Da muss ich wohl noch mal Feilen, und noch mehr Gatter und einen dritten 
Buffer verwenden - dass es dann genau so "transparent wie vorher" ist.
Erster Buffer LE (immer mit setzen) und OE dauerhaft fest verdrahten 
(immer durch reichen) - ist eine Lösung - ohne Standby.

Trotzdem dankeschöön...

: Bearbeitet durch User
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.