MachtAG schrieb:
Keine Ahnung aber vllt. haben sie beim fertigen Prozessor einfach gemerkt das er eben schreiben und lesen kann zur selben Zeit. Kann doch passieren, ich weiß leider nicht wie ein Chip gebaut wird oder geplant wird, aber ich weiß wenn ich ein Rezept für ein Gericht schreibe, kommt manchmal auch was anderes am Ende raus.
Ok, ich versuche mal, das zu erklären. Ich hoffe, ich kriege es einigermaßen verständlich hin.
Zunächst einmal muss man sagen, dass Hardware per se wirklich äußerst simpel ist. Das gilt nicht für die darin umgesetzten mathematischen Algorithmen (ich habe z.B. keinen Schimmer, was da in einer Grafikkarte letztendlich wirklich abläuft, da ich keine Ahnung von den Bildverarbeitungsalgorithmen habe, die da implementiert wurden), aber die reine Hardware mit ihren Elementen ist simpel.
Das gilt gerade insbesondere für RAM. Ein RAM ist einfach nur ein Riesenhaufen sogenannter Flipflops, in die man was schreiben und dann wieder lesen kann. Natürlich kann man damit auch eine Menge Schabernack treiben und viele lustige Möglichkeiten zusammenbauen. Man kann unterschiedliche Schreib-/Lese-Modi wie z.B. Single, Pipeline und Burst einbauen. Man kann Test-Modi nutzen. Es gibt Möglichkeiten, die Energiezufuhr zum RAM runterzufahren, um Strom zu sparen usw. usw. Und natürlich kann man RAMs intern auch beliebig komplex gestalten, mit Swap-Pages und hast du nicht gesehen.
Das ist alles eine Menge Fachchinesisch und im Grunde auch völlig uninteressant. Denn unterm Strich lässt sich jeder RAM auf das folgende Bild runterbrechen:
Was du hier siehst, sind die Ein- und Ausgänge eines sogenannten Single-Ports-RAMs. Die Ports haben die folgende Bedeutung:
DATA[7:0] : Das ist der Dateneingang des RAMs in diesem Fall mit einer Breite von 8 Bit (Bit 7, Bit 6, Bit 5... Bit 0)
ADDR[5:0] : Das ist die Addresse, über die man dem RAM sagt, welche Stelle im RAM geschrieben oder gelesen werden soll. Die Adresse hier hat 6 Bit
WE : Über dieses Signal wird dem RAM gesagt, ob er Daten in den RAM schreiben oder vom RAM lesen soll. Das ist nur ein Bit. Hat es den Wert '1' schreibt man, hat es den Wert '0' liest man (kann auch andersrum sein).
Da der Schreib- und Lesezugriff auf den RAM nur über dieses Signal gesteuert wird und dieses Signal immer nur einen Wert haben kann, ist sichergestellt, dass man diesen RAM zu einem bestimmten Zeitpunkt immer nur lesen ODER schreiben kann. Das ist auch so gewollt, denn wenn man eine Adresse gleichzeitig schreibt und liest, kann man nie sicher sein, was man letztendlich gelesen hat und was danach im RAM steht.
CLK : Das ist einfach der Takt, der den RAM antreibt. Ohne den geht gar nix
Q[7:0] : Das ist der Datenausgang ebenfalls wieder mit einer Breite von 8 Bit. Im Falle eines Lesezugriffes erscheinen hier die Daten.
Wie gesagt: Das ist die Basisform eines RAMs. Egal, was der sonst noch bietet - diese Grundfunktionalität ist auf jeden Fall drin. Und wie ich schon erwähnt habe, kann man diesen RAM immer nur schreiben ODER lesen. Beides gleichzeitig ist nicht möglich.
Natürlich hat man aber sehr viele Szenarien, wo man gerne eine Adresse lesen und gleichzeitig eine andere schreiben möchte. Schon aus Geschwindigkeitsgründen ist das wünschenswert. Wie muss man das nun lösen? Ganz einfach. Man braucht dafür mindestens einen Dual-Port-RAM und der sieht dann schlicht und ergreifend so aus:
Es ist alles zwei Mal da - unterteilt in Port A und Port B. Das ist der ganze Trick. Und anders ist das nicht machbar. Je nachdem, wieviele Operationen ich an einem RAM parallel machen möchte, brauche ich dafür entsprechend viele Ports. Wir haben hier im Design z.B. einen RAM, der hat einen Schreib- und 64-Leseports. Wir können da also in einem Schritt gleichzeitig 64 Werte auslesen. Ist alles machbar. Aber man braucht die Ports.
Und um jetzt den Bogen zu der MS-Aussage mit dem RAM zu schlagen: Bevor die den eSRAM eingebaut haben, haben sie natürlich die Datenblätter dazu gelesen. Und in jedem Datenblatt befindet sich so ein Bild, wie das, was ich oben eingefügt habe. Man kann anhand dieser Ports sofort erkennen, ob man einen RAM gleichzeitig schreiben und lesen kann, oder nicht. Man wird da später keine geheimen Supermodi finden. Ohne entsprechende Ports geht da nix. Und die kennt man, bevor man den RAM überhaupt ins Design einbaut.
Was die andere Sache mit den freien Slots betrifft, die ebenfalls aufkam:
Wie ich oben schon schrieb, ist der Takt der Motor des RAMs. Ein Taktsignal sieht so aus:
Es handelt sich einfach um ein Signal, welches in regelmäßigen Abständen seinen Zustand von '0' auf '1' und dann wieder zurück ändert. Den Übergang von '0' auf '1' nennt man eine steigende Taktflanke, den Übergang von '1' auf '0' eine fallende Taktflanke.
Der Takt steuert die Speicher im RAM. In den meisten Fällen ist es so, dass die Speicher bei jeder steigenden Taktflanke Daten lesen/schreiben können. Zu allen anderen Zeitpunkten passiert in den Speichern nichts. Diese Zeit ist dann dafür da, dass die Logik rechnen kann.
Die Anzahl der steigenden Taktflanken pro Sekunde ergibt also die maximal Geschwindigkeit mit der ein RAM arbeiten kann. Will man diese Geschwindigkeit erhöhen, muss man einen schnelleren Takt wählen. Beispiel:
Ein Design läuft mit einer Frequenz von 1 MHz. Das bedeutet, dass dieses Design in einer Sekunde 1 Mio steigende Taktflanken kriegt. Ein RAM kann pro Sekunde also theoretisch 1 Mio Mal geschrieben/gelesen werden. Mehr ist da nicht machbar. Das ist Physik.
Will man öfter auf den RAM schreiben, muss man die Taktfrequenz erhöhen. Stellt man z.B. 2 MHz ein, dann hat man pro Sekunde 2 Mio steigende Taktflanken, was natürlich ein ganzer Zacken mehr ist. Die heutigen Designs laufen mit vielen hundert MHz oder gar GHz, was hunderte Millionen oder gar Millarden von steigenden Taktflanken in einer Sekunde bedeutet. Ordentlich Bums auf dem RAM also.
Aber wie erwähnt: Der RAM kann nur zu jeder steigenden Flanke arbeiten und zu anderen Zeitpunkten ist das nicht möglich.
Jetzt mal zu den freien Slots. Auf meinem Bild da oben sehen wir 6 steigende Taktflanken, also 6 Zeitpunkte, zu denen man auf den RAM zugreifen kann. Nun ist es bei einem Programmablauf selten so, dass zu jedem möglichen Zeitpunkt auf den RAM zugegriffen wird. Da müssen intern Sachen berechnet werden, eine Komponente wartet auf Daten von einer anderen Komponente etc.
Sagen wir in unserem Beispiel schreibt ein Programm zu den Flanken 1, 2 und 5. Bei den anderen Flanken ist es beschäftigt.
Nun ist es natürlich möglich, dass ein anderes Programm genau die freien steigenden Flanken 3, 4 und 6 nutzt, um ebenfalls auf den RAM zugreifen zu können. Das ist alles machbar und im Grunde kein großer Deal. ABER es erhöht die Durchsatzrate des RAMs nicht. Denn egal, wieviele Programme auf den RAM zugreifen und freie Taktflanken dafür nutzen - sie ändern nichts an der Gesamtzahl an Taktflanken, die für den RAM zur Verfügung stehen. Diese Zahl bleibt fix und deswegen bleibt auch die Durchsatzrate des RAMs fix.
Ich bin mir nicht sicher, ob das jetzt alles verständlich war, aber ich hoffe, ich konnte einigermaßen gut erklären, warum beide Aussagen:
a) Wir haben zufällig festgestellt, dass man gleichzeitig lesen und schreiben kann
b) wir können durch die Nutzung freier Slots die Durchsatzrate dramatisch erhöhen
kompletter Bullshit sind und entweder völlig falsch übersetzt, aus dem Zusammenhang gerissen oder absolut dümmliches PR-Gelaber sind.