SRAM ist beim Einschalten nicht leer, ist das normal?

Ich hatte endlich meine Z80-Speicherplatine fertiggestellt, aber ich war enttäuscht, als ich sah, dass sie nicht richtig funktionierte (einfacher NOP-Test mit den Adressleitungen, die mit einigen LEDs verbunden waren), da der Zähler schnell außer Kontrolle geriet, anstatt wie erwartet zu inkrementieren. Ich bin jedoch nicht jemand, der aufgibt, und nach etwa dreißig Minuten Durchgangsprüfung, um keine Kurzschlüsse und alle ordnungsgemäßen Verbindungen aufzudecken, dachte ich schließlich daran, zu überprüfen, ob der SRAM-Chip mit allen gespeicherten Nullen eingeschaltet wurde. Ich bin mir bewusst, dass SRAM (es sei denn, es ist nicht flüchtig, was mein spezieller Chip nicht ist) bei einem Stromausfall seinen gesamten Inhalt verliert, aber ich hatte immer angenommen, dass es mit Nullen (dh "leer") gefüllt wäre, wenn es wiederhergestellt würde Energie. Der von mir verwendete SRAM scheint bei jedem Zurücksetzen der Stromversorgung zufällig mit Einsen und Nullen gefüllt zu sein. Es merkt sich nie irgendwelche Daten, aber es wird nicht leer geladen. Dies ist nicht wirklich ein Problem, da ich einfach ein kleines Programm im ROM schreiben kann, um beim Einschalten alle Nullen in den RAM zu laden, obwohl ich immer noch gerne wissen würde, ob das SRAM so funktionieren sollte oder nicht. Danke!

Bearbeiten: Ich habe vergessen zu erwähnen, dass das System nach der Verwendung des ROM zum Laden von Nullen in den SRAM einwandfrei funktionierte, also war dies tatsächlich das Problem.

Sie können SRAM Power Up verwenden, um Zufallszahlen zu generieren. So machen wir es im Allgemeinen, wenn wir nur einen zufälligen Startwert benötigen.
@bdegnan Einmal vielleicht. Der Einschaltzustand des SRAM neigt dazu, für jeden gegebenen Teil einigermaßen vorhersagbar zu sein.

Antworten (3)

Wenn Sie keinen Anfangszustand programmiert haben, ist dieser mehr oder weniger zufällig. Obwohl dies bei verschiedenen SRAM-Implementierungen variieren kann. Du sagst auch "leer". Einige mögen denken, dass random "blanker" ist als alle Nullen.

SRAM-Speicher speichert Speicher auf Back-to-Back-Wechselrichtern.

einfacher Schram

Dies bildet ein bistabiles System (zwei sehr stabile Zustände, die durch Metastabilität getrennt sind). Beim Einschalten sind die Back-to-Back-Wechselrichter also kurzzeitig metastabil.

Dies geschieht, weil beim Anstieg der Spannung (vom Einschalten) sowohl NMOS als auch PMOS der Back-to-Back-Inverter "gleich" eingeschaltet sind und beide Bitknoten auf der halben Versorgungsspannung halten (dies ist der metastabile Zustand). Irgendwann drückt oder zieht ein thermisches Rauschen (oder irgendein Prozess, der Variationen einführt) diesen Wert ein wenig nach unten oder oben. An diesem Punkt schnappen die Bitnodes in einen ihrer bistabilen Zustände ein.

  • Betrachten Sie als Beispiel Q = Q ' = v s u p p l j 2
  • Als nächstes erhöht etwas thermisches Rauschen auf Q die Spannung bis zu v s u p p l j 2 + δ
  • Jetzt wird die NMOS-Speisung Q' nur ein bisschen mehr eingeschaltet. Und das PMOS, das Q' speist, wird nur ein bisschen mehr ausgeschaltet. Also zieht Q' nach unten ab v s u p p l j 2 zu v s u p p l j 2 δ .
  • Da die Spannung am Gate des treibenden Q-Knotens des FET abnimmt, schaltet sich als Nächstes der PMOS ein wenig mehr ein (und der NMOS mehr aus). Dadurch steigt Q weiter zur Versorgung an. Und das bringt Q' schnell auf 0 und Q auf 1.

Tatsächlich gibt es sogar ein Papier „Power-Up SRAM State as an Identifying Fingerprint and Source of True Random Numbers“

Ein sehr hilfreiches Diagramm, das in dem Papier enthalten ist, ist unten. Die gepunktete Linie stellt den Anstieg der Versorgungsspannung dar:

Metastabilität beim Einschalten

  • Auf der linken Seite ist alles gleich. In diesem Fall bringt eine zufällige Variation aufgrund der Temperatur oder einer anderen Anzahl von Faktoren den Bitknoten in den einen oder anderen Zustand.
  • Auf der rechten Seite befindet sich ein Bitknoten, der (absichtlich oder anderweitig) verzerrt ist, um mit größerer Wahrscheinlichkeit in einem bestimmten Zustand initialisiert zu werden.

Je nachdem, wie jeder Bitnode im SRAM, den Sie derzeit verwenden, hergestellt wurde, erhalten Sie am Ende mehr oder weniger eine der beiden oben genannten Situationen. In beiden Fällen würden die anfänglichen Ausgaben mehr oder weniger zufällig aussehen, es sei denn, Sie haben den SRAM absichtlich verzerrt. In der linken Situation würde jedes nachfolgende Einschalten mehr zufällige Muster erzeugen. In der rechten Situation wäre der anfängliche Start scheinbar zufällig. Aber weitere Powerups würden dazu führen, dass der SRAM dazu tendiert, bestimmte Zustände zu fördern.

