Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Wenn der 286-Chipsatz einen 4-Worte ReadCache besitzt, dann macht PageMode RAM natürlich Sinn.
Wenn Du SDRAM mit 4-Wort-Bursts im Kopf hast, verstehe ich den Ansatz mit dem 4-Wort-Cache. Das ist aber nicht das, was historisch gemacht wurde. Page-Mode-RAM erlaubt ja Random Access innerhalb der Page. Und ein Page darf man quasi "beliebig lange" offenhalten. Eine typische Spezifikation ist 100µs maximale /RAS-aktiv-Zeit. Da in 286-Boards kein gebündelter Refresh gemacht wird, kommt der 16µs-Refresh sicher vor dem Erreichen der maximalen Zeit, die eine Page offengehalten werden darf. Im FPM-Betrieb hält der Chipsatz RAS spekulativ aktiv, auch wenn der Zyklus vorbei ist. Sollte der nächste Zyklus in die gleiche Page treffen, dann kann der nächste Zyklus als /CAS-only-Zyklus ausgeführt werden, und das in einem Tempo, dass 0WS überhaupt kein Problem sind. Das schadet natürlich bei Page misses, da man erst nach der Kenntnisnahme der Adresse, die zum Page Miss führt, die /RAS-recovery-time starten kann, was einen extra-Takt kostet. Daher können einige Chipsätze ein Bank Interleaving in der Art, dass die Pages der Bänke verkettet werden, und damit effektive Pages entstehen, die doppelt oder vier mal so groß sind wie die Pages eine Bank. Im Endeffekt hast Du dann nicht einen 4-Wort-Cache, sondern in 1M-Modulen einen 1K-Wort-Cache, und musst noch nicht mal einen Puffer dafür im Chipsatz vorsehen. Mit Bank-Verkettung kommst Du sogar auf einen 2K-Wort-Cache (2 Bänke) oder einen 4K-Wort-Cache (4 Bänke).
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Ich nehme mal an, daß der ChipsatzReadCache so die Worte anordnet, wie PageMode das liefert. Wenn (bei 32Bit) ein Zugriff auf $xxxxxxx8 erfolgt, dann liefert das RAM $xxxxxxx8, $xxxxxxxC, $xxxxxxx0 und $xxxxxxx4, d.h es findet von $xxxxxxxC zu $xxxxxxx0 ein Wrap-Around statt und die (28Bit) $xxxxxxx Adresse wird nicht inkrementiert, sondern bleibt konstant.
Was Du hier beschribst, ist die Burst Order des Frontside-Bus verschiedener CPUs, wie sie beim Cacheline-Fill verwendet wird. Hier gibt es noch zwei Varianten, den "linear burst" und den "interleaved burst". Der interleaced burst arbeitet so, dass immer zunächst die zwei 32-Bit-Worte aus dem einen 32-Bit-Wort, und danach die zwei 32-Bit-Worte aus dem anderen 32-Bit-Wort geladen werden, was das Design eines Cache-Controllers für einen Zwei-Bank-Cache vereinfacht. Bei Start auf $xxxxxxx4 hast Du beim interleaved burst die Reihenfolge 4,0,C,8. Auf diese Reihenfolge hat Intel ein Patent (gehabt). Der linear burst, der ab 4 mit 4,8,C,0 abläuft, ist nicht patentfähig. Bei Startadresse 0 und 8 laufen linear burst und interleaved burst identisch ab.
Der Page Mode vom RAM schreibt keinerlei Reihenfolge vor. Du musst bei jedem CAS-Zyklus eine komplett neue Column Number übergeben, so dass Du jede Reihenfolge abarbeiten kann. Es gibt keine
Anordnung, wie PageMode das liefert.
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Ich grübel schon einige Monate darüber nach, wie ich einen 4-Worte (32bit) Lesezugriff so in Hardware umsetze, daß ich zwischen SDR-SDRAM und CPU einen 4-Worte FIFO setze, der sich bei Zugriff auf eine Adresse, für die sich keine Daten im FIFO befinden, auch wieder schnell löschen (invalidieren) lässt, um ihn neu zu füllen.
Und ich glaube, das erklärt, wie Du auf die Idee mit einem 4-Wort-Cache kommst: Bei SDRAM ergibt ein solches Vorgehen viel Sinn. Da bekommst Du vom RAM den Burst aufgedrückt, wenn Du vernünftige Performance haben willst. Das ist aber eben ein völlig anderes Szenario als Page-Mode-DRAM.
Wenn Du so etwas in einem CPLD machen willst, brachst Du einen Vergleich, ob sich die Page geändert hat. Pro Adressbit einen Flipflop solltest Du haben, wenn Du ein ausreichen großes CLPD nutzt, was Extra-Zellen hat, die nicht mit Pins verbunden sind, oder Du die Adressen nicht im Eingang mit dem Takt synchronisierst, so dass der den Adressbits "zugeordnete" Flip-Flop frei ist. Als nächstes brauchst Du aber einen 28-Bit-Vergleich (bei 32-Bit-Adressen), und der ist echt teuer. Ein bisschen kann es helfen, ein CPLD zu haben, das XOR in Hardware hat (wie zum Beispiel die Atmel ATF-Familie), aber auch da kommt dann der Router nicht drum herum, die XOR-Outputs über den Feedback-Bus in neue Product Terms zu führen - und dann kann die gleiche Makrozelle nicht mehr ihren Flipflop-Output in die Logik zurückführen, weil auch das in eine Feedback-Connection ginge. Also brauchst Du schon mal zwei Makrozellen pro Adressbit, um den "Tag-Vergleich" durchführen zu können. Das sieht nicht gut aus.
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Bei einem 68000 mit seinen 4 Takten je Buszugriff muss ich CPLD und SDRAM mit 4x BCLK (bei mir 32MHz takten), wobei das SDRAM einen um 180° verschobenen Takt bekommt.
Wieso taktest Du das SDRAM so hoch? Auch SDRAMs kannst Du im Page Mode betreiben. Versuche gar nicht erst, einen RAS/CAS-Zyklus mit minimaler Latenz hinzubekommen. Mit CL2 (und da solltest Du ja bei PC66 oder PC100-SDRAM kein Problem haben, welches zu finden) müsste 1*CPUCLOCK reichen, um in einem /CAS-Zyklus das erste Wort rechtzeitig im 4-Takte-Zyklus zu bekommen. Und den Burst kannst Du ja rechtzeitig nach dem ersten Wort abbrechen. Page Misses sind dann halt teuer, aber je größer das SDRAM, desto größer die Pages und desto seltener die Page Misses.
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Ein 020 braucht "nur" drei Takte und kann deutlich höher getaktet werden. Daher die Idee mit SDRAM-Burst und ext. FIFO. Ohne so einen FIFO wird der RAM-Zugriff ggü. FPM wohl eher gemächlich laufen, befürchte ich.
Rechne noch mal durch, ob Du einen Page-Hit-Zyklus nicht auch bei 2*CPUCLK in 3 CPU-Takten durchbekommst, wenn Du den Burst auf ein Wort beschränkst. Nach meinem Bauchgefühl müsste das gehen.
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Zumal SDRAM und die hierzu eigentlich passenden CPUs i.d.R. auf BurstModi zurückgreifen, um "in die Pötte" zu kommen. Einzelwortzugriff ist hier eher der Bremsklotz.
Da die CPU nicht burstet hast Du allerdings auch genug Zeit, einen Page-Mode-CAS-Zyklus durchzuführen. Diese Fähigkeit hat das SDRAM ja gegenüber FPM nicht verloren.
Jackintosh hat geschrieben: ↑Di 8. Nov 2022, 09:36
Bei der PC Architektur finde ich den caching Ansatz grundsätzlich schwierig(er) umzusetzen, als bei anderen Systemen. Denn z.B. dürfte VideoRAM nicht zwangsläufig gecached werden.
Und deshalb cachen PC-Chipsätze standardmäßig nur Mainboard-RAM-Zugriffe, und nicht alle Speicherzugriffe. Bessere Chipsätze erlauben für den UMB-Bereich in 16K bis 64K-Abschnitten die Cachebarkeit zu konfigurieren.