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
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.
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.
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ß.
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!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.