DE102012102080A1 - Fehlertolerante Flip-Flops - Google Patents

Fehlertolerante Flip-Flops Download PDF

Info

Publication number
DE102012102080A1
DE102012102080A1 DE102012102080A DE102012102080A DE102012102080A1 DE 102012102080 A1 DE102012102080 A1 DE 102012102080A1 DE 102012102080 A DE102012102080 A DE 102012102080A DE 102012102080 A DE102012102080 A DE 102012102080A DE 102012102080 A1 DE102012102080 A1 DE 102012102080A1
Authority
DE
Germany
Prior art keywords
parity bit
memory
memory element
data
circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102012102080A
Other languages
English (en)
Other versions
DE102012102080B4 (de
Inventor
Georg Georgakos
Anton Huber
Michael Goessel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Infineon Technologies AG filed Critical Infineon Technologies AG
Publication of DE102012102080A1 publication Critical patent/DE102012102080A1/de
Application granted granted Critical
Publication of DE102012102080B4 publication Critical patent/DE102012102080B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/41Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming static cells with positive feedback, i.e. cells not needing refreshing or charge regeneration, e.g. bistable multivibrator or Schmitt trigger
    • G11C11/413Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction
    • G11C11/417Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction for memory cells of the field-effect type
    • G11C11/419Read-write [R-W] circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1032Simple parity
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Abstract

Ein Ausführungsbeispiel der vorliegenden Erfindung bezieht sich auf eine fehlertolerante Speicherschaltung (200) mit niedrigem Hardwareoverhead, welche sowohl einzelne flüchtige weiche Fehler als auch permanente Fehler tolerieren kann. Bei einem Ausführungsbeispiel umfasst ein Verfahren oder eine Vorrichtung eine Speicherschaltung (200) mit einer Vielzahl von Speicherelementpaaren (203), welche jeweils zwei Speicherelemente (202, 204) aufweisen, um eine Dateneinheit zu speichern. Ein oder mehrere Paritätserzeugungsschaltungen (206) sind eingerichtet, ein erstes Paritätsbit aus in die Vielzahl von Speicherelementpaare (203) geschriebenen Daten zu berechnen und ein zweites Paritätsbit aus Daten zu berechnen, welche aus einem der zwei Speicherelemente (204) der Vielzahl von Speicherelementpaaren (203) gelesen werden. Basierend auf dem berechneten ersten und zweiten Paritätsbit wählt die Speicherschaltung (200) wahlweise Daten von Speicherelementen (202, 204) zur Ausgabe aus.

Description

  • HINTERGRUND DER ERFINDUNG
  • Um die Verlässlichkeit von Computersystemen sicherzustellen, können Fehler in Daten, welche in elektronischen Speicherstrukturen gespeichert sind, detektiert und korrigiert werden. Fehler in Speichern wurden für lange Zeit durch Benutzung von Paritätsbits detektiert. Paritätsbits sind Bits, welche einer Speicherstruktur hinzugefügt werden können, um die Integrität der in dem Speicher gespeicherten Daten sicherzustellen. Jedes Mal wenn Daten in einen Speicher geschrieben werden, untersucht eine Logikschaltung (z.B. eine Paritätserzeugungsschaltung) die Daten und bestimmt die Anzahl von logisch hohen (englisch "high") Datenzuständen (z.B. 1-en). Die Parität der in dem Speicher gespeicherten Daten wird basierend auf der Anzahl logisch hoher Datenzustände berechnet. Im Fall von geraden Paritätsbits wird die Logikschaltung einen Paritätsbitwert gleich "1" berechnen, wenn die Anzahl hoher Datenzustände in dem Speicher ungerade ist, und einen Paritätsbitwert gleich "0", wenn die Anzahl hoher Datenzustände in dem Speicher gerade ist. Es ist genauso möglich, ungerade Paritätsbits zu verwenden, wobei dann die Logikschaltung einen Paritätsbitwert gleich "1" berechnen wird, wenn die Anzahl hoher Datenzustände in dem Speicher gerade ist, und einen Paritätsbitwert gleich "0" berechnet, wenn die Anzahl hoher Datenzustände in dem Speicher gerade ist. Wenn Daten aus dem Speicher ausgelesen werden, liest die Logikschaltung die Bits wieder aus und bestimmt wieder einen Paritätsbitwert (z.B. ob eine ungerade oder eine gerade Anzahl von 1-en vorliegt). Ein Vergleich der Paritätswerte kann einen Fehler in dem Speicher detektieren.
  • Beispielsweise zeigt 1 ein Blockdiagramm eines Speichers 102, welcher eingerichtet ist, ein Datenbyte umfassend acht Datenbits 104a104g und ein Paritätsbit 106 zu einem ersten Zeitpunkt T1 zu speichern, zu dem Daten in den Speicher geschrieben werden, und zu einem späteren Zeitpunkt T2, zu dem Daten aus dem Speicher ausgelesen werden. Zur Zeit T1 speichert der Speicher 102 ein Datenbyte mit einer ungeraden Anzahl von Bits, welche einen Datenwert von "1" aufweisen (z.B. 104b, 104e, 104f), was zu einem geraden Paritätsbit 106 mit einem Wert von "1" führt. Zwischen dem Zeitpunkt T1 und dem Zeitpunkt T2 tritt ein Ereignis auf, welches bewirkt, dass sich der Wert des in dem Speicherelement 104d gespeicherten Datenbits von "0" auf "1" verändert. Daher speichert zu dem späteren Zeitpunkt T2 der Speicher 102' ein Datenbyte mit einer geraden Anzahl von Bits, welche einen Datenwert von "1" aufweisen (z.B. 104b, 104d, 104e, 104f), was zu einem geraden Paritätsbit 106 mit einem Wert von "0" führt. Da der Wert des Paritätsbits 106 zum Zeitpunkt T1 sich von dem Wert des Paritätsbits 106 zu einem Zeitpunkt T2 unterscheidet, liegt ein Fehler in dem Speicher vor.
  • Während Paritätsbits auf einfache Weise Fehler einzelner Bits detektieren können, erfordert die Benutzung von Paritätsbits zur Datenkorrektur (wie beispielsweise bei Verwendung von Hamming-Code Schemata) einen relativ großen Hardwareaufwand und einen entsprechenden Energieverbrauch einer integrierten Schaltung und ist daher nicht wünschenswert. Alternativ können Daten durch die Implementierung von Mehrheitsentscheidern oder -wählern detektiert und korrigiert werden. Auch solche Verfahren benötigen große Chipflächen und weisen einen vergleichsweise hohen Stromverbrauch auf.
  • Es ist daher eine Aufgabe der vorliegenden Erfindung, Vorrichtungen und Verfahren bereitzustellen, mit welchen eine Fehlerdetektion und/oder Fehlerkorrektur auf effiziente Weise vorgenommen werden kann.
  • KURZZUSAMMENFASSUNG
  • Es wird eine Speicherschaltung nach Anspruch 1, eine integrierte Schaltung nach Anspruch 11 sowie ein Verfahren nach Anspruch 16 bereitgestellt. Die Unteransprüche definieren weitere Ausführungsbeispiele.
  • KURZE BESCHREIBUNG DER ZEICHNUNG
  • 1 zeigt ein Beispiel für ein Datenbyte mit einem geraden Paritätsbit zu einem ersten Zeitpunkt und zu einem zweiten Zeitpunkt.
  • 2 zeigt ein Blockdiagramm eines ersten Ausführungsbeispiels einer fehlertoleranten Speicherschaltung.
  • 3 zeigt ein Blockdiagramm eines spezielleren Beispiels einer fehlertoleranten Speicherschaltung.
  • 4a zeigt ein Beispiel für eine Arbeitsweise einer fehlertoleranten drei-Bit-Speicherschaltung, wenn in dem Speicher keine Fehler vorliegen.
  • 4b zeigt ein Beispiel für eine Arbeitsweise einer fehlertoleranten drei-Bit-Speicherschaltung, wenn ein Fehler in dem Speicher vorliegt.
  • 5 zeigt ein Beispiel für ein Blockdiagramm eines Layouts eines integrierten Chips (IC) mit einer Standardzelle umfassend eine fehlertolerante Speicherschaltung, welche in einem größeren IC Layout enthalten ist.
  • 6 zeigt eine fehlertolerante Speicherschaltung gemäß einem Ausführungsbeispiel, bei welcher jeweilige Speicherkomponenten durch einen Mindestabstand getrennt sind.
  • 7 zeigt ein beispielhaftes Blockdiagramm eines Layouts eines integrierten Chips mit einer fehlertoleranten Speicherschaltung, welche in mehreren Standardzellen enthalten ist.
  • 8a zeigt ein Blockdiagramm eines alternativen Ausführungsbeispiels einer fehlertoleranten zwei-Bit-Speicherschaltung umfassend zwei Speicherelementpaare, welche symmetrisch um eine Paritätsbitvergleichslogik angeordnet sind.
  • 8b zeigt ein Beispiel für die Arbeitsweise der fehlertoleranten Speicherschaltung der 8a, wenn Fehler in dem Speicher vorliegen.
  • 9 ist ein Flussdiagramm zur Veranschaulichung eines Verfahrens zum Entfernen der Auswirkung von Fehlern von einer Speicheranordnung gemäß einem Ausführungsbeispiel.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Die vorliegende Erfindung wird nun unter Bezugnahme auf die beigefügte Zeichnung beschrieben, in welcher gleiche Bezugszeichen verwendet werden, um auf identische oder einander entsprechende Elemente hinzudeuten, und in welche die dargestellten Strukturen und Einrichtungen nicht notwendigerweise maßstabsgetreu dargestellt sind.
  • Manche Aspekte oder Ausführungsbeispiele der vorliegenden Erfindung stellen eine fehlertolerante Speicherschaltung mit niedrigem Hardwareoverhead bereit, welche sowohl einzelne flüchtige "weiche" Fehler als auch permanente Fehler tolerieren kann. Bei einem Ausführungsbeispiel umfasst ein Verfahren oder eine Vorrichtung eine Speicherschaltung mit einer Vielzahl von Speicherelementpaaren, welche jeweils zwei Speicherelemente aufweisen, welche eingerichtet sind, eine Dateneinheit zu speichern. Ein oder mehrere Paritätserzeugungsschaltungen sind eingerichtet, ein erstes Paritätsbit aus in die Vielzahl von Speicherelementpaaren (z.B. die zwei Speicherelemente) geschriebenen Daten und ein zweites Paritätsbit aus aus einem der zwei Speicherelemente in der Vielzahl von Speicherelementpaaren gelesenen Daten zu berechnen. Basierend auf den berechneten ersten und zweiten Paritätsbits wählt die Speicherschaltung ein wahlweises Ausgeben von Daten aus Speicherelementen, von welchen bekannt ist, dass sie keinen Datenfehler enthalten.
  • Beispielsweise umfasst bei einem Ausführungsbeispiel die Speicherschaltung eine Vielzahl von Speicherelementpaaren, welche jeweils ein erstes Speicherelement und ein zweites Speicherelement aufweisen, welche eingerichtet sind, jeweils ein Datenbit zu speichern. Eine erste Paritätserzeugungsschaltung ist eingerichtet, ein erstes Paritätsbit basierend auf in die Vielzahl von Speicherelementpaaren geschriebenen Daten zu berechnen, während eine zweite Paritätserzeugungsschaltung eingerichtet ist, ein zweites Paritätsbit basierend auf aus den zweiten Speicherelementen ausgelesenen Daten zu berechnen. Das erste Paritätsbit und das zweite Paritätsbit werden einer Steuereinheit bereitgestellt, welche eingerichtet ist, eine gespeicherte Kopie des ersten Paritätsbits mit dem in Echtzeit vorliegenden zweiten Paritätsbit zu vergleichen und basierend auf dem Vergleich ein Steuersignal zu erzeugen. Das Steuersignal wird einer oder mehreren Auswahlschaltungen bereitgestellt, welche wahlweise Daten aus einem ersten Speicherelement ausgeben, wenn eine Beziehung zwischen dem ersten Paritätsbit und einem zweiten Paritätsbit anzeigt, dass in den ersten Speicherelementen kein Fehler vorliegt, oder aus einem zweiten Speicherelement ausgeben, wenn eine Beziehung zwischen dem ersten Paritätsbit und dem zweiten Paritätsbit anzeigt, dass in den ersten Speicherelementen ein Fehler vorliegt.
  • Zu bemerken ist, dass Merkmale verschiedener Ausführungsbeispiele miteinander kombiniert werden können, sofern nichts anderes angegeben ist. Auch ist eine Beschreibung eines Ausführungsbeispiels mit einer Vielzahl von Merkmalen nicht dahingehend auszulegen, dass alle diese Merkmale zur Ausführung der Erfindung notwendig sind, da andere Ausführungsbeispiele weniger Merkmale und/oder alternative Merkmale aufweisen können.
  • 2 zeigt ein Blockdiagramm eines ersten Ausführungsbeispiels einer fehlertoleranten Speicherschaltung 200. Wie in 2 dargestellt umfasst die Speicherschaltung 200 eine Vielzahl von Eingangsknoten INa,..., INn, welche eingerichtet sind, einer Vielzahl von Speicherelementpaaren 203a, ... 203n Daten bereitzustellen. Jedes Speicherelementpaar 203 weist ein erstes Speicherelement 202 (z.B. Flip-Flops, Latch-Schaltungen etc.) und ein zweites Speicherelement 204 auf, welche jeweils eingerichtet sind, eine Dateneinheit zu speichern. Bei einem Ausführungsbeispiel können das erste Speicherelement und das zweite Speicherelement innerhalb jedes jeweiligen Speicherelementpaars (z.B. 203a, ... 203n), auch als Speicherzelle bezeichnet, eingerichtet sein, eine Dateneinheit umfassend einen einzigen binären Datenwert, welcher an einem jeweiligen Eingangsknoten INx bereitgestellt wird, redundant zu speichern, so dass zwei Speicherelemente (z.B. 202a und 204a) dem Speichern eines einzigen binären Datenwertes zugewiesen sind (z.B. speichern das erste Speicherelement und das zweite Speicherelement während einem normalen fehlerfreien Betrieb den gleichen binären Datenwert). Bei alternativen Ausführungsbeispielen können das erste Speicherelement und das zweite Speicherelement eingerichtet sein, eine Dateneinheit zu speichern, welche mehrere binäre Datenwerte einer Wortlänge m (mit m > 1), oder einen Analogwert, welcher durch die Benutzung verschiedener Schwellenwerte als ein binärer Wert einer Wortlänge m angesehen werden kann, zu speichern.
  • Die Eingänge und Ausgänge der Speicherelementpaare 203 sind mit einer Paritätsbitvergleichslogik 205 gekoppelt, welche eingerichtet ist, ein erstes Paritätsbit aus in die Vielzahl von Speicherelementpaare geschriebenen Daten zu berechnen und ein zweites Paritätsbit aus aus einem der zwei Speicherelemente der Vielzahl von Speicherelementpaaren gelesenen Daten zu berechnen. Bei einem Ausführungsbeispiel kann die Paritätsbitvergleichslogik 205 eine erste Paritätserzeugungsschaltung 206, ein Paritätsbitspeicherelement 208, eine zweite Paritätserzeugungsschaltung 210 und eine Steuereinheit 212 umfassen.
  • Die mit den Eingangsknoten INx der Speicherschaltung 200 gekoppelte erste Paritätserzeugungsschaltung 206 ist eingerichtet, den ersten Paritätsbitwert basierend auf Daten zu berechnen, welche in die Vielzahl von Speicherelementpaare 203a, ... 203n geschrieben werden. Der erste Paritätsbitwert wird von der ersten Paritätserzeugungsschaltung 206 dem Paritätsbitspeicherelement 206 bereitgestellt, welches eingerichtet ist, den ersten Paritätsbitwert entsprechend in der Vielzahl von Speicherelementpaaren 203a, ... 203n gespeicherten Daten zu speichern.
  • Die zweite Paritätserzeugungsschaltung 210, welche mit dem Ausgang der zweiten Speicherelemente 204a, ... 204n gekoppelt ist, ist eingerichtet, einen in Echtzeit vorliegenden zweiten Paritätsbitwert basierend auf dem Wert von den aus den zweiten Speicherelementen 204a, ..., 204n ausgelesenen Daten zu berechnen. Der Wert des gespeicherten ersten Paritätsbits und der in Echtzeit vorliegende zweite Paritätsbitwert werden der Steuereinheit 212 bereitgestellt. Es ist zu bemerken, dass bei einem Ausführungsbeispiel die zweite Paritätserzeugungsschaltung 210 und die Steuereinheit 212 als ein einziges Logikelement 211 implementiert sein können.
  • Die Steuereinheit 212 ist eingerichtet, ein Steuersignal SCTRL basierend auf den empfangenen Werten des ersten Paritätsbits und des zweiten Paritätsbits zu erzeugen. Das Steuersignal SCTRL wird einer Vielzahl von Auswahlschaltungen 214a, ... 214n bereitgestellt, welche jeweils eingerichtet sind, Daten auszugeben, welche aus den in einem ersten Speicherelement 202 oder einem zweiten Speicherelement 204 gespeicherten Daten ausgewählt werden. In verschiedenen Ausführungsbeispielen kann die Steuereinheit 212 verschiedene Logikelemente umfassen. Bei einem Ausführungsbeispiel kann die Steuereinheit 212 ein Exklusiv-Oder-(XOR)-Gatter umfassen, so dass, wenn das erste und das zweite Paritätsbit gleich sind, ein logisch niedriger Datenzustand ausgegeben wird, während, wenn die ersten und zweiten Paritätsbits unterschiedlich sind, ein logisch hoher Datenzustand ausgegeben wird. Alternativ kann die Steuereinheit 212 eine andere Art von Logikschaltung umfassen, z.B. ein XNOR-Gatter.
  • Bei einem Ausführungsbeispiel kann die Steuereinheit 212 eingerichtet sein, den Wert des gespeicherten ersten Paritätsbits mit dem Wert des in Echtzeit vorliegenden zweiten Paritätsbits zu vergleichen. Wenn in den zweiten Speicherelementen 204a, ... 204n kein Fehler vorliegt, dann wird der Vergleich anzeigen, dass die aus den zweiten Speicherelementen ausgelesenen Daten mit den in die zweiten Speicherelemente geschriebenen Daten übereinstimmen. Dementsprechend stellt in diesem Fall die Steuereinheit 212 ein Steuersignal SCTRL für die Auswahlschaltung 214 bereit, welches bewirkt, dass die Auswahlschaltungen die in den zweiten Speicherelementen 204 gespeicherten Daten ausgeben. Wenn in einem der zweiten Speicherelemente 204 ein Fehler vorliegt, dann geben das erste und das zweite Paritätsbit an, dass die in die zweiten Speicherelemente geschriebenen Daten nicht mit den aus den zweiten Speicherelementen ausgelesenen Daten übereinstimmen. Dementsprechend stellt die Steuereinheit 212 den Auswahlschaltungen 214, um keine als falsch bekannten Daten auszugeben, ein Steuersignal SCTRL bereit, welches bewirkt, dass die Auswahlschaltungen die in den ersten Speicherelementen 202 gespeicherten Daten ausgeben (z.B. gespeicherte Daten, von denen nicht bekannt ist, dass sie falsch sind).
  • Obwohl unter Bezugnahme auf 2 beschrieben wurde, dass die zweite Paritätserzeugungsschaltung 210 mit den Ausgängen der zweiten Speicherelemente 204 gekoppelt ist, ist zu bemerken, dass die zweite Paritätserzeugungsschaltung 210 entweder mit den ersten Speicherelementen 202a, ..., 202n oder den zweiten Speicherelementen 204a, ... 204n gekoppelt sein kann. Auch kann für jedes Speicherelementpaar 203 mit zwei Speicherelementen individuell bestimmt werden, ob die zweite Paritätserzeugungsschaltung 210 mit dem Ausgang des ersten Speicherelements oder dem Ausgang des zweiten Speicherelements gekoppelt ist. Beispielsweise kann die zweite Paritätserzeugungsschaltung 210 mit dem Ausgang des ersten Speicherelements 202a des ersten Speicherelementpaars 203a, mit dem Ausgang des zweiten Speicherelementpaars eines zweiten Speicherelementpaars, mit dem Ausgang des zweiten Speicherelements eines dritten Speicherelementpaars, mit dem Ausgang des ersten Speicherelements eines vierten Speicherelementpaars etc. gekoppelt sein.
  • In jedem Fall erzeugt, wenn der von der zweiten Paritätserzeugungsschaltung 210 erzeugte zweite Paritätsbitwert anzeigt, dass es keinen Fehler in den in den Speicherelementen, welche mit der zweiten Paritätserzeugungsschaltung verbunden sind, gespeicherten Daten keinen Fehler gibt, die Steuereinheit 212 ein Steuersignal, welches bewirkt, dass die Auswahlschaltungen 214 Daten aus den Speicherelementen ausgeben, welche mit der zweiten Paritätserzeugungsschaltung gekoppelt sind. Entsprechend erzeugt, wenn der durch die zweite Paritätserzeugungsschaltung erzeugte zweite Paritätsbitwert anzeigt, dass es in den in den mit der zweiten Paritätserzeugungsschaltung verbundenen Speicherelementen gespeicherten Daten einen Fehler gibt, die Steuereinheit 212 ein Steuersignal, welches bewirkt, dass die Auswahlschaltungen 214 Daten von den Speicherelementen ausgeben, welche nicht mit der zweiten Paritätserzeugungsschaltung gekoppelt sind. Somit ist die Speicherschaltung eingerichtet, wahlweise Daten auszugeben, von welchen entweder bekannt ist, dass sie keine Datenfehler enthalten (z.B. aus den zweiten Speicherelementen 204 in 2) oder Daten auszugeben, von welchen nicht bekannt ist, dass sie Datenfehler enthalten (z.B. aus den ersten Speicherelementen 202 der 2).
  • Wie hier beschrieben kann ein Paritätsbit oder ein Paritätsbitwert sich auf ein gerades oder ein ungerades Paritätsbit beziehen. In verschiedenen Ausführungsbeispielen können die ersten und zweiten Paritätsbits gerade Paritätsbits, ungerade Paritätsbits oder eine Kombination von geraden und ungeraden Paritätsbits umfassen. Beispielsweise können bei einem Ausführungsbeispiel das erste und das zweite Paritätsbit gerade Paritätsbits, auch als positive Paritätsbits bezeichnet, sein. Bei einem alternativen Ausführungsbeispiel können das erste und zweite Paritätsbit ungerade Paritätsbits sein. Bei einem anderen Ausführungsbeispiel kann das erste Paritätsbit ein gerades Paritätsbit umfassen, während das zweite Paritätsbit ein ungerades Paritätsbit umfasst, oder umgekehrt. Es ist zu bemerken, dass die Wahl von Paritätsbits als gerade oder ungerade Paritätsbits eine entsprechende Logikfunktionalität der Steuereinheit erfordern kann.
  • Weiterhin wird zur Vereinfachung der Beschreibung im Folgenden die vorliegende Erfindung anhand eines Beispiels beschrieben, in welchem ein einziges Bit in einem Speicherelement gespeichert wird (z.B. unter Bezugnahme auf 3, Speicherelemente speichern eine Dateneinheit, welche beispielsweise ein Datenbit umfasst). Es ist jedoch zu bemerken, dass die Erfindung nicht auf die Speicherung eines einzigen Datenbits in einem Speicherelement begrenzt ist. Beispielsweise können bei manchen Ausführungsbeispielen die Speicherelemente einen einzigen binären Wert b mit den möglichen Werten "0" oder "1" eines einzigen Bits, mehrere binäre Werte b1,...bm einer Wortlänge m, wobei m>1 ist, oder einen Analogwert, welcher als Binärwert einer Wortlänge m durch Benutzung von verschiedenen Schwellenwerten interpretiert werden kann, speichern. Für Ausführungsbeispiele mit m > 1 kann die Parität einer in einem Speicherelement gespeicherten Dateneinheit einfach als eine Exklusiv-Oder-Summe (XOR-Summe) der gespeicherten binären Werte berechnet werden.
  • 3 zeigt ein Blockdiagramm eines speziellen Ausführungsbeispiels einer fehlertoleranten Speicherschaltung 300. Wie in 3 dargestellt umfasst ein Speicher eine Vielzahl von 2n Flip-Flops, welche als n Speicherelementpaare 303, welche jeweils zwei Flip-Flops 302 und 304, welche eingerichtet sind, ein Datenbit zu speichern, eingerichtet sind.
  • Die Speicherelementpaare 303 sind mit einer Paritätsbitvergleichslogik 305 gekoppelt, welche ein erstes Logikelement 306, ein Paritätsbitspeicherflipflop 308, ein zweites Logikelement 310 und eine Steuereinheit 312 umfasst. Das erste Logikelement 306 ist eingerichtet, ein erstes Paritätsbit von aus n Bits von Daten, welche in die 2n Flip-Flops geschrieben werden, zu erzeugen. Das erste Paritätsbit wird basierend auf der Anzahl von logisch hohen Datenzuständen in den n Datenbits gebildet und wird in dem Paritätsbitspeicherflipflop 308 gespeichert. Das zweite Logikelement 310 ist eingerichtet, ein in Echtzeit vorliegendes zweites Paritätsbit basierend auf der Anzahl von logisch hohen Datenzuständen in n Datenbits, welche aus den 2n Flip-Flops ausgelesen werden, zu bilden.
  • Die Steuereinheit 312, welche ein Exklusiv Oder Gatter (XOR-Gatter) umfasst, ist eingerichtet, eine Kopie des ersten Paritätsbits von dem Paritätsbitspeicherflipflop 308 und das in Echtzeit vorliegende zweite Paritätsbit, welches von dem zweiten Logikelement 310 berechnet wird, zu empfangen. Das XOR-Gatter gibt ein Steuersignal SCTRL aus, welches einer Vielzahl von Multiplexern 314a, ... 314n zugeführt wird. Das Steuersignal SCTRL wählt aus, welches der zwei Flip-Flops, 302 oder 304, in einem Speicherelementpaar 303x (wobei x = a, ... n) ausgewählt wird, um Daten als Ausgabe bereitzustellen. Wenn beispielsweise das erste Paritätsbit und das zweite Paritätsbit gleich sind (z.B. beide "0" oder beide "1"), ist die Parität wahr, was anzeigt, dass kein Fehler in den Flip-Flops 304 vorliegt. Daher werden Daten aus den Flip-Flops 304 ausgegeben. Falls das erste Paritätsbit und das zweite Paritätsbit ungleich sind (z.B. "1" und "0" oder "0" und "1") ist die Parität falsch, was angibt, dass ein Fehler in den Flip-Flops 304 vorliegt. Daher werden in diesem Fall Daten aus den Flip-Flops 302 ausgegeben.
  • 4a zeigt ein Beispiel für ein Blockdiagramm, welches die Arbeitsweise einer fehlertoleranten 3-Bit-Speicherschaltung 400 ohne Fehler veranschaulicht. Wie in 4a dargestellt wird ein logisch hoher Datenzustand ("1") in jedes von drei Speicherelementpaaren 403a, 403b und 403c geschrieben. Beispielsweise wird ein hoher Datenzustand ("1") in Speicherelemente 402 und 404 eines ersten Speicherelementpaars 403a, eines zweiten Speicherelementpaar 403b und eines dritten Speicherelementpaars 403c geschrieben. Ein erstes Logikelement 406 ist eingerichtet, ein erstes Paritätsbit aus den in jedes der Speicherelementpaare 403 geschriebenen Daten zu erzeugen. Wir in 4a dargestellt berechnet das erste Logikelement 406, da in jedes der drei Speicherelementpaare ein hoher Datenzustand geschrieben wird, ein erstes gerades Paritätsbit mit einem Wert von "1". Das erste Paritätsbit wird in einem Paritätsbitspeicherelement 408 gespeichert.
  • Ein zweites Logikelement 410 ist eingerichtet, ein zweites Paritätsbit aus aus den Speicherelementen 404a, 404b und 404c ausgelesenen Daten zu berechnen. Wie in 4a gezeigt, berechnet das zweite Logikelement 410, da in den Speicherelementen 404a, 404b und 404c kein Fehler vorliegt, ein zweites gerades Paritätsbit mit einem Wert von "1". Ein gespeicherter Wert des ersten Paritätsbits und der in Echtzeit vorliegende Wert des zweiten Paritätsbits werden einem XOR-Gatter bereitgestellt. Da jedes der Paritätsbits einen logisch hohen Datenzustand ("1") aufweist gibt das Exklusiv Oder Gatter einen logisch niedrigen Datenzustand ("0") an jeden der Multiplexer 414 aus, was bewirkt, dass die Multiplexer 414 selektiv Daten von den Speicherelementen 404 ausgeben. Beispielsweise empfängt der Multiplexer 414a ein Steuersignal mit einem Wert von "0", was bewirkt, dass der Multiplexer 414a Daten ausgibt, welche bei dem Eingangsknoten INa 2 von dem Speicherelement 404a in den Multiplexer eingegeben wurde. Daher gibt die Speicherschaltung 400 Daten in einer Weise aus, dass Speicherelemente zur Benutzung ausgewählt werden, von denen sicher ist, dass sie keinen bekannten Datenfehler aufweisen.
  • 4b zeigt ein Beispiel für ein Blockdiagramm für den Betrieb einer fehlertoleranten 3-Bit-Speicherschaltung 416 mit einem Fehler. Wie in 4b dargestellt wird wiederum ein logisch hoher Datenzustand ("1") in jedes der drei Speicherelementpaare 403a, 403b und 403c geschrieben. Beispielsweise wird ein hoher Datenzustand ("1") in die Speicherelemente 402 und 404 des ersten Speicherelementpaars 403a, des zweiten Speicherelementpaars 403b und des dritten Speicherelementpaars 403c geschrieben. Wie in 4b gezeigt, berechnet, da in jedes der drei Speicherelementpaare ein hoher Datenzustand geschrieben wird, das erste Logikelement 406 ein erstes gerades Paritätsbit mit einem Wert von "1". Das erste Paritätsbit wird in dem Paritätsbitspeicherelement 408 gespeichert.
  • Ein zweites Logikelement 410 ist eingerichtet, ein zweites Paritätsbit aus den aus den Speicherelementen 404a, 404b und 404c ausgelesenen Daten zu erzeugen. Wie in 4b gezeigt, berechnet, da in dem Speicherelement 404a ein Fehler vorliegt, das zweite Logikelement 410 ein zweites gerades Paritätsbit mit einem Wert von "0". Ein gespeicherter Wert des ersten Paritätsbits und ein Echtzeitwert des zweiten Paritätsbits werden dem XOR-Gatter 412 bereitgestellt. Da das erste Paritätsbit einen logisch hohen Datenzustand ("1") und das zweite Paritätsbit einen logisch niedrigen Datenzustand ("0) aufweist, gibt das XOR-Gatter 412 einen logisch hohen Datenzustand ("1") an jeden der Multiplexer 414 aus, was bewirkt, dass die Multiplexer 414 selektiv Daten von den Speicherelementen 402 ausgeben. Beispielsweise empfängt der Multiplexer 414a ein Steuersignal mit einem Wert von "1", was bewirkt, dass der Multiplexer 414a Daten ausgibt, welche in den Multiplexer an einem Eingangsknoten INa 1 von dem Speicherelement 402a eingegeben wurden. Daher gibt die Speicherschaltung 416 in diesem Fall Daten in einer Weise aus, bei welcher gewählt wird, Speicherelemente, welche einen bekannten Datenfehler aufweisen, nicht zu benutzen.
  • Die Erfinder haben die Schwierigkeit erkannt, Speicherschaltungen in einer fehlertoleranten Konfiguration innerhalb typischer Layouts oder Designs von integrierten Chips (IC) zu implementieren. Daher können in verschiedenen Ausführungsbeispielen die Komponenten der hier bereitgestellten Fehlertoleranten Speicherschaltung (z.B. die Speicherschaltungen der 2, 3 etc.) in einen oder mehreren Standardzellen für das Layout integrierter Chips enthalten sein, um die Einbeziehung ein oder mehrerer Speicherelemente, welche robust gegenüber einzelnen Fehler sind, in ein Layout oder Design eines integrierten Chips zu erleichtern. Beispielsweise kann bei einem Ausführungsbeispiel, um die Implementierung von fehlertoleranten Speicherschaltungen in ein Layout eines integrierten Chips zu erleichtern, die hier beschriebene fehlertolerante Speicherfunktionalität in eine einzige Standardzelle eines integrierten Chiplayouts einbezogen sein, welche dann in einem komplexeren Design eines integrierten Chips enthalten sein kann. 5 zeigt ein Beispiel für ein Blockdiagramm eines Layouts 500 eines integrierten Chips mit einer Standardzelle 502, welche eine fehlertolerante Speicherschaltung umfasst, welche in einem größeren Layout 504 eines integrierten Chips enthalten ist. Wie in 5 dargestellt, sind Komponenten einer Speicherschaltung (z.B. eine Vielzahl von Speicherelementen, Paritätserzeugungsschaltungen etc.) in einer einzigen Standardzelle 502 des integrierten Chips (welche z.B. in einer Standardzellenbibliothek gehalten wird) enthalten, welche dann wahlweise in dem Layout 504 des integrierten Chips platziert werden kann, um eine Anzahl von Datenspeicherelementen zu ersetzen, welche nicht einfach konfigurierbar sind, um fehlertolerante Datenspeicherung bereitzustellen. Beispielsweise können vier Datenspeicherelemente (z.B. Flip-Flops), welche eingerichtet sind, vier Datenbits zu speichern, durch eine einzige Standardzelle für integrierte Chips ersetzt werden, welche vier Speicherelementpaare, Paritätserzeugungslogik und die gleichen Eingangs- und Ausgangssignale wie die vier Datenspeicherelemente aufweist, um so eine Speicherschaltung herzustellen, welche vier Datenbits speichert, welche robust gegen einzelne Fehler sind.
  • Da die Platzierung von Speicherelementen in einem kleinen geographischen Gebiet wie einer einzigen Standardzelle eines integrierten Chips die Wahrscheinlichkeit von Mehrfachfehlern erhöht, kann es bei manchen Ausführungsbeispielen hilfreich sein, eine Mindestbeabstandung zwischen Komponenten (z.B. Speicherelementen, Speicherelementpaaren) zu einer Speicherschaltung zu implementieren, um die Fehlertoleranz der Speicherschaltung zu verbessern.
  • Insbesondere ist Fachleuten klar, dass Speicherfehler aufgrund verschiedener Ursachen auftreten können, umfassend manche, welche Speicherelemente individuell beeinflussen. Beispielsweise können so genannte weiche Fehler durch einfallende Alphateilchen verursacht werden, so dass, wenn ein Fehler in einem der zwei Speicherelemente eines Speicherelementpaars vorliegt, dann statistisch ein Fehler nicht in dem anderen Speicherelement des Speicherelementpaars vorliegen wird. Alternativ können Speicherfehler auch an Ursachen liegen, welche Fehler innerhalb eines geographischen Gebiets eines Speichers verursachen. Beispielsweise kann ein Waferdefekt bewirken, dass ein geographisches Gebiet eines Chips Fehler aufweist, was Speicherelemente, die in einem bestimmten Gebiet enthalten sind, beeinflusst.
  • Um das Auftreten von Mehrfachfehlern in einer fehlertoleranten Speicherschaltung zu vermeiden, sind daher bei manchen Ausführungsbeispielen Speicherelemente eines Speicherelementpaares und/oder Speicherelementpaare einer Speicherschaltung durch einen Mindestabstand getrennt (z.B. 10µm, das Doppelte der Größe eines Speicherelements). 6 zeigt eine Speicherschaltung 600, in welcher jeweilige Speicherkomponenten durch einen vorgegebenen Mindestabstand getrennt sind (z.B. als ein oder mehrere Layout Designregeln implementiert). Beispielsweise ist in einem ersten Speicherelementpaar 603a ein erstes Speicherelement 602a von einem zweiten Speicherelement 604a durch einen vorgegebenen Mindestabstand 606 getrennt. Weiterhin kann in zusätzlichen und/oder alternativen Ausführungsbeispielen ein erstes Speicherelementpaar 603a von einem zweiten Speicherelement 603b durch einen vorgegebenen Mindestabstand 608 getrennt sein. In verschiedenen Ausführungsbeispielen kann sich der vorgegebene Mindestabstand 606 zwischen den ersten und zweiten Speicherelementen von dem Mindestabstand 608 zwischen verschiedenen Speicherelementpaaren unterscheiden, kann aber auch gleich sein.
  • Bei manchen Ausführungsbeispielen kann die Komplexität der Speicherschaltung oder die Beabstandung von Speicherelementen durch einen Mindestabstand die Größe der Speicherschaltung auf eine hinreichend große Größe vergrößern, die bewirkt, dass die Speicherschaltung als Vielzahl von (d.h. mehr als eine) Standardzellen des integrierten Chip Layouts implementiert ist. Eine derartige Aufteilung einer Speicherschaltung auf eine Vielzahl von Standardzellen kann das so genannte Routing erleichtern und die Wahrscheinlichkeit von Mehrfachfehlern sogar weiter verringern, indem eine zusätzliche Beabstandung zwischen Speicherelementen vorgesehen wird.
  • Beispielsweise zeigt die 7 ein Beispiel für ein Blockdiagramm eines Layouts 700 eines integrierten Chips mit einer fehlertoleranten Speicherschaltung, welche in mehreren Standardzellen des integrierten Chip Layouts enthalten ist, welche wiederum in einem größeren Layout 706 eines integrierten Chips enthalten sind. Wie in 7 dargestellt sind erste und zweite Multiplexer MUXa und MUXb und zugeordnete Speicherelemente in einer ersten Standardzelle 702 des Layouts des integrierten Chips enthalten, während ein dritter Multiplexer MUXn, zugeordnete Speicherelemente und Paritätsbitvergleichslogik Teil einer zweiten Standardzelle 704 des Layouts des integrierten Chips sind. Bei einem Ausführungsbeispiel kann die erste Standardzelle 702 des Layouts des integrierten Chips von der zweiten Standardzelle 704 des Layouts des integrierten Chips durch einen Mindestabstand 708 getrennt sein. Die Erfinder haben erkannt, dass in alternativen Ausführungsbeispielen die Komponenten einer fehlertoleranten Speicherschaltung (z.B. Speicherelemente, Paritätserzeugungsschaltungen etc.) auf andere Weise auch zwei oder mehrere Standardzellen des Layouts des integrierten Chips aufgeteilt sein können.
  • 8a zeigt ein alternatives Ausführungsbeispiel einer fehlertoleranten 2-Bit-Speicherschaltung 800, bei welcher eine Paritätsbitvergleichslogik 805 räumlich zwischen zwei Speicherelementpaaren 803 angeordnet ist. 8a zeigt eine Paritätsbitvergleichslogik 805 umfassend eine erste Paritätserzeugungsschaltung 806, ein Paritätsbitspeicherelement 808 und ein Steuerlogikelement 810. Die Paritätsbitvergleichslogik 805 ist in einer Position angeordnet, welche räumlich zwischen einem ersten Speicherelementpaar 803a und einem zweiten Speicherelementpaar 803b angeordnet ist.
  • Bei einem Ausführungsbeispiel können die ersten und zweiten Speicherelementpaare 803a und 803b symmetrisch um die Paritätsbitvergleichslogik 805 angeordnet sein. Indem die Paritätsbitvergleichslogik 805 räumlich zwischen zwei Speicherelementpaaren 803a und 803b angeordnet ist, wird das Layout der Speicherschaltung vereinfacht, so dass die Speicherschaltung 800 keine Kreuzung von signalführenden Drähten aufweist.
  • Weiterhin umfasst, wie in 8a dargestellt, die Paritätsbitvergleichslogik 805 eine erste Paritätserzeugungsschaltung 806 und ein Steuerlogikelement 810, welches einfache XOR-Logikgatter oder in alternativen Ausführungsbeispielen irgendein anderes einfaches Logikelement umfasst. Die Benutzung einfacher XOR-Logikgatter ermöglicht ein vereinfachtes Design. Beispielsweise erzeugt das Steuerlogikelement 810 ein Steuersignal basierend auf einem empfangenen gespeicherten ersten Paritätsbitwert von dem Paritätsbitspeicherelement 808 und aus den Speicherelementen 804a und 804b ausgelesenen Daten. Daher führt das Steuerlogikelement 810 die Funktionalität sowohl einer Paritätserzeugungsschaltung als auch einer Steuereinheit wie oben beschrieben durch. Es ist zudem zu bemerken, dass das Steuerlogikelement 810, welches in 8a gezeigt ist, auch in anderen Speicherschaltungsdesigns (z.B. wie in den 2 oder 3 gezeigt) implementiert sein kann.
  • 8b zeigt ein Beispiel für ein Blockdiagramm zur Veranschaulichung der in 8a dargestellten 2-Bit fehlertoleranten Speicherschaltung, wenn ein Fehler in den Speicherelementen vorliegt. Wie in 8b dargestellt, wird in jedes der zwei Speicherelementpaare 803a und 803b ein logisch hoher Datenzustand ("1") geschrieben. Beispielsweise wird ein logisch hoher Datenzustand in die ersten und zweiten Speicherelemente 802 und 804 des ersten Speicherelementpaars 803a und des zweiten Speicherelementpaars 803b geschrieben. Eine erste Paritätserzeugungsschaltung 806 ist eingerichtet, ein erstes Paritätsbit aus in die Speicherelementpaare geschriebenen Daten zu erzeugen. Wie in 8b gezeigt, berechnet, da logisch hohe Datenzustände in jedes der Speicherelementpaare geschrieben werden, die Paritätserzeugungsschaltung 806 ein gerades Paritätsbit mit einem Wert von "0". Das erste Paritätsbit wird in einem Paritätsbitspeicherelement 808 gespeichert.
  • Ein Steuerlogikelement 810 ist eingerichtet, ein Steuersignal SCRTL aus dem ersten Paritätsbit und aus aus den Speicherelementen 804a und 804b ausgelesenen Daten zu erzeugen. Wie in 8b dargestellt, ist, da ein Fehler in dem Speicherelement 804b vorliegt, das Steuerelement 810 eingerichtet, ein Steuersignal mit einem Wert von "1" zu erzeugen. Das Steuersignal mit dem Wert von "1" wird Multiplexern 814a und 814b bereitgestellt, was bewirkt, dass die Multiplexer selektiv Daten von den Speicherelementen 802 ausgeben. Daher gibt die Speicherschaltung Daten in einer Weise aus, welche bewirkt, dass keine Speicherelemente benutzt werden, welche einen bekannten Datenfehler enthalten.
  • 9 zeigt ein Flussdiagramm eines Verfahrens 900 gemäß einem Ausführungsbeispiel zum Entfernen der Auswirkungen von Fehlern aus einer Speicherschaltung. Das Verfahren gibt Daten wahlweise in einer Weise aus, dass Speicherelemente, welche einen bekannten Datenfehler aufweisen, nicht benutzt werden (z.B. eine Differenz zwischen berechneter Parität bezüglich von Datenbits, welche in den Speicher geschrieben sind).
  • Während das Verfahren 900 unten stehend als Abfolge von Vorgängen oder Ereignissen beschrieben ist, ist zu bemerken, dass die dargestellte Reihenfolge derartiger Vorgänge oder Ereignisse nicht als einschränkend auszulegen ist. Beispielsweise können manche Vorgänge in anderer Reihenfolge auftreten und/oder gleichzeitig mit anderen Vorgängen oder Ereignissen, auch nicht dargestellten und/oder beschriebenen, ausgeführt werden. Zudem sind nicht notwendigerweise alle dargestellten Vorgänge nötig, um einen oder mehrere Aspekte oder Ausführungsbeispiele der Erfindung zu implementieren. Auch können einer oder mehrere der dargestellten Vorgänge in einem oder mehreren separaten Vorgängen und/oder Phasen durchgeführt werden. Beispielsweise ist zu bemerken, dass bei einem Ausführungsbeispiel die Erzeugung eines zweiten Paritätsbits (Schritt 908) und der Vergleich des ersten Paritätsbits und des zweiten Paritätsbits (Schritt 910) in Echtzeit und/oder gleichzeitig durchgeführt werden können, während das Schreiben von Daten in Speicherelementpaare (Schritt 902) und das Erzeugen und Speichern eines ersten Paritätsbits (Schritte 904906) während jedes neuen Schreibzyklus der Speicherelemente vonstattengehen.
  • Bei 902 werden Daten in eine Vielzahl von Speicherelementpaaren geschrieben, welche jeweils ein erstes und ein zweites Speicherelement umfassen. Insbesondere werden Daten umfassend ein Datenbit mit einem Datenbitwert in Speicherelementpaare geschrieben, welche ein Paar von zwei Speicherelementen umfassen, welche beide zum Speichern des Datenbitwerts verwendet werden.
  • Bei 904 wird ein erstes Paritätsbit aus den in die Vielzahl von Speicherelementpaaren geschriebenen Daten erzeugt. Insbesondere wird das erste Paritätsbit aus Daten erzeugt, welche in jeweilige Paare von ersten und zweiten Speicherelementen geschrieben werden. Das erste Paritätsbit kann ein gerades oder ein ungerades Paritätsbit umfassen, welches erzeugt wird, indem die Anzahl von logisch hohen Datenzuständen bestimmt wird, welche in die Speicherelemente geschrieben werden.
  • Bei 906 wird das erste Paritätsbit in einem Speicher gespeichert.
  • Bei 908 wird ein in Echtzeit vorliegendes zweites Paritätsbit aus aus den zweiten Speicherelementen gelesenen Daten erzeugt. Wir oben erwähnt kann das erste Paritätsbit und das zweite Paritätsbit ein gerades Paritätsbit, ein ungerades Paritätsbit oder eine Kombination von geraden und ungeraden Paritätsbits (z.B. kann das erste Paritätsbit ein gerades Paritätsbit und das zweite Paritätsbit ein ungerades Paritätsbit sein oder umgekehrt) umfassen.
  • Bei 910 wird eine gespeicherte Kopie des ersten Paritätsbits mit dem in Echtzeit vorliegenden zweiten Paritätsbit verglichen. Das Vergleichen eines gespeicherten Wertes des ersten Paritätsbits mit dem in Echtzeit vorliegenden Wert des zweiten Paritätsbits zeigt an, ob ein Fehler in den in den zweiten Speicherelementen gespeicherten Daten vorliegt. Beispielsweise liegt bei einem Ausführungsbeispiel kein Fehler in den zweiten Speicherelementen vor, wenn der erste Paritätsbitwert gleich dem zweiten Paritätsbitwert ist, während ein Fehler in den zweiten Speicherelementen vorliegt, wenn sich der erste Paritätsbitwert von dem zweiten Paritätsbitwert unterscheidet.
  • Es ist zu bemerken, dass der Vergleich des ersten Paritätsbits mit dem zweiten Paritätsbit durch die Konvention des Paritätsbits (z.B. ungerades Paritätsbit oder gerades Paritätsbit) beeinflusst werden kann. Beispielsweise ist bei einem Ausführungsbeispiel, bei welchem das zweite Paritätsbit in der gleichen Weise wie das erste Paritätsbit berechnet wird, so dass das erste Paritätsbit und das zweite Paritätsbit der gleichen Konvention folgen (z.B. beide gerade oder beide ungerade Paritätsbits sind), kein Fehler in den zweiten Speicherelementen vor, wenn das erste Paritätsbit und das zweite Paritätsbit gleich sind. Wenn in diesem Fall jedoch das erste Paritätsbit ungleich dem zweiten Paritätsbit ist, liegt ein Fehler in den in den zweiten Speicherelementen gespeicherten Datenbits vor. Wenn alternativ das erste Paritätsbit und das zweite Paritätsbit unterschiedlichen Konventionen folgen, dann zeigt eine Übereinstimmung zwischen den Paritätsbits einen Fehler an und eine Nichtübereinstimmung zeigt keinen Fehler an.
  • Wenn der Vergleich angibt, dass ein Fehler in den zweiten Speicherelementen vorliegt (Kasten 912), wird das Verfahren 900 bei dem Kasten 914 fortgesetzt, bei welchem die Daten aus den zweiten Speicherelementen ausgegeben werden. Alternativ wird, wenn der Vergleich angibt, dass ein Fehler in einem der zweiten Speicherelemente vorliegt (Kasten 912), das Verfahren bei Kasten 916 fortgesetzt, bei welchem die Daten aus den ersten Speicherelementen ausgegeben werden. Daher gibt das Verfahren basierend auf dem Vergleich wahlweise Daten aus Speicherelementen aus, welche entweder bekanntermaßen keine Datenfehler aufweisen oder von welchen nicht bekannt ist, dass sie Datenfehler aufweisen.
  • Es ist zu bemerken, dass, obwohl die Speicherelemente in den Figuren in einer linearen Geometrie angeordnet dargestellt sind, die Speicherelemente auch in nicht linearer Weise angeordnet sein können. Beispielsweise können bei einem Ausführungsbeispiel die jeweiligen Speicherelemente eines Speicherelementpaares entlang einer ersten Richtung angeordnet sein, während die Speicherelementpaare entlang einer sich von der ersten Richtung unterscheidenden zweiten Richtung angeordnet sind.
  • Weiter ist zu bemerken, dass, obwohl die Ausführungsbeispiele bezüglich Speicherelementpaaren (z.B. 2, Element 203), welche eingerichtet sind, eine Dateneinheit (z.B. ein Datenbit) zu speichern, beschrieben wurde, zu bemerken ist, dass die Erfindung nicht auf Speicherelementpaare umfassend zwei getrennte Speicherelemente begrenzt ist. Die Erfindung kann ebenso auf Speicherstrukturen angewendet werden, welche eingerichtet sind, eine Dateneinheit zu speichern, wobei die Speicherstrukturen eine Anzahl von Speicherelementen größer als zwei (z.B. 3, 4, ... m Datenspeicherelemente) aufweist, um ein Beispiel zu geben. Obwohl die Erfindung bezüglich einer oder mehrerer Implementierungen dargestellt und beschrieben wurde, können Veränderungen und/oder Modifikationen an den dargestellten Beispielen vorgenommen werden, ohne den Bereich der Erfindung zu verlassen. Obwohl die Erfindung hier bezüglich weicher Fehler beschrieben wurde, ist es beispielsweise Fachleuten klar, dass die dargestellten Verfahren und Vorrichtungen auch auf permanente Speicherfehler angewendet werden können. Ausführungsbeispiele der Erfindung können als Verfahren, Vorrichtung oder Herstellungsartikel unter Benutzung einer Standardprogrammierung und/oder Standardmäßiger Ingenieurtechniken implementiert werden, um Software, Firmware, Hardware oder irgendeine Kombination hiervon herzustellen, um einen Computer zu steuern, ein Ausführungsbeispiel der Erfindung zu implementieren. Der Begriff "Herstellungsartikel" umfasst beispielsweise ein von irgendeinem Computer lesbaren Gerät, Träger oder Medium auslesbares Computerprogramm.
  • Es ist zu bemerken, dass insbesondere bezüglich der verschiedenen Funktionen, welche durch die oben beschriebenen Komponenten oder Strukturen ausgeführt werden (Anordnungen, Einrichtungen, Schaltungen, Systeme etc.) die verwendeten Begriffe, welche benutzt wurden, um derartige Komponenten zu beschreiben, jegliche Art von Komponenten oder Strukturen beinhalten können, welche die erläuterten Funktionen der jeweiligen Komponente implementieren können, selbst wenn sie nicht strukturell zu der dargestellten Komponente oder Einrichtung identisch sind.

Claims (20)

  1. Speicherschaltung (200; 300; 400; 415; 600; 800), umfassend: eine Vielzahl von Speicherelementpaaren (203; 303; 403; 603; 803), welche jeweils eingerichtet sind, eine Dateneinheit zu speichern, wobei die Speicherelementpaare (203; 303; 403; 603; 803) jeweils ein erstes Speicherelement (202; 302; 402; 602; 802) und ein zweites Speicherelement (204; 304; 404; 604; 804) umfassen, eine Paritätsbitvergleichslogik (205; 305; 805), welche eingerichtet ist, ein erstes Paritätsbit basierend auf in die Vielzahl von Speicherelementpaaren (203; 303; 403; 604; 804) geschriebenen Daten und ein in Echtzeit vorliegendes zweites Paritätsbit basierend auf aus zweiten Speicherelementen (204; 304; 404; 604; 804) gelesenen Daten zu berechnen, das erste Paritätsbit zu speichern und ein Steuersignal basierend auf einer Beziehung zwischen dem gespeicherten ersten Paritätsbit und dem in Echtzeit vorliegenden zweiten Paritätsbit zu erzeugen, welches einer oder mehreren Auswahlschaltungen (214; 314; 414; 814) bereitgestellt wird, wobei das Steuersignal bewirkt, dass die eine oder mehreren Auswahlschaltungen (214; 314; 414; 814) wahlweise Daten von einem zweiten Speicherelement (204; 304; 404; 604; 804) ausgeben, wenn die Beziehung angibt, dass in den zweiten Speicherelementen (204; 304; 404; 604; 804) kein Fehler vorliegt, oder aus einem ersten Speicherelement (202; 302; 402; 602; 802) ausgeben, wenn die Beziehung angibt, dass ein Fehler in den zweiten Speicherelementen (204; 304; 404; 604; 804) vorliegt.
  2. Speicherschaltung (200; 300; 400; 416; 600; 800) nach Anspruch 1, wobei die Paritätsbitvergleichslogik (205; 305; 805) umfasst: eine erste Paritätserzeugungsschaltung (206; 306; 406; 806), welche eingerichtet ist, das erste Paritätsbit auf Basis von in die Vielzahl von Speicherelementpaare (203; 303; 403; 603; 803) geschriebenen Daten zu berechnen, ein Paritätsbitspeicherelement (208; 308; 408; 808), welches eingerichtet ist, das erste Paritätsbit zu speichern, eine zweite Paritätserzeugungsschaltung (210; 310; 410; 810), welche eingerichtet ist, das in Echtzeit vorliegende zweite Paritätsbit basierend auf aus den zweiten Speicherelementen (204; 304; 404; 604; 804) gelesenen Daten zu berechnen, und eine Steuereinheit (212; 312; 412; 810), welche eingerichtet ist, das gespeicherte erste Paritätsbit und das in Echtzeit vorliegende zweite Paritätsbit zu empfangen und einen Vergleich zwischen dem ersten Paritätsbit und dem zweiten Paritätsbit durchzuführen, um die Beziehung zwischen dem ersten Paritätsbit und dem zweiten Paritätsbit zu bestimmen.
  3. Speicherschaltung (200; 300; 400; 416; 600; 800) nach Anspruch 2, wobei die Steuereinheit (212; 312; 412; 810) ein Exklusiv-Oder-Gatter umfasst.
  4. Speicherschaltung (200; 300; 400; 416; 600; 800) nach einem der Ansprüche 1–3, wobei die Auswahlschaltungen (214; 314; 414; 814) jeweils einen Multiplexer umfassen, welcher eingerichtet ist, in Abhängigkeit von dem Steuersignal wahlweise Daten aus den ersten Speicherelementen (202; 302; 402; 602; 802) oder aus den zweiten Speicherelementen (204; 304; 404; 604; 804) auszugeben.
  5. Speicherschaltung (200; 300; 400; 416; 600; 800) nach einem der Ansprüche 1–4, wobei die Komponenten der Speicherschaltung in einer einzigen Standardzelle (502) eines Layouts eines integrierten Chips enthalten sind.
  6. Speicherschaltung (200; 300; 400; 416; 600; 800) nach einem der Ansprüche 1–4, wobei Komponenten der Speicherschaltung auf mehr als eine Standardzelle (702, 704) eines Layouts eines integrierten Chips aufgeteilt sind.
  7. Speicherschaltung (200; 300; 400; 416; 600; 800) nach einem der Ansprüche 1–6, wobei die ersten Speicherelemente (202; 302; 402; 602; 802) und die zweiten Speicherelemente (204; 304; 404; 604; 804) Flip-Flops umfassen.
  8. Speicherschaltung (800) nach einem der Ansprüche 1–7, wobei die Vielzahl von Speicherelementpaaren ein erstes Speicherelementpaar (803a) und ein zweites Speicherelementpaar (803b) umfasst, und wobei die Paritätsbitvergleichslogik (805) räumlich an einer Position angeordnet ist, welche zwischen dem ersten Speicherelementpaar (803a) und dem zweiten Speicherelementpaar (803b) liegt.
  9. Speicherschaltung nach einem der Ansprüche 1–8, wobei die Vielzahl von Speicherelementpaaren durch einen Mindestabstand (608) getrennt sind.
  10. Speicherschaltung nach einem der Ansprüche 1–9, wobei das erste Speicherelement und das zweite Speicherelement jeweiliger Speicherelementpaare (603) einen vorgegebenen Mindestabstand (606) voneinander aufweisen.
  11. Integrierte Schaltung (500; 700), umfassend: eine Speicherschaltung (200; 300; 400; 416; 600; 800), welche in ein oder mehreren Standardzellen (502; 702, 704) eines Layouts des integrierten Chips enthalten ist, wobei die Speicherschaltung (200; 300; 400; 416; 600; 800) umfasst: eine Vielzahl von Speicherelementpaaren (203; 303; 403; 603; 803), welche jeweils eingerichtet sind, eine Dateneinheit zu speichern, wobei die Speicherelementpaare (203; 303; 403; 603; 803) jeweils ein erstes Speicherelement (202; 302; 402; 602; 802) und ein zweites Speicherelement (204; 304; 404; 604; 804) umfassen; eine erste Paritätserzeugungsschaltung (206; 306; 406; 806), welche eingerichtet ist, ein erstes Paritätsbit basierend auf in die Vielzahl von Speicherelementpaare (202; 302; 403; 603; 803) geschriebenen Daten zu berechnen, wobei das erste Paritätsbit in einem Paritätsbitspeicherelement (208; 308; 408; 808) gespeichert wird, eine zweite Paritätserzeugungsschaltung (210; 310; 410; 810), welche eingerichtet ist, ein in Echtzeit vorliegendes zweites Paritätsbit basierend auf aus zweiten Speicherelementen (204; 304; 404; 604; 804) ausgelesenen Daten zu berechnen, eine Steuereinheit (212; 312; 412; 810), welche eingerichtet ist, das gespeicherte erste Paritätsbit zu empfangen und das gespeicherte erste Paritätsbit mit dem in Echtzeit vorliegenden zweiten Paritätsbit zu vergleichen, um eine Beziehung zwischen dem ersten Paritätsbit und dem zweiten Paritätsbit zu bestimmen, und eine Vielzahl von Auswahlschaltungen (214; 314; 414; 814), welche eingerichtet sind, wahlweise Daten von einem ersten Speicherelement (202; 302; 402; 602; 802) auszugeben, wenn eine erste vorgegebene Beziehung zwischen einem ersten Paritätsbit und einem zweiten Paritätsbit vorliegt, und wahlweise Daten von einem zweiten Speicherelement (204; 304; 404; 604; 804) auszugeben, wenn zwischen dem ersten Paritätsbit und dem zweiten Paritätsbit eine zweite vorgegebene Beziehung vorliegt.
  12. Integrierte Schaltung (500; 700) nach Anspruch 11, wobei die ersten Speicherelemente (202; 302; 402; 602; 802) und die zweiten Speicherelemente (204; 304; 404; 604; 804) Flip-Flops umfassen.
  13. Integrierte Schaltung (500; 700) nach Anspruch 11 oder 12, wobei die Vielzahl von Speicherelementpaaren (803) ein erstes Speicherelementpaar (803a) und ein zweites Speicherelementpaar (803b) umfasst, und wobei die erste Paritätserzeugungsschaltung (806), die zweite Paritätserzeugungsschaltung (810) und die Steuereinheit (810) in einer Position angeordnet sind, welche räumlich zwischen dem ersten Speicherelementpaar (803a) und dem zweiten Speicherelementpaar (803b) liegt.
  14. Integrierte Schaltung (500) nach einem der Ansprüche 11–13, wobei die Speicherschaltung (200; 300; 400; 416; 600; 800) in einer einzigen Standardzelle (502) des Layouts des integrierten Chips enthalten ist.
  15. Integrierte Schaltung (500; 700) nach einem der Ansprüche 11–14, wobei die Vielzahl von Speicherelementpaaren (603) durch einen vorgegebenen Mindestabstand (608) getrennt sind, und wobei das erste Speicherelement (602) und das zweite Speicherelement (604) jeweiliger Speicherelementpaare (603) durch einen vorgegebenen Mindestabstand (606) getrennt sind.
  16. Verfahren zum Beseitigen der Auswirkung von Fehlern in einer Speicherschaltung (200; 300; 400; 416; 600; 800), umfassend: Erzeugen eines ersten Paritätsbits aus Datenwerten, welche in eine Vielzahl von Speicherelementpaare (203; 303; 403; 603; 803), welche jeweils ein erstes Speicherelement (202; 302; 402; 602; 802) und ein zweites Speicherelement (204; 304; 404; 604; 804) umfassen, geschrieben werden, Speichern des ersten Paritätsbits in einem Paritätsbitspeicherelement (208; 308; 408; 808), Erzeugen eines in Echtzeit vorliegenden zweiten Paritätsbits aus in den zweiten Speicherelementen (204; 304; 404; 604; 804) gespeicherten Daten, und Auswählen von aus den ersten Speicherelementen (202; 302; 402; 602; 802) oder den zweiten Speicherelementen (204; 304; 404; 604; 804) auszugebenden Daten basierend auf einer Beziehung zwischen dem gespeicherten ersten Paritätsbit und dem in Echtzeit vorliegenden zweiten Paritätsbit, wobei Daten aus einem zweiten Speicherelement (204; 304; 404; 604; 804) ausgegeben werden, wenn die Beziehung anzeigt, dass kein Fehler in den zweiten Speicherelementen (204; 304; 404; 604; 804) vorliegt, und wobei Daten aus einem ersten Speicherelement (202; 302; 402; 602; 802) ausgegeben werden, wenn die Beziehung angibt, dass ein Fehler in den zweiten Speicherelementen (204; 304; 404; 604; 804) vorliegt.
  17. Verfahren nach Anspruch 16, weiter umfassend Vergleichen des gespeicherten ersten Paritätsbits mit dem in Echtzeit vorliegenden zweiten Paritätsbit, um die Beziehung zwischen dem gespeicherten ersten Paritätsbit und dem in Echtzeit vorliegenden zweiten Paritätsbit zu bestimmen.
  18. Verfahren nach Anspruch 16 oder 17, wobei, wenn das gespeicherte erste Paritätsbit gleich dem in Echtzeit vorliegenden zweiten Paritätsbit ist, Daten ausgewählt werden, von einem zweiten Speicherelement (204; 304; 404; 604; 804) ausgegeben zu werden, und wobei, wenn das gespeicherte erste Paritätsbit ungleich dem in Echtzeit vorliegenden zweiten Paritätsbit ist, Daten ausgewählt werden, aus einem ersten Speicherelement (202; 302; 402; 602; 802) ausgegeben zu werden.
  19. Verfahren nach einem der Ansprüche 16–18, wobei die Speicherelementpaare (203; 303; 403; 603; 803) in mehr als einer Standardzelle (702; 704) eines Layouts eines integrierten Chips enthalten sind.
  20. Verfahren nach einem der Ansprüche 16–18, wobei die Speicherelementpaare (203; 303; 403; 603; 803) in einer einzigen Standardzelle (502) eines Layouts eines integrierten Chips enthalten sind.
DE102012102080.9A 2011-03-14 2012-03-13 Speicherschaltung, integrierte Schaltung und Verfahren mit Fehlerkorrekturen Active DE102012102080B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/047,090 US8589775B2 (en) 2011-03-14 2011-03-14 Error tolerant flip-flops
US13/047,090 2011-03-14

Publications (2)

Publication Number Publication Date
DE102012102080A1 true DE102012102080A1 (de) 2012-09-20
DE102012102080B4 DE102012102080B4 (de) 2014-09-04

Family

ID=46757028

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012102080.9A Active DE102012102080B4 (de) 2011-03-14 2012-03-13 Speicherschaltung, integrierte Schaltung und Verfahren mit Fehlerkorrekturen

Country Status (3)

Country Link
US (1) US8589775B2 (de)
CN (1) CN102682855B (de)
DE (1) DE102012102080B4 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9529671B2 (en) * 2014-06-17 2016-12-27 Arm Limited Error detection in stored data values
US9760438B2 (en) * 2014-06-17 2017-09-12 Arm Limited Error detection in stored data values
US10020822B2 (en) 2014-07-21 2018-07-10 Rensselaer Polytechnic Institute Error tolerant memory system
US9891976B2 (en) 2015-02-26 2018-02-13 Arm Limited Error detection circuitry for use with memory
US11429478B2 (en) * 2019-06-05 2022-08-30 Stmicroelectronics International N.V. Robust soft error tolerant multi-bit D flip-flop circuit

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0236803B1 (de) * 1986-03-12 1992-01-15 Siemens Aktiengesellschaft Verfahren zum Betrieb einer fehlergesicherten hochverfügbaren Multiprozessor-Zentralsteuereinheit eines Vermittlungssystemes
US5453999A (en) * 1994-04-26 1995-09-26 Unisys Corporation Address verification system using parity for transmitting and receiving circuits
US6510500B2 (en) * 2001-03-09 2003-01-21 International Business Machines Corporation System and method for minimizing message transactions for fault-tolerant snapshots in a dual-controller environment
JP4768163B2 (ja) * 2001-08-03 2011-09-07 富士通セミコンダクター株式会社 半導体メモリ
DE10221936A1 (de) * 2002-05-17 2003-12-04 Abb Patent Gmbh Anordnung zur Erkennung und Korrektur von Bitfehlern
KR100543447B1 (ko) * 2003-04-03 2006-01-23 삼성전자주식회사 에러정정기능을 가진 플래쉬메모리장치
US7523371B2 (en) 2004-06-30 2009-04-21 Intel Corporation System and shadow bistable circuits coupled to output joining circuit
JP4667093B2 (ja) * 2005-03-17 2011-04-06 富士通株式会社 二重化記憶装置及び二重化記憶装置の制御方法
DE102005055067A1 (de) * 2005-11-18 2007-05-24 Robert Bosch Gmbh Vorrichtung und Verfahren zum Beheben von Fehlern bei einem wenigstens zwei Ausführungseinheiten mit Registern aufweisenden System
DE102006019426B4 (de) * 2006-04-26 2008-03-13 Qimonda Ag Speichermodulsteuerung, Speichersteuerung und entsprechende Speicheranordnung sowie Verfahren zur Fehlerkorrektur
DE102007024983A1 (de) 2007-05-25 2008-11-27 IHP GmbH - Innovations for High Performance Micrelectronics/Institut für Halbleitertechnik Elektrischer Schaltkreis mit Doppel-Modul-Redundanz zur Handhabung von Single-Event-Effekten
US8024640B2 (en) * 2007-05-25 2011-09-20 Broadcom Corporation Read/write channel coding and methods for use therewith
US7917831B2 (en) * 2007-06-14 2011-03-29 Freescale Semiconductor, Inc. Optimization of storage device accesses in RAID systems
ZA200903854B (en) * 2008-06-19 2011-02-23 Univ Of The Witwatesrand Johannesburg A gastroretentive pharmaceutical dosage form
US7882388B2 (en) * 2008-08-21 2011-02-01 Sierra Wireless America, Inc. Dual independent non volatile memory systems
US8589759B2 (en) * 2010-10-01 2013-11-19 Hamilton Sundstrand Corporation RAM single event upset (SEU) method to correct errors

Also Published As

Publication number Publication date
CN102682855A (zh) 2012-09-19
DE102012102080B4 (de) 2014-09-04
CN102682855B (zh) 2015-11-18
US20120240014A1 (en) 2012-09-20
US8589775B2 (en) 2013-11-19

Similar Documents

Publication Publication Date Title
DE2619159C2 (de) Fehlererkennungs- und Korrektureinrichtung
DE10233642B4 (de) Fehlerkorrektur-Kodierung und -Dekodierung in einer Festkörper-Speicherungsvorrichtung
DE69030528T2 (de) Verfahren und Anordnung zum Testen von Schaltungsplatten
DE102012102080B4 (de) Speicherschaltung, integrierte Schaltung und Verfahren mit Fehlerkorrekturen
DE3603926A1 (de) Halbleiter-speicherelement
DE102013222321A1 (de) Elektronisches Gerät mit einer Vielzahl von Speicherzellen und mit physikalisch unklonbarer Funktion
DE102004063571A1 (de) System und Verfahren zum Konfigurieren einer Festkörperspeicherungsvorrichtung mit Fehlerkorrekturcodierung
DE3209679C2 (de)
DE2225841C3 (de) Verfahren und Anordnung zur systematischen Fehlerprüfung eines monolithischen Halbleiterspeichers
DE112011100371T5 (de) Verfahren, Vorrichtung und Computerprogrammprodukt zum Decodieren eines Codeworts
DE102017103347B4 (de) Verarbeitung von daten in speicherzellen eines speichers
DE10234684A1 (de) Speicherschaltung
DE2128790A1 (de) Einrichtung zum Verwenden mehrerer betriebsfähiger Schaltungen in einem in tegrierten Schaltungsplättchen
DE102010013349A1 (de) Computersystem und Verfahren zum Vergleichen von Ausgangssignalen
DE10342275A1 (de) System und Verfahren zum Testen eines oder mehrerer Halbleiterstücke auf einem Halbleiterwafer
DE69904618T2 (de) Detektionstechnik von speicherabschnittfehlern und einzel-, doppel und triplebitfehlern
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
DE102012105159B4 (de) Fehlertolerante Speicher
DE102018124836A1 (de) Neuartiger speicherbaustein
DE102008013099A1 (de) Speichertestschaltung
WO2020207519A1 (de) Verfahren zur modellierung eines systems mittels eines quantencomputers
DE2752377A1 (de) Fehlerpruefeinrichtung
DE2538802C2 (de) Schaltung zum Nachweis von Fehlern unter den aus Informations- und Prüfbits erzeugten, einen fehlerhaften Speicherort angebenden Bits
DE2441351A1 (de) Schaltungsanordnung zur selbstpruefenden paritaetspruefung fuer zwei oder mehr voneinander unabhaengige datenkanaele
DE2549392A1 (de) Methode zur erhoehung der zuverlaessigkeit von integrierten speicherbausteinen und zur verbesserung der ausbeute bei ihrer herstellung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final