(57)【要約】【課題】メモリシステムの信頼性の実効的な向上を図る。【解決手段】書き込み制御部が、書き込まれたデータのエラー数にそれぞれ対応する複数の検査行列が記憶された記憶部に、データの書き込みを行う。記憶部内に設けられた演算部は、記憶部に書き込まれたデータの第１の誤り訂正処理の工程で認識したエラー数に対応する検査行列を、複数の検査行列の中から選択的に用いて、書き込まれたデータに対して第１の誤り訂正処理を施す。【選択図】図９
2016062463.tif 000002
【特許請求の範囲】
【請求項１】
データが書き込まれると共に、書き込まれたデータのエラー数にそれぞれ対応する複数の検査行列が記憶された記憶部と、
前記記憶部内に設けられ、前記記憶部に書き込まれたデータの第１の誤り訂正処理で認識したエラー数に対応する前記検査行列を、複数の前記検査行列の中から選択的に用いて、書き込まれた前記データに対して前記第１の誤り訂正処理を施す演算部と
を有するメモリシステム。
【請求項２】
前記演算部は、確率値の論理演算を行い、誤り訂正処理を施し、前記記憶部に書き込まれていたデータのエラー数を認識し、記憶されていた複数の検査行列の中から適した検査行列を選択する
請求項１に記載のメモリシステム。
【請求項３】
前記データとして、書き込みを行う電圧値を調整することで、値が書き換わる確率を所望の確率に制御した確率値が前記記憶部に書き込まれ、
前記演算部は、前記記憶部に書き込まれた複数の前記確率値の論理演算を行い、論理演算結果を前記記憶部に書き込むと共に、前記記憶部に書き込まれた前記確率値に対して、前記第１の誤り訂正処理を施す
請求項１または請求項２に記載のメモリシステム。
【請求項４】
前記記憶部に対して、前記データの書き込みを行うと共に、前記演算部で第１の誤り訂正処理が施された前記データに対して、前記第１の誤り訂正処理とは異なる第２の誤り訂正処理を施すコントローラを、さらに備えた
請求項１から請求項３のうち、いずれか一項に記載のメモリシステム。
【請求項５】
前記記憶部は、第１記憶部および第２記憶部に、物理的に分割されており、
前記演算部は、前記第１記憶部または第２記憶部のうち、いずれか一方内に設けられている
請求項１から請求項４のうち、いずれか一項に記載のメモリシステム。
【請求項６】
前記記憶部は、第１記憶部および第２記憶部に、物理的に分割されており、
前記演算部は、第１演算部および第２演算部に、物理的に分割されており、前記第１演算部が前記第１記憶部内に設けられ、前記第２演算部が前記第２記憶部内に設けられている
請求項１から請求項４のうち、いずれか一項に記載のメモリシステム。
【請求項７】
データが書き込まれると共に、書き込まれたデータのエラー数にそれぞれ対応する複数の検査行列が記憶された記憶部と、
前記記憶部内に設けられ、前記記憶部に書き込まれたデータの第１の誤り訂正処理の工程で認識したエラー数に対応する前記検査行列を、複数の前記検査行列の中から選択的に用いて、書き込まれた前記データに対して前記第１の誤り訂正処理を施す演算部と
を有する誤り訂正装置。
【請求項８】
書き込み制御部が、書き込まれたデータのエラー数にそれぞれ対応する複数の検査行列が記憶された記憶部に、データの書き込みを行う書き込みステップと、
前記記憶部内に設けられた演算部が、前記記憶部に書き込まれたデータの第１の誤り訂正処理の工程で認識したエラー数に対応する前記検査行列を、複数の前記検査行列の中から選択的に用いて、書き込まれた前記データに対して前記第１の誤り訂正処理を施す演算ステップと
を有する誤り訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、メモリシステム、誤り訂正装置、および誤り訂正方法に関する。
【背景技術】
【０００２】
一般的なホストシステムとして、例えばコンピュータシステムが備えるストレージ装置として磁気式のハードディスクドライブ（ＨＤＤ）が知られている。また、ストレージ装置として、ＮＡＮＤフラッシュメモリ等の不揮発性半導体メモリを備えた固体ドライブ（ＳＳＤ）、および、埋め込みＮＡＮＤフラッシュメモリ等が知られている。ＳＳＤおよび埋め込みＮＡＮＤフラッシュメモリは、ストレージ装置に分類されるが、規模が拡張されたメモリシステムともいえる。
【０００３】
このようなメモリシステムは、例えばインタフェースと、第１記憶部と、第２記憶部と、コントローラとを備える。第１記憶部は、データを格納する。第２記憶部は、データ書き込み時または読み出し時のバッファメモリである。第１記憶部は、不揮発性メモリであり、第２記憶部よりも大容量であるが、アクセス速度が遅い。また、第２記憶部は、インタフェースの通信速度と、第１記憶部の書き込み速度および読み出し速度との速度差を補うために使用される。
【０００４】
例えば、第１記憶部は不揮発性のフラッシュメモリである。例えば、第２記憶部は揮発性のＤＲＡＭまたはＳＲＡＭである。ＤＲＡＭは、「Dynamic  Random  Access  Memory」の略記である。ＳＲＡＭは、「Static  Random  Access  Memory」の略記である。このようなメモリシステムでは、ホストシステムから送信された書き込みデータは、誤り訂正（ＥＣＣ）のために符号化されて第１記憶部へ書き込まれる。第１記憶部から読み出されたデータは、エラー訂正処理および復号化処理が施された後、ホストシステムへ送信される。
【０００５】
第１記憶部が大容量化するほど、エラーの発生率は高まる。また、第１記憶部の書き込み消去回数が増えるほど、エラーの発生率は高まる。これを補うために、コントローラおよびメモリ周辺部に、第１記憶部のエラー発生傾向に応じたエラー訂正を行う機能ブロックが設けられている。エラー発生傾向を把握し、最適な「読み出し」および「書き込み」および「消去」の各動作を行うことで、第１記憶部の寿命を実効的に伸ばすことが可能となる。
【０００６】
しかし、第１記憶部の設計および微細化の世代毎および特性毎に、最適な「読み出し」、「書き込み」および「消去」の各動作を解析し、コントローラに対してアルゴリズムまたはパラメータを実装するには、第１記憶部の全ての動作を網羅的に試験する必要がある。このため、専用の解析プログラムを用いても、各動作の解析に長時間を要する問題があった。
【０００７】
また、大量に生産される第１記憶部の平均的な動作傾向に対応するアルゴリズムまたはパラメータを、コントローラに実装させることは可能である。しかし、第１記憶部毎の特性（＝ＬＳＩチップ毎の個々の特性）に対応するアルゴリズムまたはパラメータを、コントローラに実装させることは困難となっていた。ＬＳＩは「Large  Scale  Integration」の略記である。このようなことから従来のメモリシステムは、第１記憶部毎に動作を最適化することは困難であり、第１記憶部の寿命を実効的に伸ばすことは困難となっていた。従って、従来のメモリシステムは、信頼性の低いシステムとなっていた。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】米国公開ＵＳ２０１２／０２３９８６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、信頼性の実効的な向上を図ったメモリシステム、および信頼性を実効的に向上させる演算が可能な誤り訂正装置および誤り訂正方法を提供することである。
【課題を解決するための手段】
【００１０】
実施の形態のメモリシステムは、書き込み制御部が、書き込まれたデータのエラー数にそれぞれ対応する複数の検査行列が記憶された記憶部に、データの書き込みを行う。記憶部内に設けられた演算部は、記憶部に書き込まれたデータの第１の誤り訂正処理の工程で認識したエラー数に対応する検査行列を、複数の検査行列の中から選択的に用いて、書き込まれたデータに対して第１の誤り訂正処理を施す。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施の形態のメモリシステムの基本構成を示す図である。
【図２】図２は、実施の形態のメモリシステムのハードウェア構成図である。
【図３】図３は、実施の形態のメモリシステムの第１記憶部のメモリセルアレイの回路図である。
【図４】図４は、実施の形態のメモリシステムの第２記憶部のハードウェア構成図である。
【図５】図５は、実施の形態のメモリシステムに設けられているメモリセルアレイの構造を示す図である。
【図６】図６は、実施の形態のメモリシステムに設けられている第１記憶部と第２記憶部との接続関係を説明するための図である。
【図７】図７は、実施の形態のメモリシステムに設けられている第１記憶部に対するデータの読み出し動作を説明するためのフローチャートである。
【図８】図８は、実施の形態のメモリシステムに設けられている第１記憶部に対するデータの書き込み動作を説明するためのフローチャートである。
【図９】図９は、実施の形態のメモリシステムにおいて、誤り訂正機能を実現している要部のブロック図である。
【図１０】図１０は、実施の形態のメモリシステムにおいて、誤り訂正機能を実現する他の構成を説明するためのブロック図である。
【図１１】図１１は、実施の形態のメモリシステムにおいて、誤り訂正機能を実現する他の構成を説明するためのブロック図である。
【図１２】図１２は、実施の形態のメモリシステムにおいて、誤り訂正機能を実現する他の構成を説明するためのブロック図である。
【図１３】図１３は、実施の形態のメモリシステムの記憶部内に設けられている確率演算部のブロック図である。
【図１４】図１４は、実施の形態のメモリシステムにおける確率演算処理の流れを説明するためのフローチャートである。
【図１５】図１５は、実施の形態のメモリシステムにおけるデジタル的な確率演算処理を説明するための図である。
【図１６】図１６は、実施の形態のメモリシステムにおけるアナログ的な確率演算処理を説明するための図である。
【図１７】図１７は、実施の形態のメモリシステムのＡＮＤゲートによる確率演算処理を説明するための図である。
【図１８】図１８は、実施の形態のメモリシステムの確率演算処理におけるデータの流れを説明するための図である。
【図１９】図１９は、実施の形態のメモリシステムのＯＲゲートによる確率演算処理を説明するための図である。
【図２０】図２０は、実施の形態のメモリシステムの確率値の制御を説明するための図である。
【図２１】図２１は、実施の形態のメモリシステムの確率値の第１の制御手法を説明するための図である。
【図２２】図２２は、実施の形態のメモリシステムの確率値の第２の制御手法を説明するための図である。
【図２３】図２３は、実施の形態のメモリシステムの確率値の第３の制御手法を説明するための図である。
【図２４】図２４は、実施の形態のメモリシステムの検査行列を表現するタナーグラフを示す図である。
【図２５】図２５は、実施の形態のメモリシステムの確率演算部が行うＬＤＰＣ符号を用いた基本的な誤り訂正処理の流れを示すフローチャートである。
【図２６】図２６は、実施の形態のメモリシステムの確率演算部が行うＬＤＰＣ符号を用いた誤り訂正処理において、チェックノードと変数ノードとの間のメッセージの送受を説明するための図である。
【図２７】図２７は、実施の形態のメモリシステムの確率演算部が行うＬＤＰＣ符号を用いた誤り訂正処理において、変数ノードに対応するデジタルデータの真の値の推定動作を説明するための図である。
【図２８】図２８は、実施の形態のメモリシステムの確率演算部が行うＬＤＰＣ符号を用いた誤り訂正処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、一例として、実施の形態のメモリシステムを、図面を参照しながら詳細に説明する。
【００１３】
まず、図１に、メモリシステムの基本構成を示す。図１に示すように、メモリシステムは、コントローラ２０、第１記憶部１００、第２記憶部２００を備える。
【００１４】
第１記憶部１００は、メモリシステムの中で最も記憶容量が大きく、信頼性に優れたファイル保存用のメモリである。第１記憶部１００は、例えばＮＡＮＤフラッシュメモリで構成され得る。第２記憶部２００は、第１記憶部１００よりも記憶容量が小さいが、ランダムアクセス性に優れて、より高速に読み書き可能なメモリである。第２記憶部２００としては、揮発性メモリであれば例えばＤＲＡＭ、ＳＲＡＭを用いることができる。また、第２記憶部２００としては、不揮発性メモリであれば例えばＭＲＡＭ、ＲｅＲＡＭ、ＰＣＲＡＭ、または、ＦｅＲＡＭ等を用いることができる。ＭＲＡＭは、「Magnetoresistive  Random  Access  Memory」の略記である。ＲｅＲＡＭは、「Resistance  Random  Access  Memory」の略記である。ＰＣＲＡＭは、「Phase  Change  Random  Access  Memory」の略記である。ＦｅＲＡＭは、「Ferroelectric  Random  Access  Memory」の略記である。
【００１５】
第１記憶部１００は、記憶容量が大きいことを優先しており、メモリセルの素子は極度に微細加工された素子で作成される。第１記憶部１００が、例えばＮＡＮＤフラッシュメモリである場合、フローティングゲートを有するトランジスタからなる一つの記憶素子の、典型的な寸法が１９ｎｍ以下にまで微細化される。このため、「読み出し」、「書き込み」および「消去」の各動作のシーケンスが、メモリセルに対して複雑な影響を与え、無視できないエラーレートが発生する。このエラーレートは、製造直後の初期不良だけが影響する訳ではなく、セル構造や材料の消耗がユーザの使用に伴って生じて増えるエラーである。
【００１６】
一般的なメモリシステムには、エラーレートをゼロに抑えてホストにデータを送るために、誤り訂正部が設けられている。エラーレートが低い場合、データの０と１のデジタルの代数演算によるＢＣＨ符号の誤り訂正方式が用いられることが多い。この場合、専用回路を作成することは比較的容易である。
【００１７】
しかし、メモリセルの記憶容量の増加に伴い、ビットエラーの挙動は、世代毎、製品毎に異なる。このため、メモリセル毎に最適化した誤り訂正手法またはパラメータを適用することが好ましい。特に、記憶容量の大容量化に伴い、読み出し時のエラー発生率に応じてアナログ情報を活用する誤り訂正手法として、ＬＤＰＣ符号による誤り訂正手法が用いられる場合もある。ＬＤＰＣは、「Low  Density  Parity  Check」の略記である。このような様々な誤り訂正手法が適用される多品種のコントローラが必要となると、メモリシステムの開発時間が長時間化し、メモリシステムの信頼性にも悪影響を与える。
【００１８】
メモリシステムは、第１記憶部１００の「読み出し」、「書き込み」、および「消去」に関する情報を、メモリシステム内部で自律的に統計化して、誤りの発生を内部で認識し、信頼性を管理可能であることが好ましい。
【００１９】
第２記憶部２００は、複雑化するエラー訂正の情報処理、または、論理物理アドレス変換等に使用される。第２記憶部２００は、第１記憶部１００よりも、極めて高速であり、記憶保持よりも情報処理のために用いられることが望ましい。
【００２０】
以下に説明する実施の形態のメモリシステムは、主に第２記憶部２００内にて、第１記憶部１００の「読み出し」、「書き込み」、「消去」に関する情報を統計化して最適なシーケンスを得るために、メモリシステム内部で効率的に演算を進める構成と方法を開示する。以下、具体的に説明する。
【００２１】
図２は、実施の形態のメモリシステムのハードウェア構成図である。図２に示すように、メモリシステムは、インタフェース（Ｉ／Ｆ）１０と、コントローラ２０と、第１記憶部１００と、第２記憶部２００と、データバス（バス）３００とを備えている。インタフェース１０、コントローラ２０、第１記憶部１００、および、第２記憶部２００は、データバス３００を介して相互にデータの送受信が可能となっている。
【００２２】
インタフェース１０は、ＡＭＢＡ（Advanced  Microcontroller  Bus  Architecture）等のバスを介して、メモリシステム外のホスト装置（ホストシステム）と接続される。ホスト装置と接続するためのバスとしては、例えばＳＡＴＡ（Serial  Advanced  Technology  Attachment）、ＰＣＩ  Ｅｘｐｒｅｓｓ、ｅＭＭＣ（embedded  MMC）、ＵＦＳ（Universal  Flash  Storage）および、ＵＳＢ（Universal  Serial  Bus）等を適宜選択することができる。規格の相違等で、２種類以上のバス線をメモリシステム内で用いてもよい。
【００２３】
インタフェース１０は、メモリシステム外のホスト装置からの要求を受信する。例えば、インタフェース１０は、第１記憶部１００に対するデータの書き込みを要求する書き込み要求、および第１記憶部１００からのデータの読み出しを要求する読み出し要求をホスト装置から受信する。書き込み要求は、書き込みを要求するデータと、第１記憶部１００のうち、データを書き込むべき位置を示すＲＡＷアドレス（物理アドレス）とを含んで構成される場合がある。また、書き込み要求は、書き込みを要求するデータと、プログラム上の仮想空間アドレスのうち、書き込みを要求するデータが割り当てられる場所を示す論理アドレスとを含んで構成される場合がある。
【００２４】
一方、読み出し要求は、第１記憶部１００のうち、データの読み出しを行う位置を示すＲＡＷアドレスを含んで構成される場合がある。また、読み出し要求は、プログラム上の仮想空間アドレスのうち、読み出しを要求するデータが割り当てられる場所を示す論理アドレスを含んで構成される場合がある。論理アドレスは、ホスト装置によって指定される。
【００２５】
コントローラ２０は、インタフェース１０で受信したホスト装置からの要求に応じて、第１記憶部１００に対するデータの読み出しおよび書き込みを制御する制御装置である。コントローラ２０は、アドレス信号線１１０を介してアドレスデコーダ１０２と接続され、制御信号線１２０を介して第２記憶部２００と接続される。また、コントローラ２０は、制御信号線１３０を介してレジスタ１０５と接続され、制御信号線１４０を介してインタフェース１０と接続される。
【００２６】
また、コントローラ２０は、インタフェース１０、第２記憶部２００、および、第１記憶部１００の間の信号の送受信を制御するための作業領域となるＲＡＭ等を備える。さらに、コントローラ２０は、第１記憶部１００から出力されたデータに対して施す誤り訂正機能（ＥＣＣ機能）を備えている。コントローラ２０は、インタフェース１０を介して最終的にメモリシステム外（ホスト装置）へ出力されるデータを、ＥＣＣ機能で誤り訂正処理して出力する。
【００２７】
第１記憶部１００は、メモリシステム外（例えばホスト装置）から供給されたデータを記憶可能な装置である。以下の説明では、第１記憶部１００が、ＮＡＮＤフラッシュメモリで構成される場合を例に挙げて説明するが、これに限定されるものではない。以下、第１記憶部１００の具体的な内容を説明する。
【００２８】
図２に示すように、第１記憶部１００は、メモリセルアレイ１０１と、アドレスデコーダ１０２と、選択部１０３と、センスアンプ１０４と、レジスタ１０５とを含む。メモリセルアレイ１０１には、行方向（図２の左右方向）に延在する複数のワード線ＷＬ（Ｗоｒｄ線ＷＬ）、および、列方向（図２の上下方向）に延在する複数のビット線ＢＬ（Ｂｉｔ線ＢＬ）が配置されている。複数のＷоｒｄ線ＷＬは、選択部１０３を介してアドレスデコーダ１０２に接続されている。また、複数のビット線ＢＬは、センスアンプ１０４に接続されている。
【００２９】
メモリセルアレイ１０１は、複数のＷоｒｄ線ＷＬと複数のビット線ＢＬとの各交差に対応してマトリクス状に配置される複数のメモリセルを有する。各メモリセルは、浮遊ゲート電極に蓄積される電荷量に応じて、２値以上の情報を記憶可能なメモリセルとなっている。以下の説明では、「第１のメモリセル」と称する場合がある。一例として、第１のメモリセルは、ｐ型半導体基板上にゲート絶縁膜を介して形成された浮遊ゲート（導電層）と、浮遊ゲート上にゲート間絶縁膜を介して形成された制御ゲートとを含んだＦＧ型となっている。なお、ＦＧ型の代わりに、例えばＭＯＮＯＳ型等の他の型を用いてもよい。
【００３０】
図３は、メモリセルアレイ１０１の概略構成を示す図である。図３の例では、ｍ＋１本（ｍ≧１）のビット線ＢＬ０〜ＢＬｍが設けられている。ビット線ＢＬ０〜ＢＬｍは互いに平行に配置されている。以下の説明では、ビット線ＢＬ０〜ＢＬｍを互いに区別しない場合は、単に「ビット線ＢＬ」と称する。また、図３の例では、ビット線ＢＬ０〜ＢＬｍと１対１に対応するｍ＋１個のアンプＳＡ０〜ＳＡｍが設けられる。図２に示すセンスアンプ１０４は、このｍ＋１個のアンプＳＡ０〜ＳＡｍを含んで構成される。なお、図３の例では、ビット線ＢＬ０〜ＢＬｍ毎にアンプＳＡ０〜ＳＡｍが設けられる場合を例示したが、これに限らず、例えば２本以上のビット線ＢＬで１つのアンプを共用する構成としてもよい。
【００３１】
また、図３に示すように、メモリセルアレイ１０１には、ｋ＋１（ｋ≧１）個の記憶部ＭＢ０〜ＭＢｋが設けられている。各記憶部ＭＢ０〜ＭＢｋは、ビット線ＢＬ０〜ＢＬｍに沿って列方向に並べて配置されている。以下の説明では、記憶部ＭＢ０〜ＭＢｋを互いに区別しない場合は、単に「記憶部ＭＢ」と称する。ここで、各記憶部ＭＢ０〜ＭＢｋにおいては、ビット線ＢＬ０〜ＢＬｍ毎に、ＮＡＮＤストリングＭＳが設けられている。ＮＡＮＤストリングＭＳは、ｎ＋１（ｎ≧１、例えばｎ＝３１）個の第１のメモリセルＭＣ０〜ＭＣｎからなる第１のメモリセル群と、第１のメモリセル群の両端に設けられた選択ゲートトランジスタＳＧ１、ＳＧ２とから構成されている。なお、以下の説明では、選択ゲートトランジスタを単に「選択ゲート」と称する場合がある。
【００３２】
第１のメモリセルＭＣ０〜ＭＣｎは互いに直列接続されると共に、一端の第１のメモリセルＭＣ０には選択ゲートＳＧ１が直列に接続され、他端の第１のメモリセルＭＣｎには選択ゲートＳＧ２が直列に接続されている。ビット線ＢＬ０〜ＢＬｍごとに設けられたＮＡＮＤストリングＭＳの一端は選択ゲートＳＧ１を介してセルソース線ＣＳＬに共通に接続され、ＮＡＮＤストリングＭＳの他端は、選択ゲートＳＧ２を介してビット線ＢＬ０〜ＢＬｍにそれぞれ接続されている。
【００３３】
図３に示すように、記憶部ＭＢｊでは、ビット線ＢＬ０〜ＢＬｍに直交するようにＷоｒｄ線ＷＬ０ｊ〜ＷＬｎｊおよび選択ゲート線ＳＧＳｊ、ＳＧＤｊが配置されている。ここで、Ｗоｒｄ線ＷＬ０ｊ〜ＷＬｎｊは、第１のメモリセルＭＣ０〜ＭＣｎのゲート電極にそれぞれ接続され、選択ゲート線ＳＧＳｊは選択ゲートＳＧ１のゲート電極に接続され、選択ゲート線ＳＧＤｊは、選択ゲートＳＧ２のゲート電極に接続されている。他の記憶部ＭＢも同様の構成である。以下の説明では、Ｗоｒｄ線ＷＬ０ｊ〜ＷＬｎｊを互いに区別しない場合は、単に「Ｗоｒｄ線ＷＬ」と称する。
【００３４】
ここで、記憶部ＭＢｊに含まれるｍ＋１個のＮＡＮＤストリングＭＳのうち、ビット線ＢＬ０に設けられたＮＡＮＤストリングＭＳの第１のメモリセルＭＣｎは、厳密には、ビット線ＢＬ０と、Ｗоｒｄ線ＷＬｎｊとの交差点に配置されるものではないが、ここでは、第１のメモリセルＭＣｎは、ビット線ＢＬ０とＷоｒｄ線ＷＬｎｊとの交差に対応して配置されていると考えることができる。同様に、記憶部ＭＢｊに含まれるｍ＋１個のＮＡＮＤストリングＭＳのうち、ビット線ＢＬｍに設けられたＮＡＮＤストリングＭＳの第１のメモリセルＭＣｎも、厳密には、ビット線ＢＬｍとＷоｒｄ線ＷＬｎｊとの交差点に配置されるものではないが、ここでは、この第１のメモリセルＭＣｎは、ビット線ＢＬｍとＷоｒｄ線ＷＬｎｊとの交差に対応して配置されていると考えることができる。他の第１のメモリセルＭＣについても同様に考えることができる。
【００３５】
次に、第１記憶部１００に対するデータの読み出し時の動作の概略を説明する。データの読み出し時には、まず、各ビット線ＢＬに予め電荷を蓄積したチャージ状態を生成するために、各ビット線ＢＬに対して所定のチャージ電圧が供給される。これを、プリチャージと呼ぶ。第ｊ番目の記憶部ＭＢｊ（図３参照）を例に挙げて説明すると、選択ゲート線ＳＧＳｊおよびＳＧＤｊに対しては、選択ゲートＳＧ１、ＳＧ２をＯＮ状態に遷移させる電圧として、例えば４〜５Ｖの電圧が供給される。また、選択したページに対応するＷоｒｄ線ＷＬに対しては、データを読み出すための電圧Ｖ＿ＲＥＡＤ（以下の説明では、「読み出し電圧Ｖ＿ＲＥＡＤ」と称する場合がある）として、例えば０Ｖの電圧が供給される。そして、それ以外の３１本（この例ではｎ＝３１）のＷоｒｄ線ＷＬに対しては、所定電圧として、例えば５Ｖの電圧が供給される。
【００３６】
読み出し電圧Ｖ＿ＲＥＡＤが供給されたＷоｒｄ線ＷＬに、ゲート電極が接続された第１のメモリセル（ＦＧ−ＭＯＳＦＥＴ）は、閾値電圧Ｖｔｈが０Ｖよりも高いか低いかで、そのＦＧ−ＭＯＳＦＥＴのソースとドレインが電気的に導通するか否かが決まる。ＦＧ−ＭＯＳＦＥＴのソースとドレインが導通する場合は、ビット線ＢＬにプリチャージしておいた電荷がＮＡＮＤストリングＭＳを介して接地電位に抜けるので、ビット線ＢＬの電位が低下する。これにより、ビット線ＢＬの信号はローレベル（「０」）となる。
【００３７】
一方、ＦＧ−ＭＯＳＦＥＴのソースとドレインが導通しない場合は、ビット線ＢＬにプリチャージしておいた電荷は抜けずにチャージ電圧が維持されるので、ビット線ＢＬの信号はハイレベル（「１」）となる。このようにして、読み出し対象の第１のメモリセル（ＦＧ−ＭＯＳＦＥＴ）の記憶状態（閾値状態）を示す値として、「０」または「１」を読み出すことができる。
【００３８】
次に、第１記憶部１００に対するデータ書き込み時における動作の概略を説明する。データの書き込み（ＰＲＯＧＲＡＭ）の場合は、レジスタ１０５で一時的に保持されたデータに応じて、書き込みを行うビット線ＢＬに対しては選択用の電圧として例えば０Ｖが供給され、書き込まないビット線ＢＬに対しては非選択用の電圧として例えば電源電圧Ｖｄｄが供給される。データの書き込みとは、第１のメモリセル（ＦＧ−ＭＯＳＦＥＴ）の閾値を変化させることに相当する。第ｊ番目の記憶部ＭＢｊを例に挙げて説明する。選択ゲート線ＳＧＳｊおよびＳＧＤｊに対しては、選択ゲートＳＧ１、ＳＧ２をＯＮ状態に遷移させる電圧として、例えば４〜５Ｖの電圧が供給される。また、選択したページに対応するワード線ＷＬに対しては、データを書き込むための電圧Ｖ＿ＰＲＯＧＲＡＭ（以下の説明では、「書き込み電圧Ｖ＿ＰＲＯＧＲＡＭ」と称する場合がある）として、例えば１５〜２０Ｖの電圧が供給される。それ以外の３１本のＷоｒｄ線に対しては、所定電圧（例えば１０Ｖ）が供給される。
【００３９】
この書き込み動作によって、書き込み対象の第１のメモリセル（書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが供給されたＷоｒｄ線ＷＬと、選択用の電圧０Ｖが供給されたビット線ＢＬとの交差に対応して配置される第１のメモリセル）には、ビット線ＢＬの選択用の０Ｖの電圧がチャネル電位として伝わっている。このため、書き込み対象の第１のメモリセルのＦＧには、Ｖ＿ＰＲＯＧＲＡＭ分の電圧が加わることになり、チャネルからＦＧに電子が注入されて蓄積する。電子が蓄積すると、ＦＧ−ＭＯＳＦＥＴの閾値が高くなる。この状態が、「０」が書き込まれた状態である。ＦＧ−ＭＯＳＦＥＴは、製造時の初期状態では、ＦＧに電子が蓄積されておらず、閾値は０Ｖより低い状態にある。この状態が、「１」が書き込まれた状態である。
【００４０】
つまり、ＮＡＮＤフラッシュメモリは、最初は全ての第１のメモリセルに「１」が記憶されており、データの書き込み動作により第１のメモリセルを、「０」が書き込まれた状態に変化させるという動作原理である。
【００４１】
なお、非選択用の電圧（この例では電源電圧Ｖｄｄ）が供給されたビット線ＢＬと繋がるＮＡＮＤストリングＭＳでは、ワード線ＷＬに電圧を与えられてもＦＧに電子は注入されない。なぜなら、このＮＡＮＤストリングＭＳに繋がるビット線ＢＬには、非選択用の電圧Ｖｄｄが印加されているので、ＮＡＮＤストリングＭＳ内の非選択のＦＧ−ＭＯＳＦＥＴのチャネルを介して選択されているＦＧ−ＭＯＳＦＥＴのチャネル電位が高く持ち上げられた状態になる。このため、選択されたＷоｒｄ線ＷＬ（書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが、供給されたＷоｒｄ線ＷＬ）に接続された書き込み対象の第１のメモリセルのＦＧには、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭよりも十分小さい電圧しか加わらないからである。
【００４２】
次に、第１記憶部１００に記憶されたデータを消去（ＥＲＡＳＥ）するときの動作の概略を説明する。第ｊ番目の記憶部ＭＢｊ（図３参照）を例に挙げて説明する。選択ゲートＳＧ１、ＳＧ２で囲まれた全てのワード線ＷＬおよびビット線ＢＬの領域、すなわち記憶部ＭＢｊに対して、ワード線電圧を０Ｖ、ビット線電圧をフローティング電位にする。そして、この状態で、ブロック内のウェルに対して消去電圧Ｖ＿ＥＲＡを印加して、全ての第１のメモリセルから電子を基板ウェル側へ引き抜く。
【００４３】
書き込みと消去に関しては、同一のワード線ＷＬに接続されるそれぞれの第１のメモリセルの間で、閾値の変動のばらつきが生じる。このため、変動が小さい第１のメモリセルに関しては、それを検証する手順（Ｖｅｒｉｆｙ）で判定する。また、閾値の変動量が十分ではない第１のメモリセルに対応するビット線ＢＬに関しては、追加で書き込み、または、消去が施される。ＮＡＮＤフラッシュメモリは、閾値の大きさに応じた多値動作も可能である。基本的な動作は２値のときと同様であるが、多値動作の場合は、読み出しの際の電圧レベルを細かく分け、書き込みの際も閾値の変動量を検証（Ｖｅｒｉｆｙ）しながら閾値が細かいレベルに分かれるように書き込みを行うため、それぞれの詳細のシーケンスが異なる。また、多値動作の場合は、閾値を細かく分けているため、隣接する第１のメモリセル間の容量結合による閾値変動の影響を受け易い。このため、書き込むページ（ワード線）が隣接しないように書き込む等の工夫がされることもある。
【００４４】
以上、説明した第１記憶部１００は、ＮＡＮＤフラッシュメモリで構成されるが、これに限定されるものではなく、記憶不揮発性を有する半導体メモリであれば、あらゆる記憶媒体を使用することができる。例えば、第１記憶部１００として、ＭＲＡＭ、ＲｅＲＡＭ、ＦｅＲＡＭ、ＰＣＲＡＭ等の不揮発性メモリを用いてもよい。要するに、第１記憶部１００は、複数の第１配線および複数の第２配線の各交差に対応してマトリクス状に配置される複数の第１のメモリセルを含む記憶装置であればよい。
【００４５】
次に、第２記憶部２００について説明する。実施の形態のメモリシステムの場合、Ｌ２Ｐ変換の機能を第２記憶部２００が担う。第２記憶部２００のＷоｒｄ線ＷＸは、選択部１０３を介して、第１記憶部１００のＷоｒｄ線ＷＬに接続される。また、第２記憶部２００のビット線ＢＸは、データバスに接続されてもよい。以下の説明では、第２記憶部２００は、ＲｅＲＡＭで構成される場合を例に挙げて説明するが、これに限定されるものではない。
【００４６】
図４は、第２記憶部２００の構成例を示す図である。図４に示すように、第２記憶部２００は、メモリセルアレイ２０１と、制御部２０２と、アドレス変換部２０３と、ワード線駆動部２０４とを含む。
【００４７】
メモリセルアレイ２０１は、複数のＷоｒｄ線ＷＸ、および、複数のビット線ＢＸの各交差に対応してマトリクス状に配列される複数の第２メモリセルを含む。複数のＷоｒｄ線ＷＸは、それぞれ第１記憶部１００の複数のＷоｒｄ線ＷＬの何れかに接続されている。また、複数のビット線ＢＸは、それぞれホスト装置から指定される論理アドレスに予め対応付けられている。
【００４８】
第２メモリセルは、Ｗоｒｄ線ＷＸとビット線ＢＸとの間に挟持される可変抵抗素子を含む。第２メモリセルの抵抗状態は、第２メモリセルに接続されたＷоｒｄ線ＷＸおよびビット線ＢＸにそれぞれ印加される電圧に応じて、第１抵抗状態、または、第１抵抗状態よりも抵抗値が低い第２抵抗状態に少なくとも設定される。
【００４９】
図５は、メモリセルアレイ２０１の具体的な構造の一例を示す図である。図５に示すように、メモリセルアレイ２０１は、第１方向（図５の上下方向）に延びる複数本の上部配線（この例ではＷоｒｄ線ＷＸ）を有している。また、メモリセルアレイ２０１には、第１方向と直交する第２方向（図５の左右方向）に延びる複数本の下部配線（この例ではビット線ＢＸ）が、上下方向に対向して交差するように設けられている。そして、各交差部においては、上部配線と下部配線との間に円筒形状の第２メモリセルが形成されている。図５の例では、第２メモリセルは、直列に接続される可変抵抗素子ＶＲおよびダイオード（整流素子）Ｄを含んで構成されている。ダイオードＤは、配線間の回り込み電流（いわゆるSneak  Path）を抑制するために設けている。
【００５０】
この例では、可変抵抗素子ＶＲは、高抵抗状態と低抵抗状態の２つの抵抗状態の間を遷移する。例えば、第２メモリセルの両端間に順方向の所定の電圧が印加されるように、Ｗоｒｄ線ＷＸおよびビット線ＢＸの電圧を制御する。これにより、可変抵抗素子ＶＲ内に拡散金属元素による導電性フィラメントが形成され、可変抵抗素子ＶＲが低抵抗状態に遷移する。また、第２メモリセルの両端間に逆方向の所定の電圧が印加されるように、Ｗоｒｄ線ＷＸおよびビット線ＢＸの電圧を制御する。これにより、可変抵抗素子ＶＲ内の拡散金属元素が回収されて導電性フィラメントが消滅し、可変抵抗素子ＶＲが高抵抗状態に遷移する。なお、例えば可変抵抗素子ＶＲは、３つ以上の抵抗状態の間を遷移する形態であってもよい。
【００５１】
第２記憶部２００のメモリセルアレイの規模は、例えば８Ｍｂｉｔ×８Ｍｂｉｔ（すなわち１ＭＢｙｔｅ×１ＭＢｙｔｅ）等である。このときの記憶容量は１ＴＢｙｔｅである。チップが２ｃｍ×２ｃｍの面積のとき、配線が１０ｎｍ幅で、線の繰り返しピッチが２０ｎｍとすれば、２ｃｍ÷２０ｎｍ＝１Ｅ６本の配線が形成できる。さらにＲｅＲＡＭの場合は、積層が可能であるため、これが８層以上あるとすれば、８Ｍｂｉｔ×８Ｍｂｉｔ以上の規模を実現することができる。
【００５２】
図６は、第１記憶部１００と第２記憶部２００との接続関係を説明するための図である。図６では、簡略化のために、第２記憶部２００のメモリセルアレイ２０１には、４本のＷоｒｄ線ＷＸ（ＷＸ００〜ＷＸ１１）および４本のビット線ＢＸ（ＢＸ００〜ＢＸ１１）が配置される態様を示している。また、図６では、第１記憶部１００のメモリセルアレイ１０１には、４本のＷоｒｄ線ＷＬ（ＷＬ０〜ＷＬ３）および４本のビット線ＢＬ（ＢＬ０〜ＢＬ３）が配置される態様を示している。
【００５３】
また、図６に示す第１記憶部１００の選択部１０３は、複数のパストランジスタＴｐｓと、複数のゲートトランジスタＴｇｓとを含んで構成される。複数のパストランジスタＴｐｓは、第２記憶部２００の複数のＷоｒｄ線ＷＸと１対１に対応し、それぞれが、コントローラ２０の制御の下、Ｗоｒｄ線ＷＸと第１記憶部１００の何れかのＷоｒｄ線ＷＬとの接続の可否を切り替える。コントローラ２０は、論理アドレスに基づいて第１記憶部１００に対するデータの読み出し、または、書き込みを行う場合、複数のパストランジスタＴｐｓの各々をオン状態に制御する一方、複数のゲートトランジスタＴｇｓの各々をオフ状態に制御する。なお、複数のパストランジスタＴｐｓのオンオフを制御する主体は、例えば第２記憶部２００の制御部２０２であってもよい。
【００５４】
複数のゲートトランジスタＴｇｓは、第１記憶部１００の複数のＷоｒｄ線ＷＬと１対１に対応し、それぞれが、コントローラ２０の制御の下、Ｗоｒｄ線ＷＬとアドレスデコーダとの接続の可否を切り替える。コントローラ２０は、ＲＡＷアドレスに基づく第１記憶部１００に対するデータの読み出しまたは書き込みを行う場合、複数のゲートトランジスタＴｇｓの各々をオン状態に制御する一方、複数のパストランジスタＴｐｓの各々をオフ状態に制御する。
【００５５】
図６に示すように、第２記憶部２００の４本のＷоｒｄ線ＷＸ（ＷＸ００〜ＷＸ１１）の各々は、パストランジスタＴｐｓを介して、第１記憶部１００の４本のＷоｒｄ線ＷＬ（ＷＬ０〜ＷＬ３）のうちの何れかと接続される。図６の例では、Ｗоｒｄ線ＷＸ１１はＷоｒｄ線ＷＬ３に接続される。また、Ｗоｒｄ線ＷＸ１０は、Ｗоｒｄ線ＷＬ２に接続される。また、Ｗоｒｄ線ＷＸ０１は、Ｗоｒｄ線ＷＬ１に接続される。さらに、Ｗоｒｄ線ＷＸ００は、Ｗоｒｄ線ＷＬ０に接続される。なお、Ｗоｒｄ線ＷＸとＷоｒｄ線ＷＬとが接続されるとは、図６のように、パストランジスタＴｐｓ等を介して接続される態様、および、パストランジスタＴｐｓ等を介さずに直接接続される態様の両方を含む。
【００５６】
また、論理アドレスに基づくデータの読み出し、または、書き込み時には、第２記憶部２００のアドレス変換部２０３に論理アドレスが入力され、１本のビット線ＢＸが選択される。図６の例では、２ビットの値を示す論理アドレスが入力され、４本のビット線ＢＸのうちの何れか１本が選択される。見方を変えれば、４本のビット線ＢＸの各々に対しては、予め論理アドレスが対応付けられていると考えることができる。
【００５７】
複数の第２メモリセルの各々の抵抗状態は、論理アドレスと、第１記憶部１００のＷоｒｄ線ＷＬ（見方を変えれば第１記憶部１００のページを特定する物理アドレス）との対応関係に応じて、高抵抗状態または低抵抗状態の何れかに設定される。この対応関係は、論理アドレスと、論理アドレスに基づくデータの読み出し、または、書き込み時に、データを読み出すための読み出し電圧Ｖ＿ＲＥＡＤ、または、データを書き込むための書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが供給されるワード線ＷＬ（選択されるべきワード線ＷＬ）との対応を示している。
【００５８】
例えば、図６において、論理アドレス「０１」に対しては、第２記憶部２００のビット線ＢＸ０１が予め対応付けられているとする。そして、論理アドレス「０１」が指定されたデータの読み出しまたは書き込み時においては、第１記憶部１００のＷоｒｄ線ＷＬ１が選択されるのであれば（論理アドレス「０１」と、第１記憶部１００のＷоｒｄ線ＷＬ１とが対応するのであれば）、論理アドレス「０１」に対応するビット線ＢＸ０１と、第１記憶部１００のＷоｒｄ線ＷＬ１に接続されるＷоｒｄ線ＷＸ０１との交差に対応する第２メモリセルの抵抗状態は、予め低抵抗状態に設定される。これに対して、ビット線ＢＸ０１と、他の３本のＷоｒｄ線（ＷＸ００、ＷＸ１０、ＷＸ１１）の各々との交差に対応する３つの第２メモリセルの抵抗状態は、予め高抵抗状態に設定される。
【００５９】
論理アドレスに基づくデータの読み出し時には、指定された論理アドレスに対応するビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のワード線ＷＬ（低抵抗状態の第２メモリセルに接続されたワード線ＷＬと選択部を介して接続される第１記憶部１００のワード線ＷＬ）に、読み出し電圧Ｖ＿ＲＥＡＤが供給されるよう、その指定された論理アドレスに対応するビット線ＢＸに対して第１電圧が供給される。また、論理アドレスに基づくデータの書き込み時には、指定された論理アドレスに対応するビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のワード線ＷＬに、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが供給されるよう、その指定された論理アドレスに対応するビット線ＢＸに対して第２電圧が供給される。
【００６０】
図６において、例えば論理アドレス「０１」に基づくデータの読み出し、または、データの書き込み時に、論理アドレス「０１」に対応するビット線ＢＸ０１に対して所定の電圧（第１電圧または第２電圧）が供給された場合を想定すると、上述したように、ビット線ＢＸ０１とワード線ＷＸ０１との交差に対応する第２メモリセルは低抵抗状態に設定されているので、ビット線ＢＸ０１からワード線ＷＸ０１の方向へ電流が流れる。これが電気信号となり、選択部１０３を介して、第１記憶部１００のＷоｒｄ線ＷＬ１へ伝えられる。
【００６１】
図４に戻って説明を続ける。制御部２０２は、第２記憶部２００の動作を制御する。制御部２０２は、図２に示す制御信号線１２０を介してコントローラ２０と接続されている。制御部２０２は、ホスト装置からの読み出し要求に含まれる論理アドレスをコントローラ２０から受信する機能を有している。また、制御部２０２は、コントローラ２０から受信した論理アドレスに対応するビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のワード線ＷＬに、読み出し電圧Ｖ＿ＲＥＡＤが供給されるよう、コントローラ２０から受信した論理アドレスに対応するビット線ＢＸに対して所定の電圧（以下の説明では、「第１電圧」と称する場合がある）を供給制御する機能を有している。第１電圧は、第１記憶部１００のワード線ＷＬに至るまでに介在する導電体（配線や低抵抗状態の第２メモリセル等）による電圧降下等を考慮して設定されることが望ましい。
【００６２】
制御部２０２は、読み出し信号と、論理アドレス（読み出し要求に含まれる論理アドレス）とをコントローラ２０から受信すると、受信した論理アドレスをアドレス変換部２０３へ送る。また、制御部２０２は、不図示の電圧生成回路に対して、第１電圧の生成を指示する。アドレス変換部２０３は、制御部２０２から与えられた論理アドレスをデコードし、その結果に基づいて、対応するビット線ＢＸを選択する。このとき、不図示の電圧生成回路で生成された第１電圧が、アドレス変換部２０３により選択されたビット線ＢＸに対して供給される。
【００６３】
また、制御部２０２は、ホスト装置からの書き込み要求に含まれる論理アドレスをコントローラ２０から受信する機能を有する。また、制御部２０２は、コントローラ２０から受信した論理アドレスに対応するビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のＷоｒｄ線ＷＬに、データを書き込むための書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが供給されるよう、ビット線ＢＸに対して所定の電圧（以下の説明では、「第２電圧」と称する場合がある）を供給制御する機能を有する。第２電圧は、第１記憶部１００のワード線ＷＬに至るまでに介在する導電体（配線や低抵抗状態の第２メモリセル等）による電圧降下等を考慮して設定されることが望ましい。
【００６４】
制御部２０２は、書き込み信号と、論理アドレス（書き込み要求に含まれる論理アドレス）とをコントローラ２０から受信すると、受信した論理アドレスをアドレス変換部２０３へ送る。また、制御部２０２は、不図示の電圧生成回路に対して、上記第２電圧の生成を指示する。アドレス変換部２０３は、制御部２０２から与えられた論理アドレスをデコードし、その結果に基づいて、対応するビット線ＢＸを選択する。このとき、不図示の電圧生成回路で生成された第２電圧が、アドレス変換部２０３により選択されたビット線ＢＸに対して供給される。
【００６５】
ワード線駆動部２０４は、制御部２０２の制御の下、各Ｗоｒｄ線ＷＸに対して供給すべき電圧を出力する。
【００６６】
なお、第２記憶部２００としては、ＲｅＲＡＭを用いたが、例えばＭＲＡＭ、ＰＣＲＡＭ、ＦｅＲＡＭ等の不揮発性のメモリを用いてもよい。要するに、第２記憶部２００は、それぞれが、何れかの第１配線に接続される複数の第３配線、および、それぞれが、ホスト装置から指定される論理アドレスに予め対応付けられる複数の第４配線の各交差に対応してマトリクス状に配置されると共に、論理アドレスと第１配線との対応関係に応じて、それぞれの抵抗状態が、第１抵抗状態、または、第１抵抗状態よりも抵抗値が低い第２抵抗状態に少なくとも設定される複数の第２メモリセルを含む記憶装置であればよい。
【００６７】
次に、図７を参照しながら、第１記憶部１００に対するデータの読み出し動作を説明する。図７は、第１記憶部１００に対するデータの読み出し動作の一例を示すフローチャートである。図７に示すように、まず、インタフェース１０は、メモリシステム外のホスト装置から読み出し要求を受信する（ステップＳ１）。インタフェース１０は、ホスト装置から読み出し要求を受信したことを知らせるために、コントローラ２０へ電気信号を送る形態であってもよいし、コントローラ２０が直接読み書きするレジスタの値を更新する形態であってもよい。レジスタの値を更新する形態においては、インタフェース１０がレジスタの値を更新すると、レジスタを監視しているコントローラ２０が、レジスタの値の変化を検知する。
【００６８】
次に、コントローラ２０は、インタフェース１０から読み出し要求を取得し（ステップＳ２）、読み出し要求に含まれるアドレスをコントローラ２０の内部メモリに格納する。次に、コントローラ２０は、読み出し要求に含まれるアドレスがＲＡＷアドレス（第１記憶部１００のページ（ワード線ＷＬ）を特定可能な物理アドレス）であるか否かを判断する（ステップＳ３）。読み出し要求は、例えばＲＥＡＤ（＃アドレス、判定ビット、・・・）のような形式なので、例えば判定ビットが「０」を示す場合はＲＡＷアドレス、「１」を示す場合は論理アドレスと判断することもできる。または、読み出し要求に含まれる＃アドレスが３２ビットで最上位ビットが０の場合はＲＡＷアドレス、１の場合は論理アドレスと判断することもできる。
【００６９】
上述のステップＳ３において、ＲＡＷアドレスであると判断した場合（ステップＳ３：Ｙｅｓ）、コントローラ２０は、複数のパストランジスタＴｐｓをそれぞれオフ状態に制御し、複数のゲートトランジスタＴｇｓをそれぞれオン状態に制御する（ステップＳ４）。次に、コントローラ２０は、前述のプリチャージを開始すると共に、ＮＡＮＤストリングＭＳの選択ゲートをオン状態に制御する（ステップＳ５）。
【００７０】
次に、コントローラ２０は、第１記憶部１００のアドレスデコーダ１０２に対して、ＲＡＷアドレスを送ると共に、不図示の電圧生成回路に対して読み出し電圧Ｖ＿ＲＥＡＤの生成を指示する（ステップＳ６）。このようにして、ＲＡＷアドレスが示すＷоｒｄ線ＷＬと、複数のビット線ＢＬの各々との各交差に対応して配置される複数の第１のメモリセル（ＦＧ−ＭＯＳＦＥＴ）の各々の記憶状態（閾値状態）を示す値として、「０」または「１」を読み出すことができる。なお、上述のステップＳ４〜ステップＳ６の順序は一例であり、これに限られるものではない。
【００７１】
次に、第１記憶部１００のセンスアンプ１０４は、各ビット線ＢＬから読み出されたデータを、レジスタ１０５へ送る（ステップＳ７）。レジスタ１０５にデータが保持された段階で、レジスタ１０５からコントローラ２０に信号が伝わり、コントローラ２０は、レジスタ１０５に対してデータの転送を指示する（ステップＳ８）。そして、レジスタ１０５が、読み出されたデータを、データバス３００を介してインタフェース１０へ転送する（ステップＳ９）。
【００７２】
一方、上述のステップＳ３において、ＲＡＷアドレスではない、つまり、論理アドレスであると判断した場合（ステップＳ３：Ｎｏ）、コントローラ２０は、まず複数のパストランジスタＴｐｓの各々をオン状態に制御し、複数のゲートトランジスタＴｇｓの各々をオフ状態に制御する（ステップＳ１０）。次に、コントローラ２０は、前述のプリチャージを開始し、ＮＡＮＤストリングＭＳの選択ゲートをオン状態に制御する（ステップＳ１１）。次に、コントローラ２０は、第２記憶部２００に対して、読み出しを指示する読み出し信号と、読み出し要求に含まれていた論理アドレスとを送信する（ステップＳ１２）。
【００７３】
第２記憶部２００の制御部２０２は、制御信号線１２０を介して、コントローラ２０からの読み出し信号と論理アドレスとの組を受け取る。そして、制御部２０２は、アドレス変換部２０３に対して、コントローラ２０から受け取った論理アドレスを送信すると共に、不図示の電圧生成回路に対して、上述の第１電圧の生成を指示する（ステップＳ１３）。
【００７４】
このようにして、不図示の電圧生成回路で生成された第１電圧が、アドレス変換部２０３により選択されたビット線ＢＸ（指定された論理アドレスに予め対応付けられたビット線ＢＸ）に対して供給される。そして、この第１電圧に応じた電気信号が、ビット線ＢＸに接続された複数の第２メモリセルのうち、論理アドレスと第１記憶部１００のＷоｒｄ線ＷＬとの対応関係に応じて予め低抵抗状態に設定されていた第２メモリセルに接続されたＷоｒｄ線ＷＸを経由して、第１記憶部１００のＷоｒｄ線ＷＬへ伝えられる。
【００７５】
これにより、ワード線ＷＬには、読み出し電圧Ｖ＿ＲＥＡＤが印加され、Ｗоｒｄ線ＷＬと、複数のビット線ＢＬの各々との各交差に対応して配置される複数の第１のメモリセル（ＦＧ−ＭＯＳＦＥＴ）の各々の記憶状態（閾値状態）を示す値として、「０」または「１」を読み出すことができる。ステップＳ１３の処理の後は、上述のステップＳ７以降の処理が行われる。なお、上述のステップＳ１０〜ステップＳ１３の順序は一例であり、これに限られるものではない。
【００７６】
次に、第１記憶部１００に対するデータの書き込み動作を説明する。図８は、第１記憶部１００に対するデータの書き込み動作の一例を示すフローチャートである。図８に示すフローチャートにおいて、まず、インタフェース１０は、ホスト装置から書き込み要求を受信する（ステップＳ２０）。インタフェース１０は、ホスト装置から書き込み要求を受信したことを知らせるために、コントローラ２０へ電気信号を送る形態であってもよいし、コントローラ２０が直接読み書きするレジスタ１０５の値を更新する形態であってもよい。
【００７７】
次に、コントローラ２０は、インタフェース１０から書き込み要求を取得し（ステップＳ２１）、書き込み要求に含まれるアドレスを、コントローラ２０の内部メモリに格納する。また、コントローラ２０は、書き込み要求に含まれるデータ（書き込みが要求されたデータ）を、一時的にコントローラ２０が管理する別メモリへバッファ保存するか、または、第１記憶部１００のレジスタ１０５へ転送する。
【００７８】
次に、コントローラ２０は、書き込み要求に含まれるアドレスがＲＡＷアドレスであるか否かを判断する（ステップＳ２２）。書き込み要求は、ＷＲＩＴＥ（＃アドレス、判定ビット、・・・・、データあるいはデータの所在アドレス）のような形式なので、例えば判定ビットが「０」を示す場合はＲＡＷアドレス、「１」を示す場合は論理アドレスと判断できる。または、書き込み要求に含まれる＃アドレスが３２ビットで最上位ビットが０の場合はＲＡＷアドレス、１の場合は論理アドレスと判断できる。
【００７９】
上述のステップＳ２２において、ＲＡＷアドレスであると判断した場合（ステップＳ２２：Ｙｅｓ）、コントローラ２０は、複数のパストランジスタＴｐｓの各々をオフ状態に制御し、複数のゲートトランジスタＴｇｓの各々をオン状態に制御する（ステップＳ２３）。次に、コントローラ２０は、書き込み要求に含まれていたデータ（書き込み対象のデータ）を、レジスタ１０５へ送る（ステップＳ２４）。次に、コントローラ２０は、レジスタ１０５に保持されたデータに応じて、書き込みを行うビット線ＢＬに対しては選択用の電圧（例えば０Ｖ）を供給すると共に、書き込まないビット線ＢＬに対しては非選択用の電圧（例えば電源電圧Ｖｄｄ）を供給する制御を行う（ステップＳ２５）。また、コントローラ２０は、ＮＡＮＤストリングＭＳの選択ゲートをオン状態に制御する。
【００８０】
次に、コントローラ２０は、第１記憶部１００のアドレスデコーダ１０２に対して、ＲＡＷアドレスを示すアドレス信号を送る（ステップＳ２６）。次に、コントローラ２０は、不図示の電圧生成回路に対して、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭの生成を指示する（ステップＳ２７）。これにより、不図示の電圧生成回路で生成された書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが、アドレスデコーダにより選択されたＷоｒｄ線ＷＬに対して供給される。
【００８１】
このようにして、書き込み対象の第１のメモリセル（書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが供給されたＷоｒｄ線ＷＬと、選択用の電圧が供給されたビット線ＢＬとの交差に対応して配置される第１のメモリセル）を、「０」が書き込まれた状態に変化させることができる。なお、上述のステップＳ２３〜ステップＳ２７の順序は一例であり、これに限られるものではない。
【００８２】
レジスタ１０５の内部ロジック回路は、正常にデータの書き込みが行われたか否かを検査（Ｖｅｒｉｆｙ）し、書き込みが終了した段階で（ステップＳ２８：Ｙｅｓ）、コントローラ２０へ信号が伝わる。書き込みが終了したことを検知したコントローラ２０は、インタフェース１０に対して、書き込みが終了したことを通知する（ステップＳ２９）。
【００８３】
一方、上述のステップＳ２２において、ＲＡＷアドレスではない、つまり、論理アドレスであると判断した場合（ステップＳ２２：Ｎｏ）、コントローラ２０は、まず第２記憶部２００に対して、書き込みを指示する書き込み信号と、書き込み要求に含まれていた論理アドレスとを送信する（ステップＳ３０）。次に、コントローラ２０は、複数のパストランジスタＴｐｓの各々をオン状態に制御し、複数のゲートトランジスタＴｇｓの各々をオフ状態に制御する（ステップＳ３１）。次に、コントローラ２０は、書き込み要求に含まれていた書き込み対象のデータを、レジスタ１０５へ送る（ステップＳ３２）。
【００８４】
次に、コントローラ２０は、レジスタ１０５に保持されたデータに応じて、書き込みを行うビット線ＢＬに対しては選択用の電圧（例えば０Ｖ）を供給すると共に、書き込まないビット線ＢＬに対しては非選択用の電圧（例えば電源電圧Ｖｄｄ）を供給する制御を行う（ステップＳ３３）。また、コントローラ２０は、ＮＡＮＤストリングＭＳの選択ゲートをオン状態に制御する。
【００８５】
第２記憶部２００の制御部２０２は、制御信号線１２０を介して、コントローラ２０からの書き込み信号と論理アドレスとの組を受け取る。そして、制御部２０２は、アドレス変換部２０３に対して、コントローラ２０から受け取った論理アドレスを送信すると共に、不図示の電圧生成回路に対して、上記第２電圧の生成を指示する（ステップＳ３４）。
【００８６】
このようにして、不図示の電圧生成回路で生成された第２電圧が、アドレス変換部２０３により選択されたビット線ＢＸ（指定された論理アドレスに予め対応付けられたビット線ＢＸ）に対して供給される。そして、この第２電圧に応じた電気信号が、ビット線ＢＸに接続された複数の第２メモリセルのうち、論理アドレスとＷоｒｄ線ＷＬとの対応関係に応じて予め低抵抗状態に設定されていた第２メモリセルに接続されたＷоｒｄ線ＷＸを経由して、第１記憶部１００のＷоｒｄ線ＷＬへ伝えられる。これにより、このワード線ＷＬには書き込み電圧Ｖ＿ＰＲＯＧＲＡＭが印加され、このＷоｒｄ線ＷＬと、選択用の電圧が供給されたビット線ＢＬとの交差に対応して配置される書き込み対象の第１のメモリセルを、「０」が書き込まれた状態に変化させることができる。ステップＳ３４の処理の後は、上述のステップＳ２８以降の処理が行われる。なお、上述のステップＳ３０〜ステップＳ３４の順序は一例であり、これに限られるものではない。
【００８７】
以上、説明したように、実施の形態のメモリシステムは、複数のワード線ＷＬおよび複数のビット線ＢＬの各交差に対応してマトリクス状に配置される複数の第１のメモリセルを含む第１記憶部１００を備える。また、それぞれが、何れかのワード線ＷＬに接続される複数のワード線ＷＸ、および、それぞれが、ホスト装置から指定される論理アドレスに予め対応付けられる複数のビット線ＢＸの各交差に対応してマトリクス状に配置される複数の第２メモリセルを含む第２記憶部２００を備える。そして、論理アドレスと第１記憶部１００のワード線ＷＬとの対応関係に応じて、第２記憶部２００に含まれる複数の第２メモリセルの各々の抵抗状態を、高抵抗状態または低抵抗状態に予め設定する。
【００８８】
例えば、ホスト装置から指定された論理アドレスに基づくデータの読み出し時において、第２記憶部２００の制御部２０２は、指定された論理アドレスに予め対応付けられていたビット線ＢＸに、上述の第１電圧を供給する制御を行う。これにより、ビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のワード線ＷＬ（指定された論理アドレスに対応するワード線ＷＬ）に対して読み出し電圧Ｖ＿ＲＥＡＤを印加することができる。
【００８９】
つまり、実施の形態のメモリシステムは、データとして保持していたＬ２Ｐテーブルを読み出す処理、および、読み出したＬ２Ｐテーブルを参照して論理アドレスに対応する物理アドレスを探す処理等を行うことなく、指定された論理アドレスに対応する第１記憶部１００のワード線ＷＬの選択、および、読み出し電圧Ｖ＿ＲＥＡＤの供給を同時に行うことができるので、データの読み出しの処理速度を向上させることができる。例えば、ＭＲＡＭやＲｅＲＡＭの場合、典型的な読み出し速度は３０ｎｓである。ＲＡＭとして設計しない場合、さらに読み出し速度を速くすることが可能である。
【００９０】
また、例えばホスト装置から指定された論理アドレスに基づくデータの書き込み時において、第２記憶部２００の制御部２０２は、指定された論理アドレスに予め対応付けられていたビット線ＢＸに、上述の第２電圧を供給する制御を行う。これにより、ビット線ＢＸに接続された低抵抗状態の第２メモリセルに対応する第１記憶部１００のワード線ＷＬ（指定された論理アドレスに対応するワード線ＷＬ）に対して書き込み電圧Ｖ＿ＰＲＯＧＲＡＭを印加することができる。
【００９１】
つまり、実施の形態のメモリシステムは、データとして保持していたＬ２Ｐテーブルを読み出す処理、および、読み出したＬ２Ｐテーブルを参照して論理アドレスに対応する物理アドレスを探す処理等を行うことなく、指定された論理アドレスに対応する第１記憶部１００のワード線ＷＬの選択、および、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭの供給を同時に行うことができる。このため、データの書き込みの処理速度を向上させることができる。例えば、ＭＲＡＭまたはＲｅＲＡＭの場合、典型的な書き込み速度は３０ｎｓである。ＲＡＭとして設計しない場合、さらに書き込み速度を速くすることが可能である。
【００９２】
すなわち、実施の形態のメモリシステムは、第２記憶部２００のワード線ＷＸが、第１記憶部１００のワード線ＷＬに直接接続され、論理アドレスとワード線ＷＬとの対応関係に応じて、第２記憶部２００に含まれる複数の第２メモリセルの各々の抵抗状態が、高抵抗状態、または、低抵抗状態に少なくとも設定される構成を有する。これにより、データの読み出しまたは書き込みの処理速度を大幅に向上させることができる。
【００９３】
次に、実施の形態のメモリシステムは、以下に説明する誤り訂正機能により、記憶部毎に動作を最適化し、記憶部の寿命を実効的に伸ばすことで、システムとしての信頼性の向上を図っている。この誤り訂正機能は、図９に示すようにコントローラ２０、確率演算部４００、および記憶部５００を備えている。コントローラ２０と記憶部５００とは、データバス３００を介して相互に接続されている。また、記憶部５００の内部には、後述する確率演算を行う確率演算部４００が設けられている。確率演算部４００は、演算部の一例である。また、記憶部５００には、後述する確率演算処理により算出された確率値が記憶される。また、記憶部５００には、後述する大量のデータ、および複数の検査行列が記憶されている。
【００９４】
記憶部５００は、大容量となっており、一例としてＮＡＮＤフラッシュメモリで構成されている。また、記憶部５００は、全体の記憶領域が第１の記憶領域および第２の記憶領域に分割されており、確率演算部４００は第２の記憶領域側に設けられている。後述するが、このメモリシステムは、第１の記憶領域にデータが保存され、第２の記憶領域に設けられた確率演算部４００は、第１の記憶領域から読み出されたデータを用いて確率演算処理を行う。コントローラ２０は、第１および第２の記憶領域間のデータ転送制御を行う。第１および第２の記憶領域間のデータ転送は、データバス３００を介して行われる。また、第１の記憶領域は、確率演算処理の演算結果を保存する。
【００９５】
すなわち、記憶部５００に対する読み出しおよび書き込み等のデータシーケンスにより発生したパラメータを、確率値の形で第１の記憶領域に保存する。確率演算部４００は、保存された確率値を、確率統計値として扱いやすい小さなデータに加工処理する。コントローラ２０は、加工処理されたデータに基づいて、第１の記憶領域の動作を実行する。
【００９６】
ここで、システム構成は、図９に示す例以外の構成でもよい。例えば、図１０は、記憶部５００を物理的に異なる第１記憶部１００および第２記憶部２００に分割し、確率演算部４００を第２記憶部２００側に設けた例である。第１記憶部１００は、大きな記憶容量の、例えばＮＡＮＤフラッシュメモリで構成される。また、第２記憶部２００は、第１記憶部１００よりも記憶容量が小さいが、ランダムアクセス性に優れて、より高速に読み書き可能なメモリである。第２記憶部２００としては、例えばＤＲＡＭ、または、ＳＲＡＭ等の揮発性メモリを用いることができる。また、第２記憶部２００としては、例えばＭＲＡＭ、ＲｅＲＡＭ、ＰＣＲＡＭ、または、ＦｅＲＡＭ等の不揮発性メモリを用いることができる。
【００９７】
第１記憶部１００には大量のデータが保存されている。コントローラ２０は、第１記憶部１００から読み出したデータを第２記憶部２００に転送する。第２記憶部２００内に設けられている確率演算部４００は、転送されたデータを用いて、後述する確率演算処理を行う。
【００９８】
また、図１１は、記憶部５００を物理的に異なる第１記憶部１００および第２記憶部２００に分割し、確率演算部４００を第１記憶部１００側に設けた例である。
【００９９】
また、図１２は、記憶部５００を物理的に異なる第１記憶部１００および第２記憶部２００に分割し、確率演算部４００も、第１確率演算部４０１および第２確率演算部４０２に分割した例である。図１２に示す例の場合、第１確率演算部４０１を第１記憶部１００側に設け、第２確率演算部４０２を第２記憶部２００側に設けている。
【０１００】
図１２において、第１記憶部１００には大量のデータが保存されている。コントローラ２０は、第１記憶部１００内の第１確率演算部４０１で確率演算の一部を実行処理した後、第２記憶部２００の第２確率演算部４０２に転送し、確率演算の続きを実行処理してもよい。また、コントローラ２０は、同時に別の計算目的の確率演算をそれぞれ行うように第１確率演算部４０１および第２確率演算部４０２を実行制御してもよい。
【０１０１】
次に、図１３に、確率演算部４００の構成を示す。図１３に示すように確率演算部４００は、確率演算を行うセル部４５１と、論理演算を行う論理演算部４５２を備える。論理演算部４５２では、ＡＮＤ、ＯＲ、ＮＯＴ、ＸＯＲ等のいわゆる論理演算の他、確率値の演算自体も処理する。また、論理演算部４５２において、各確率値の大きさ（大小）を比較することも可能である。論理演算部４５２は、デジタル回路で構成してもよいし、アナログ回路で構成してもよい。論理演算部４５２をアナログ回路で構成することで、演算を高速化することができる。
【０１０２】
セル部４５１は、確率演算処理のための確率値を記憶すると共に、確率演算自体を行う。このため、セル部４５１は、電圧および電流の供給、電圧値および電流値を読み出すための回路および選択トランジスタ等も備えている。
【０１０３】
次に、確率演算部４００での確率演算処理を説明する。図１４のフローチャートは、確率演算処理の流れを示している。図１４のフローチャートにおいて、ステップＳ４１では、コントローラ２０が、記憶部５００からデータを読み出し、データの確率値をデータバス３００を介して確率演算部４００に転送する。例えば、図１０の例は、記憶部５００が第１記憶部１００および第２記憶部２００に分割されており、確率演算部４００が第２記憶部２００側に設けられている。この場合、コントローラ２０は、第１記憶部１００から読み出した確率値を第２記憶部２００の確率演算部４００に転送する。
【０１０４】
ステップＳ４２では、確率演算部４００が、第１記憶部１００から読み出された確率値を、図１３に示すセル部４５１の０行目のワード（ｗ０）に書き込む。また、ステップＳ４３では、確率演算部４００が、第１記憶部１００から読み出された確率値を、図１３に示すセル部４５１の１行目のワード（ｗ１）に書き込む。
【０１０５】
次に、ステップＳ４４では、確率演算部４００の論理演算部４５２が、セル部４５１の０行目のワード（ｗ０）に書き込まれた確率値、および、セル部４５１の１行目のワード（ｗ１）に書き込まれた確率値の各ビット同士の論理演算（ＡＮＤ，ＯＲ，ＮＯＴ，ＸＯＲ）を行う。そして、ステップＳ４５において、確率演算部４００のセル部４５１が、論理演算の結果を新しいワードに書き込んで、図１４のフローチャートの処理を終了する。
【０１０６】
このような確率演算処理を詳細に説明する。まず、確率演算部４００のセル部４５１は、図１３に示すようにビット方向とワード方向にメモリセルが並べられている（メモリセルアレイ）。図１５に示す例は、メモリセルがビットｂ０〜ビットｂ９の計１０ビットの例である。また、図１５に示す例は、確率演算部４００の論理演算部４５２が、デジタル回路で構成されている例であり、各メモリセルは、０または１の情報を有するものとする。この図１５において、第１記憶部１００から読み出され確率演算部４００に転送された確率値が、各メモリセルに書き込まれると、各メモリセルの状態がそれぞれランダムに決定する（ステップＳ４２，ステップＳ４３）。図１５においては、白抜きの四角で図示したメモリセルが「０」を示している。また、黒塗りの四角で図示したメモリセルが「１」を示している。
【０１０７】
０行目のワードｗ０の場合、ワード方向に５つの黒塗りの四角が存在する。これは５／１０の確率値を示している。この０行目のワードｗ０の確率値を「Ｐ１」とする。同様に、１行目のワードｗ１は、ワード方向に７つの黒塗りの四角が存在する。これは７／１０の確率値を示している。この１行目のワードｗ１の確率値を「Ｐ２」とする。
【０１０８】
論理演算部４５２は、２行目のワードｗ２に、ワードｗ０とワードｗ１の各ビットｂ０〜ビットｂ９のＡＮＤ演算の結果を書き込む（ステップＳ４４およびステップＳ４５）。すなわち、ワードｗ０のビットｂ０が１（黒）、ワードｗ１のビットｂ０が１（黒）のとき、論理演算部４５２は、両者のＡＮＤ演算を行い、ワードｗ２のビットｂ０に対して、ＡＮＤ演算結果となる１（黒）を書き込む。同様に、ワードｗ０のビットｂ１が０（白）、ワードｗ１のビットｂ１が１（黒）のとき、論理演算部４５２は、両者のＡＮＤ演算を行い、ワードｗ２のビットｂ１に対して、ＡＮＤ演算結果となる０（白）を書き込む。同様に、ワードｗ０のビットｂ２が１（黒）、ワードｗ１のビットｂ２が０（白）のとき、論理演算部４５２は、両者のＡＮＤ演算を行い、ワードｗ２のビットｂ２に対して、ＡＮＤ演算結果となる０（白）を書き込む。同様に、ワードｗ０のビットｂ５が０（白）、ワードｗ１のビットｂ５が０（白）のとき、論理演算部４５２は、両者のＡＮＤ演算を行い、ワードｗ２のビットｂ５に対して、ＡＮＤ演算結果となる０（白）を書き込む。
【０１０９】
このようにＡＮＤ演算結果が保存されたワードｗ２の各ビットｂ０〜ｂ９をワード方向に沿って見てみると、ビットｂ０，ビットｂ４およびビットｂ６に、それぞれ１（黒）が書き込まれている。すなわち、ワードｗ２は、計３つの１（黒）が書き込まれている。このワードｗ２は、計３つの１（黒）があるため、３／１０の確率値を示している。この２行目のワードｗ２の確率値を「Ｐ３」とする。
【０１１０】
確率値Ｐ１×確率値Ｐ２は、「（５／１０）×（７／１０）」なので、３５／１００であり、略々３／１０の値である。一方、ＡＮＤ演算結果が書き込まれたワードｗ２の確率値Ｐ３は、３／１０である。このため、上述のＡＮＤ演算を行うことで、ワードｗ２の各ビットｂ０〜ｂ９に対して、確率値Ｐ１×確率値Ｐ２の演算結果の近似値を書き込むことができる。
【０１１１】
次に、論理演算部４５２は、３行目のワードｗ３に、ワードｗ０とワードｗ１の各ビットｂ０〜ビットｂ９のＯＲ演算の結果を書き込む。すなわち、ワードｗ０のビットｂ０が１（黒）、ワードｗ１のビットｂ０が１（黒）のとき、論理演算部４５２は、両者のＯＲ演算を行い、ワードｗ３のビットｂ０に対して、ＯＲ演算結果となる１（黒）を書き込む。同様に、ワードｗ０のビットｂ１が０（白）、ワードｗ１のビットｂ１が１（黒）のとき、論理演算部４５２は、両者のＯＲ演算を行い、ワードｗ３のビットｂ１に対して、ＯＲ演算結果となる１（黒）を書き込む。同様に、ワードｗ０のビットｂ２が１（黒）、ワードｗ１のビットｂ２が０（白）のとき、論理演算部４５２は、両者のＯＲ演算を行い、ワードｗ３のビットｂ２に対して、ＯＲ演算結果となる１（黒）を書き込む。同様に、ワードｗ０のビットｂ５が０（白）、ワードｗ１のビットｂ５が０（白）のとき、論理演算部４５２は、両者のＯＲ演算を行い、ワードｗ３のビットｂ５に対して、ＯＲ演算結果となる０（白）を書き込む。
【０１１２】
このようにＯＲ演算結果が保存されたワードｗ３の各ビットｂ０〜ｂ９をワード方向に沿って見てみると、ビットｂ５以外は、全て１（黒）が書き込まれている。すなわち、ワードｗ３は、計９つの１（黒）が書き込まれている。このワードｗ３は、計９つの１（黒）があるため、９／１０の確率値を示している。この３行目のワードｗ３の確率値を「Ｐ４」とする。
【０１１３】
確率値Ｐ１＋確率値Ｐ２は、「（５／１０）＋（７／１０）」なので、１２／１０となり「１」の値を超える値となる。一方、ＯＲ演算結果が書き込まれたワードｗ３の確率値Ｐ４は、９／１０である。このため、上述のＯＲ演算を行うことで、ワードｗ３の各ビットｂ０〜ｂ９に対して、確率値Ｐ１＋確率値Ｐ２の演算結果の近似値を書き込むことができる。
【０１１４】
次に、図１６に示す例は、確率演算部４００の論理演算部４５２が、アナログ回路で構成されている例である。この場合、各メモリセルは、０から１の間の情報を有する。例えば、図１６に示す左斜線の四角は、０．５以上の確率値を示しており、右斜線の四角は、０．５未満の確率値を示している。
【０１１５】
ＡＮＤ演算およびＯＲ演算は上述と同様である。すなわち、ワードｗ０の各ビットの確率値と、ワードｗ１の各ビットの確率値とのＡＮＤ演算を行い、ワードｗ２の各ビットにＡＮＤ演算結果を書き込む。具体的には、ＡＮＤ演算結果が０．５以上であれば１（黒）のＡＮＤ演算結果をワードｗ２のビットに書き込み、値が０．５未満なら０（白）のＡＮＤ演算結果をワードｗ２のビットに書き込む。
【０１１６】
また、ワードｗ０の各ビットの確率値と、ワードｗ１の各ビットの確率値とのＯＲ演算を行い、ワードｗ３の各ビットにＯＲ演算結果を書き込む。具体的には、ＯＲ演算結果が０．５以上であれば１（黒）のＯＲ演算結果をワードｗ３のビットに書き込み、値が０．５未満なら０（白）のＯＲ演算結果をワードｗ３のビットに書き込む。
【０１１７】
図１５のワードｗ２およびワードｗ３と、図１６のワードｗ２およびワードｗ３とを見比べてわかるように、確率演算部４００の論理演算部４５２をアナログ回路で構成した場合でも、演算結果は、論理演算部４５２をデジタル回路で構成した場合と同様となる。すなわち、ワードｗ２の確率値である「Ｐ３」は、Ｐ１×Ｐ２の近似値となる。また、ワードｗ３の確率値である「Ｐ４」は、Ｐ１＋Ｐ２の近似値となる。
【０１１８】
次に、確率演算部４００の論理演算部４５２の論理演算処理を詳しく説明する。図１７は、上述のＡＮＤ演算処理の模式図である。論理演算部４５２のＡＮＤゲート４６１には、ｗ０のワード線およびｗ１のワード線がそれぞれ接続されている。ＡＮＤゲート４６１には、ｗ０のワード線のビットｂ９の確率値およびｗ１のワード線のビットｂ９の確率値が、それぞれ時刻ｔ０のタイミングで供給される。同様に、ＡＮＤゲート４６１には、ｗ０のワード線のビットｂ８の確率値およびｗ１のワード線のビットｂ８の確率値が、それぞれ時刻ｔ１のタイミングで供給される。同様に、ＡＮＤゲート４６１には、ｗ０のワード線のビットｂ７の確率値およびｗ１のワード線のビットｂ７の確率値が、それぞれ時刻ｔ２のタイミングで供給される。このようにＡＮＤゲート４６１には、ｔ０〜ｔ９の時刻毎に、ｗ０のワード線およびｗ１のワード線の各ビットの確率値（Ｐ１，Ｐ２）が、それぞれ供給される。ＡＮＤゲート４６１は、ｔ０〜ｔ９の時刻毎に供給される各ワード線の各ビットの確率値を乗算処理（Ｐ１×Ｐ２）することで、ｔ０〜ｔ９の時刻毎にＡＮＤ演算結果を生成する。
【０１１９】
さらに詳細に説明すると、確率演算部４００の論理演算部４５２は、図１８に示すセレクタ４６３で、ｗ０のワード線およびｗ１のワード線のビットｂ０〜ｂ９の各確率値を、時刻ｔ０〜ｔ９の各タイミングで選択して、ＡＮＤゲート４６１に供給する。ＡＮＤゲート４６１のＡＮＤ演算結果は、セレクタ４６４により選択され、ｗ２のワード線に書き込まれる。
【０１２０】
ＯＲ演算処理の場合も同様である。図１９は、ＯＲ演算処理の模式図である。論理演算部４５２のＯＲゲート４６２には、ｗ０のワード線およびｗ１のワード線がそれぞれ接続されている。ＯＲゲート４６２には、ｗ０のワード線のビットｂ９の確率値およびｗ１のワード線のビットｂ９の確率値が、それぞれ時刻ｔ０のタイミングで供給される。同様に、ＯＲゲート４６２には、ｗ０のワード線のビットｂ８の確率値およびｗ１のワード線のビットｂ８の確率値が、それぞれ時刻ｔ１のタイミングで供給される。同様に、ＯＲゲート４６２には、ｗ０のワード線のビットｂ７の確率値およびｗ１のワード線のビットｂ７の確率値が、それぞれ時刻ｔ２のタイミングで供給される。このようにＯＲゲート４６２には、ｔ０〜ｔ９の時刻毎に、ｗ０のワード線およびｗ１のワード線の各ビットの確率値（Ｐ１，Ｐ２）が、それぞれ供給される。ＯＲゲート４６２は、ｔ０〜ｔ９の時刻毎に供給される各ワード線の各ビットの確率値を加算処理（Ｐ１＋Ｐ２）することで、ｔ０〜ｔ９の時刻毎にＯＲ演算結果を生成する。
【０１２１】
さらに詳細に説明すると、確率演算部４００の論理演算部４５２は、図１８に示すセレクタ４６３で、ｗ０のワード線およびｗ１のワード線のビットｂ０〜ｂ９の各確率値を、時刻ｔ０〜ｔ９の各タイミングで選択して、ＯＲゲート４６２に供給する。ＯＲゲート４６２のＯＲ演算結果は、セレクタ４６４により選択され、ｗ３のワード線に対応するビットに書き込まれる。
【０１２２】
次に、メモリセルに対して書き込みを行う場合、通常、メモリセルの値が書き換わる以上の電圧をトランジスタに供給する。これに対して、実施の形態のメモリシステムの場合、メモリセルの値が書き換わるか否かの中間的な電圧を意図的に、トランジスタに供給する。具体的には、例えば書き換え時に１．５Ｖの電圧をトランジスタに供給する場合において、トランジスタに対して１．０Ｖの電圧しか供給しないと、そのメモリセルは５０パーセント程度の確率でしか、値が書き換わらない。反対に、値の書き換えを意図していない低い電圧をトランジスタに供給したにもかかわらず、値の書き換わりが発生するメモリセルもある。実施の形態のメモリシステムは、エラーの発生率が所望の発生率となるように、メモリセルに対して供給する書き込み電圧を調整している。
【０１２３】
すなわち、上述のように、データの書き込み時においては、図３に示したワード線ＷＬに対して、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭを供給し、各メモリセル（ＦＧ−ＭＯＳＦＥＴ）の閾値を変化させる。実施の形態のメモリシステムは、書き込み電圧Ｖ＿ＰＲＯＧＲＡＭとして、発生率が所望の発生率となるように、メモリセルに対して上述の閾値として供給する確率値の値を調整している。
【０１２４】
図２０は、横軸に示すメモリセルに対して供給する電圧（閾値Ｖｔｈ＝確率値）と、縦軸に示す値が書き換わる確率（頻度）との関係を示す図である。図２０において、「ＥＲ」の符号を付した波形は、メモリセルの消去時に供給される第１の電圧値（データ「１１」に対応）を示している。「Ａ」の符号を付した波形は、メモリセルをシングルレベルで書き込み制御する場合に供給される第２の電圧値（データ「０１」に対応）を示している。メモリセルをシングルレベルで書き込み制御する場合は、データ「１１」に対応する第１の電圧値およびデータ「０１」に対応する第２の電圧値の２つの電圧値を用いて書き込み制御が行われる。図２０において、「Ｂ」および「Ｃ」の符号を付した波形は、メモリセルに対して多値の書き込みを行う場合に用いられる、データ「００」に対応する第３の電圧値およびデータ「１０」に対応する第４の電圧値である。
【０１２５】
図２０の「Ａ」の符号の波形に付した点線は、値が書き換わる確率を示している。すなわち、Ａ１のレベルの電圧をメモリセルに供給すると、メモリセルの値が２０％の確率で「０」の値となり、８０％の確率で「１」の値となる。また、波形のＡ１のレベルよりも高いレベルであるＡ２のレベルの電圧をメモリセルに供給すると、メモリセルの値が５０％の確率で「０」の値となり、５０％の確率で「１」の値となる。また、波形のＡ２のレベルよりも高いレベルであるＡ３のレベルの電圧をメモリセルに供給すると、メモリセルの値が８０％の確率で「０」の値となり、２０％の確率で「１」の値となる。
【０１２６】
このようなメモリセルの書き換え確率を制御する手法としては、メモリセルに供給するパルスのパルス電圧を制御する第１の手法、メモリセルに供給するパルスのパルス幅を制御する第２の手法、または、メモリセルに供給するパルスのパルス数を制御する第３の手法等がある。
【０１２７】
図２１は、メモリセルに供給するパルスのパルス電圧を制御する第１の手法を説明するための図である。第１の手法の場合、図２１の（ａ）の符号を付した図に示すように、メモリセルに供給するパルスの波高を制御することで、メモリセルに供給する電圧値（確率値）を制御する。図２１の（ｂ）の符号を付した図に示すように、Ｖ２の電圧値の電圧をメモリセルに供給した場合、略々１００％の確率（Ｐ２）で、メモリセルの値が書き換わる。これに対して、Ｖ２の７０％程度の電圧値のＶ１の電圧をメモリセルに供給した場合、メモリセルの値が書き換わる確率を、略々５０％の確率（Ｐ１）に制御できる。
【０１２８】
図２２は、メモリセルに供給するパルスのパルス幅を制御する第２の手法を説明するための図である。第２の手法の場合、図２２の（ａ）の符号を付した図に示すように、メモリセルに供給するパルスのパルス幅を制御することで、メモリセルに供給する電圧値（確率値）を制御する。メモリセルに供給する電圧値（確率値）をパルス幅で制御することで、図２２の（ｂ）の符号を付した図に示すように、パルス幅が広くなるに連れ（＝電圧値が大きくなるに連れ）、メモリセルの値が書き換わる確率が徐々に上がるように制御できる（リニアに制御できる）。
【０１２９】
図２３は、（ａ）の符号を付した図に示すように、メモリセルに供給するパルスのパルス数を制御することで、メモリセルに供給する電圧値（確率値）を制御する第３の手法を説明するための図である。メモリセルに供給するパルス数を制御することで、図２３の（ｂ）の符号を付した図に示すように、パルス数が多くなるに連れ（＝電圧値が大きくなるに連れ）、メモリセルの値が書き換わる確率が徐々に上がるように制御できる（リニアに制御できる）。第３の手法の場合、デジタル回路で容易に実現でき、周辺回路の面積を小さくすることができる。
【０１３０】
なお、第１〜第３の手法において、電圧のバラツキが発生する場合、電圧のバラツキの影響を考慮した上で、確率値の大きなところ、または、小さなところを得るために必要なパルス電圧、パルス幅、または、パルス数に関する情報を、例えば対応表等のかたちで予め記憶しておく。そして、コントローラ２０が、対応表を用いて、メモリセルに供給する電圧を制御する。これにより、電圧のバラツキの影響を実効的に避けることができる。
【０１３１】
確率演算処理は、通常の集積回路技術で実現するには、回路面積が大きくなるという問題があるのに対し、上記のような確率演算処理を行うことで小さな面積で効率的に処理することが可能である。面積の小ささは集積回路の製造コスト、開発期間を向上させる。また面積が小さいと、小さい単位の回路ブロックを並列動作させることも可能となるため、複数処理を並列動作でき、処理速度が向上する。単位処理あたりの回路面積が小さいと、一般的に単位回路間を繋ぐ配線の長さが短くなるため、回路の消費電力を大きく左右する配線の充放電の消費電力を少なくすることも可能である。
【０１３２】
これらの特徴を備えた、確率演算処理を効率化できる方法、装置を用いて、誤り訂正処理を行う。誤り訂正処理のうち、理論的に最も強力とされる誤り訂正符号がＬＤＰＣである。詳細は後述する。訂正能力が強力な理由は、確率値を用いて、確率値同士の演算によりエラーの発生個数、発生個所を推定していく方法やアルゴリズムを用いることができるからである。一般に訂正能力の強力さと実装回路の複雑さには相関関係があり、特に確率演算の場合は、演算に必要な回路面積が大きくなる乗算を繰り返すため、面積が大きくなることが知られている。
【０１３３】
一方で、繰り返し述べたように、確率演算部４００を用いると小さな面積で確率演算を行うことができる。これにより、誤り訂正処理の頻度を高めること、あるいは、処理の精度を高めることがメモリシステムで可能になるため、従来のメモリシステムより信頼性の向上が図れる。
【０１３４】
特に、本発明の特徴として、確率演算による誤り訂正処理の中から、書き込みデータのエラーの個数（発生頻度）を推定できるため、特定のメモリブロックに関する劣化の度合いが推定できる。これに応じて、最適な検査行列を選択して使い分けることが可能となるわけである。
【０１３５】
検査行列は、処理する符号長が長いほど訂正能力が高いことが知られている。例えば、符号長が３２ｂｉｔと１０２４ｂｉｔを比較すると、明らかに１０２４ｂｉｔの方が訂正能力が高い傾向がある。しかし、符号長が長くなると、誤り訂正処理に関する回路の負荷（必要な演算器の数、確率値を保持するメモリの数、データ処理を制御するコントローラ２０の制御能力）が増加する。このため、メモリシステム出荷直後は、エラー数が比較的少ないため、短い符号長に対応する検査行列を使用する方が、メモリシステム全体として高いパフォーマンス（例えばデータ入出力の速度）を示すことができる。実施の形態のメモリシステムは、従来のメモリシステムと比較して顕著に多い回数で、記憶部５００の誤り訂正処理と、それに伴うエラー数の把握が可能となる。また、エラー数の発生とそれに対応して用いるべき検査行列を、メモリシステムの中で確率演算部４００を用いて推定することも可能である。
【０１３６】
次に、第１記憶部１００に各メモリセルに対して確率値（データ）が書き込まれると、確率演算部４００は、例えば低密度パリティ検査符号（Low  Density  Parity  Check  Code：ＬＤＰＣ）を用いた誤り訂正手法で、各メモリセルに書き込まれたデータの誤り訂正処理を行う。ＬＤＰＣ符号とは、行列内における「１」の密度が疎である低密度パリティ検査行列Ｈによって特徴付けられる符号である。すなわち、ＬＤＰＣ符号とは、行列の大多数の成分が「０」であり、小数の成分のみが「１」の低密度パリティ検査行列Ｈによって特徴付けられる符号である。なお、以下の説明では、低密度パリティ検査行列Ｈを、単に「検査行列Ｈ」と呼ぶ場合がある。
【０１３７】
実施の形態のメモリシステムの場合、例えば第１記憶部１００内に、発生するエラーの数に応じて切り替えられる、複数の検査行列Ｈが記憶されている。すなわち、メモリシステムは、使用期間が長くなるに連れ、徐々にエラーの発生率が高くなる。そして、エラーの発生率が所定以上となると、そのメモリシステムは、使用に耐え得ないメモリシステムとなり、いわゆる寿命を迎えることとなる。
【０１３８】
実施の形態のメモリシステムは、第１記憶部１００内に、例えばエラー数が１０個未満の場合に用いる第１の検査行列Ｈ、エラー数が３０個未満の場合に用いる第２の検査行列Ｈ、エラー数が５０個未満の場合に用いる第３の検査行列Ｈ・・・等のように、発生するエラーの数に対応した複数の検査行列Ｈが設けられている。確率演算部４００は、一例として以下に説明するＬＤＰＣ符号を用いて、第１記憶部１００のメモリセルに書き込まれたデータの誤り訂正処理を行う。この誤り訂正処理の際、エラー数を認識できる。
【０１３９】
確率演算部４００は、認識したエラー数に対応する検査行列Ｈを選択的に用いて誤り訂正処理を行う。例えば、確率演算部４００は、現在、第１の検査行列Ｈを用いているが、認識したエラー数が２５個であった場合、第１の検査行列Ｈを用いるのを止め、代わりに第２の検査行列Ｈを用いて誤り訂正処理を行う。これにより、使用期間に応じて増加するエラー数に追従して、エラー発生を「０」に抑制でき、長期間に渡って使用に耐え得るメモリシステムを提供できる（メモリシステムの寿命を延ばすことができる）。
【０１４０】
次に、検査行列Ｈのサイズは、符号長に応じて大きくなる。説明の便宜上、検査行列Ｈは、例えば８行×４列の行列であることとする。また、検査行列Ｈの各行および各列に含まれる１の数を重みと呼び、検査行列Ｈの各行の重み、および、各列の重みの各々は０よりも大きいものとする。また、各行のそれぞれの重みが一様（一定値）で、かつ、各列のそれぞれの重みも一様（一定値）である場合を正則と呼ぶ。ここでは、検査行列Ｈは、正則行列であり、各行のそれぞれの重みは全て４であり、各列のそれぞれの重みは全て２であるとする。
【０１４１】
ＬＤＰＣ符号は、通信路に送信またはメモリに格納して処理する対象のデータ列ｘを、ＨｃＴ＝０となるようなデータ列ｃに変換する。この「ｃ」を符号と呼ぶ。つまり、情報処理に使用されるデータは、元のデータ列ｘではなく、符号ｃである。一般に、符号ｃはデータ列ｘよりも長いデータ列である。符号ｃは、データ列ｘに含まれる情報の他にエラー訂正処理に必要な情報も含む。符号化は、データ列ｘと符号ｃとが１対１に対応する写像となる。つまり、データ列ｘが与えられれば符号ｃは一意に決まり、逆に符号ｃが与えられれば元のデータ列ｘは一意に決まる。「（データ列ｘの長さ）／（符号ｃの長さ）」を符合化率と呼ぶ。符合化率が高い方が効率の良い誤り訂正方式と言える。
【０１４２】
検査行列Ｈは、複数の行と１対１に対応する複数のチェックノードと、複数の列と１対１に対応する複数の変数ノードとの間の結線状態を示すタナーグラフにより表現することができる。一例として、８ｂｉｔの例を用いて説明するが、実際には、例えば１０００ｂｉｔ等のように長いデータ列が扱われる。図２４は、検査行列Ｈを表現するタナーグラフの一例を示す図である。タナーグラフは、検査行列Ｈの複数の行（図２４の例では４行）と１対１に対応する複数のチェックノードｆ０〜ｆ３が上段に配置される。また、タナーグラフは、検査行列Ｈの複数の列（図２４の例では８列）と１対１に対応する複数の変数ノードｃ０〜ｃ７が下段に配置される。そして、タナーグラフは、検査行列Ｈの成分が「１」となる行と列の組み合わせに対応するチェックノードｆｊと変数ノードｃｉとが結線（接続）される。
【０１４３】
例えば、図２４の例の場合、第０行に対応するチェックノードｆ０と、第１列に対応する変数ノードｃ１とは結線されている。これは、検査行列Ｈの第０行第１列の成分は「１」であることを示す。このように、チェックノードｆｊと変数ノードｃｉとの結線状態を示すタナーグラフにより検査行列Ｈを表現することができる。
【０１４４】
次に、図２５のフローチャートを用いて、確率演算部４００が行うＬＤＰＣ符号を用いた基本的な誤り訂正処理の流れを説明する。ここでは、確率伝播法（Belief  Propagation法：ＢＰ法）の場合を説明する。また、軟判定による誤り訂正処理を説明する。軟判定とは、１つの閾値を用いて「０」または「１」をデジタル的に判定する硬判定の対義語である。軟判定は、０か１かを完全には判定せずに、０である確率（「０」である尤度）または１である確率（「１」である尤度）をアナログ的に判定するものである。
【０１４５】
ここでは、検査行列Ｈを用いて符号化されたデータ（デジタルデータ）の集合は、不図示のメモリ（例えば、ＤＲＡＭ、ＭＲＡＭ、ＮＡＮＤ型フラッシュメモリ、ＲｅＲＡＭ等）または通信路に格納されており、符号化されたデータの列を当該メモリから読み出すときの物理量（例えば読み出し電圧の値）の列｛ｙｉ｝が、各変数ノード｛ｃｉ，ｃｋ，・・・｝に入力される（ステップＳ５１）。
【０１４６】
変数ノードｃｉは、受信した物理量ｙｉから、メモリに格納されていたデジタルデータの値が１である確率Ｐｉ（見方を変えれば、変数ノードｃｉに対応するデジタルデータの値が１である確率）を算出する（ステップＳ５２）。変数ノードｃｉは、自身と接続されるチェックノード｛ｆｊ，ｆｋ，・・・｝の各々に対して、算出した確率Ｐｉを第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝として送信する（ステップＳ５３）。なお、第１メッセージｑｉｊ（０）は、以下の（１）の数式で算出され、第１メッセージｑｉｊ（１）は、以下の（２）の数式で算出される。
【０１４７】
【数１】
2016062463.tif 000003
【０１４８】
【数２】
2016062463.tif 000004
【０１４９】
次に、確率演算部４００は、演算回数を０にリセット（ｎ＝０）する（ステップＳ５４）。チェックノードｆｊは、図２６の（ａ）の符号を付した図に示すように、自身と接続される複数の変数ノード｛ｃｉ，ｃｋ，・・・｝のそれぞれから送信された第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティ条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝毎に、変数ノードに対応するデジタルデータの値が１である確率を示す第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、変数ノードへ返信する（ステップＳ５５）。なお、第２メッセージｒｊｉ（０）は、以下の（３）の数式で算出され、第２メッセージｒｊｉ（１）は、以下の（４）の数式で算出される。
【０１５０】
【数３】
2016062463.tif 000005
【０１５１】
【数４】
2016062463.tif 000006
【０１５２】
ここで、チェックノードｆｊは、例えば変数ノードｃｉに対して返信する第２メッセージｒｉｊを算出する際に、当該変数ノードｃｉから送信された第１メッセージｑｉｊは考慮しない。つまり、変数ノードｃｉは、チェックノードｆｊと接続される、変数ノードｃｉ以外の変数ノード｛ｃｋ，ｃｌ，・・・｝の第１メッセージ｛ｑｋｊ，ｃｌｊ，・・・｝に基づいて算出された第２メッセージｒｉｊを受け取ることになる。
【０１５３】
変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝と、自身の確率Ｐｉ（第１メッセージｑ）とを用いて、受信した物理量ｙｉに対応するデジタルデータの値が１であった確率Ｑｉを計算する（ステップＳ５６）。なお、確率Ｑｉ（０）は、以下の（５）の数式で算出され、確率Ｑｉ（１）は、以下の（６）の数式で算出される。
【０１５４】
【数５】
2016062463.tif 000007
【０１５５】
【数６】
2016062463.tif 000008
【０１５６】
次に、一例ではあるが、Ｑｉが１／２以上であれば、受信した物理量ｙｉに対応するデジタルデータの値は１であると仮定し、Ｑｉが１／２未満であれば、受信した物理量ｙｉに対応するデジタルデータの値は０であると仮定する（ステップＳ５７）。そして、確率演算部４００は、ステップＳ５７で仮定した値（仮定値）を用いてパリティチェックを行う（ステップＳ５８）。
【０１５７】
より具体的には、確率演算部４００は、仮定値の列ｃｔｅｍｐ＝｛ｃ０ｔｅｍｐ，ｃ１ｔｅｍｐ，・・・｝に対して、ＨｃｔｅｍｐＴ＝０が成立するか否かを判定する（ステップＳ５９）。ＨｃｔｅｍｐＴ＝０が成立する場合は（ステップＳ５９：Ｙｅｓ）、仮定値の列ｃｔｅｍｐを、メモリに格納されていたデジタルデータ列であると結論付ける（ステップＳ６０）。これにより、図２４の誤り訂正処理が終了する。ただし、この結論は推定結果であるので、誤ったデータに変更されている可能性はある。これが、ＬＤＰＣが「推論型」と分類される由縁である。
【０１５８】
一方、ＨｃｔｅｍｐＴ＝０が成立しない場合（ステップＳ５９：Ｎｏ）、変数ノードｃｉは、第１メッセージを再計算し（ステップＳ６１）、演算回数のｎの値を一つインクリメントする（ステップＳ６２）。そして、処理がステップＳ５５に戻り、変数ノードｃｉは、再計算した第１メッセージを、自身と接続されるチェックノード｛ｆｊ，ｆｋ，・・・｝へ送信する。この場合、例えば変数ノードｃｉからチェックノードｆｊへ送信する第１メッセージｑｉｊは、図２６の（ｂ）の符号を付した図に示すように確率Ｐｉと、変数ノードｃｉと接続される、チェックノードｆｊ以外のチェックノード｛ｆｋ，ｆｌ，・・・｝から受信した第２メッセージ｛ｒｋｉ，ｒｌｉ，・・・｝とから計算される。すなわち、この第１メッセージｑｉｊの算出の際に、チェックノードｆｊから受信した第２メッセージｒｊｉは考慮されない。つまり、チェックノードｆｊは、変数ノードｃｉと接続される、チェックノードｆｊ以外のチェックノード｛ｆｋ，ｆｌ，・・・｝の第２メッセージ｛ｒｋｉ，ｒｌｉ，・・・｝に基づいて算出された第１メッセージｑｉｊを受け取ることになる。
【０１５９】
チェックノードｆｊは、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝の各々から受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティ条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝毎に、変数ノードに対応するデータが１である確率を示す第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、変数ノードへ返信する。以上のアルゴリズムをパリティ条件が満たされるまで繰り返す。ＬＤＰＣのエラー訂正は計算の繰り返しにより行われる。
【０１６０】
変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝と、自身の確率Ｐｉ（第１メッセージｑ）とを用いて、当該変数ノードｃｉに対応するデジタルデータの真の値ｃｉ１（当該変数ノードｃｉで受信すべきデジタルデータの値）を推定する。
【０１６１】
より具体的には、変数ノードｃｉは、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々から受け取った第２メッセージ｛ｒｊｉ，ｒｋｉ，・・・｝、および、自身の確率Ｐｉのそれぞれが示すデジタルデータの値の多数決により、変数ノードｃｉに対応するデジタルデータの真の値ｃｉ１を推定する。そして、図２７に示すように、例えば「０」の数が多い場合は、ｃｉ１は「０」であると推定される一方、「１」の数が多い場合は、ｃｉ１は「１」であると推定される。
【０１６２】
確率演算部４００は、このように変数ノード｛ｃｉ，ｃｊ，・・・｝毎に得られた推定値の列ｃ１＝｛ｃｉ１，ｃｋ１，・・・｝を用いてパリティチェックを行う。なお、ここでは、確からしい値の確認と言う意味で尤度計算である。実際には、硬判定ではパリティで尤度を表現するため、ほぼ同義である。ただし、全データに対して検査行列を用いてチェックするパリティチェックと区別するため、ここでは、尤度計算と呼ぶこととする。
【０１６３】
より具体的には、推定値の列ｃ１に対して、Ｈｃ１Ｔ＝０が成立するか否かを判定し、Ｈｃ１Ｔ＝０が成立する場合は、メモリから読み出されたデータ列（符号化されたデータの列）は、推定値の列ｃ１であると判断して、計算を終了する。一方、Ｈｃ１Ｔ＝０が成立しない場合、変数ノードｃｉは、上述の推定結果を示すｃｉ１を、第１メッセージとして、自身と接続される複数のチェックノード｛ｆｊ，ｆｋ，・・・｝の各々へ送信する。チェックノードｆｊは、自身と接続される複数の変数ノード｛ｃｉ，ｃｋ，・・・｝の各々から受信した第１メッセージ｛ｑｉｊ，ｑｋｊ，・・・｝を元に、パリティ条件を満たすように、自身と接続される変数ノード｛ｃｉ，ｃｋ，・・・｝毎に、第２メッセージ｛ｒｉｊ，ｒｋｊ，・・・｝を算出し、変数ノードへ返信する。以上のアルゴリズムを、パリティ条件が満たされるまで繰り返す。
【０１６４】
パリティチェックにより、エラーの有無が判断でき、メモリシステムが自律的に自己の信頼性を管理できる。具体的には、確率演算部４００は、図２８のフローチャートのステップＳ７１において、確率演算によるエラー訂正処理を行うと、ステップＳ７２において、パリティチェックをコントローラ２０へ送信する。確率演算部４００は、ステップＳ７３において、エラー発生の有無を確率値に変換して、第１記憶部１００（記憶部５００）に保存する。
【０１６５】
ステップＳ７４では、コントローラ２０が、第１記憶部１００に記憶された確率値から、以前より強力な検査行列が必要か否かを判別する。従前の検査行列でよい場合（ステップＳ７４：Ｎｏ）、そのまま図２８のフローチャートの処理を終了する。これに対して、以前より強力な検査行列が必要な場合（ステップＳ７４：Ｙｅｓ）、ステップＳ７５に処理が進む。ステップＳ７５では、コントローラ２０が、第１記憶部１００から検査行列を読み込み、確率演算部４００を備えた第１記憶部１００でエラー訂正できるように、処理を変更して、図２８のフローチャートの処理を終了する。
【０１６６】
このように、実施の形態のメモリシステムの場合、パリティチェックにより、エラーの有無を判断でき、メモリシステムが自律的に自己の信頼性を管理できる。特に、パリティチェックにより取得されるエラーの有無は、統計的に、確率値として第１記憶部１００に格納できる。このため、実施の形態のメモリシステムでは、上述の検査行列の切り替えを実行するのが容易である。
【０１６７】
次に、確率演算部４００において、このようなＬＤＰＣ符号による誤り訂正処理を行うことで、第１記憶部１００内の殆どのメモリセルのデータを正確なデータとすることができるが、一部のメモリセルにエラーが残った状態となることもある。換言すれば、実施の形態のメモリシステムの場合、確率演算部４００が、ＬＤＰＣ符号による誤り訂正処理を行い、第１記憶部１００のデータに対して、大まかな誤り訂正処理を施す。そして、コントローラ２０が、第１記憶部１００のデータに対して、ＢＣＨ符号を用いた誤り訂正処理を施す。これにより、第１記憶部１００のデータのエラーを「０」とすることができる。
【０１６８】
コントローラ２０は、シーケンシャルな演算は、ある程度高速に行うことができるが、ＬＤＰＣ符号を用いた誤り訂正処理のような並列演算の場合、演算に長時間を要するおそれがある。しかし、実施の形態のメモリシステムの場合、いわゆる内符号となるＬＤＰＣ符号を用いた誤り訂正処理を確率演算部４００で行い、コントローラ２０で、いわゆる外符号となるＢＣＨ符号を用いた誤り訂正処理を行うようになっている。換言すると、確率演算部４００でＬＤＰＣ符号を用いた誤り訂正処理を行うことで、大体の誤り訂正処理を済ませておき、コントローラ２０が、大体の誤り訂正処理が済んだデータに対して、ＢＣＨ符号を用いた誤り訂正処理を施すことで、エラーを「０」とする。これにより、ＬＤＰＣ符号を用いた誤り訂正処理のために、コントローラ２０の動作が遅延化する不都合を防止できる。
【０１６９】
以上の説明から明らかなように、実施の形態のメモリシステムは、コントローラ２０が、第１記憶部１００等の記憶部の各メモリセルに、データが書き換わる確率を所望の確率とする電圧（閾値＝確率値）を書き込む。記憶部内に設けられた確率演算部４００は、各メモリセルに書き込まれたデータのＡＮＤおよびＯＲ等の論理演算を行い、論理演算結果を他のメモリセルに書き込む。
【０１７０】
記憶部には、ＬＤＰＣ符号を用いた誤り訂正処理に対応する複数の検査行列が記憶されている。各検査行列は、メモリセルに書き込まれたデータのエラー数に対応して用いられる検査行列となっている。確率演算部４００は、記憶部に書き込まれたデータに対して、検査行列を用いたＬＤＰＣ符号による誤り訂正処理を施すことで、大まかな誤り訂正処理を実行する。これにより、各メモリセルの大まかな誤り訂正処理と共に、発生しているエラーの数を認識できる。確率演算部４００は、認識したエラー数に対応する検査行列を選択的に用いて、ＬＤＰＣ符号による誤り訂正処理を実行する。
【０１７１】
これにより、記憶部の使用期間に応じて増加するエラー数に追従して、検査行列を切り替えて誤り訂正処理を行うことができる。このため、長期間に渡って使用に耐え得るメモリシステムを提供できる（メモリシステムの寿命を延ばすことができる）。
【０１７２】
また、実施の形態のメモリシステムは、確率演算部４００でＬＤＰＣ符号を用いた誤り訂正処理を行うことで、大体の誤り訂正処理を済ませておき、コントローラ２０が、大体の誤り訂正処理が済んだデータに対して、ＢＣＨ符号を用いた誤り訂正処理を施すことで、エラーを「０」とする。コントローラ２０は、シーケンシャルな演算は、ある程度高速に行うことができるが、ＬＤＰＣ符号を用いた誤り訂正処理のような並列演算の場合、演算に長時間を要するおそれがある。しかし、実施の形態のメモリシステムは、確率演算部４００でＬＤＰＣ符号を用いた誤り訂正処理を行うようになっているため、ＬＤＰＣ符号を用いた誤り訂正処理のために、コントローラ２０の動作が遅延化する不都合を防止できる。
【０１７３】
最後に、以上説明した実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施の形態は、その他の様々な形態で実施可能である。また、これら新規な実施の形態は、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更が可能である。そして、実施の形態およびその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明に対して均等の範囲に含まれるものである。
【符号の説明】
【０１７４】
１０    インタフェース
２０    コントローラ
１００  第１記憶部
１０１  メモリセルアレイ
１０２  アドレスデコーダ
１０３  選択部
１０４  センスアンプ
１０５  レジスタ
１１０  アドレス信号線
１２０  制御信号線
１３０  制御信号線
１４０  制御信号線
２００  第２記憶部
２０１  メモリセルアレイ
２０２  制御部
２０３  アドレス変換部
２０４  ワード線駆動部
３００  データバス
４００  確率演算部
４０１  第１確率演算部
４０２  第２確率演算部
４５１  セル部
４５２  論理演算部
４６１  ＡＮＤゲート
４６２  ＯＲゲート
４６３  セレクタ
４６４  セレクタ
５００  記憶部
【図１】
2016062463.tif 000009
【図２】
2016062463.tif 000010
【図３】
2016062463.tif 000011
【図４】
2016062463.tif 000012
【図５】
2016062463.tif 000013
【図６】
2016062463.tif 000014
【図７】
2016062463.tif 000015
【図８】
2016062463.tif 000016
【図９】
2016062463.tif 000017
【図１０】
2016062463.tif 000018
【図１１】
2016062463.tif 000019
【図１２】
2016062463.tif 000020
【図１３】
2016062463.tif 000021
【図１４】
2016062463.tif 000022
【図１５】
2016062463.tif 000023
【図１６】
2016062463.tif 000024
【図１７】
2016062463.tif 000025
【図１８】
2016062463.tif 000026
【図１９】
2016062463.tif 000027
【図２０】
2016062463.tif 000028
【図２１】
2016062463.tif 000029
【図２２】
2016062463.tif 000030
【図２３】
2016062463.tif 000031
【図２４】
2016062463.tif 000032
【図２５】
2016062463.tif 000033
【図２６】
2016062463.tif 000034
【図２７】
2016062463.tif 000035
【図２８】
2016062463.tif 000036