(57)【要約】【課題】ビットエラー修正の試行錯誤を優先順位付けるためのシステムおよび方法を提供する。【解決手段】少なくとも１つのしきい値を用いて、しきい電圧値を設定することで、論理ビットの順位を決定するための、メモリにある少なくとも１つのビットエラーを修正する試行を優先順位つける方法であって、第一ビットが前記第一ビットよりもエラーの可能性が比較的に低い第二ビットより前に順位付けられるように、複数のビットを順位付けることと、エラーの可能性が比較的に低い前記第二ビットの修正を試行する前に、前記第二ビットよりもエラーの可能性が高い前記第一ビットの修正を試行することを含む順位付けた順位に従って、前記複数のビットの修正を試行することによって、複数の試行を定義することと、を含む。【選択図】図１３
2020195135.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのしきい値を用いて、しきい電圧値を設定することで、論理ビットの順位を決定するための、メモリにある少なくとも１つのビットエラーを修正する試行を優先順位つける方法であって、
第一ビットが前記第一ビットよりもエラーの可能性が比較的に低い第二ビットより前に順位付けられるように、複数のビットを順位付けることと、
エラーの可能性が比較的に低い前記第二ビットの修正を試行する前に、前記第二ビットよりもエラーの可能性が高い前記第一ビットの修正を試行することを含む順位付けた順位に従って、前記複数のビットの修正を試行することによって、複数の試行を定義することと、を含む方法。
【請求項２】
前記メモリは、複数のシングルレベルセルを含み、
順位付けた順位に従って修正を試行することは、
順位付けた順位に従って、複数のビットを順次にフリップさせることによって、複数のビットフリップの試行を定義し、エラーの可能性が比較的に低い前記第二ビットをフリップする前に、第二ビットよりもエラーの可能性が高い前記第一ビットをフリップさせることを含む請求項１に記載の方法。
【請求項３】
少なくとも１つのビット内のビットエラーを検出するステップをさらに含み
前記検出するステップは、順位付け、及び順位付けた順位に従って修正を試行することをトリガする請求項１に記載の方法。
【請求項４】
前記メモリは、チップを含み、
前記チップは、ＮＶＭを含む請求項１に記載の方法。
【請求項５】
前記複数のビットは、
すべてのビットがフリップした場合、及び
複数のビットフリップのうち、１つのビットフリップの試行がエラーの修正に成功したと判断された場合、
のいずれか１つが発生するまで、フリップし続ける請求項２に記載の方法。
【請求項６】
前記複数のビットの修正を試行することは、
すべてのビットに対して修正を試行した場合、及び
複数の試行のうちの一つは、エラーの修正に成功したと判断された場合、
のいずれか１つが発生するまで、継続する請求項１に記載の方法。
【請求項７】
前記メモリチップは、オリジナル認証機能を有しており、
順位付けた順位に従って修正を試行する（例えば、順位付けた順位に従ってフリップする）ことは、
すべてのビットに対して修正を試行した（例えば、すべてのビットがフリップした）場合、及び、
オリジナル認証機能が、複数の修正試行（例えば、ビットフリップ）のうちの１つの修正試行（例えば、ビットフリップ）が、エラーの修正に成功したと判断した場合、
のいずれか１つが発生するまで、継続する請求項１に記載の方法。
【請求項８】
前記順位付けることは、
１から０に修正された回数が０から１に修正された回数よりも多かった場合、１を保存するビットに対してより高い修正優先権を割り当て、０を保存するビットに対してより低い修正優先権を割り当てることを含む請求項２に記載の方法。
【請求項９】
前記順位付けることは、
１から０に修正された回数が０から１に修正された回数よりも少なかった場合、０を保存するビットに対してより高い修正優先権を割り当て、１を保存するビットに対してより低い修正優先権を割り当てることを含む請求項２に記載の方法。
【請求項１０】
前記順位付けることは、
修正待ちすべき各ビットの、ロジックビット値を変換して読み出す電圧に対する電圧しきいである電圧読取距離を判定することを含む請求項１に記載の方法。
【請求項１１】
フリップ待ちすべき各ビットの、ロジックビット値を変換して読み出す電圧に対する電圧しきいである電圧読取距離を判定することを含む請求項２に記載の方法。
【請求項１２】
順位付けた順位に従って修正を試行することは、
第一の試行で修正する距離が第二の試行で修正する距離より小さい場合、複数の試行修正中の第二の試行修正を行う前に、複数の試行修正中の第一の試行修正を先に実行することを含む請求項１０に記載の方法。。
【請求項１３】
順位付けた順位に従ってフリップすることは、複数のビットフリップ試行のために使用される第１のビットフリップの距離が複数のビットフリップ試行のために使用される第２のビットフリップの距離よりも小さい場合に、第２のビットフリップを行う前に、第１のビットフリップを行うことを含む請求項１１に記載の方法。
【請求項１４】
締切点として電圧を変換することで１つのロジックビット値の少なくとも１つの電圧しきい値を読み取った中、個別の電圧しきい値は、電圧読み値に最も近い値である請求項１０に記載の方法。
【請求項１５】
前記メモリはチップを含み、前記方法を実行するコードはチップで実行されるファームウェアである請求項１に記載の方法。
【請求項１６】
前記チップは、マージン読み出し機能を有し、
前記ファームウェアは、マージン読み出し機能を用いて、修正待ちの各ビットの電圧読み取りと個別の電圧しきい値との距離を判断する請求項１５に記載の方法。
【請求項１７】
少なくとも１つのしきい値を用いて、しきい電圧値を設定することで、論理ビットの順位を決定するための、メモリにある少なくとも１つのビットエラーを修正する試行を優先順位つけるシステムであって、
第一ビットが前記第一ビットよりもエラーの可能性が比較的に低い第二ビットより前に順位付けられるように、複数のビットを順位付けることと、
エラーの可能性が比較的に低い前記第二ビットの修正を試行する前に、前記第二ビットよりもエラーの可能性が高い前記第一ビットの修正を試行することを含む順位付けた順位に従って、前記複数のビットの修正を試行することによって、複数の試行を定義することと、を含むシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体デバイスに関するメモリ体の完全度、特に非揮発性メモリ体（ＮＶＭ）の完全度に関するビットエラー修正の試行錯誤を優先順位付けるためのシステムおよび方法である。
【背景技術】
【０００２】
非揮発性メモリ体（ＮＶＭ）半導体メモリデバイスは至る所で使われており、その特徴としてはＮＶＭメモリユニットを含むデバイスの電力供給が中断されたり、終了させられたりの状況になってもＮＶＭはデータビットを保存する。非揮発性メモリ体は、フラッシュメモリ、浮遊ゲート素子、窒化物唯読メモリ（ＮＲＯＭ）、および他の電荷蓄積素子を含む。対照的に、ある種の半導体メモリデバイス、例えば、静態ランダムアクセスメモリ（ＳＲＡＭ）は、揮発性メモリデバイスであり、電源が切れると、保存されたデータは失われる。
【０００３】
ＮＶＭユニットに保存された多位体情報は、ＮＶＭユニットのしきい電圧を基準とした状態で表すことができる。例えば、ＮＶＭユニットのしきい電圧を中間順位としてプログラムすることにより、複数のビットは単一のＮＶＭユニットに保存することができる。例えば、複数のビット準ＮＶＭユニットでは、単一ＮＶＭユニットのｎビットは、通常であれば２  ｎ−１個のしきい値ビット準を使用する。ｎ＞１で単一ＮＶＭユニットが１ビットを保存することではない場合は、隣接するビットの電圧差が減少し、且つＮＶＭユニットのしきい電圧状態を干渉し、状態を高くまたは低くしてしまう可能性が高い。したがって、ＮＶＭユニットの状態はそのしきい電圧（Ｖｔ）によって定義また確定できるが、このＮＶＭユニットに電流が流れると、状態の相違を感知するの電圧にエラーが起こりやすい。
【０００４】
もちろん、このしきい値は、マルチレベルセルに適用するだけでなく、１ビット（ｎ＝１）を格納する単級ユニット、すなわち２  ｎ−１＝１で１しき値を使用する場合にも適用される。
【０００５】
一般的に、ＮＶＭユニットをプログラミングすることができる、例えば、それに「消去」または「読み取り」のプログラムをかけることができる。プログラムは、メモリユニット端部に電圧をかけ、ＦＧの電荷メモリ層またはＮＲＯＭの電荷捕捉層に電子を注入することができる。次に、相関層のしきい電圧（Ｖｔ）が増加。閾値電圧（Ｖｔ）またはその範囲で、それぞれＮＶＭユニットの状態またはプログラミングビット準に関連する。従って、ＮＶＭユニットのしきい電圧に基づき、各メモリデバイスを様々な状態またはプログラムビット準にプログラミングし得る。シングルレベルのユニットには、２つのプログラミングビット準しかないので、「消去」と「書き込み」と称することができますが、マルチレベルのユニット（ＭＬＣ）では、２つ以上（ｎ＞２）の書き込みビット準がある。
【０００６】
文献で使用される用語「ＮＶＭしきい値」は、多目的で使用される様々な理学数値に使われている、例えば、以下の特許文献１、特許文献２でも記述したされている。
【０００７】
Ｍｏｏｎらは、（特許文献３）「隣接しているしきい電圧分布が重なると、特定の読取電圧を選択した文字ラインに印加する時に、読み取ったデータに多くのエラーが多発する可能性がある」と述べている。例えば、選択された文字ラインに加えた読取電圧Ｖｒｅａｄ  ３がメモリユニットがオンであることを示す場合、このメモリ体ユニットは、第２の書き込み状態「Ｐ  ２」を有すると判断される。選択した文字ラインに加えた読取電圧Ｖｒｅａｄ  ３がストックユニットの状態がオフと感知した場合、メモリ体ユニットは、第３の書き込み状態「Ｐ  ３」を有すると判断される。但し、隣接したしきい電圧の分布が重なると、第３書き込み状態が「Ｐ  ３」を有するメモリユニットは、第２書き込み状態「Ｐ  ２」であると誤判断される可能性がある。つまり、隣接したしきい電圧分布が図２に表示されたように重なってる場合、読み取ったデータには多数のエラーが含まれている可能性がある”。したがって、Ｍｏｏｎは「高度な集積された半導体メモリデバイスの多ビットメモリデバイスにメモリされているデータをより正確に読み取る」と提案している。
【０００８】
ＮＶＭなどのメモリに対して、マージン読み出し（ｍａｒｇｉｎ−ｒｅａｄ，またはｒｅａｄ  ｍａｒｇｉｎ）技術は、その使い道がこの分野で知り渡されている。フラッシュメモリまたはＥＥＰＲＯＭのＮＶＭに使用。
【０００９】
通常、必須ではないが、マージン読み出し作動の出力は、バイナリ値を含み、各バイナリ値はそれぞれ対応するビットの強度を表す。変更後のしきい値が示度を変化させた場合、マージン読み出し作動の出力は１とすることができ、そうでない場合は０とすることができる、裕度が読み取った出力中のすべての１は「弱」ビットを表し、裕度が読み取ったの出力中のすべての０は「強」ビットを表している。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】米国特許登録公告ＵＳ７６２６８６８Ｂ１
【特許文献２】米国特許公開公報ＵＳ２０１３０２３５６６１Ａ１
【特許文献３】米国特許公開公報ＵＳ２０１８００６２６６８Ａ１
【特許文献４】米国特許公開公報ＵＳ２０１５０２５５１６４Ａ１
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、ビットエラー修正の試行錯誤を優先順位付けるためのシステムおよび方法を提供することにある。
【課題を解決するための手段】
【００１２】
特定の実施例は、メモリ本体のデータの完備度を向上させるために用いられ、例えば、マージンの読み出し作動をサポートするために用いられる。
【００１３】
特定の実施例は、ＮＶＭシステムに対する試験及びエラーフローの最適化を図るために、時間及び電力支出を低減するために使用される。
【００１４】
特定の実施例は、どのビットがエラーであるかを判断するために使用され（その他でエラーする可能性が低いビットと対照）、エラー訂正候補の優先順位をつける為、順位情報を使用する。
【００１５】
特定の実施例は、メモリ本体要素のデータ完備度を向上させるために用いられ、例えば、マージン読み出し作動を支援するＮＶＭに使用。
【００１６】
特定の実施例は、エラー訂正を行うビットの優先順位をつけるために用いられ、これを通してどのエラー訂正方法を使用しても全体補正周期時間を低減することができる。特定の実施例は、各ビットがマージン読み出しに対するレスポンスをランク付けすることによって、エラーの可能性が低いビットの前に、比較的にエラーしやすいビットを先に処理する。
【００１７】
特定の実施例によれば、システムは承認作動を通じてメモリに与えられた文字のエラーを察知ことができる。特定の実施例によれば、文字のうちで複数のビットにエラーが発生する可能性がある中、使用テストおよびエラー処理のロジックを提供する。前記のロジックは文字の各ビットをフリップすると同時にどのビットに対してエラー訂正が必要かを判断する。このようなシステムのアドバンテージは，ビットがフリップすると，エラーを修正することができて、当デバイスを修理実験室に送る必要がなくなる。
【００１８】
特定の実施例によれば、複数のビットは任意の順序でフリップすることができ、例えば、ビットの物理的順序または任意のランダム順序。最もエラーし得るビットは、最もエラーし得ないのビットよりも先にフリップする。本発明の最適化メカニズムは、初期に不良ビットを見つける可能性を高めることができる為、長期的な統計からすれば、比較的に少数のビットがフリップする。そのため、本発明は最適化メカニズムを達成することができる。
【００１９】
前記のシステムは、任意の適切な基準を用いて、比較的にエラーし得るビット及びエラーし得ないビットを判断することができる。上記の基準は、メモリ（例えばＮＶＭ）のマージン読み出し機能を使用することで、ビットに対するロジック０またはロジック１の強さ（ｓｔｒｏｎｇ）を判定することができる。当ビットが正常であれば、ビット電圧は、０と１を区別するしきい値から乖離するので、ビットの１（または０）は強い。当ビットがエッジにいるまたは衰弱している場合、マージン読み出しは、当ビットの電圧が０と１を区別するしきい値から乖離していないことを示す可能性がある為、ビットの１（または０）は強くない。
【００２０】
特定の実施例は、テストおよびエラー方法を実行して、どのビットがエラーであるかを判断するために推薦する。当エラー訂正ロジックがマージン読み出し機能をコントロールできて、当ロジックは旧い不良ビットを先にフリップさせ、その後に正常なビットをフリップさせることができる。
【００２１】
一部の実施例は、エラー訂正する為の方法を提供、当方法は、少なくとも１つの発生し得るエラー訂正に適用することを含み、また後に集積回路の既存検証機能を使用し、当発生し得るエラーの訂正は正しいかどうかを検証する。
【００２２】
一部の実施例は、エラー修正解決案を提供しようと試み、既存のエラー訂正解案とは異なり、メモリのコストは増加させない（エラー訂正コード（ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｃｏｄｅ，ＥＣＣ）はすべてのｙ個データはＸビートをストレージする必要あるとの比較）。これはデータの「評価」が習得機能のアイデンティティで検証したためであり、例えば、安全性と完備性を察知（ｓｅｃｕｒｉｔｙ−ａｎｄ  ｉｎｔｅｇｒｉｔｙ−ａｗａｒｅ）するメモリで管理すれば、必然的に自身に負担に加えるが、本明細書で説明したように、前記した実施例を利用してエラー訂正を行えば、通常では検証以外の負担は無くなる。
【００２３】
本発明で説明される実施例の適用性は、プロセッサおよびメモリの任意の機能を有する任意の一般的なマイクロコントローラにも応用されると認識できる。これらの機能は、通用だとプロセッサによって作動されるファームウェア（ｆｉｒｍｗａｒｅ，ＦＷ）作動であり、ＦＷはメモリに常駐し、且つ自身は保護されるメモリの内容に含まれている可能性がある。
【００２４】
本発明で説明される実施例は従来のＩＣと共に使用することができ、従来ＩＣ自体の既存の検証（ｌｅｇａｃｙ  ａｕｔｈ）の一部を利用して、その暗号計算は、ハードウエア（ｈａｒｄｗａｒｅ，ＨＷ）またはファームウェアで行うことができる。通常では、ハードウェアを検証の概要をストレージする為、一般的なＣＰＵ命令のファームウェアまたはハードウェア加速器を使用することができる。例えば、ハッシュ  ベース  メッセージ認証コード（Ｈａｓｈ−ｂａｓｅｄ  ｍｅｓｓａｇｅ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ、ＨＭＡＣ）を強力認証に使用して、且つ従来のＩＣは作動可能なＨＭＡＣの部分暗号化ハードウエアを有し、従来バージョンのハードウェアが主ＩＣのプロセッサにアクセスすることができたことによって、プロセッサに実行されているファームウェアにアクセス可能な場合、ファームウェアは前記の従来ＩＣで該当部分のハードウェアを利用することができる。
【００２５】
代替または付属として、ＩＣの従来のハードウェアおよび／またはファームウェアにおけるアクセスを使って機能をコントロールすることができる。
【００２６】
代替にまたは付属として、本発明で説明した実施例に既存のＩＣのハードウェアおよび／またはファームウェアを採用せず、代わりに適切なファームウェアに本明細書で説明された一部または全部機能を実施して、当ファームウェアは既存のＩＣの従来ファームウェアのミュータブルコード（ｍｕｔａｂｌｅ  ｃｏｄｅ）に追加される。
【図面の簡単な説明】
【００２７】
【図１】図１は、本発明にある一つの実施例で取り上げた集積回路の見取り図であり、その集積回路は、いくつかの実現すべき機能（「他の機能」ともいう）を有し、且つエラー修正機構を備え、認証を使いながら可能となるエラー修正をテストする機能を含む。
【図２】図２は、認証とエラー修正を組み合わせるプロセスを示す簡略化したフローチャートである。
【図３】図３は、図２の作動３０の流れのサンプルのプロセスを示した簡略化したフローチャートである。
【図４】図４は、メモリがページに基づく非揮発性メモリである場合、且つエラー修正および検証を行うためのプロセスを示す簡略化したフローチャートである。
【図５】図５は、図２の作動プロセス２２０を示す簡略化したフローチャートである。
【図６】図６は、図１にある集積回路の作動プロセスを示す簡略化したフローチャートである。
【図７】図７は、適切なエラー修正サンプルプロセスを示す簡略化したフローチャートであり、可能となるエラー修正のテストを含む。
【図８】図８は、図７の作動プロセス１００１２のサンプルプロセスを実行する為の簡略化したフローチャートである。
【図９】図９は、図１にあるメモリ区域３の見取り図であり、文字認証比較機能も示している。オーバロード（ｐａｙｌｏａｄ）および認証サイズは一例としてのみ表され、いかなる他の数値にすることもできる。
【図１０】図１０は、一部の実施例のスキャンおよびエラー修正機能の見取り図である。ビットを順次、または任意の適切な打診法に基づいてフリップさせることが可能だと理解することができる。
【図１１】図１１は、図１のメモリ区域３の見取り図であり、強力認証の比較機能も示している。
【図１２】図１２は、一部の実施例に基づいて、強力認証をトリガさせる期間を示す見取り図である。
【図１３】図１３はエラーテストするエラー修正の簡略化したフローチャートであり、通常は図１〜図１２にある例示システムによってエラーが検出された時にトリガされる。
【図１４】図１４ａは、ｎビットエラー文字にエラーテストする方法ついての簡略化したフローチャートである。例えば図１３にはフリップするｂビットの一部または全ビットを含み、Ｂまたそれより少ない推定修正をもたらし、且つエラーだと検証されたビットの修正する為のフリップに対して識別を試み、特定のビット配列をしきい値に基づく優先順位を提供する。図１４ａと図１４ｂは、比較的に不可能／可能成功（ｍｏｓｔ／ｌｅａｓｔ  ｌｉｋｅｌｙ  ｔｏ  ｓｕｃｃｅｒｅｄ）によって、順位付け／ランク化する。
【図１５】図１４ｂは、ｎビットエラー文字にエラーテストする方法ついての簡略化したフローチャートである。例えば図１３にはフリップするｂビットの一部または全ビットを含み、Ｂまたそれより少ない推定修正をもたらし、且つエラーだと検証されたビットの修正する為のフリップに対して識別を試み、特定のビット配列をしきい値に基づく優先順位を提供する。図１４ａと図１４ｂは、比較的に不可能／可能成功（ｍｏｓｔ／ｌｅａｓｔ  ｌｉｋｅｌｙ  ｔｏ  ｓｕｃｃｅｒｅｄ）によって、順位付け／ランク化する。
【図１６】図１５は、ビットエラー防止方法を示しており、周期的に予防的なメモリの修理を行う為に実行する。例えば、エラー発生しようとするビットを識別して、そのビットに対して予防的な処理を行う。
【図１７】図１６は、エラー修正方法及びメモリコンテンツの更新を示す簡略化したフローチャートである。
【図１８】図１７は、エラー修正為のエラーテストを簡略化したフローチャートであり、図１３に示す誤りのあるビットの降順（ｄｅｓｃｅｎｄｉｎｇ  ｏｒｄｅｒ）に基づいてビットフリップを行う。
【発明を実施するための形態】
【００２８】
したがって、本発明は少なくとも以下の実施例を提供する。
【００２９】
実施例１：
【００３０】
自己修正メモリシステム：当システムに集積回路、集積回路とそれに含まれるメモリ、メモリ内のコンテンツ認証機能およびエラー訂正機能を含む。メモリ内コンテンツ認証機能は、認証待ちのメモリのコンテンツと標準のコンテンツと比較し、且つ認証待ちのメモリのコンテンツが標準コンテンツだと認証されると、メモリのコンテンツ認証機能は「認証済（ａｕｔｈｅｎｔｉｃ）」を出力し、さもなければ「非認証（ｎｏｎ−ａｕｔｈｅｎｔｉｃ）」を出力する。エラー訂正機能は、少なくとも１つ可能な修正をメモリの少なくとも１つの文字エンティティに適用した上、可能な正確である文字エンティティを生成しながら、メモリのコンテンツ認証機能を喚起し、前記の可能な正確である文字エンティティに対応する。また、メモリのコンテンツ認証機能の出力が「認証済」となれば、メモリの中のエラーの文字エンティティを可能な正確な文字エンティティで置換する。したがって、認証に関する信頼度レベルから導き出す信頼度のレベルによるエラー修正が実現する。
【００３１】
本発明で説明される実施例について、認証待ちの対象となるコンテンツを標準コンテンツと比較することは、一般的に認証対象コンテンツと関係している派生内容と比較する、例えば簡単に言えば、元のコンテンツを標準コンテンツと直接に比較するのではなく、元のコンテンツと関係している派生内容と比較することだと理解して頂きたい。
【００３２】
実施例２：
【００３３】
上記実施例で述べた任意のシステムについて、システムが持つ認証機能は暗号化した強力認証の実行に応用可能である。
【００３４】
実施例３：
【００３５】
上記の実施例で述べた任意のシステムについて、その認証機能は文字認証の実行に応用可能である。
【００３６】
実施例４：
【００３７】
上記の実施例で述べた任意のシステムについて、そのエラー修正機能は、少なくとも１つ可能な修正をメモリの少なくとも１つの文字エンティティに適用した上、可能な正確である文字エンティティを生成する。正確な文字エンティティを果たす為に文字認証機能を喚起。メモリの文字認証機能の出力が「認証済」となれば、強力認証を喚起し、可能な正確文字に適用する。そして、強力認証が「認証済」と出力すれば、その可能な正確文字でメモリにあるエラー文字を置換する。したがって、強力認証に関する文字確認の信頼度レベルから導き出す信頼度のレベルによるエラー修正が実現する。
【００３８】
実施例５：
【００３９】
上記の実施例で述べた任意のシステムについて、文字認証をメモリの少なくとも１つの文字に加えることにより、エラー文字／文字を検出し、「非認証」の出力を生成したすべての文字はエラーと見なされ、「認証」の出力を生成するすべての文字は非エラーと見なされる。
【００４０】
実施例６：
【００４１】
上記の実施例で述べた任意のシステムについて、少なくとも１つの可能な修正は、エラー文字エンティティの中の少なくとも１ビットを０から１にするか、もしくは１から０にフリップすることを含む。
【００４２】
実施例７  ａ：
【００４３】
上記の実施例で述べた任意のシステムについて、可能な修正は複数のエラー文字に適用され、複数の可能な正確な文字を生成し、一度だけ強力認証を喚起して、修正されたメモリ画像またはブロックに適用する。修正されたメモリ画像またはブロックにおけるすべての複数の（重複表示）エラー文字の中で、それぞれ可能な正確な文字に置換される。複数回にわたって、それぞれ複数の可能性のある複数の正確な文字に複数の各メモリ画像またはブロックに強力認証を喚起するのではなく、メモリまたは修正時間もしくは両者のコストを節約する。
【００４４】
実施例７  ｂ：
【００４５】
上記の実施例で述べた任意のシステムについて、可能な修正は複数のエラー文字に適用され、複数の可能な正確な文字を生成し、一度だけ強力認証を喚起して、複数の可能な正確文字に適用する。複数回にわたって、それぞれ複数個の可能な正確文字のメモリ画像またはブロックに強力認証を喚起するのではなく、少なくともメモリと修正時間のどれかのコストを節約する。
【００４６】
実施例８：
【００４７】
上記の実施例で述べた任意のシステムについて、第１の可能とｐなる修正および第２の可能となる修正は少なくとも１つのエラー文字に適用され、且つその第１の可能となる修正でフリップされるエラー文字のうちの任意のビットは、第２の可能となる修正がエラー文字に適用される前にフリップされない為、第２の可能となる修正が同一エラー文字に適用する前、エラー文字の第一可能な修正を復元（ｕｎｄｏ）。
【００４８】
実施例９：
【００４９】
上記の実施例で述べた任意のシステムについて、可能となるすべての修正は少なくとも１つのエラー文字に適用される。
【００５０】
実施例１０：
【００５１】
上記の実施例で述べた任意のシステムについて、可能となる修正を適用するすべてのエラー文字は、修正不可能なエラー文字を含む、それはあらゆる可能となる修正を試行したが、依然に正しい文字認証をパスすることができず、修正不可（ｕｎｃｏｒｒｅｃｔａｂｌｅ）だと認識される。
【００５２】
実施例１１：
【００５３】
上記の実施例で述べた任意のシステムについて、可能となる修正のサブセットを判断するために少なくとも１つの打診法が採用する。その可能となる修正のサブセットは、あらゆる可能となる修正よりも少ない修正を含み、且つサブセットにある可能となる修正のみが少なくとも１つのエラー文字に適用され、サブセットにおいて可能となる修正がない場合であっても同じである。
【００５４】
打診法は候補となる修正（可能となる修正とも言う）のサブセットの生成に用いられ、また優先順位（ｐｒｉｏｒｉｔｉｚｅ）の候補の修正にも用いられることができ、所定された使用範囲の中で、より早く正確な修正方法を発見する可能性を高めた。不可能な修正法ついては、以降のテストでのみ試行する（例えば、可能となる修正が認証されない場合のみ）。
【００５５】
通常であれば、所定された優先かつ可能な修正を持つサブセットが認証されない場合、システムは残りの可能となる修正を実行しない（認証される可能性が低いと推定され、優先度が低いと認識される）。
【００５６】
実施例１２：
【００５７】
上記の実施例で述べた任意のシステムについて、認証待ちのメモリコンテンツと標準コンテンツを比較するのは、強化認証を時間ｔ  ２で保存され且つ所定のメモリにある承認待ちメモリコンテンツに適用した上で、計算認証値を生成し、この計算認証値及びメモリ結果を比較する。メモリ結果は期待認証値とも言い、期待承認地はその時間ｔ  ２の前に時間ｔ  １において、所定のメモリ位置におけるメモリコンテンツに強化承認を行うことで生成される。
【００５８】
実施例１３：
【００５９】
メモリコンテンツに対するエラー修正機能を提供する一つの方法である。メモリコンテンツは集積回路にあるターミナルとなるメモリ（非揮発性または揮発性であってもよい）に保存されている。少なくとも以下のプロセスを含む。
【００６０】
（ｂ）：ターゲットとなるメモリに保存されているメモリコンテンツのエラーを検出。
【００６１】
（ｃ）：エラーを修復する可能性のあるビットの組み合わせで置換し、少なくとも１つの即時署名マッチ（ｏｎ−ｔｈｅ−ｆｌｙ  ｓｉｇｎａｔｕｒｅ  ｍａｔｃｈ）を検索した上で、修復を定義且つ修復を成功させる強力認証である。
【００６２】
（ｄ）：少なくとも１つの即時署名のマッチングを見つけたら、完全認証を修復サジェスチョンの最終認証とする。
【００６３】
（ｅ）：電源を使用して、セキュリティコードでの修復リニューアルプログラムを中断する場合、コードを修正して最終検証をパスすることにより、ターゲットメモリのエラー修正を提供し、目標メモリ体を実験室に運ぶ必要がなくなる。
【００６４】
実施例１４：
【００６５】
上記の実施例で述べた任意の方法のうち、メモリの修復ニーズを示す出力指示を提供することも含まれている。例えば、メモリのコンテンツ修正が失敗したため、少なくとも一つのターゲットメモリを実験室に持ち込み、完全なる再プログラムを行う必要がある。
【００６６】
実施例１５：
【００６７】
上記の実施例で述べた任意のシステムのうち、出力指示を出す前に、エラーを有するビットを置換（ｓｉｎｇｌｅ−ｂｉｔ  ｐｅｒｍｕｔａｔｉｏｎ）するための捜査を実行する。
【００６８】
実施例１６：
【００６９】
上記の実施例で述べた任意の方法のうち、出力指示を出す前に、エラーが発生しているすべてのビットおよび双ビットの置換するための捜査を実行する。
【００７０】
実施例１７：
【００７１】
上記の実施例で述べた任意の方法のうち、出力指示を出す前に、エラーが発生したすべてビットの置換を探索し、１つの即時署名も発見されていない場合、エラー発生した少なくともいくつかの双ビットの置換を再度検索する。
【００７２】
実施例１８：
【００７３】
上記の実施例で述べた任意の方法のうち、検出前に一度の強力認証および即時の文字認証することによって、ターゲットのメモリに保存されているメモリのコンテンツを保護することも含まれる。
【００７４】
実施例１９：
【００７５】
上記の実施例で述べた任意の方法について、一度の強力認証の実行は、低アクティブ状態からの集積回路を起動させた直後に実行される強力認証を含む。
【００７６】
施例２０：
【００７７】
上記の実施例で述べた任意の方法について、一度の強力認証の実行は、集積回路が起動した直後に実行される強力認証を含む。
【００７８】
実施例２１：
【００７９】
上記の実施例で述べた任意の方法によると、一度の強力認証の実行は、集積回路がスリープ状態から離れた直後に実行される強力認証を含む。
【００８０】
実施例２２：
【００８１】
上記の実施例で述べた任意の方法によれば、メモリのコンテンツは、ターゲットのメモリに保存されているコードを含む。
【００８２】
実施例２３：
【００８３】
上記の実施例で述べた任意の方法によれば、エラー修正機能は少なくとも１つの可能となる修正をメモリもある少なくとも一つのエラー文字に適用し、エラー修正機能は可能となる正確の文字を生成し、そしてメモリコンテンツ認証機能を喚起して認証プロセスを実施。メモリのコンテンツ認証機能が「認証済」だと出力すれば、その可能となる正確な文字でメモリ内のエラー文字を代替する。
【００８４】
実施例２４：
【００８５】
上記の実施例で述べた任意の方法によれば、エラー修正機能は少なくとも１つの可能となる修正を少なくとも１つのエラー文字エンティティ認証に適用。エラー修正機能は正しい文字エンティティを生成し、正確な文字エンティティを果たす為にメモリのコンテンツ認証機能を喚起する。メモリのコンテンツ認証機能が「認証済」を出力した場合、その可能となる正確な文字でメモリ内のエラー文字を代替する。
【００８６】
実施例２５：
【００８７】
上記の実施例で述べた任意のシステムによれば、前の時間ｔ  １は、メモリのファームウェアのリニューアルが起こった時間である。
【００８８】
実施例２６：
【００８９】
指令を含むコンピュータープログラムをである、プロセッサがこの指令を実行するとき、指令はプロセッサに上記の１つまたは複数の方法のうちの１つまたは複数の作動を実行させる。
【００９０】
実施例２７：
【００９１】
少なくとも一つのプロセッサを含むシステムである、通常では、専用のハードウェアを組み合わせて作動する、そのシステムは本明細書で説明した１つまたは複数の方法のうちの一つまたは複数の作動を実行する。
【００９２】
実施例１０１：
【００９３】
メモリの少なくとも１つのビットエラーテストと優先順位を修正する方法。ロジックのビット基準を決定するために、少なくとも一つのしきい値でしきい電圧を使用。この方法は、複数のビット階層に対して、複数のビットのうちの第一ビットが第二ビットの前に階層化し、第二ビットが第一位よりもエラー発生にくい。また、階層順に沿って複数のビットを修正しようと試み、これによって複数の試行修正が定義され、比較的にエラー発生しにくい第二ビットを修正しようとする前に、第二のビットよりもエラーし得る第一のビットを修正する試みが行われる。  
【００９４】
実施例１０２：
【００９５】
上記で述べた方法では、メモリは単層式メモリユニット（ｓｉｎｇｌｅ−ｌｖｅｌ  ｃｅｌｌ）を含み、二進制（０／１）ストレージユニットとも呼ばれる。順序に従って修正を試みるプロセスは、階層順に複数のビットを順次フリップさせることにより、複数のビットのフリップを定義、かつフリップが比較的にエラーしにくいな第２のビットの前に、先に第二ビットよりエラーしやすい第１のビットをフリップさせる。
【００９６】
実施例１０３：
【００９７】
上記で述べた任意の実施例の方法には、少なくとも１ビットのビットエラーを検出することが含まれ、この検出は階層化をトリガし、順序に応じて試行も行う。
【００９８】
実施例１０４：
【００９９】
上記で述べた任意の実施例の方法には、メモリは一ウエハを含み、且つこのウェハは一ＮＶＭを含む。
【０１００】
実施例１０５：
【０１０１】
上記で述べた任意の実施例の方法には、複数個のビットは下記のイベントのうちの１つが発生するまでフリップし続ける。
【０１０２】
すべてのビットがフリップした。および
【０１０３】
複数のビットがフリップする中で、ビットフリップを試みたところ、エラーの修正に成功したと判断された。
【０１０４】
実施例１０６：
【０１０５】
上記で述べた任意の実施例の方法では、複数の試行修正は、下記のイベントのうちの１つが発生するまで継続される。
【０１０６】
すべてのビットに対して修正を試みた。および
【０１０７】
複数の試行修正のうちの一つは、エラーの修正に成功したと判断。
【０１０８】
実施例１０７：
【０１０９】
上記で述べた任意の実施例の方法では、メモリのウエハは本来の認証機能を有しており、順序に従って修正を試行していくこと（例えば、順序に従ってフリップする）は下記のイベントのうちの１つが発生するまで継続的に行われる。
【０１１０】
すべてのビットに対して修正を試み、例えば、すべてのビットがフリップしました。および
【０１１１】
従来の認証機能は、複数の試行修正（例えば、ビットフリップ）のうちの１つの試行修正（例えば、ビットフリップ）がエラーの修正に成功したと判断。
【０１１２】
実施例１０８：
【０１１３】
上記で述べた任意の実施例の方法では、階層化プロセスは、１から０に修正された回数が０から１に修正した回数よりも多い場合、１のビットを保存することに対してより高い修正優先権を割り当て、０のビットを保存することに対してより低い修正優先権を割り当てることを含む。
【０１１４】
実施例１０９：
【０１１５】
上記で述べた任意の実施例の方法では、階層化プロセスは、１から０に修正された回数が０から１に修正された回数よりも少ない場合、０のビットを保存することに対してより高い修正優先権を割り当て、１のビットを保存することに対してより低い修正優先権を割り当てることを含む。
【０１１６】
実施例１１０：
【０１１７】
上記で述べた任意の実施例の方法では、階層化プロセスは修正すべき各ビットの電圧読取距離（ａ  ｄｉｓｔａｎｃｅ  ｏｆ  ａ  ｖｏｌｔａｇｅ  ｒｅａｄｉｎｇ  ｏｆ  ｅａｃｈ  ｂｉｔ）を判断する。電圧読取距離は、変換してロジックビット値を読み出す電圧に対する電圧しきい値である。
【０１１８】
実施例１１１：
【０１１９】
上記で述べた任意の実施例の方法では、階層化プロセスはフリップ待ちのすべてビットの電圧読取距離を判定する。電圧読取距離は、変換してロジックビット値を読み出す電圧に対する電圧しきい値である。
【０１２０】
実施例１１２：
【０１２１】
上記で述べた任意の実施例の方法では、順序に従って修正を試みるプロセスは、第１の試行修正（ｆｉｒｓｔ  ａｔｔｅｍｐｔｅｄ  ｃｏｒｒｅｃｔｉｏｎ）に用いる距離が第２の試行修正に用いる距離よりも小さい場合に、複数の試行修正中の第２の試行修正を行う前に、複数の試行修正のうちの第１の試行を行うプロセスを含む。
【０１２２】
実施例１１３：
【０１２３】
上記で述べた任意の実施例の方法では、順序に従ってフリップするプロセスは、複数のビットフリップの試行するために使用される第１のビットフリップの距離が複数の試みビットフリップのために使用される第２のビットフリップの距離よりも小さい場合に、第２のビットフリップの前に、第１のビットフリップすることを含む。
【０１２４】
実施例１１４：
【０１２５】
上記で述べた任意の実施例の方法では、オフポイントとして電圧を変換してロジックビット値に読み出す少なくとも１つの電圧しきい値のうち、個別の電圧しきい値は、電圧読み値に最も近い値である。
【０１２６】
実施例１１５：
【０１２７】
上記で述べた任意の実施例の方法では、メモリは一ウエハを含み、上記した方法を実行するコードはウェハで実行されるファームウェアである。
【０１２８】
実施例１１６：
【０１２９】
上記で述べた任意の実施例の方法では、上記のウェハはマージン読み出し機能を有しており、このファームウェアはマージン読み出し機能を使用して、修正対象となるすべての修正待ちビットの電圧読み取りと個別電圧閾値の距離を判断する。
【０１３０】
実施例１１７：
【０１３１】
メモリの中の少なくとも１つビットエラーテストと優先順位修正をアレンジするもの、ロジックビット基準は少なくとも一つしきい値を用いた設定したしきい電圧値によって決定され、このシステムは以下を含む。
【０１３２】
１つの回路は、階層化（ｒａｎｋ）の複数のビットを使用して、複数のビットのうちの第１のビットが第２のビットの前に階層化される。その第２のビットが第１のビットと比較してエラー可能性は低くなる。および
【０１３３】
一つのコントローラは、階層化の順（ｏｒｄｅｒ  ｏｆ  ｔｈｅ  ｒａｎｋｉｎｇ）に従って複数のビットを修正しようとの試行により、複数の試行修正を定義する。それについては第二のビットを修正しようとする前に第一のビットを修正することを試行。その第一のビットは第二のビットに比べて比較的にエラーしやすい。
【０１３４】
以下は本発明にある名詞についての定義説明である。
【０１３５】
アクセス制御（Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）：任意の既存のアクセス制御機能を指しており、通常はプロセッサとメモリとの間のインターフェースと結合し、ハードウェアおよびファームウェアを含む仮想ロジックのエンティティとして実施することができる。
【０１３６】
ターゲットメモリ（Ｔａｒｇｅｔ  Ｍｅｍｏｒｙ）：集積回路（ＩＣとも呼ばれる）内の任意のメモリレイを含むことができ、通常ではメモリレイは使用中および不活動なメモリのページングを含む。現在未使用のページングは保留のページングと見なされる。
【０１３７】
保留のページングを使用する場合で、例えば、メモリページングを更新する際に非常に短いバッファとして使用、その方法は通常だと保留ページングに含まれているコンテンツが書き込みの内容であることを検証する（例えば、保留ページングの内容と保留ページングにコピーされたデータとを即時に比較することによって、両者が同じであることを保証する）。そうでない場合は、保留ページングの内容は消去され、再度の書き込みによって保留ページに書き換えるべきである。保留ページングに書き込まれた後、直ちに保留ページングを読み取りの検証を実施して、書き込みが成功したことを確認する。これにより保留ページングまたは空白ページングにデータが正しく保存される。例えば、完全に書き込むしたデータと一致することを含む。
【０１３８】
強力認証（Ｓｔｒｏｎｇ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）：メモリコンテンツを検証するためのアルゴリズムまたはプログラムを含むことができる。大型コードまたは継続的なデータセグメントでは、ダイジェスト／セキュリティ鍵に基づくハッシュ（ＨＡＳＨ）関数を採用可能、例えば、金鍵ハイブリッドメッセージ認証コード（ＨＭＡＣ）またはパス文字に基づくメッセージ認証コード（ＣＭＡＣ）が採用されてもよい。
【０１３９】
強力認証に使用される認証コードは、ＳＨＡ（ＳＨＡ−１、ＳＨＡ−２）やＨＭＡＣなどのセキュリティハッシュ関数に基づくことができる、ｈｔｔｐｓ：／ｅｎ．ｗｉｋｉｐｅｄｉａ．ｏｒｇ／ｗｉｋｉ／Ｓｅｃｕｒｅｇａ  Ａｌｇｏｒｉｔｈｍｓをご参照。
【０１４０】
通常では、本明細書の「強力認証」は単一の数値を生成し、その数値は、保護すべき全体内容の部分か、全体のデータを表す画像または全体の画像ブロック（例えば、コードに限定されない）を代表し、検証待ちのすべきデータの一部または全体の画像またはデータの画像ブロックの内容の完備性を確保する。特定の対象行また対象列のみを検証する画像ブロックしている既存の２  Ｄ水平／垂直エラー補正方式とは異なる。
【０１４１】
通常では、強力認証は文字認証よりも高い信頼度でメモリコンテンツを認証する。したがって、本明細書で使用される「強力認証」は、より小さいダイジェスト（ここで述べた「文字認証」アルゴリズムによって生成されるダイジェスト）を生成するための任意のアルゴリズムまたは任意のメッセージ認証コードスキームを含むことが指しており、したがって、文字認証に対して、本明細書で使用される「強力認証」は不可逆だと見なし、つまりダイジェストから元文書を再生成することが不可能である。
【０１４２】
通常、メモリコンテンツ（認証によって識別できる）内の特定データの文字データでは、エラーを訂正または修正した後、修正したデータとデータを代用する強力認証及び強力認証した後、すべてのメモリ体コンテンツに対する強力認証は再計算され、再計算された結果は、保存されたあらかじめ計算された強力認証またはダイジェストと比較される。
【０１４３】
通常、強力認証は所定のデータ本体に適用される（そのうちの少なくとも１つのエラー文字は、それぞれ提案された正しい文字に置換される）。例えば、メモリ全体の画像またはその一部だけに加えられ、これは再計算された強力認証と比較するためのデータ本体に依存する。例えば、再計算される強力認証と比較するための予め計算された強力認証データが、メモリ全体の画像（通常、誤った文字を提案された正しい文字元に置き換える）上、あるいはメモリ体ブロックのみで予め計算されているかに依存するもの。
【０１４４】
再計算した強力認証データと予め計算した強力認証データ（所望の強力認証データともいう）が完全に等しい場合、通常は強力認証を「成功的（ｓｕｃｃｅｓｓｆｕｌ）」とみなす。
【０１４５】
「強力検証」はファームウェアがクエストした時に発生する可能性がある。ファームウェアのクエストは通常アプリケーションプログラムシステムからきたもの、つまり集積回路のより高いレベルのシステムを利用して統合したものです（第１図参照）。代替的にまたは追加的に、所定のＩＣ（集積回路）で実行されるアプリケーションファームウェアのクエストで「強力認証」が実行される。所定のＩＣにはエラーを修正しようとするメモリコンテンツを含む。通常では、上記のクエストを受信すると、いくつかの他のＩＣまたはシステム要素で識別された攻撃などのイベントによって引き起こされるあるトリガ（例えば、第１２図による）に応答して、自身を再認証することができる。したがって、より高いレベルのシステムは、本明細書で説明したような機能（例えば、強力認証）の要求を実行するための可能なソースであり、ＩＣ内のファームウェアおよびハードウェア  のイベントもこのようにすることができる。
【０１４６】
文字（ｗｏｒｄ）：メモリよりもはるかに小さい任意のデータのセグメントを含むことができる。数千に上る文字のメモリレイにおける１６ビットのデータか、１２８ビットのデータ、または２５６ビットのデータ、もしくはそれより以上のもの。通常では、文字はメモリから検索された最小データのセグメントであり、自身の認証コードを持っている。
【０１４７】
文字認証（Ｗｏｒｄ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）は、署名マッチングとも呼ばれる。認証されるべき「文字」のダイジェスト（ｄｉｇｅｓｔ  ｏｆ  ｔｈｅ「ｗｏｒｄ」ｂｅｉｎｇ  ａｕｔｈｅｎｔｉｃａｔｅｄ）を含むことができる。
【０１４８】
即時署名マッチング（ｏｎ−ｔｈｅ−ｆｌｙ  ｓｉｇｎａｔｕｒｅ  ｍａｔｃｈ）：字元を読み取るたびに、文字認証を同時に読み出す。通常では、ビット構造の長さはデータの長さと認証の長さを合計したものである。また、読み取った文字に基づいて認証を再計算し、計算した認証データをその読み取った文字の認証と比較する。再計算された認証データなどがメモリから読み取った認証データで同じで場合は、マッチングと判断される。
【０１４９】
全認証（Ｏｖｅｒａｌｌ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ）：システムが管理するメモリのすべてのコンテンツを作動させる強力認証を含むことができる。通常、どんな時でも、特にデータ修正した後に、コンテンツのダイジェストが予め計算されたデータと同じであれば、再認証する時には現在のコンテンツは当時のあらかじめ計算されたものと同じと見なすことができる。したがって、仮にデータ修正後、直ちに実行され、且つ強力認証が成功した場合、提案された訂正また修復が正しいと考え、認証済または確認済とのこと。
【０１５０】
ダイジェスト（ｄｉｇｅｓｔ）：コンテンツからハッシュ（ｈａｓｈ）を生成するためのアルゴリズム（例えば、強力認証）を含むことができ、このハッシュは認証待ちの対象コンテンツの完備性を確認することができる。例えば、コンテンツが変更されたかどうか、または（制御されたアクセス権限を持つメモリについて）未許可の変更または改ざんがされたかどうかを確認する。したがって、ダイジェストとハッシュは、本明細書では一般的に互換して使用することができ、ともに名詞または動詞として使用可能。
【０１５１】
ＨＭＡＣアルゴリズム：通常はメッセージ認証コード（ｍｅｓｓａｇｅ  ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ，  ＭＡＣ）アルゴリズムである。それは内部でハッシュ（暗号化ではなく）を使用してＭＡＣを生成する。
【０１５２】
即時（ｏｎ−ｔｈｅ−ｆｌｙ）：例えば、他の進行中のプログラムと同時に進行する。例えば、認証の最中では認証待ちのデータを読み出しながらダイジェストを計算し、そのダイジェストを期待値と比較したり、または（コンテンツの）書込み作動中にダイジェストを計算してメモリに書き込めたりすることができる。
【０１５３】
例えば、以下の特許ファイルには、即時暗号化、解読と認証が記述したされており、その開示内容は引用してここに掲載：ｈｔｔｐｓ：／ｐａｔｅｎｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ＵＳ  ９５２５５４６  Ｂ  ２／ｅｎ。
【０１５４】
エラー検証（Ｅｒｒｅｒ  Ｖｅｒｉｆｔｉｃａｔｉｏｎ）：時間ｔ  ２で算出されたメモリの「強力認証データ」と時間ｔ  ２の前に時間ｔ  １で予め計算／保存（期待的ともいう）している同じメモリ領域にある「強力認証データ」との間にマッチングあるいマッチングしない（同じかどうか）を判断すること含む。
【０１５５】
通常では、予め計算された強力認証データはメモリ空間またはアレイ（本明細書の実施例を使用して、その完備性の保護）のコンテンツ全体に対する強力認証のダイジェストを含む。
【０１５６】
スタック式フラッシュメモリ（Ｓｔｏｃｅｄ  ｆｌａｓｈ）：１つのウエハを含むことができ、そのウエハは「垂直」または「３  Ｄ」ウエハに分類され、複数（時には数十層）のメモリ層または結晶粒を積層することによって高い密度の保存を行い、ビットコストを低減することができる。垂直３  ｄスタック技術（ｂｉｔ  ｃｏｓｔ  ｓｃａｌｉｎｇ，ＢｉＣＳ）または１つの穿孔およびプラグ・プロセス（ｐｕｎｈ  ａｎｄ  ｐｌｕｇ  ｐｒｏｃｅｓｓ）が使用されてもよい。本明細書の実施例は通常、メモリに応用する、そのメモリにスタックフラッシュメモリおよび他のフラッシュメモリ／非揮発メモリ（ＮＶＭ）技術を含むが、これらに限定されないことを理解して頂きたい。
【０１５７】
オーバヘッド（Ｏｖｅｒｈｅａｄ）：メモリ容量に含まれる冗長は、通常は不利であり、例えば、結晶粒面積および製品コストの少なくとも一方にとって。例えば、エラー修正コード（ＥＣＣ）を利用してエラー修正を実施すると、一般的にＥＣＣのＸビットをデータ／検証メッセージのＹビットに追加することを意味し、これはエラー修正に使用されるオーバヘッドまたは余分なメモリ容量（Ｙ／Ｘ）ｘ  １００％に変換される。
【０１５８】
文字エンティティ（Ｗｏｒｄ  ｅｎｔｉｔｙ）：メモリに保存されている関連文字のデータを含み、文字そのもの（文字の位元ともいう）を含み、文字に関する文字検証データ（検証ビットともいう）を加えることができる。文字認証は本明細書では文字の「相応の」文字認証データと呼ぶ。いくつかの実施例によれば、文字部分のビットおよび認証部分のビットはいずれにスキャンまたはフリップされるが、文字については通常計算が実行され、認証比較については明細書で例にしたすべてが実行される。
【０１５９】
本明細書では、ＥＣＣ（エラー修正コードを示す）、ＦＷ（ファームウェアを表す）、ＮＶＭ（非揮発性メモリを表す）、ＡＳＩＣ（特殊応用集積回路を示す）、ＤＳＰ（デジタル信号処理）、ＨＭＡＣ（金鍵ハイブリッド情報認証コードを示す）、ＩＣ（集積回路を表す）、およびＨＷ（ハードウェアを表す）の略語を採用する。
【０１６０】
上記の実施例および他の実施例について、次のセクションで詳細に説明する。本文または図式に登場するいかなる商標もその所有者の財産であり、本明細書に登場する目的は本発明の実施方法の一例を説明または説明するためだけである。
【０１６１】
説明書全体の議論において、別途に具体的な説明をしない限り、以下の議論にて明らかであることは、例えば「処理」、「計算」、「推定」、「選択」、「順位つけ」、「ランク付け」、「判断」、「生成」、「再評価」、「分類」、「双整合（ｓｔｅｒｅｏ−ｍａｔｃｈｉｎｇ）」、「一時保存」、「偵察」、「結合」、「重複」および「獲得」、またはこれらと似た用語は、作動か転換することあるいはその組み合わせを指しており、その対象は実際のデータがある少なくとも一つのコンピュータ、コンピュータシステム、プロセッサ、または類似の電子計算デバイスの作動、プログラムまたはそれらの組み合わせ（例えばコンピュータシステムの一時的なメモリ、メモリとその組合せ、または他のこれらに類似しているもの）。メッセージストック、伝送、または表示デバイス内の電子数量である。用語「コンピュータ」は、一般的にデータ処理能力を有するあらゆる種類の電子機器を対象すると解釈されるべきであり、パーソナルコンピュータ、サービスサーバ、組み込みコア、コンピュータシステム、通信機器、プロセッサ（例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、フィールドプログラマブルロジックゲートアレイ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、ＦＰＧＡ）、集積回路（ＡＳＩＣ）等々と含む。
【０１６２】
本明細書でそれぞれ示した要素は必ずしも異なる構成要素ではなく、代替的に同じ構造であってもよい。あるべき要素または特徴となる記述したは、（ａ）要素または特徴として実施例、（ｂ）要素または特徴となるものいが無い実施例、および（ｃ）要素または特徴は、限定的にその中に存在して実施例を指すことができる。例えば、ユーザは要素または特徴の存在を構成または選択することができる。
【０１６３】
本発明の範疇に含まれる方法およびシステムは、機能ブロックの一部（例えば、任意の適切なサブセット）または全部は任意の適切な順序に基づいて、図に示すように、具体的に説明された実施例を例として表示することができる。
【０１６４】
本明細書で説明された計算は、機能的またはロジック的な構成要素が様々な形態で実施されてもよく、例えば、ハードウェア回路は既存のＶＬＳＩ回路、ロジックゲートアレイまたはプログラマブルハードウェアデバイスに限定されない。例えば、ＦＰＧＡに限定されず、またはソフトウェアコードとして、そのソフトウェアプログラムコードは、少なくとも１つの有形または無形のコンピュータ読み取り可能な媒体に保存される。且つ、少なくとも１つのプロセッサまたはその任意の適切な組み合わせによって実行される。
【０１６５】
特定の機能要素は、特定のソフトウェアコードシーケンスまたは複数のこのようなソフトウェアコードから構成されてもよい。これらのソフトウェアコードは共同に説明して来た機能要素が持つ作用，働きまたは利用する。例えば、構成要素は複数のコードシーケンス上に分布することができ、オブジェクト（ｏｂｊｅｃｔｓ）、手続き（ｐｒｏｃｅｄｕｒｅｓ）、機能（ｆｕｎｃｔｉｏｎｓ）、常型（ｒｏｕｔｉｎｅｓ）、およびプログラム（ｐｒｏｇｒａｍｓ）に限定されず、通常の協同作動す一部のコンピュータファイルをトリガできる。
【０１６６】
適切であれば、本明細書で説明する任意のロジック機能は、適時にアプリケーションとして応用されることができる、ＡＳＩＣまたはＤＳＰまたはそれらの任意の適切な組み合わせに限定されないような任意の適切なアーキテクチャオプションを採用できる。実際には、本明細書で言及した任意のハードウエア構成要素は、ウェハのような１つ以上のハードウエアデバイスを含んでもよく、それは同じ場所または互いの位置が離れていてもよい。
（実施の方法）
【０１６７】
ＩＣの製造メーカーは、集積回路のメモリコンテンツを保護したいと希望している。
【０１６８】
本明細書の実施例は、多くの異なる技術のメモリに適用され得るので、本明細書で使用される用語「フラッシュメモリ」は、一例としてのみ使用。
【０１６９】
本発明は、ＩＣにおけるメモリのコンテンツの完備性を確保するためのシステムを詳細に説明する。通常では、このようなメモリへのアクセスは制御される、ダイジェストは制限され且つ許可されたメモリの更新に署名するために使用され得る。したがって、アクセス制御されていないメモリ内の任意の変更は、望ましくないエラーであり、悪意または過度の実質あるいは電気的障害であっても該当する（例えば、実質的なメモリ自身の故障）。本論文のシステムはエラーの可能となる修正をテストする作動ができ、集積回路が埋め込まれたコンピュータまたは他の製品の「乱序」時間を減らす。一般的に、（１つまたは一つ以上のレベル）認証機能は、その集積回路は通常いかなる目的として、可能となる修正を検証または承認する為に使用、フォント認証を使用してエラーを発見、そして初期段階にて提案の修正を検証し、強力認証を使用して、提案された修正を最終的に検証するように。
【０１７０】
一部の実施例は集積回路において、エラー検出および修復（エラー修正とも呼ぶ）機能を提供し、これは図１に示すように、集積回路によって提供されるか、または既存のＩＣ上にソフトウェア１８を保存するような、既存の集積回路を修正することによって提供される。ソフトウェア１８は、同じＩＣのもう一つの通常独立したメモリ空間に保存ができ、そのＩＣはシステムが保護しようとするメモリ空間へのアクセス許可を有し、通常は、認証を実行するように作動可能であり、例えば、少なくとも文字認証と強力認証の一つを作動し、本明細書で述べたようなエラー修正および検証の少なくとも１つを完了させるためである。
【０１７１】
一部の実施例は、集積回路にエラー検出および修復機能を提供する。その機能は検出（例えば、既存の認証に基づく）を含み、メモリコンテンツが変更されたイベントを識別し、これらのイベントから修復することにより、ＩＣ（及びこのＩＣが埋め込まれたデバイス、例えばコンピュータ）が通常通りに作動して、デバイスの端末使用者の負担を最小限に抑える。これは￥非常に有利義なことで、これはいくつかのイベント（例えば、今日端末使用者が処理しているコンピュータを引き起こす）の「故障」、且つ端末使用者はコンピュータを実験室に持ち込んで修理しなければならないだとすると、本明細書に記述したいくつかの実施例によればこのようなことする必要がなくなる。その理由は、メモリ故障が発生した要素は自分自身で修正ができ、システムの安全性をキープ。
【０１７２】
エラー補正機能は、ハードウェアとファームウェア間で任意の適切な組み合わせで実行することができる。通常では、メモリは認証および文字認証の構造を満たすができる。通常では、リアルタイムの文字認証はハードウェアで実施される（メモリを読み出すとき）。強力認証は通常ファームウェアで実施され、ハードウェアを適切な暗号化することでプログラムを加速する。ファームウェアまたはハードウェアにおいて、ビットフリップ（ｂｉｔ  ｆｌｉｐｐｉｎｇ）および整合性検査（ｃｏｎｓｉｓｔｅｎｃｙ  ｃｈｅｃｋ）を実施することができる。例えば、これはＮＶＭ消去や書き換えにおいてたまに発生することで、複雑な作動を考慮して、エラーを修正する為のメモリコンテンツの更新はファームウェアによって行われる。
【０１７３】
図１のシステムは、一部の実施例にある集積回路を表示し、より高いランクであるシステム１６に組み込むことができる。図１のより高いランクのシステム１６は、本明細書で説明する機能（例えば、認証、強力認証）のクエストの可能となるソースである。代替または付随的に、より高いランクのシステムは、アクセスパスとして図１中のメモリレイ２を介して、その元のコンテンツ（例えば、メモリレイ２に保存されたコード）を合理的に取得したり、またはその後に更新されたり、すなわちメモリレイのコンテンツが異なるコンテンツに置き換えられたりすることができる。
【０１７４】
アクセス制御機能（例えば、第１図に示すように）では、一般的にとハードウェアとファームウェアの組み合わせである。通常では、どのような保存エリアがアクセスできるか否かを定め、ファームウェアが一部の特権階級でメモリのあるハードウェアにアクセスすることができまる。したがって、ファームウェアがこうするとの許可を有していることで「説得」することにより、メモリのコンテンツを更新。この場合、ファームウェアがロジックゲートを開けとメモリを更新する。
【０１７５】
可能となるエラー修正をテストする機能は、例えば、第７図の方法によれば、単独の状態マシン（ｓｔａｔｅ  ｍａｃｈｉｎｅ）を含んでもよく、その状態マシンは、ハードウェアまたはファームウェアで実施することができる（第１図のハードウェア６およびファームウェア７の少なくとも１つを参照）。同様に、エラー修正機能のロジックは、ハードウェアとファームウェアの任意の適切な組み合わせにも埋め込むことができる。
【０１７６】
図１、図９、図１０および図１１の実施例のすべてまたは任意のサブセットは図１のシステムまたは説明されたブロックの任意のサブセットを提供してもよい。前の図２で説明したすべてまたは任意のサブフローに関連して、および／またはそれらに関連する。
【０１７７】
図２は、認証機能とエラー修正を組み合わせたスキームまたは方法を説明し、メモリの負担においては経済的であること。既に知られているのＥＣＣは保各データを保存するＥＣＣビットのメモリ容量を必要とするが、本明細書の実施例は現有の設計に存在しているあるいは新規設計に提供される即時認証を利用して、コードの使用あるい保存についてエラー検出または修正する。そして、セキュリティレベルを損なうことなく、エラー修正に使用する。
【０１７８】
通常ではセキュリティレベルは影響されない、その原因はＥＣＣを使用する時、攻撃者が同時にデータとＥＣＣを改ざんし、データとＥＣＣが互いにマッチングするように改ざんされる可能性があるため、エラーを即時に認識できず、文字認証あるいは強力認証を実行する場合のみ、システムがエラーを認識することができる。
【０１７９】
用語「負担」は、本明細書では認証か、エラー修正または任意の適切な位置にあるその他のメモリ管理プログラムなどの含むことによって引き起こされるメモリ需要だと理解して頂きたい。例えば、文字認証（または文字レベル認証ともいう）または文字ＥＣＣでは、より広い文字サイズを使用してメモリを生成することができ、したがって、認証／ＥＣＣは文字と隣接して保存されることができ、認証／ＥＣＣのビットもアクセスされるようになる。また、ハードウェアシステムでは、実際の負荷（その認証／ＥＣＣビットと相応）を読み取るとともに、効果的により大きな文字の長さを許容する為、一つ付属のメモリ要素を読み取る。その後、メモリ全体の文字の長さを実際の負荷に専用することが可能となり、その実際の負荷の認証／ＥＣＣビットを他の位置に保存することができる。
【０１８０】
図が示すように、図２の方法は、以下の作動のすべてまたは適切な並べ替えた任意のサブセットを含むことができる。
【０１８１】
作動ステップ１０：集積回路を提供、そのメモリコンテンツ、例としてメモリに保存されたコードは、「強力認証」および「文字認証」によって保護される。
【０１８２】
「強力認証」を起動、（例えば、大きなコードセグメントにてＨＭＡＣまたはＣＭＡＣを実行）。たとえば、コールドフラッシュメモリコンテンツの置換に対抗するために使用。
【０１８３】
即時「文字認証」（例えば、１２８ビット負荷＋１６ビット認証）。例えば、ホットフラッシュメモリコンテンツの置換に対抗するため使用される。例えば、フラッシュメモリからコードに直接に実行するなど。
【０１８４】
即時暗号化、復号及び認証は、以下の特許文献に記述したされており、その開示内容は引用によってここに合併される。ｈｔｔｐｓ：／ｐａｔｅｎｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ＵＳ  ９５２５５４６  Ｂ  ２／ｅｎ。
【０１８５】
作動ステップ２０：リアルタイムの文字認証が失敗するたびに、（例えば、稼働中に）集積回路はストップし（例えば、次の起動まで停止）、または自動に再起動する。例えば、保存スペースには保護すべきコードがあると仮定。そうすると、メモリから読み取りを行うと、一般的には、ＩＣのプロセッサがメモリスペースからコードを採取していることを意味し、これは逆に、通常では文字認証が失敗したと認識されると、メインプロセッサは変更されたコードのみを取り込むことを意味する。この時、プロセッサは変更されたコードの実行を防止するために一時停止し、通常では修復を開始する必要がある。修復する作動は次を含む：例えば、ＲＯＭ内のコードのように、１００％の安全だと認識している別のコードに切り替えたり、またはＲＯＭからリセットしたりすることで、ソフトウェアとハードウェアのどちらによっても、本明細書で説明したようなエラー修正および検証の少なくとも１つをトリガすることができる。
【０１８６】
作動ステップ３０：次回の起動時（または上記の例による）、すべての「文字認証」は、「強力認証」計算の一部として検査されており、その「強力認証」計算はメモリコンテンツを保護するために使用されている。起動認証中に「文字認証」が失敗した場合（稼働時とは逆）、エラー検出となり、集積回路はそのメモリ内のコンテンツにて発見されたエラーを修正しようとする、例えば図３の作動１４０から作動１７０のすべてまたは任意のサブセット。
【０１８７】
作動ステップ８０：メモリがコード実行メモリ（ｃｏｄｅ  ｅｘｅｃｕｔｉｏｎ  ｍｅｍｏｒｙ）である場合、エラー修正（例えば、図３の作動１４０から作動１７０のすべてまたは任意のサブセットを実行する）を行うと、修正されたコードが解析して導き出され、適切な電源中断安全コード修復更新フローが実行される。コードの修正が成功すれば、プロセッサは稼働を復帰する、正常作動とも呼ばれる。
【０１８８】
図が示すように、図３の方法は、以下の作動のすべてまたは適切な順序付けの任意のサブセットを含むことができる。
【０１８９】
作動ステップ１４０：破損した文字を検査し（エラーも文字を発見、例えば、検証が開始されている間に、「字元検証」に失敗したため）、すべてのビットを置換し（例えば、説明した実施例では１２８＋１６ビットを置換する）、マッチングを探索する。強調するのは、データと認証の間に任意の適切な比率がある、１２８ビットと１６ビットのパラメータはただ説明する為である。
【０１９０】
専用ＨＷまたはＳＷは置換を迅速にスキャンすることができる。例えば、メモリ上またはメソスコープの一部として、メモリから繰り返して読み書きすることなくなる。フラッシュメモリのように。
【０１９１】
一部の実施形態によれば、専用のバッファは、破損した文字のデータ構造を保存することができ、それはビットに従って破損した文字対して作動することができる。次に、専用のファームウェアコードまたはハードウェアステートマシンを使用して、データ構造の配列をスキャンし、一度に一つのビットをフリップさせる（例えば、第１０図の「１ビットをフリップ」のステップを参照）またはそれ以上をフリップ。毎回置換した後、その時に作動またはビットフリップしたデータの構造について文字認証計算を行う。通常では、置換のスキャンはファームウェアが実行、あるいは代替的に、専用のハードウェアによって実行される。
【０１９２】
作動ステップ１５０：マッチングを確認したら、修正または訂正された（例えば、エラーしたコンテンツのサジェスチョン修正）エラーデータまたはコンテンツが「強力認証」計算の一部としてダイジェスト。認証アルゴリズムと修正されるビット数によっては、一つ以上のマッチングが見つかるかもしれない。この場合には、すべてのビット組み合わせの置換（ビットタイプとも称する）を試み、正確の「強力認証」を生成する置換を採用することができる。正確とは、通常で修正されたコードに対して「強力認証」を行った結果は、メモリの元コンテンツに対して強力認証を行った事前計算の結果と同じであることを意味する。
【０１９３】
例えば、単一のビットエラーに対して、その方法は、第１のビットをフリップさせること、例えば、ビット０。そして、マッチングが見つかるまで後続のビットの認証を検査する、例えば、ビット１、ビット２など。２つのビットエラーについては、一回でペアのビット（ａ  ｐａｉｒ  ｏｆ  ｂｉｔｓ）をフリップさせことができる、通常ではペアである２つのビットのそれぞれが可能となる数値を考慮する。
【０１９４】
作動ステップ１６０：オプションとして、複数のエラーの修正を試みることができ、例えば、再検索によって、今回のエラーに対する少なくとも一部のダブルビットの置換することが可能。１つ以上のエラー（１つ以上のビットを含む）は修正可能であるが、一部の実施例によれば、複数個のビットに関するエラーは１ビットエラーの計算より複雑で、約Ｘ  ＾２／２（例えば、１４４＾２／２）回の検査が必要であるので、修正できないことを理解して頂きたい。
【０１９５】
作動ステップ１７０：図１が示すように、エラーを修正できない場合は、通常では端末ユーザにアラームを提供する。例えば、高レベルのソフトウェアを介して。
【０１９６】
図４は、メモリがページに基づく非揮発性メモリ（ｐａｇｅ−ｂａｓｅｄ  ｎｏｎｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ）である場合に、エラー修正及び検証を行う方法である。通常では、このようなメモリでは、消去の作動はページ全体（またはメモリ全体）を消去することとなる。したがって、修正する必要があるエラーが発見された時は、一般的にページ調整を実行して修正が行えるようにする。例えば、修正する際に、修正データがあるページを保留ページにコピーする。より一般的には、本発明はメモリの使用制限の下による修正だと理解できる。
【０１９７】
任意の適切な時間で図４の方法を実行できる、例えば、エラーが検出されたときに直ちに（以下の作動ステップ２２０）、または次回のＩＣが起動するときに（以下の作動ステップ２３０）。
【０１９８】
図４が示すように、図４の方法は以下の作動の全部または適切な順序付けした任意のサブセットを含むことができる。
【０１９９】
作動ステップ２１０：修正待ちのフラッシュメモリページを識別する。１ページ以上の修正が必要である場合、修正が必要な文字（位置＋データ）は非揮発性メモリに保留される（または文字の指示）。次に、作動２２０を実行して直ちに修正する、または作動２３０を実行して、次回の起動後に修正。
【０２００】
作動ステップ２２０：修正待ちの各ページを修正、例えば、各ページに対して図５が示す作動ステップ３１０から作動ステップ３５０の全てを実行する。
【０２０１】
作動ステップ２３０：起動中に、フラッシュメモリコード認証を実行する前に、ブートコード（ｂｏｏｔ  ｃｏｄｅ）は利用可能なページ（例えば、利用可と標記された）があるか否かを検査。この場合、続けて起動する前にブートコードは作動テップ２３１０から作動ステップ２３５０までの全部またはその任意のサブセットを完了することができる。そうでなければ、一部のより高いランクのファームウェアは「ゴミ収集（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ）」を実行することができ、例えば、メモリコンテンツを圧縮して最小の可能なメモリ空間を占有することで、少なくとも１ページを解放して一時的なエラー修正に用いる。
【０２０２】
図５が示すように、図５の方法は、以下の作動の全部または適切な順序付けした任意のサブセットを含むことができる。
【０２０３】
作動ステップ３１０：保留の予め定義されたフラッシュメモリページにフラッシュメモリページの位置および修正されたデータ（コード）を書き込み、且つ正しく書き込まれているかを検証する。
【０２０４】
作動ステップ３２０：保留ページに１ビットを設置し、それが有効情報を有するページを持つその他のファームウェアのような、もしくは使用中且つ消去すべきでないファームウェアを指すように設置。本発明のシステムは、例えば中断された場合（例えば、使用者が電源を切ってから作動を再開しようとする場合）でもこのビットは有効的である。
【０２０５】
作動ステップ３３０：元のフラッシュメモリページを消去する。例えば、第４図の作動ステップ２１０において、エラーが発見されたページ。
【０２０６】
作動ステップ３４０：保留されたフラッシュメモリページの修正されたデータから元のフラッシュメモリページを更新し、正しく書き込まれているかを検証する。
【０２０７】
作動ステップ３５０：保留されたページを削除して、将来に他のページでのエラーを修正することを可能にする。
【０２０８】
前にある図２のエラー検出および修正方法をトリガする変化型は、以下を含むことができる。
【０２０９】
（Ｉ）即時（Ｏｎ−ｔｈｅ−ｆｌｙ）：メモリ検査で直ちに文字認証が失敗とリスポンス：対象のメモリから読み出した時に文字認証がマッチングしていないことが発見された場合、プロセッサの次に実行するシーケンスの前に上記のプログラムを実行する。
【０２１０】
例を挙げて説明すると、メモリから来ているコードが実行されている際に、且つ既にコードを抽出する段階で文字認証に失敗したと識別されると、通常ではコードの実行は停止され、例えばメモリスペース全体またはアレイ全体をスキャンして、失敗またはエラーを検索する。その後、コードの実行が一時停止され、且つプロセッサの実行シーケンスで次に実行する作動を実行するか、コードの最初から実行を再開することができる。データがコードではない場合、データの読み込み中にエラー表示が発生する可能性がある。この場合、プロセッサは再度に停止し、メモリのスキャン／修正／検証をトリガする可能性がある。
【０２１１】
（ＩＩ）起動（Ｐｏｗｅｒ−ｕｐ）：各集積回路が低活動状態から起動するイベントにトリガされ、例えば、起動またはスリープ状態から活動状態に変更された後に、強力認証を再計算し、予め計算した強力認証データと比較して、且つ再計算された及び予め計算された強力認証との間に不一致が生じた場合に、上記のエラー修正機構を有効にする。
【０２１２】
（ＩＩＩ）定期的なデータの整理（Ｐｅｒｉｏｄｉｃ  ａｋａ  ｓｃｒｕｂｂｉｎｇ）：時には、強力認証を再計算し、再計算した結果を予め計算した強力認証と比較し、再計算した強力認証が予め計算された強力認証と一致しない場合には、本明細書で説明したメモリのエラー修正プログラムをトリガすることができる。例えば、一部のプログラミング可のタイマを使用してトリガすることができ、プログラミング可のタイマは上記の作動を実行するための時間指示を示す。このメカニズムは通常では一部の損失をもたらす。集積回路の正常な作動は干渉と中断されるが、より良い保護を得られる。
【０２１３】
（ＩＶ）初期化（Ｉｎｉｔｉａｔｅｄ）：外部のイベントによってトリガされ、例えば、デバイス（集積回路とも呼ばれる）がハッカー攻撃または他の一部の機能にエラーを引き起こす行為が識別された場合（例えば、ＩＣに存在するハードウェアまたはファームウェアのハッカー攻撃を検出機能を使用）、その時は再認証を計算し、予め計算された強力認証と比較して、再計算された強力認証データおよび予め計算されたものと比較する。計算された強力認証データの間に不一致があれば、本明細書で説明したメモリエラーの修正プログラムを起動することができる。
【０２１４】
（Ｖ）アクセストリガ：メモリにアクセスするたびに、ターゲットメモリ全体をチェックする。この実施例は適切であり、メモリが頻繁にアクセスされない場合、、リアルタイムのデータ完備性が極めて重要である為、性能に対する負担は比較的重要ではない。
【０２１５】
任意の所定のデバイスにおいて、上記の変化型のすべてまたは任意のサブセットを提供することができることだと理解。
【０２１６】
図６が示すように、図１にある集積回路での作動ステップは、図１のプロセッサ１によって制御または実行されてもよく、フローは以下の作動の全てまたは適切に並べられた任意のサブセット、例えば、以下の順序を含むことができる。
【０２１７】
作動ステップ１００１：メモリ区域にコンテンツを書き込み、例えばコード、複数の文字を含む。各文字については、書き込み時に「文字認証データ」を計算し、例えば、「文字認証データ」をこの文字のそばに保存。
【０２１８】
作動ステップ１００２：メモリのコンテンツに「強力認証」を実行し、その結果をメモリのどこかに保存しておく（例えば、エンティティのオフラインによってメモリ画像を予め計算する、そのエンティティは強力認証を実行する能力がある）、且つセキュアメモリレイ２が存在するＩＣに提供される。
【０２１９】
通常ではＩＣの外部にメモリ画像（ｍｅｍｏｒｙ  ｉｍａｇｅ）を備え、ＩＣに「注入」し、コンテンツに付加された認証コードとともにプログラムすることだと理解。
【０２２０】
作動ステップ１００３：通常通りにメモリ装置を使用して、メモリ読取作動を実行することを含む。各メモリの読取作動は、以下のように構成されている。
【０２２１】
まず、現在のコンテンツを文字認証の計算し、再計算した「文字認証」ともいう。
【０２２２】
次に、作動ステップ１００１にメモリされた予め計算された文字認証データをメモリから読み出し、計算された認証データと予め計算された文字認証データを比較する。
【０２２３】
再計算した「文字認証データ」などがメモリから読み取った予め計算した「字元認証データ」と同じである場合、引き続き作動する、その理由はすべてのデータが正しいである為。もし同じではない場合は、エラーが認識されたと仮定して、エラー修正のシーケンスに入る。
【０２２４】
適切なエラー訂正シーケンスフローは、図７に示されており、可能となるエラー修正のテストを含み、且つ以下の作動の全部、または適切に並べ替えられた任意のサブセットを含む。例えば、以下の順序でエラー修正機能によって制御または実行することができ、そのエラー修正機能はソフトウェアによって実行される、且つ図１に例があるプロセッサ１に常駐することが可能。
【０２２５】
作動ステップ１００６：修正されたコンテンツに対してエラー修正を実行し、修正待ちのコンテンツは文字とその関連する文字認証を含み、もしくはその両者の組み合わせ（例えば、順序に従って組み合わせ）していき、組み合わされたビット列を提供する。エラー修正には、すべてのビットをスキャンし、フリップと組み合わせした後のビット列にある各ビット（ターゲットが単一ビットエラー修正であれば）と各ベアビット（ターゲットがベアビットエラー修正であれば）の少なくとも一種類をスキャンし、文字認証データを再確認する。エラーは文字ではなく、文字認証データに存在している可能性があるため、メモリに保存されているメモリ文字認証データと比較してはいけない。代わりに、１ビットをフリップさせて、文字認証データを再計算し、再計算された文字認証と利用可能な文字認証データを比較する。例えば、メモリからＸ個のビットの読取データとＹ個のビットの認証データが形成した構造を読み取り、この組み合わせ構造でビットをフリップさせることができる。フリップされたビットがＸビットのデータの中にあれば、修正後のデータが持つＸビットを再計算して認証し、且つ再計算された認証データをメモリから読み取ったＹビットの認証データと比較する。
【０２２６】
フリップされたビットがＹ位元の認証データのビットであれば、メモリから読み取られたＸビットが持つデータ認証を再計算し、且つ修正されたＹ位元の認証データと比較する。
【０２２７】
マッチングが見つかった場合（比較した文字認証データが等しい）、文字および文字認証データが「一致」であることを示し、作動ステップ１００９にシフトする。マッチングが見つからない場合は、次のビット（または次のペアビット）をフリップさせ、上記の再計算作動および比較作動を繰り返す。ここおよび他の場所では、用語「次の」は実際に隣接している、または任意の適切な打診法によって定義されたビット間の順序によってシーケンスとして認識されている前後のシーケンスとして理解。
【０２２８】
作動ステップ１００８：このステップに達すると、通常ではビットフリップ（または、２つビットエラーで起きるベアビットフリップ）が実行可能な修正が無いことを意味し、エラー修正は、文字レベルで失敗と示す。したがって、このメモリのコンテンツは修正不可の内容と標記。第１図が示すようにより高いレベルのソフトウェア、一時停止システム、プロセッサ１およびその組合せによって、より高いレベルの修正を警告提示することができ、例えば、集積回路が搭載された装置を実験室に送って、人為的技術サポートを行う。
【０２２９】
作動ステップ１００９：「強力認証」を行い、ダイジェストの計算、メモリ区域全体のＨＭＡＣのようなものを含み、強力認証の結果を生成する。通常では強力認証はダイジェスト／ＭＡＣ／サインを生成する。
【０２３０】
作動ステップ１００１０：強力認証の結果を作動ステップ１００２でメモリに保存されている予め計算された強力認証結果と比較する。結果が同じであれば、強力認証マッチングだと確認される。そうでなければ、強力認証不一致がと確認される。
【０２３１】
作動ステップ１００１１：強力認証マッチングが確認されると、修正後のメモリコンテンツが合格したことを示し、このメモリをそのまま使用して、例えば作動ステップ１００３を実行する。
【０２３２】
作動ステップ１００１２：そうでなければ、すなわち、強力認証不一致がある場合には、例えば、図８が示している不一致プログラムが実行される。図８が示すように、作動ステップ１００１２における不一致プログラムの適切な流れで使用され、且つその流れは以下の作動のすべて、または適切に並べ替えられた任意のサブセットを含む。例えば、以下の順序で、エラー修正機能によって制御または実行されることができる。
【０２３３】
作動ステップ１００１２．５：作動ステップ１００６を再度することによって図１中の全てのメモリレイ２をスキャンするが、既に認識されたすべてのエラーを修正する。
【０２３４】
作動ステップ１００１３：作動ステップ１００９から作動ステップ１００１１まで作動を再度することで、強力認証をやり直す。
【０２３５】
作動ステップ１００１４：現に強力認証が失敗した場合（つまり、不一致）、修正ができないと仮定する。したがって、より高いレベルの修復が必要となる場合がある。そして、メモリのコンテンツを修正不可能なメモリコンテンツとして標記。例えば第１図が示すような、より高いレベルのソフトウェア、一時停止システム、プロセッサ１およびその組合せがより高いレベルの修復を提示することができる。例えば、集積回路が搭載された装置を実験室に送って、人為的技術サポートを行う。
【０２３６】
可能となるエラー修正をテストする機能。例えば、図７の方法によれば、ハードウェアまたはファームウェアで実施できる個別の状態マシンを使うことを含む。その機能は、認証機能から「認証サービス」を取得することができ、通常では修正を試んだ後に、文字認証の検証（例えば、上記の作動ステップ１００６）も含む。強力認証を使って、メモリ全体を検証する（例えば、上記の作動ステップ１００９から作動ステップ１００１２）、または両方の組合せ。
【０２３７】
上記の全部または大部分のハードウェアは一般的に最適な性能を発揮。例えば、全体のプロセスがハードウェアにおいて実行されると、メモリを使用する際に、ハードウェアによって即時に検証が行われ、エラーがなければ、性能の損失は発生しない。
【０２３８】
ほとんどの実行がファームウェアにて行われた場合は、リアルタイムの文字認証を省略してもよく、周期的か、たまに行うかあるいは両者を組み合わせてメモリをスキャンしてエラーをチェックする、その後にエラーを発見したら、修正および検証を実行することができる（例えば、上記の作動ステップ１００６から作動ステップ１００１２まで）。
【０２３９】
全部の実行がファームウェアにて行われた場合、既存のＩＣ（従来ともいう）を採用することができる。既存のＩＣは、一般的に既存の（従来ともいう）メモリ構造を有しており、本明細書で説明したエラー修正プログラムにおいて計算された文字認証を保存するために、ソフトウェアにおいてロジック上において再配列または管理することができる。この場合、エラー検出および修正は、通常では上述したあるトリガの下で即時に実行されず、オフラインの形で実行される。
【０２４０】
任意の適切な実施例を採用して、可能となるエラー修正をテストするインターフェースが認証機能を有し、または「認証サービス」から取得した認証機能を確保することができる。既存（または従来）のＩＣでは、従来の認証機能をメモリコンテンツとある標準コンテンツ（例えば、直近の認証済メモリの更新後すぐに計算されたダイジェスト）比較することができる。実行方法は、通常では認証機能が提案されたテスト待ちのエラーを標準コンテンツと比較することを確保することができる。上記の実施例は以下の例を通して確保できる。
【０２４１】
（１）ＦＷは、メモリから文字データと文字認証データを読み出すことができる。
【０２４２】
（２）ＦＷは、自分自身が計算したデータ、文字認証データまたは一部専用ハードウェアを使ってをデータの文字認証を計算することができる。
【０２４３】
（３）ＦＷは、計算結果とメモリから読み出された認証データと比較することができる。且つデータの構造が一致しているか、またはエラーがあるかを確認することができる。
【０２４４】
（４）ＦＷがエラーを識別すると、ＦＷは、本明細書で説明したビットフリップのプログラムを実行することができる。例えば、上記（２）のような計算でデータを認証することができる。
【０２４５】
（５）メモリを通してエラー修正が完成させると、ＦＷはメモリ全体コンテンツのダイジェストを単独でまたはいくつかのハードウェアを使って計算することができる。これらのハードウェアはシステムの設計者が選択した任意のＭＡＣパフォーマンスアルゴリズムの実行を加速または簡略化することができる。
【０２４６】
本明細書の一部の実施例の利点は、エラー修正が上記の追加認証（通常は、強力認証および文字認証）ような認証負担を生じないことである。
【０２４７】
本明細書の一部の実施例の他の利点は、本明細書で説明したように、エラーの推定修正（様々な可能となるエラー修正をテストする）は、ビット数に対してハードル設定しないことである。逆に、既存のエラー修正方式はある種のエラー修正コードを実行している。例えば、所定されたＸビットサイズのデータに対して、一部予想していたエラーを修正するとして、バイナリの組み合わせの数と選択した方法は、エラー修正コードに必要なビット数を表している。一旦実行すれば、予定していた数量のビットエラーだけ修正でき、これ以上修正できない。エラー修正の複雑さは通常、修正を試みるビット数によって増加する。しかし、所与の使用状況が合理的であれば、修正された任意の数のエラーを非常に強い認証を使用して検証することができ、任意の数のビットエラーを修正することができる。
【０２４８】
本明細書の一部の実施例の他の利点は、認証を利用して検証し、高い信頼レベルを有する本当に正しい修正を生成することである。例えば、強力認証を使用して提案の修正を検証すると、これは通常、「改正後のデータ」（すなわち提案の修正）に対する強力認証の結果が、予めに期待していた強力認証と一致すれば（例えば、同じ）、暗号化レベルを示す信頼度は、修正後のデータに対して確実に正しいと意味している。
【０２４９】
ＥＣＣ（エラー修正コード）を実行する既存の技術システムと比較して、本明細書のいくつかの実施例の他の利点は、悪意のあるコンテンツ改ざんを防止することである。しかし、悪意のある攻撃はデータとエラー修正コードが互いに一致するように置換させる為、エラーが修正したように見えるが、実際にはコンテンツやコードが不良状態または悪質なままである。逆に、本明細書の方法は暗号学上の強度であるため、本明細書で説明したエラー修正による認証の利点を使用することによって、ハッカーは上述のようにデータ及び認証コードを悪意的に置換することを阻止できる。
【０２５０】
リアルタイム認証を使用することは非常に有利な場合があると理解可能。エラーが含まれていることを発見しない限り、性能が不変である（認証が並行している）ため、および／または読み取られたデータを直ちに使用してもラグが生じない。
【０２５１】
あらゆるメモリ、例えば、コード実行メモリ、または継続的もしくは非経常的に変更される大型データブロック、および／あるいは特にメモリコンテンツへのアクセスを制御する際に、例えば、安全または制御（ファームウェア）のみを介して更新で変更されたメモリコンテンツは、図２のフローで恩恵を受けることができ、特にメモリコンテンツが保護されない場合や外部に晒されてる状況。図２のフローから恩恵を得ることができるメモリは、ＥＥＰＲＯＭ、ハードディスク、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ＳＤＲＡＭ、またはＳＲＡＭこれらに限らない。
【０２５２】
セキュリティ（ファームウェア）更新以外に、メモリへのアクセス制御には様々な解決策があることを理解。特に、様々な既存の技術がメモリコンテンツへのアクセスを厳しく制御することができることが知られている。例えば、メモリのコンテンツは実行のみが可能、実行のみする（ｅｘｅｃｕｔｅ−ｏｎｌｙ）のメモリ。あるいは、読み取りのみ許されているメモリ、且つあるアクセス権または認証したりした後、専用ゲートを介して更新または書き込みができる。もしくは、アクセス制御設定を変更してから書くことができるメモリは、アクセス特権がある場合のみ設定が変更される。
【０２５３】
保存されたコンテンツは頻繁に変更しない：例えば、いくつかの保存されたコンテンツの変更頻度は、本明細書で説明されるシステムおよび方法によって生成される負担が費用対効果を有するように十分に低い。例えば、ソフトウェアの更新が定期的または不定期的に行われていることが知られている為、コードは数ヶ月ごとに一回だけ変更されるか、あるいは、一部のデータは数日または数週間ごとに一回だけ変更されるか、あるいはそれらの間隔内で平均的に変更される可能性がある。逆に、いくつかのデータはソフトウェアによってコントロールされている。そのため、プログラムを実行または稼働するたびに変更される可能性がある。
【０２５４】
多くの変化型が可能。例えば、ある実施例によれば、エラーが発生したら、それを修正することも、修正と称して、すぐにメモリを修復する。その後、どんなプログラムを実行しても、稼働を継続できる。
【０２５５】
代替的にまたは付随的に、実際のメモリコンテンツの修復を後に延ばすことによって、オーバーレイ補修（ｏｖｅｒｌａｙ  ｐａｔｃｈ）を提供して、装置の稼働を継続することができる。これはＮＶＭの処理時間が長引く可能性があり、装置がオンラインでこの作動を完了しようとするとラグを引き起こすので、装置がオフラインでこの作動を完了し、後で実行すれば、装置を継続稼働させることができる。専用の置換修正におけるキャッシュ（非揮発性または揮発性）コンテンツは任意のコンピュータのメモリに常駐することができ、通常は同じＩＣにおいて、ターゲットとなるメモリの任意のプロセッサを使用してそのメモリにアクセスことができ、必要とするときにそのメモリを抜き出して修復することができる。
【０２５６】
可能となる変化型の他の展示例は、単独でまたは任意の適切な組み合わせで任意の適切な認証を使用して、可能なエラー修正をテストすることができ、強力認証および文字認証レベルに限らず含む。
【０２５７】
フローで、強力認証を通じてメモリに存在するエラーを識別することのみを要求、一旦エラーがあると認識されると、すべて保存されているビットはフリップされ、その後に強力認証はビットフリップ（またはペアビット）を検証するために使用することができる。しかしながら、強力認証は複雑で時間がかかって、リソースを使う作動であるが、小型のメモリ区域にとって完全に実行可能な実施であり、そのために、２つのレベルの認証を提供する必要がないかもしれない。
【０２５８】
多くの使用状況において、２つのレベルを使用することはプログラムを保証するための有効措置である。本明細書では、２つのレベルを文字認証と強力認証と呼び、さらに一般的にあるものと程度の違いがある。つまり、前者は短時間、および／または少ないリソースを消費し、後者は長時間、および／またはより多くのリソースを消費する。
【０２５９】
大型メモリ区域については、文字認証（これは一般的である）があり、通常では、より効率的なプログラム。それは、文字ベースで、文字レベルとも呼ぶレベルでエラーを検出することが可能。且つ文字レベルでも提案に対する基本的な検証が発生する可能性があり、推測性修正（ｓｐｅｃｕｌａｔｉｖｅ  ｃｏｒｒｅｃｔｉｏｎｓ）ともいう。したがって、文字レベル認証を省略する実施例に対しては、頻繁に認証や修正検証に使う強力認証を頻繁に実行する必要性がない。
【０２６０】
以下は本発明の事例についての説明である。
【０２６１】
例（１）：推測した提案ついての訂正は、提案の訂正を加え、強力認証により修正を検証する。失敗したら、もう一度試したり、他の修正を推測したりする等々。
【０２６２】
例（２）：推測した提案ついての訂正、文字認証を検査し、もし失敗したら、他に提案された修正を推測し、再び文字認証を使って検査し、成功した文字認証を得るまで継続する。そして、強力認証を修正の最終検証として使用する。文字認証がなくても使用可能。
【０２６３】
もう一つ可能なとなる変化型は、あるゆる適切な方法を用いて保存したコンテンツを検証するための提案修正。例えば、メモリコンテンツがコードであれば、電源中断セキュリティコードの修復プログラムを使ってコードを修正する、験証された提案の修正をコードに適用する。例えば、身元認証に失敗したために、エラーコードであることが判明された。
【０２６４】
性能、位置、稼働時間および信頼度の折り合いに基づいて変化型を設計することができ、例えば、但し以下に限定されない：
【０２６５】
変化型Ａ：比較大きな「リアルタイムコード文字」は、以下のような結果をもたらす。
【０２６６】
（１）より小さなフラッシュメモリ区域およびスループットオーバヘッド（所与の「冗長」幅）を取得する。
【０２６７】
（２）より長いビット時間（すべてのビットをスキャンするため）。
【０２６８】
（３）大きな取得ラグ（実行前に検査を待つなら、ＵＳ  ２０１４０８２７２１の方法を使用することができ、これの出願中の特許ファイル（ｈｔｔｐｓ：／／ｐａｔｅｎｔｓ．ｇｏｏｇｌｅ．ｃｏｍ／ｐａｔｅｎｔ／ＵＳ  ２０１４０８２７２１  Ａ  １／ｅｎｏｑ＝１３％２  ｆ  ９６５％２  ｃ  ２５６）で公開された内容を引用し、本明細書の計算装置に取り入れた。以下を含む：入力ブリッジ、これはデータのシーケンスを受信するために結合され、プログラムを実行するときに使用する；出力ブリッジ、一つのプロセッサーコアであり、入力ブリッジからデータのシーケンスを受信するために結合され、且つこのプログラムを実行する。データシーケンスの所与のデータ項目に応答するための信号を出力する；及び一つの認証ロジック、このプロセッサーコアがプログラムを実行するときに、データシーケンスの受信と認証する為に使われ、与えられたデータが認証されるまで、出力ブリッジによって信号を出力することを禁止する。
【０２６９】
変化型Ｂ：比較的に少ない選択である、大きな「リアルタイム冗長文字」は以下の結果をもたらす。
【０２７０】
（１）より安全で、より確実で、より迅速な修正。
【０２７１】
（２）大きなフラッシュメモリ区域およびスループットオーバーヘッド取得。
【０２７２】
変化型Ｃ：比較的少ない選択、大きな「強力認証」サイズ（ビット単位）は以下のような結果をもたらす。
【０２７３】
（１）より安全で、認証されたオリジナルコンテンツやメモリ体の確認内容に対する信頼度が高い。
【０２７４】
（２）比較的大きなフラッシュメモリ区域のオーバーヘッド（通常は省略可）。
【０２７５】
（３）ＳＨＡ  ２５６−５１２  ＨＭＡＣは良き選択のようである。
【０２７６】
変化型Ｄ：比較多い選択と比べて、小さいコードセグメント（コードをそれぞれ「強絵よく認証」を有するセグメントに分ける場合）は、以下のような結果が発生する。
【０２７７】
（１）比較的大きな区域オーバーヘッド。
【０２７８】
（２）より速い修正時間。
【０２７９】
（３）ＨＡＳＨが累積している場合は、稼働時間にオープン／周期することができ、つまりコード全体に一つのＨＡＳＨを使用し、中間結果を保留して修正プログラムを加速させることができる。
【０２８０】
１つの提案は、トレードオフパラメータを能動的に決定することである。例えば、異なる（大きなまたは小さい）「リアルタイム冗長文字」および／または異なる（大きなまたは小さい）「強力認証」サイズおよび／または異なる（大きなまたは小さい）セグメントを選択すること（コードを「強力認証」を有する各セグメントごとにに分ける場合）。フラッシュメモリごとに情報および／または各ウェアレベリング（ｗｅａｒ  ｌｅｖｅｌ））を統計する。例えば、ターゲットメモリが劣化したときに、上記のトレードオフパラメータをターゲットメモリよりも新しい時である、より速く、かつ／またはより強力なエラー修正に変更し、例えば、より旧いおよび／またはより劣化したフラッシュメモリは新しいときおよび／または劣化が少ないフラッシュメモリと比較すると作動が遅い。
【０２８１】
一部の実施例によれば、修正を統計できるリアルタイムの「文字認証」を提供。全体のターゲットメモリのすべてのビットフリップのオプション（可能な修正）に対して強制実施、基本型スキャンともいう。逆に、所定した文字の中でエラーを検出したら、「近道」をとる（基本型実施形態に対して）。
【０２８２】
スキャンまたは検索を通して、スキャンまたは検索することによって、所定のビットをフリップすることで所定のピットを修正。負荷文字が認証された文字と一致するように修正されると、強力認証を起用してメモリコンテンツの完備性に対する最高レベルの検証とする。
【０２８３】
したがって、本発明の実施例は、以下の実施例をさらに含むことができる。
【０２８４】
実施例（Ａ）：組み合わせ認証およびエラー修正の方法、以下を含む：強力認証を起用して、ターゲットメモリのコンテンツの少なくとも一部の完備性を検証すること、全体のターゲットメモリの少なくとも一部の文字フリップをスキャンする項目を含む
【０２８５】
実施例（Ｂ）：実施例（Ａ）の方法によれば、ターゲットメモリの全体をスキャンする。
【０２８６】
実施例（Ｃ）：修正を統計する実施例のリアルタイム「文字認証」を備え、実施例（Ａ）の方法によれば、文字認証を採用して、所定の文字で認証エラーを検出した場合は、ターゲットのメモリ全体ではなく所定のフォントのみをスキャンして所定の文字を修正する。また、負荷ロード文字が認証文字と一致している場合は、強力認証を起用してメモリコンテンツの完備性への最高レベルの検証とする。
【０２８７】
修正を統計することにおいて、メモリコンテンツの修正が成功するとは保証されないことを理解。
【０２８８】
図１において、「他のプロセッサ機能」は、本明細書で説明した特定の機能以外の任意の主要な機能を有することと理解ができる。周辺デバイスを使用することができる、例えばタイマ、通信チャネル、変換器のすべてまたは任意のサブセットを含むが、これだけとは限らない。
【０２８９】
図１０における「１ビットをフリップ」のステップは、例えば、一般的なロジック設計者およびソフトウェア設計者に知られている任意の適切な置換スキャンプログラムで使用できる。例えば、ハードウェア、ソフトウェアもしくはそれらの組み合わせ等に限定されずに実行することができる。
【０２９０】
図９及び図１０の少なくとも一者の「計算認証」のステップには、オンラインの文字認証計算が含まれてもよい。文字認証は、異なる強度レベルを有することができ、通常では強度と性能の間でウェードを分配する必要があり、強度を極限まで発揮すれば、文字認証は修正の最終判断だと仮定できる。この場合、強力認証はオプション（ｏｐｔｉｏｎａｌ）となる。したがって、文字認証を単独で使用もしくは強力認証を単独で使用することができ、または両方を同時に使用することも可能。この場合、文字認証を簡略化することができ（比較的に低い強度にて実行して、より良い性能を発揮する）、強力認証にて最終の裁定を下す。
【０２９１】
一般的に、メモリシステム及び具体例となるＮＶＭシステムはエラー修正プロセスを使用する。例えば、エラー修正コードを使用する場合、システムはメモリのエラーを検出することができるが、エラー修正の優先順位は判断できない（例えば、試行錯誤テストは不要）。このようなフローには、以下の作動ａ〜ｘを含むことができ、第１３図に示すように、エラーが検出されたときにトリガすることができる。
【０２９２】
作動ステップ（ａ）：このシステムは試行、または推定、または候補の修正値を生成する。
【０２９３】
作動ステップ（ｂ）：システムは、作動ステップ（ａ）をフリップすることでエラーの可能性があるビットを判断して、試行、または推定、または候補となる修正値を使用して、疑いがあるエラーのデータを代替する。
【０２９４】
作動ステップ（ｃ）：このシステムは認証または検証により修正が成功したと推定される特定の検査（例えば、第１〜１２図の実施例で説明した）を実行し、例えば、修正が成功したか否かを判断する。
【０２９５】
第１から１２図のシステムおよび方法は、第１３図のエラーテストプログラムを作動するシステムのサンプル例である。
【０２９６】
図１３が示すように作動する、修正にはあるビットのフリップが含まれていると推定され、作動（ｃ）にてフリップが成功しないと判断された場合、システムは作動（ａ）に戻り、他のビットをフリップさせ続ける。作動（ｃ）のすべてのビットがフリップしても成功しない場合、システムは修正を放棄する（ＮＶＭシステムが実験室に送られて修理する）か、または再度２ビットのフリップの全プログラムを実行する。
【０２９７】
本発明のエラーテストのフローの周期は、時間および電力を消費するものであるかもしれない。用語「ｎ周期」は、通常だとビットフリップして上記の作動（ａ）、（ｂ）と（ｃ）を行う。そして、他のビットが同じく作動（ａ）、（ｂ）及び（ｃ）を繰り返して行う。ｎ番目の周期が失敗した場合は、ｎ＋１周期を実行する、そして類推する。所定の文字Ｗにて検出されたミスまたは疑わしいエラーに対しては、最大のエラーの各実行周期は文字ｗのビット数である。
【０２９８】
通常では、１周期は１ビット（ペアビットも）のフリップから始め、修正が成功したかどうかを判断するための試行検証にて終了する。
【０２９９】
第１〜図１２の実施例は、試行するエラー修正のサンプル例である。
【０３００】
メモリのビットはそのビットが持つ電荷を保持し、「読み出し」を実行するとそのビットはあるリファレンス電圧を生成することに留意すべきである。リファレンス電圧は続いて、リファレンス電圧がロジック「０」または「１」（二進制ビットに対して）に訳されるかどうかをしきい値で判断する、或いはｎ級（ｎ−ｌｅｖｅｌ）メモリに対して、このリファレンス電圧が００、０１、１０、または１１に訳されるべきかを判断する。例えば、二進制ビットは０  Ｖと２  Ｖの間のリファレンス電圧を示せる、リファレンス電圧が１  Ｖ以下であれば、メモリのリファレンス電圧はロジック０とみなされ、読み取ったリファレンス電圧が１  Ｖ以上であれば、メモリのリファレンス電圧はロジック１とみなされる。ここで言う１  Ｖはしきい値としてロジック０とロジック１を区別するができる。一つ健全なメモリでは、メモリとその制御機構は電荷がメモリユニット中にあるまたは放電すると確保し、読み取ったリファレンス電圧をできるだけ０  Ｖと２  Ｖの近辺に近づけるようにして、物理的な検査の絶対的な精度が欠けてることによるあいまいな結果を防止する為、読み取ったリファレンス電圧がしきい値１  Ｖに近づくのを避ける。
【０３０１】
特定のメモリでは、例えば、ＮＶＭに限定されないもの。データが読み取れるかどうかは所定の時点で、所定のビットから与えられた電圧を読み出すビットの状態を示す品質、強度、または信頼度に関係している。または与えられた時点で与えられた電圧を、やや上または下の臨界ビット準との間の距離から読み取ったもの。
【０３０２】
同一サンプル例の内容では、２進制ビット電圧の範囲は０  Ｖ及び２  Ｖの間であり、しきい値ビットは１  Ｖとする。ロジック０与えられたビットは実際に異なる電荷量を蓄積する可能性があると仮定する。それにより、様々な異なるリファレンス電圧、例えば０．１  Ｖ、０．２  Ｖ、０．３７７  Ｖ、または０．９９９９  Ｖ、またはこれらの間に存在する電圧値のいずれかを読み取ることができる。これらの状況で読み取ったビットはいずれも０と見なせる。しかし、特にＮＶＭでは、アクセスしたデータが実際に読み取ったリファレンス電圧、または実際のリファレンス電準と電圧しきい値との距離を表すものである。このデータが０．１  Ｖを読み取ったと表している場合、この電圧値はしきい値１  Ｖから遠いので、このロジック０の読み取った品質や強度、または信頼度は高い。逆に、ＮＶＭから供給したデータが０．９９９９  Ｖの電圧を読み取ったとすると、このビットは依然としてロジック０と見なされているが、このロジック０は品質、強度、または信頼度が極めて低い。同様に、０．９  Ｖまたは０．８  Ｖの品質または強度も０．１  Ｖまでの電圧を読み取る品質または強度より遥かに低いが、０．９９９９  Ｖの電圧を読み取った品質または強度より高い。
【０３０３】
通常では、ビットの状態を予め定義したしきい値基準との品質あるいは強度を検査をサポートする機能を持つ既存のＮＶＭの特性を最適化。しきい値基準とは、隣接するビットの状態の間にある臨界点（ｃｕｔ−ｏｆｆ  ｐｏｉｎｔ）である。一般的には、各種のメモリは、例えばＮＶＭ限定されないもの、内蔵機構（例えばマージン読み出し機能）を備えて、ビットが０と１の間でどれだけ正確かまたはどれだけビットが強いのかを連続して出す指示である、あるいはちょうど０または１を出力していない場合で、ビット数値が持つが信頼度を提供する。このため、マージン読み出しの出力は、読み取り中のロジック０は実際だと０．２  Ｖまたは０．３６  Ｖとして設定したことを表す。メモリが読み取りを行う際に、マージン読み出しを起動していない場合、この作動は０または１をのみを出力し、品質または強度の指示は生成しない。
【０３０４】
通常では、ビットに対する検査の順序を最適化するためには、本発明の方法は各ビットの読取電圧とその隣接する電圧しきい値（例えば、読み取り電圧よりも高いまたは低い）との距離に応じてビットを階層化する。一般に、階層化に使用する距離数値は読み出し電圧値とこの電圧値に最も近いしきい値（電圧値よりも高いか低いしきい値）との間の距離と定義されている。したがって、この距離の値は以下の数値の中で比較的に小さいものを採用。
【０３０５】
（ｉ）電圧読み値と電圧読み値より高い電圧しきい値との間の電圧差の絶対値。および
【０３０６】
（ｉｉ）電圧読み値と電圧読み値より低い電圧しきい値との間の電圧差の絶対値。
【０３０７】
次に、この方法は電圧読み値が隣接する電圧しきい値に近いビットを電圧読み値が隣接する電圧しきい値から遠いビットに優先する。このようにする利点は、電圧読み値と隣接したしきい値との距離が大きいことは、このビットが健全（ｈｅａｌｔｈｙ）なビットであり、比較的にエラー、破損（ｅｒｏｄｅｄ）または喪失（ｅｖａｐｏｒａｔｅｄ）しにくいと示している。逆に、電圧読みと隣接したしきい値の間の距離が小さいということは、このビットが相対的に不健全なビットで、エラー、破損（ｅｒｏｄｅｄ）または喪失（ｅｖａｐｏｒａｔｅｄ）しやすい。従って、本発明の利点は、電圧読み値から電圧しきい値から遠い位置にある、あまり疑わしくない（ｌｅｓｓ  ｓｕｓｐｅｃｔ）ビットよりも、非常に疑わしい（ｈｉｇｈｌｙ  ｓｕｓｐｅｃｔ）ビットを優先させること。あまり疑わしくないビットは健全なメモリ機能を意味している。
【０３０８】
ビットエラーの検出に従って、修正する周期は、１つのビット（または２つ、または３つ）を一時的にフリップさせ、結果を検証する試行錯誤（ｔｒｉａｌ  ａｎｄ  ｅｒｒｏｒ）プログラムを含む。
【０３０９】
しきい値基準は、判断またはエラー修正を成功に実行するために必要とする時間の最適化を果たすスキャンの順序に使用可能。
【０３１０】
例えば、ビットエラーが検出された場合、例として、Ｂビットを有する所定の文字Ｗに格納され、予め計算されたハッシュ  ベース  メッセージ認証コードまたは他の任意のタイプのメッセージ認証コード（特殊コード）に不一致が検出された場合、本発明の方法はどのビットが修正可能性があるか／不可能であるか（ビットフリップが成功して修正される場合）、Ｂビットを階層化または順序付けする、フリップを行うと最も成功して修正値を生成する可能性があるビットから開始して、フリップを行うと最も成功して修正値を生成不可能なビットを最後にして終了する。通常、修正される可能性が最も高いビットは、ビットの状態の品質／強度が低い場合に、エラーである可能性が最も高いビット。
【０３１１】
最も修正される可能性が低いビットは、ビットの状態の品質／強度が低い場合に、エラーである可能性が最も低いビット。次に、上記の試行フローは、通常だと上記（ａ）から（ｃ）までの作動を含み、文字Ｗの各ビットはこれらの作動を行い、且つ一つのビットがフリップして作動（ｃ）が成功結果を得たときに作動を停止する。したがって、ビットが上記の順序通りにスキャンされない（例えば、文字の中のビットが物理的順序でスキャンされる）と比較して、最も成功する可能性のあるビットから開始して、成功するビットが発見されると、実行周期が停止されるので、統計的には、試行フローの周期数（実行回数）を低減することができる。
【０３１２】
本明細書での第１〜１２の図の実施例では、このシステムは、以下の要素の全てまたは任意のサブセットを含むことができる。
【０３１３】
ＮＶＭまたは他のメモリシステムは、本明細書で説明された品質データまたは信頼度データを提供する。
【０３１４】
予め行の長さを定義するハッシュベースメッセージ認証コード（ＨＭＡＣ）署名、または他のあらゆる種類の署名欄（ｌｉｎｅ  ｓｉｇｎａｔｕｒｅ）。
【０３１５】
強力な暗号化署名／認証の仕組みは、必要に応じて完備性を保つためのデータロックの全部を使用する。
【０３１６】
留意すべきのは、特定の実施例において、データブロック全体に対する強力検証（ｓｔｒｏｎｇ  ｏｖｅｒａｌｌ  ａｕｔｈ）は選択可能であり、行検証（ｌｉｎｅ  ａｕｔｈ）のみを提供することができる。
【０３１７】
特定の実施例は、優先修正に従ってしきい値基準を提供するために使用される。
【０３１８】
ｂ個のビットを有するエラー文字と、ｂ個のビットをフリップして、ビットエラーを修正可の検証となるビットのフリップを識別して、ｂ個かそれ以下の推定修正を生成するために、特定の実施例は、特定のビットの優先順位に従って、しきい値基準を提供する。
【０３１９】
どのビットがしきい値に近いかを確認することにより、ビットの検査手順を最適化できる。１４  ａと１４  ｂの図を参照してください。一番可能な／最も不可能な修正されるビットを並べ替え／階層化する。
【０３２０】
この方法は通常、以下の作動の全てまたは任意のサブセットを含み、作動の適切な順序は上記の通りである。
【０３２１】
作動ステップ２０１０：Ｒｅａｄ＿Ｒ＝フラッシュメモリ文字を読み取る（検証を含む）。
【０３２２】
作動ステップ２０２０：Ｒｅａｄ＿Ｈ＝比較的に高いしきい値（ｍａｒｇｉｎ−ｒｅａｄ  １と似た）を有するフラッシュメモリのワードを読み出す。ここで、「高い」とは、所定されたしきい数値基準より高い数値（例えば、予め設定されたまたは予め決定された）。
【０３２３】
各ビット（ロジック０またはロジック１）のマージン読み出しは、所定したしきい値基準によって決められた電圧を返すが、リファレンス電圧を返送しないことに留意する。しかし、しきい値は通常だとロジック０と１の強度を判定するために変化することがあって、予めに設置したしきい値に全部依存してロジック０と１を区別する仕組みを代替する。より高いしきい値の読み取りを使用すると、マージン読み出しの出力をロジック０に寄せる、前の例に続いて、出力電圧２  Ｖと電圧１  Ｖの間の各電圧を出力するビットはロジック１とみなされる。しきい値がどうどう高くなるにつれ（例えば同じステップで）、１つまたは複数のビットのロジック状態を読み取る、あるいは読み出し値はある時点で１から０に変更された場合（ビットを保存している物理状態が同じであっても）、それはビット出力の電圧が丁度上昇したしきい値よりも低いことを示している（それでも最後から２回目に増加したしきい値より高い）。したがって、各数値（直近高くなった各しきい値）と予め設定したしきい値（高くなったしきい値より高いか低い）との間の距離を計算することによって、しきい値が高くなるたびに、ビットがロジック１と０のどれだけ強い電圧を生産するかを示す。
【０３２４】
注意すべきは、マージン読み出しは既知のテストモード。それには、ＰＧＭまたはＥＲＳの後に、メモリユニットのしきい値電圧の特性をチェックするスロー読み込み（ｓｌｏｗ−ｓｐｅｅｄ  ｒｅａｄｉｎｇ）を含む。ウェハで実行されるファームウェアがコードまたはロジック実行を含んで、本発明のエラー修正および／またはビットフリップの優先順位付け方法を実行する場合、マージン読み出しはＮＶＭの端末使用者に有効であり、次いでファームウェアとしてのコードは全てのＮＶＭ機能を使用して、マージン読み取り機能を含む。一般に，ＮＶＭのいかなる使用者に対して，マージン読み出しはハードウェアまたはファームウェアにおいて有効である。
【０３２５】
作動ステップ２０３０：「弱」ロジック１を識別し、例えばロジック「１」のビットが別の読み取り作動で１ではなく０を得た場合、標準しきい値より高いしきい値（マージン以外の読み取りの標準しきい値ではなく）を使用してマージン読み出しによって得られたロジック値である場合、通常だと、作動ステップ２０１０のＲｅａｄ＿  Ｒと作動ステップ２０１０のＲｅａｄ＿  Ｈでｘｏｒ計算によってＣｈｅｃｋ＿ｂｉｔｓＨを定義することが多い。なお、Ｃｈｅｃｋｕｂｉｔｓ  Ｈのいずれかのビット（例えば、ビット４）が１である場合、元のワードのビット４には「弱い」ロジック１が存在することを示す。
【０３２６】
作動ステップ２０４０：一つずつ「Ｃｈｅｃｋ＿ｂｉｔｓＨ」のビットインデックス（ｂｉｔ  ｉｎｄｉｃｅｓ）またはビットを通して、この文字が検証値に一致するかどうかを決定する。
【０３２７】
作動ステップ２０５０：マッチングが発見された場合、これは通常成功を表し、すなわち良き修正候補を発見したことを表す。このとき、本発明の方法は、「良い」候補者に対して検証または認証を試みる。例えば、文字認証（ｗｏｒｄ  ａｕｔｈ）を実行し、文字認証が成功すれば、強力認証を実行して、この修正候補を完全検証する。
【０３２８】
したがって、フローを終了する。この方法は、ビットインデックス２に対応する文字がマッチング検証されていることを発見した場合、他のビットインデックス、例えば、ビットインデックス３または４を再検査する必要がない。
【０３２９】
逆に、マッチングが見つからない場合。
【０３３０】
作動ステップ２０６０：Ｒｅａｄ＿  Ｌ＝低いしきい値を用いてフラッシュメモリの文字を読み出す（マージン読み出し０と同様）。
【０３３１】
作動ステップ２０７０：“弱”ロジック０を識別する、例えば、ロジック“０”であるべきビットが異なる読み取りで０ではなく１となった場合、標準のしきい値より低いしきい値を使用してマージン読み出しによって得られたロジック値を得る。通常では、作動ステップ２０１０のＲｅａｄ＿Ｒおよび作動２０６０のＲｅａｄ＿Ｌをｘｏｒ計算によってＣｈｅｃｋ＿ｂｉｔｓＬを定義することが多い。
【０３３２】
注意すべきは、Ｃｈｅｃｋ＿ｂｉｔｓ  Ｌのいずれかのビット（例えば、ビット７）が１であれば、通常では元の文字のビット７の「弱０」の存在を示すこととなる。
【０３３３】
作動ステップ２０８０：一つずつ「Ｃｈｅｃｋ＿ｂｉｔｓ  Ｌ」のビットインデックス（ｂｉｔ  ｉｎｄｉｃｅｓ）またはビットを通して、この文字が検証値に一致するかどうかを決定する。
【０３３４】
作動ステップ２０９０：マッチング成功が発見された場合、プロセスは終了する。
【０３３５】
作動ステップ２００００：強ビットを認識する、「弱」と識別されたロジック０および１に対して非または（ＮＯＲ）演算を行う。強ビットとはより高い読出マージンまたはより低い読出マージンによって取り込まれることがない。一般に、Ｃｈｅｃｋ＿ｒｅｓｔ＝｛ＢｉｔｗｉｓｅＮＯＴ（Ｃｈｅｃｋｕｂｉｔｓ  ＬとＣｈｅｃｋｕｂｉｔｓＨとをビット単位でｏｒ演算する。
【０３３６】
作動ステップ２０１００  ａ：ビット単位ｂｉｔｗｉｓｅで作動ステップ２０７０のＣｈｅｃｋ＿ｂｉｔｓ  Ｌと作動ステップ２０３０のＣｈｅｃｋ＿ｂｉｔｓ  ＨをＯＲ計算する。
【０３３７】
作動ステップ２０１００ｂ：Ｃｈｅｃｋ＿ｒｅｓｔを定義するために、作動ステップ２０１００ａのＢｉｔｗｉｓｅｒＯＲのＢｉｔｗｉｓｅＮＯＴと作動ステップ２０３０のＣｈｅｃｋ＿ｂｉｔｓ  ＨとＯＲ計算する。
【０３３８】
エラーが発生しやすいロジック１と０が認識（例えば、すでに優先順位を付けた）されており、通常では、エラーが発生しやすいロジック１と０にエラーが発生していない場合にのみ、残りのビットに対して適切な順序（例えば任意の順序）で検査する、例えば強ビットとみなされる。これは、最も疑わしいビットが修正可能なビットであることが発見されていない為である。この方法は通常で他のビットのいくつかまたは全部をスキャンし、複数の強ビットの中でどれが修正成功するかを判断するためである。特定の状態のビット（比較にエラーしやすいビットであると予想）は必ずしも好ましくないビットではない。時には、この方法がより優先的なビット（弱いロジック１または弱いロジック０を有するビット）に成功していない場合には、残りのビット（一部または全部）をスキャンすることができる。
【０３３９】
作動ステップ２０１１０：１つずつ「Ｃｈｅｃｋ＿ｂｉｔｓ  Ｌ」のビットインデックス（ｂｉｔ  ｉｎｄｉｃｅｓ）またはビットを通して、この文字が検証値に一致するかどうかを決定する。
【０３４０】
作動ステップ２０１２０：マッチングが発見された場合、例えば、作動ステップ１１０で文字マッチング検証が発見された場合、成功だと示す。
【０３４１】
作動ステップ２０１３０：さもなければ、例えば、作動ステップ２０１１０において、文字と検証が一致しない場合、失敗だと示す。通常、修正検査する必要とするビットがないので、修正プログラム全体が不合格となり、この方法は、ビットエラーを修復するためのより高いレベルの方法（ｈｉｇｈｅｒ  ｉｎｓｔａｎｃｅ）を行う。例えば、実験室による修復が必要であるというエラーメッセージを出力する。
【０３４２】
作動ステップ２０１４０：フローを終了する。
【０３４３】
注意すべきは、作動ステップ２０２０から２０５０がロジック０（ロジック１ではなく）と見なされているビットのうちにエラービットである可能性を識別できる以外、作動ステップ２０６０から２０９０は、作動ステップ２０２０から２０５０も似たものである。もう一つ注意すべきは、この具体的な実施例では、この方法はエラーの可能性があるロジック１を最初に検索することができる、その理由は、徐々に高くなるしきい値は読み取り電圧が予め設定されたしきい値に近いこと示す為である。その後、この方法は通常だとロジック０に対して同じ作動をする。しかしながら、この方法はまず、ロジック０の検索を開始する可能性があり、もし発見できなければ、ロジック１を確認できる。一般的に、使用中のメモリが一つの方向に対して敏感であることを知った場合、例えばロジック１がロジック０よりも比較的にエラーの可能性がある場合、この方法はロジック１検査から開始されてもいい。一般的に、この方法は既知の比較的に劣化する可能なロジック値から開始されてもよい。したがって、一実施例においては、作動２０２０から２０５０までだけ、または作動２０６０から２０９０だけ、または作動２０６０から２０９０だけを実行しても良いし、先に作動２０６０から２０９０を行い、次に作動２０２０から２０５０までを行うことができる。
【０３４４】
注意すべきは、作動２０２０及び２０６０におけるしきい値（マージン読み出しモードではなく、標準読み取りの標準しきい値よりも低いか高い）を使用。あらゆる適切な低めまたは高めのしきい値を使用することが可能、例えば、標準しきい値より１０％、５０％あるいは９０％低いしきい値、又は１０％、５０％もしくは９０％高いしきい値など。設計考量は非常に近くかつより低い／高いしきい値、またはマージン読み出しモードに使用しない標準しきい値を含む。それは誤アラームを減らせるが、より多くのエラービット（すなわち、より弱いビット）を見逃すこととなる。
【０３４５】
対照的に、予め設定したしきい値から遠く離れたしきい値はより敏感マージン読み出しを発生し、比較的に弱いビットを見つけやすいが、誤アラームが発生する可能性がある。すなわち、特に弱くないビットに対しても誤アラームが発生する。したがって、弱いビットの検出感度と偽のアラームのコストとの折り合い（例えば、メモリの特性または他の属性に基づいて）に基づいて、設計者は、需要に応じてより低いしきい値またはより高いしきい値を選択することができる。
【０３４６】
特定の実施例によれば、弱いロジック１に対して成功となる修正の数ｘをカウントし、弱いロジック０に対して成功となる修正の数ｙをカウントすることができる。次に、ｘ＞ｙであれば、本発明の方法は、弱いロジック１が弱いロジック０よりも優先的な順位を設定し、ｙ＞ｘであれば、本発明の方法は、弱いロジック０が弱いロジック１よりも優先的な順位を設定する。
【０３４７】
図１５に示すビットエラー予防方法は、方法２ともいう。予防的なメモリのメンテナンスを周期的に行うことができます。
【０３４８】
注意すべきは、エラー修正はビットエラー検出機能を有するシステムで実行されることができること。しかしながら、エラー予防措置は、エラー検出機能を持たないが、マージン読み出し機能を有するシステムでも実行可能である。
【０３４９】
方法２は、もう直ぐエラーが発生しそうのビットを認識するために使用でき、これらのビットに対して予防的な処理を行うことができる。
【０３５０】
この方法は、一般的に前に述べたような適切な順序で実行される以下の作動の全てまたは任意のサブセットを含む。
【０３５１】
作動ステップ２０２１０：データ区域を読み取る。
【０３５２】
作動ステップ２０２１２：データ区域に対してマージン０の読み取りを実行し、マージン読み出し０とも称する。
【０３５３】
作動ステップ２０２１４：データ区域に対してマージン１の読み取りを実行し、マージン読み出し１とも称する。
【０３５４】
一般的に、マージン読み出しテスト（マージン１またはマージン０）は書込み（ロジック１または０）ビットの相対強度を読み返し、例えば、しきい値を段階的に変更することによってロジック１（または０）に近づく為、しきい値を上げる（または下げる）。このプロセスでは、ビットが１から０にフリップする（逆でも良い）の作動はビットが強いかどうかまたは弱いかをロジック１（または０）と書くことを表し、上述したように。
【０３５５】
作動ステップ２０２０：作動ステップ２０２１０、２０２１２と２０２１４によって生成された３つの読取数値が全く同じでない場合、上記の内容に対して結果を検査する為、方法３を実行する。
【０３５６】
作動ステップ２０２３０：そうでなければ、作動ステップ２０２１０によって生成された３つの読取数値がすべて同じである場合、完備性チェックイベント（例えば、強力認証）を待ち、最初の作動ステップ２０２１０に戻る。
【０３５７】
注意すべきは、システム設計者は周期的または不定期的に完備性チェックを実行することを選べる、例えば、強力認証を行い、メモリコンテンツの完備性を再確認することができる。
【０３５８】
注意すべきは、ＮＶＭの設計／製造制限または実施例の開発者の時間制限により、特定の実施例は、マージン読み出し１とマージン読み出し０のうちの１つだけを実行。両方を実行するのではない。
【０３５９】
実施例が片側（０または１）のみのマージン読み出しを実行する場合、マージン読み出しが完了した後も、配置されたビットの優先順位に対応する。どちらのマージン読み出しを実行するかを選択する時に、侵食に敏感な側（ＮＶＭのメーカーが決定する）に対してマージン読み出しを実行するように選択できる。侵食とは、ビットが弱体化したり、エラーしたりする可能性をいう。ロジック０と１の保存は電気性上で異なる、例えばロジック０と１のうちの１つは電荷の存在を表すことができ、もう片方は電荷が欠けていることを表してもよいので、ロジック０と１のどちらかは片方より侵食に敏感で絵エラーが発生しやすいかもしれない。しかし、両側（ロジック０および１）が共に有効であり、実行可能である場合、このシステムは通常では両方に対してマージン読み出しを実行し、両側の実行結果の適切な組み合わせに基づいて最後の優先順位を決定することができる。例えば、それぞれ片側に優先順位を設定し、実際の電圧読み値と読み取り値に最も近い電圧しきい値との間の距離に応じて、元ビット１、２、３…階層化をする。次に、マージン読み出し１に相応するのビットの階層とマージン読み出し０に相応するビットの階層とを加算することにより、各ビットの結合階層が生成される。次に、結合階層の順序によって、ビットの優先順位を決めます。
【０３６０】
注意すべきは、階層化はしきい値との間の距離を必要としないこと。その他に、ロジック１がロジック０よりエラーするのが可能／不可能である知識や経験結果によっては、すべてのロジック１はｒ＿１に分類されることがあり、ロジック０はｒ＿０に分類されるかもしれません。その場合は、すべてのロジック０がロジック１の後に階層されることを生じ、逆もまた可能であり、全部のロジック１がロジック０の後に階層される。
【０３６１】
図１６が示す方法は、通常だと以下の作動の全てまたは任意のサブセットを含み、前述のような適切な順序で進行する。
【０３６２】
作動ステップ２０３２０：エラーチェック構造（例えば、サイン／パリティ検査／冗長検査機構）がある場合、このエラーチェック機構を使用して、データ区域の通常読み取り（マージン読み出しに対して）のエラーをチェックする。作動ステップ２０３１０の出力は、実行可能（ｏｋ）または実行不可能（ＮＯ  ｏｋ）とすることができる。
【０３６３】
作動ステップ２０３２０：もし作動ステップ２０３１０の出力が実行可能（ｏｋ）であれば、あるいは既存のエラーチェック構造であれば、何もしないまたはビットを強くする、例えばデータの更新は、同じメモリ位置Ｌで書き換えをする、第一メモリ位置Ｌのデータを他のメモリ位置にコピーした後に、最初の位Ｌに戻す。上記データ更新の方法は、該当しないタイプやメモリタイプに関連している。
【０３６４】
作動ステップ２０３３０：作動ステップ２０３１０の出力が実行不可能である場合（ＮＯ  ｏｋ）、各ビット毎に試行錯誤修正を実行し、不一致の読取ビットを先に配置し（読取ったしきい値が高くなるかまたは低下すると、そのビットの読み取り値が変更し、他のビットよりもエラーする可能性があることを示す）、続いて一時的に（優先順位による）ビットフリップして、エラーを再確認し、マッチングが見つかるまで続ける。
【０３６５】
注意すべきは、本明細書で示しまたは説明した方法は、必要な修正を経て多層式メモリユニットに適用することができる。１つ以上のしきい値によって２つ以上の数値を保存することができる。逆に、０または１だけを保存するメモリは、０を１（または１を０にフリップさせる）によって修正する。前述したように、多層式メモリユニットのビットは通常だと比較および階層化されており、階層基準は実際のビット基準と（最も近い）しきい値との間の距離を含み、最も近いしきい値は一般にしきい値Ｔを含み、その特徴はすべてのしきい値のうちのしきい値Ｔとこのメモリユニットの実際の電圧との電圧差が最小であること。この利点は、しきい値Ｔが対応するビットの侵食が’起こる際に最も越される可能性がある。
【０３６６】
多層メモリユニットは、実際のビット基準と所与のメモリユニットの２つの隣接状態、または数値の２つ隣接するビット基準のしきい値間の距離に応じて階層化する、例えば前述の方法。したがって、多層式メモリユニットについては、この方法では、あるしきい値に接近していると判断した場合、このメモリユニットはリファレンス電圧を維持しているかどうかを確認することができる。しかし、２進制（０／１）メモリについては、修正には必ずしもビット不リップではなく、疑わしいなエラーを表す数値から、エラー修正の原因となる隣接数値に数値を移動させる試行できることを含む。例えば、メモリユニットが４つの数値を代表している時、すなわち０、１、２、または３、または８つの数値、すなわち０〜７を表す場合。次に、読んだ数値を２とする。
【０３６７】
数値２が所定の数値２と数値１の間のしきい値に接近している場合（例えば、数値２と数値３までのしきい値よりも、数値１と数値２間のしきい値に近い）、この方法は、数値２を１に修正することを試みることができ、そうでなければ、この数値２が数値２と数値３のしきい値に接近する場合、この方法は数値２を数値３に修正することを試みることができる。
【０３６８】
通常、本明細書で説明したエラー修正期間には、メモリは利用できない（ｕｎａｖａｉｌａｂｌｅ）。システム中の集積回路はメモリに使われる、またはやメモリを使ってエラー検出や修正を行うと、集積回路の機能性アプリケーションはメモリにアクセスできず、実行不可となる。
【０３６９】
したがって、メモリエラーを検出した場合、および／または、周期的またはロジック的に起動または他のトリガ構造によるメモリ検査を行う。適切な論理回路は機能的なアプリケーションを停止し、メモリ修正機能はメモリのコントロールを引き継ぎ、メモリ修正が完了（およびメモリエラーの修正が成功した場合）するとコントロール権はアプリケーションに戻る。
【０３７０】
注意すべきは、特定の使用状況において、エラーが検出されると、システムにダメージを与えないように、システムがメモリを使用続けることが不可となる。通常では、システム設計者は適切な論理回路を設計して、発見されたエラーに基づいて、すべての作動をエラーが修正されるまで、停止するか、作動を継続して待つか、もしくは延期してある適切なタイミングで修正するか、あるいはまったく修正しないを判断する。
【０３７１】
例えば、重要なマイクロプロセッサの作動コードにエラーのビットフリップした場合、この論理回路はすべての作動を停止することができる。この手段は、重要なアプリケーションが実行している時に損傷を受けず、もしくは予期せぬ有害な結果を防ぐ、あるいは壊滅的な誤作動を引き起こす可能性を配慮した安全対策。例えば、重要なデータ（例えば、暗号鍵）にビットフリップがある場合、この論理回路はすべての作動を停止できる。
【０３７２】
対照的に、重要ではない音信モードまたはビデオモード（せいぜい瞬間的な雑報、あるいは娯楽ビデオにおいて不正なピクセルをもたらすので、重要度が低い）でエラービットフリップすると、この論理回路は作動を継続することができる。この場合、修正を後々の適切なタイミングに延期するか、または抜本的に修正をスキップすることができる。
【０３７３】
注意すべきは、従来のエンティティデータ作動を使用して、本発明の「試行錯誤（ｔｒｉａｌ  ａｎｄ  ｅｒｒｏｒ）」ビットフリップに利用できること。例えば、ＮＶＭにおいてエラー文字が認識されると、エンティティデータ作動は、以下の作動の全てまたは任意のサブセットを含み、前述の適切な順序で実行されてもよい。
【０３７４】
（ｉ）：この文字を含む最小消去ＮＶＭブロックをＳＲＡＭにコピーする。
【０３７５】
（ｉ  ｉ）：ビットカウンタｉを０に設定する。
【０３７６】
（ｉｉｉ）：このエラー文字を読み取りと変数Ａとなる。
【０３７７】
（ｉｖ）：変数Ａから変数Ｂにコピーし、Ｂ＝｛Ｂ  ＸＯＲ  ２＾ｉ｝を実行します。変数Ｂにおけるビットｉをフリップする。
【０３７８】
（ｖ）：変数Ｂを書き込み、フリップされたビットｉを有する文字となり、且つこのデータブロックに戻ってＳＲＡＭの文字位置にコピーされる。
【０３７９】
（ｖｉ）：ＳＲＡＭのデータブロック上で完備度チェックを行います。
【０３８０】
（ｖｉｉ）：作動ｖｉの完備度チェックが成功すれば、エラーがすでに修正されたことを示し、関連するＮＶＭデータブロックを抹消し、且つＳＲＡＭ上で成功的に修正されたデータブロックをＮＶＭにコピーする。
【０３８１】
（ｖｉｉｉ）：そうでなければ、がビットｉ上で完備度検査にエラーが発生した場合、フリップされたビットｉがエラー修正に成功していないことを示しているので、それをコピーしない。代わりに、ｉを１ずつインクリメントし、ｉ＜１６の状態で作動（ｉｖ）に戻る。
【０３８２】
（ｉｘ）：ｉ＝１６の場合、修正試行失敗を示す出力を生成する。
【０３８３】
注意すべきは、適切な位置でビットフリップを行う必要がある場合、メモリがＮＶＭであれば、ターゲットのデータブロックは、揮発性メモリ（例えばＳＲＡＭ）に置くことができる、次にビットフリップを作動し、ＮＶＭのターゲットデータブロックを消去し、揮発性メモリからフリップしたビットのデータをＮＶＭに書き返す。
【０３８４】
図１７を参照してください。これはエラー修正の試行錯誤による簡略化したフローチャートであり、図１３に示されているエラー可能性のあるビットの降順（ｄｅｓｃｅｎｄｉｎｇ  ｏｒｄｅｒ）に従ってビットフリップを行う。第１７図のフローチャートには、作動ステップ２０  ａ〜２０  ｃが含まれている。
【０３８５】
作動ステップ（２０  ａ）：このシステムは、試行または推定または候補修正値を生成する。
【０３８６】
作動ステップ（２０  ｂ）：システムは、フリップ作動ステップ（２０  ａ）によって判断されるエラー可能性のあるビットとそのビットの降順（ｄｅｓｃｅｎｄｉｎｇ  ｏｒｄｅｒ）に従って、つまり、エラーのあるビットが、比較的にエラー不可能なビットよりも優先的にフリップされ、試行または推定または候補修正値を使用して、疑わしいエラーデータの置換を試みる。
【０３８７】
作動ステップ（２０  ｃ）：このシステムは、特定検査（例えば、第１〜１２の図で説明した実施例）にを実行することによって、推定の修正は成功したかを認証または検証する。例えば、修正が成功したか否かを推定する。
【０３８８】
本発明の範囲は、各エンティティ実装形態を含むが、限定されず、エラー修正が実行されると、機能性システムはメモリを使用することができない。本発明の保護範囲は、様々なエンティティ実装形態を含むが、それに限定されない。例えば、ターゲットデータブロック（ｓｕｂｊｅｃｔ  ｃｈｕｎｋ）をＳＲＡＭにコピーし、且つＳＲＡＭですべてのビット作動を完了させ、修正を試行する。修正されたデータブロックをＮＶＭにコピーすることによって、「有効」（ａｖａｉｌａｂｌｅ）なＮＶＭを保持し、その後に使用することが可能。
【０３８９】
注意すべきは、本発明の方法はファームウェアにおいて方法１、２、および３のうちの少なくとも１つを実現することができる、あるいはＮＶＭに直面するインターフェース上で論理回路を増加させる。本発明の方法を従来のＮＶＭ（使用中でも）に適用できる。オプションとして、ＮＶＭ上でハードウェアを増やして、本発明の方法の全部または部分的な作動を加速（ファームウェアのみを使用する場合に対して）することができる。
【０３９０】
特定の実施形態の１つの利点は、例えば、文字認証（ｗｏｒｄ  ａｕｔｈ）ような検査の実行を加速できる。
【０３９１】
注意すべきは、いくつかの使用状況において、様々な可能となるエラー修正を試みる場合、エラーが発生したビットの指示を先に提供、受信または生成する必要がない。
【０３９２】
注意すべきは、各ビットのマージン読み出しに対するリスポンスに基づいて、ビットエラー修正の優先順位を設定することは、特殊なエラー修正を使用することと無関係である。例えば、第１〜図１２の実施例を使用すると、比較的にエラーしやすいビットをエラーしにくいビットよりも優先して配置することによって、任意の試行錯誤修正方法の全体的な修正サイクル時間を統計的に低減することができる。しかしながら、優先順位を設定する方式は、本発明を用いて開示される優先順位に限定されない。
【０３９３】
注意すべきは、本発明において、ビットフリップは実際のメモリの完備度を保護した上で、試行錯誤に基づいて実際にビットをフリップして、エラーの修正に成功したビットはフリップ状態を保持するが、エラーの修正に成功していないビットは再度フリップされる。また、フリップ作動はメモリコンテンツの全部または一部のコピー上でビットフリップを行うことができ、このコピー内容は完備度を保護しようとする実際のメモリの位置ではなく、その他の位置にあるが、ビットがエラー修正に成功すると、フリップされたビットは実際のメモリに保存される。試行錯誤の過程で、コピーしたデータの中でフリップされるが、エラー修正する必要のない他のビットは、実際にはフリップしない。例えば、元のメモリではフリップせず、コピーデータの中でフリップし返さなくでもいい。
【０３９４】
代替的に、本明細書で説明する一部の実施例は、部分的にまたは排他的に（すなわち、ファームウェアがない）ハードウエアで実施することができ、この場合、本明細書で説明するいくつかまたはすべての変数、パラメータ、シーケンス作動および計算は、ハードウエアで行って良い。
【０３９５】
「強制」、「要求」、「必要」および「必須」などの用語は、明確化するために本明細書で説明する特定の実施例またはアプリケーションの背景の下で行われる実施例の選択を意味し、限定することが意図されないことを理解して頂きたい。代替実施例では、同じ要素は、非強制および非要求として定義されてもよく、完全に除去されてもよい。
【０３９６】
分離された実施例の上下の文脈で説明された本発明の特徴は、動作を含み、単一の実施例で組み合わせて提供してもよい。例えば、システムの実施例は、対応するフロー実施例を含むことが意図され、その逆もまた同じである。特徴は当分野に既知されている特徴と組み合わせることができ、特に、背景技術の一部またはその中で言及された出版物にて説明したものに限定されず。
【０３９７】
逆に、単一の実施例の上下の文脈内、またはある順序で簡潔に説明した本発明の特徴は、動作を含み、分離的あるいは任意の適切なサブコンビネーション方式で提供する。この分野で知られている特徴（特に、バックグラウンド技術の部分またはここで言及された出版物に記述したされた内容に限定されない）を含み、または他の異なる順序で並べられてもよい。「例えば」は限定することを意図しない例を表すために用いられる。
【０３９８】
各方法は、本明細書で説明されるように、説明または説明された一部かまたは全部の動作を含み、本明細書で説明または説明するように適切に並べ替える。。
【０３９９】
本発明の前に述べた実施例は、上記のように明らかにしたが、本発明を限定するために用いられるものではなく、類似の技術を熟知している者は、本発明の精神と範囲内を逸脱しない限り、僅かな変更と修整だとする。したがって、本発明の特許保護範囲は、本願明細書に添付された特許範囲に規定されている者に準じるものとする。
【符号の説明】
【０４００】
１…プロセッサ
２…メモリアレイ
６…ハードウェア
７…ファームウェア
１０…集積回路
１６…システム
１８…ソフトウェア
【図１】
2020195135.tif 000003
【図２】
2020195135.tif 000004
【図３】
2020195135.tif 000005
【図４】
2020195135.tif 000006
【図５】
2020195135.tif 000007
【図６】
2020195135.tif 000008
【図７】
2020195135.tif 000009
【図８】
2020195135.tif 000010
【図９】
2020195135.tif 000011
【図１０】
2020195135.tif 000012
【図１１】
2020195135.tif 000013
【図１２】
2020195135.tif 000014
【図１３】
2020195135.tif 000015
【図１４】
2020195135.tif 000016
【図１５】
2020195135.tif 000017
【図１６】
2020195135.tif 000018
【図１７】
2020195135.tif 000019
【図１８】
2020195135.tif 000020