Weißt du, ich dachte eigentlich, das wäre der Grund, warum es zufällig geladen wird. Ich habe einen NOR-Latch als Teil einer Schaltung verwendet und er würde beim Einschalten zufällig zurückgesetzt. Danke!
Ich dachte, Sie könnten SRAM-Chips so entwerfen, dass sie in einem bekannten Zustand hochfahren. Kanst du?
@JanDvorak: Ja, das kannst du. Dies bedeutet jedoch nicht, dass dies häufig der Fall ist, insbesondere in SRAM, das nicht anwendungsspezifisch ist. Ich würde denken, es kostet mehr und für welchen Zweck? Es wird selten derselbe Anfangszustand sein, der für alle Verbraucher erforderlich ist.
@ jbord39 Könnte mir das helfen, den Bootloader in den Speicher zu backen und zu vermeiden, dass ich einen zusätzlichen ROM-Chip zum Laden des Betriebssystems habe? Würde es helfen, die Kosten zu senken?
@JanDvorak: Für bestimmte Anwendungen könnten die Bitzellen verzerrt oder voreingenommen sein, um in bestimmten Zuständen zu starten. Aber wirklich der Aufwand lohnt sich nicht, da jeder Kunde andere Ausgangszustände benötigen würde. Es ist viel einfacher und kostengünstiger, es einfach mit einer externen Schaltung (z. B. ROM) zu initialisieren. Ich denke, sie könnten eine programmierbare Schaltung einbauen, damit Sie Ihre gewünschten Anfangszustände oder ein anderes Schema einbrennen können. Aber das klingt nur teuer, wenn Sie eindeutig bereits über die Schaltung zum Schreiben / Lesen in den RAM verfügen. Schreiben Sie also einfach Ihren Wunschzustand auf.
@JanDvorak: Ich denke, es ist eine ähnliche Frage wie, warum gibt es keinen IC, der genau das tut, was ich will. Ein invertierender Verstärker mit einer Verstärkung von 10, einer mit einer Verstärkung von 9,5 usw. Der Grund sind wieder die Kosten. Sicher, es ist einfacher für den einen Kunden, der den spezifischen Gewinn benötigt. Aber stattdessen bauen sie einfach Operationsverstärker mit hoher Verstärkung und lassen Designer externe Schaltungen verwenden, um die Topologien und die Verstärkung an ihre Bedürfnisse anzupassen.
@ jbord39 Ich habe über den Fall nachgedacht, in dem ich Waren mit meinem eigenen Betriebssystem in Massenproduktion produzieren möchte. Sie haben jedoch Recht, dass die meisten Menschen das nicht sind. Ab welchem ​​Ausmaß würde sich das auszahlen, wenn überhaupt?
@JanDvorak: Hier ist ein Patent, das zeigt, wie man RAM für einen bekannten Zustand beim Einschalten vorspannt (speziell programmierbarer SRAM), aber ich weiß nicht, ob es jemals kommerziell hergestellt wurde. google.com/patents/US7433224 Hier ist ein Patent für externe Schaltungen, die den SRAM initialisieren. freepatentsonline.com/y2016/0071574.html

Nachdem ich viele Jahre mit SRAM gearbeitet habe, kann ich Ihnen sagen, dass es mit scheinbar zufälligen Inhalten hochgefahren wird, obwohl ich Geräte gesehen habe, die jedes Mal mit fast den gleichen zufällig aussehenden Inhalten hochfahren. Wenn der Ausschaltzyklus kurz genug ist (abhängig von den Eigenschaften der Stromversorgung und der Anzahl und dem Wert der Überbrückungskondensatoren), können große Fragmente zuvor geschriebener Daten durch Ausschaltzyklen im SRAM verbleiben – obwohl der Inhalt beschädigt wird.

Ein einzelnes Bit wird in einem SRAM in einer Schaltung von 6 oder mehr Transistoren gespeichert. Wenn Sie ein definiertes Power-On-Reset-Verhalten für den SRAM wünschen, würde jede RAM-Zelle nur mehr als 6 Transistoren benötigen. Die benötigte Chipfläche wird wesentlich größer und die SRAM-Chips werden teurer. Dies ist ein paralleles Power-On-Reset aller Bits zur gleichen Zeit. Ein serielles Zurücksetzen würde einen Oszillator, einen Adresszähler und genügend Zeit während des Einschaltens erfordern, um alle RAM-Bits oder -Bytes sequentiell zurückzusetzen. Wenn der Prozessor auf das SRAM zugreift, bevor das serielle Power-On-Reset abgeschlossen ist, können Fehler auftreten und Daten können verloren gehen oder geändert werden.

Es gibt Programmierumgebungen für Mikroprozessoren mit detaillierter Speicherabbildung mehrerer RAM-Bereiche. Sie können je nach Anwendung einen Bereich mit oder ohne Power-On-Reset definieren. Mehrere unterschiedliche Bereiche innerhalb desselben SRAM sind möglich. Es ist nicht immer notwendig, das gesamte SRAM beim Programmstart zurückzusetzen.

Einige der Transistoren etwas größer als andere zu machen, würde die Wahrscheinlichkeiten von Einsen gegenüber Nullen verzerren. An vielen Teilen werden die Transistoren innerhalb der Herstellungstoleranzen abgeglichen, was bedeutet, dass einige Bits zu Nullen vorgespannt werden, während andere zu Einsen vorgespannt werden. Ich bezweifle, dass die Größenunterschiede sehr groß sein müssten, um das Startverhalten überwiegend in eine Richtung zu beeinflussen. RAM-Hersteller könnten die Dinge leicht konsistent vorspannen, wenn es einen Grund dafür gäbe, aber ein unausgeglichener RAM würde zusätzlichen Strom verbrauchen, um die Zelle in die ungünstige Richtung zu schalten.