(57)【要約】【課題】不揮発性メモリ装置への付加回路を少なくしてメモリ装置の信頼性を部分的に高めることを可能とする。【解決手段】アドレス／モード記憶部１１０を設け、アドレスにより決定される管理モードによりデータバッファ２００と不揮発性メモリ３０との間で入出力されるデータ部分のデータ長を変更できるように制御することで、読み出されたデータに付加されるＥＣＣコードで訂正可能なデータの割合を増加させることができて、指定した領域に記憶されたデータの信頼性を向上させる。【選択図】図１
2009259113.tif 000002
【特許請求の範囲】
【請求項１】
ブロック単位で読み書きを行う不揮発性メモリの不揮発性メモリ管理装置であって（以下のｍ、ｎ（ｍ＞ｎ）、ｉ、ｊは１以上の整数）、
メモリ管理モードを記憶するモード記憶手段と、
前記不揮発性メモリとの間で読み書きするデータを一時記憶する一時記憶手段と、
前記モード記憶手段が第１のモードである時は前記一時記憶手段から前記ｍバイト長のデータをｉ回読み出し、第２のモードである時は前記一時記憶手段から前記ｎバイト長のデータをｊ回読み出す一時記憶読出し手段と、
前記一時記憶読出し手段で読み出されたｍバイト長又はｎバイト長のデータを受信し、同じビット長のエラー訂正コードを生成して当該データに付加するエラー訂正コード生成付加手段と、
前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとを前記不揮発性メモリに書き込む不揮発性メモリ書込み手段と、
前記モード記憶手段の前記第１乃至第２のモードに基づき、前記不揮発性メモリから前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとを読み出す不揮発性メモリ読出し手段と、
前記不揮発性メモリ読出し手段で読み出された前記ｍバイト長又はｎバイト長のデータを前記一時記憶手段に書き込む一時記憶書込み手段と、
前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとに基づいて、前記一時記憶手段に書き込んだデータのエラーを検出した場合、前記一時記憶手段のデータのエラー訂正を行うエラー訂正手段と
を具備することを特徴とする不揮発性メモリ管理装置。
【請求項２】
前記不揮発性メモリは、前記不揮発性メモリ管理装置より取り外し可能なもので、前記不揮発性メモリに前記メモリ管理モードを記憶させて、前記不揮発性メモリから読み込んだモード情報に応じて、前記不揮発性メモリのアクセスモードを決定する手段を具備することを特徴とする請求項１に記載の不揮発性メモリ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリのメモリ管理技術に係り、信頼性向上技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリでは、メモリセルに多値技術を適用して記憶容量を増加させるものがある。また、計算機システムで使用される不揮発性メモリの容量も年々増加している。さらに、不揮発性メモリを用いた計算機システム全体の信頼性を高める技術が求められている。そんな中で、ＣＰＵや不揮発性メモリの回路の変更を少なくして、不揮発性メモリの信頼性向上を行うＥＣＣ機能の強化が可能なＥＣＣ制御回路技術が発明されている（例えば、特許公報１参照。）。
【特許文献１】特開２００４−２８０７９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、引用文献１のように、ＣＰＵと不揮発性メモリの間に設けたＥＣＣ制御回路のＥＣＣ回路を変更することで、不揮発性メモリの信頼性強化を行う方法は、エラー訂正できるデータの数を増加させるとＥＣＣ制御回路の増加が訂正可能数に比例する以上に大きくなる問題があることと、またＥＣＣコードのサイズが増加するため、ＥＣＣコードの占める割合が不揮発性メモリ全体で大きくなる問題がある。
【０００４】
本発明は、上記問題を解決するためになされたもので、指定された領域の不揮発性メモリの信頼性を、ＥＣＣ回路を変更することなく、高めることができる不揮発性メモリ管理装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明の不揮発性メモリ管理装置は、ブロック単位で読み書きを行う不揮発性メモリの不揮発性メモリ管理装置であって（以下のｍ、ｎ（ｍ＞ｎ）、ｉ、ｊは１以上の整数）、メモリ管理モードを記憶するモード記憶手段と、前記不揮発性メモリとの間で読み書きするデータを一時記憶する一時記憶手段と、前記モード記憶手段が第１のモードである時は前記一時記憶手段から前記ｍバイト長のデータをｉ回読み出し、第２のモードである時は前記一時記憶手段から前記ｎバイト長のデータをｊ回読み出す一時記憶読出し手段と、前記一時記憶読出し手段で読み出されたｍバイト長又はｎバイト長のデータを受信し、同じビット長のエラー訂正コードを生成して当該データに付加するエラー訂正コード生成付加手段と、前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとを前記不揮発性メモリに書き込む不揮発性メモリ書込み手段と、前記モード記憶手段の前記第１乃至第２のモードに基づき、前記不揮発性メモリから前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとを読み出す不揮発性メモリ読出し手段と、前記不揮発性メモリ読出し手段で読み出された前記ｍバイト長又はｎバイト長のデータを前記一時記憶手段に書き込む一時記憶書込み手段と、前記ｍバイト長又はｎバイト長のデータと対応する前記エラー訂正コードとに基づいて、前記一時記憶手段に書き込んだデータのエラーを検出した場合、前記一時記憶手段のデータのエラー訂正を行うエラー訂正手段とを具備することを特徴とする。
【発明の効果】
【０００６】
本発明によれば、メモリから読み出されるデータのエラー訂正を行うＥＣＣ回路を変更することなく、アドレス／モード情報で設定したアドレスのデータのエラー訂正能力を向上させることができるので、信頼性の高い不揮発性メモリ管理装置を提供することができる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明に係る不揮発性メモリ管理装置の実施例について説明する。
【実施例】
【０００８】
本発明に係る不揮発性メモリ管理装置の実施例を、図１乃至図１１を参照して説明する。
【０００９】
図１は、実施例に係るホストＣＰＵの不揮発性メモリへのメモリアクセスを管理する不揮発性メモリ管理装置の構成を示すブロック図である。図２は、ＥＣＣコード生成付加回路の構成を示すブロック図である。図３は、エラー訂正回路の構成を示すブロック図である。図４と図６は、データバッファに書き込まれたデータと不揮発性メモリに書き込まれるデータのフォーマットを示す図である。図５と図７は、不揮発性メモリから読み出されたデータとデータバッファに書き込まれるデータのフォーマットを示す図である。図８乃至図１１は、不揮発性メモリ管理装置の制御処理手順を示すフローチャートである。
【００１０】
図１に示す不揮発性メモリ管理装置１０は、ホストＣＰＵ２０が不揮発性メモリ３０にシステムバス４０を経由してデータの読み取りおよび書き込みを行うことを管理する管理装置である。
【００１１】
ホストＣＰＵ２０は、システムバス４０を介して標準的なコンピュータシステムに装備されるプログラムやデータ記憶用の図示しないメインメモリ（１次記憶装置）や、図示しない外部補助記憶装置（不揮発性の２次記憶装置）とともにシステム外部の入出力装置や表示装置などが接続されていて、メインメモリにインストールされたプログラムを実行してデータ処理などの情報処理を行う。
【００１２】
不揮発性メモリ管理装置１０は、主としてコントローラ１００と、データバッファ２００と、ＥＣＣ生成付加回路３００と、エラー訂正回路４００とから構成され、システムバス４０とはバスインターフェース５００を介して接続され、不揮発性メモリ３０とはバッファインターフェース５１０を介して接続されている。
【００１３】
コントローラ１００は、アドレス／モード記憶部１１０を有し、図示しない制御信号で不揮発性メモリ管理装置１０内の各ブロックの動作を制御するとともに、不揮発性メモリ管理装置１０がホストＣＰＵ２０および不揮発性メモリ３０とインターフェース動作する時のデータやアドレスや各種制御信号の入出力動作を制御する。アドレス／モード記憶部１１０は、ホストＣＰＵ２０から設定されるアドレス情報と管理モード情報を記憶する。そして、データバッファ２００のデータ管理や不揮発性メモリ３０と入出力するデータのエラー訂正符号生成およびエラー訂正の制御において使用される。
【００１４】
データバッファ２００は、ホストＣＰＵ２０が不揮発性メモリ３０との間で読み書きするデータを一時記憶するバッファとして使用される。
【００１５】
ＥＣＣ生成付加回路３００は、図２に示すようにＥＣＣコード生成回路３１０とセレクタ３２０から構成され、データバッファ２００から順次読み出されたデータを入力し、入力したデータに基づくＥＣＣコードを生成付加してバッファインターフェース５１０に出力する。
【００１６】
すなわち、データバッファ２００から順次読み出されたデータは、セレクタ３２０に入力され、コントローラ１００の制御信号に基づいてセレクタ３２０から順次出力されるとともに、同時にＥＣＣコード生成回路３１０に入力されてＥＣＣコードが生成される。そして、初期設定パラメータと管理モード情報で定められた数のデータの読み出しが終了すると、コントローラ１００の制御信号に基づいてセレクタ３２０による選択が切り替えられて、ＥＣＣコード生成回路３１０で生成されたＥＣＣコードがセレクタ３２０から出力される。これによりＥＣＣ生成付加回路３００は、読出しデータに連続するようにＥＣＣコードをバッファインターフェース５１０に出力することになる。
【００１７】
エラー訂正回路４００は、図３に示すようにシンドローム生成回路４１０と訂正回路４２０から構成され、不揮発性メモリ３０から順次読み出されたデータとＥＣＣコードとをバッファインターフェース５１０を介して受信する。エラー訂正回路４００では、不揮発性メモリ３０から読み出されたデータをデータバッファ２００に出力すると同時に、シンドローム生成回路４１０に供給する。そして、不揮発性メモリ３０からデータに続き読み出されるＥＣＣコードは、シンドローム生成回路４１０のみに供給される。
【００１８】
データとＥＣＣコードを受信したシンドローム生成回路４１０は、シンドロームを生成し、誤り位置多項式と誤り評価多項式の演算を行ってエラーの個数、エラー発生アドレス、エラーデータを求め、そのエラー発生アドレスとエラーデータを訂正回路４２０に出力する。
【００１９】
エラー発生アドレスとエラーデータを受信した訂正回路４２０は、エラー発生アドレスに基づいてエラーの発生したデータを読み出し、そのデータと受信入力したエラーデータを用いてエラー訂正演算を行う。そして、データバッファ２００にエラー発生アドレスを出力し、エラー訂正したデータを当該アドレスのデータバッファ２００に書き込む。このエラー訂正動作は、シンドローム生成回路４１０で求められたエラー回数だけ繰り返される。
【００２０】
バスインターフェース５００は、システムバス４０と不揮発性メモリ管理装置１０のコントローラ１００やデータバッファ２００などが接続される内部バスとのインターフェース回路である。
【００２１】
バッファインターフェース５１０は、不揮発性メモリ３０と不揮発性メモリ管理装置１０との入出力信号のインターフェース回路である。
【００２２】
不揮発性メモリ３０は、例えばＮＡＮＤフラッシュメモリであってブロック単位で読み書きが行われるメモリである。そして、１ブロックに２Ｋバイトのデータ領域と、２４０バイト以上の冗長領域を記憶できるメモリであり、データバッファ２００は、１ブロックのデータ領域のデータが記憶できるように、少なくとも２Ｋバイトの容量を有する。
【００２３】
次に、不揮発性メモリ管理装置１０の動作を図４乃至図７のデータフォーマットと、図８乃至図１１の制御処理手順を参照しながら説明する。
【００２４】
（初期設定）
最初に、不揮発性メモリ管理装置１０は、電源投入やリセット操作の後にホストＣＰＵ２０から出力される初期パラメータを受信して、主としてコントローラ１００内の図示されない制御用テーブルやレジスタなどに書き込み記憶する（図８のステップＳ１００）。
【００２５】
初期パラメータには、例えば不揮発性メモリ３０のメモリの個数やメモリのバッファサイズなどのメモリ構成情報なども含まれる。
【００２６】
次に、ホストＣＰＵ２０から出力されるアドレス／モード情報をコントローラ１００内のアドレス／モード記憶部１１０に書き込み記憶する（図８のステップＳ１１０）。
【００２７】
アドレス／モード情報は、アドレス情報と管理モード情報が組となったもので、不揮発性メモリ３０のアドレスとそのアドレスのブロックに記憶されるデータに対する管理モードを指定するものである。例えば、以降の説明において管理モードが「０」の場合は、不揮発性メモリ３０の指定されたアドレスでは、その１ブロックのデータサイズと同容量のデータが読み書きされるものとし、管理モードが「１」の場合は、不揮発性メモリ３０の指定されたアドレスでは、その１ブロックのデータサイズの半分の容量のデータが読み書きされるように制御管理されるものとする。なお、ブロックアドレスとモードを組とするテーブル形式で記憶するのではなく、コントローラ１００の制御方法を変更することで、例えば与えられたアドレスで区切られたブロックアドレスでは管理モードを変更する形で記憶するようにしてもよい。
【００２８】
（書き込み動作）
書き込みアドレスの管理モードが「０」で、ホストＣＰＵ２０から不揮発性メモリ３０へ２Ｋバイトのデータを書き込む様子を例に、図４と図９を参照しながら説明する。
【００２９】
まず、不揮発性メモリ管理装置１０は、データバッファ２００の記憶領域にホストＣＰＵ２０から入力された２Ｋバイトのデータを受信して記憶する（図９のステップＳ２００）。
【００３０】
次に、不揮発性メモリ管理装置１０は、データバッファ２００に記憶した２Ｋバイトのデータを書き込む不揮発性メモリ３０の書き込みアドレスをホストＣＰＵ２０から受信し、コントローラ１００内に記憶する。そして、ホストＣＰＵ２０から書き込みコマンドを受信する（図９のステップＳ２１０）。
【００３１】
書き込みコマンドを受信すると、不揮発性メモリ管理装置１０は、不揮発性メモリ３０への書き込み準備動作を開始する。まず、不揮発性メモリ３０に書き込みアドレスを出力した後、アドレス／モード情報１１０を調べる。ここでは、該当アドレスの管理モードが「０」であるので、ホストＣＰＵ２０からの２Ｋバイトのデータが既にデータバッファ２００に記憶されているとして、データバッファ２００に記憶されたデータを図４（ａ）に示すように、５１２バイト毎の４つのサブブロックデータ（６００、６１０、６２０、６３０）に分割する。
【００３２】
次に、データバッファ２００からデータを順次読み出し、読み出したデータをＥＣＣ生成付加回路３００、バッファインターフェース５１０を介して不揮発性メモリ３０に出力する。また、ＥＣＣ生成付加回路３００ではＥＣＣコードが生成される（図９のステップＳ２２０）。
【００３３】
即ち、データバッファ２００から最初に読み出されたサブブロックデータ６００は、不揮発性メモリ３０に出力されるとともに、ＥＣＣコード生成回路３１０にてＥＣＣコードが生成される。ＥＣＣの符号化方式は、例えばリードソロモン符号（Ｒｅｅｄ  Ｓｏｌｏｍｏｎ  Ｃｏｄｅ）を使用し、例えば、サブブロックデータに対して８シンボル（１シンボルが１０ビット）のエラー訂正を行うものとすると、５１２バイトのサブブロックデータ６００に対して、１６シンボル（１６０ビット）、すなわち２０バイトのＥＣＣコード６０１が生成される。
【００３４】
次に、ＥＣＣコード６０１がバッファインターフェース５１０を介して不揮発性メモリ３０に出力される（図９のステップＳ２３０）。
【００３５】
これにより、ＥＣＣコード生成回路３１０から２０バイトのＥＣＣコード６０１が出力されて、不揮発性メモリ３０に書き込まれる。先頭のサブブロックデータ６００に対応するＥＣＣコード６０１は、図４（ｂ）に示すようにサブブロックデータ６００に続き不揮発性メモリ３０に書き込まれる。
【００３６】
次に、ホストＣＰＵ２０からデータバッファ２００に記憶されたデータの不揮発性メモリ３０への書き込みが終了したか否かを調べ（図９のステップＳ２４０）、終了していない時は、次のサブブロックデータ６１０、６２０、６３０に対して同じ動作を繰り返し実行する。その実行のために、コントローラ１００のデータバッファ２００へのアクセスアドレスやカウンタ等に所定のパラメータを設定してステップＳ２２０に戻る。
【００３７】
このようにして、不揮発性メモリ３０には、図４（ｂ）の矢印で示す進行方向に５１２バイト毎のサブブロックデータとそれに対応するＥＣＣコードが交互（６００、６０１、６１０、６１１、６２０、６２１、６３０、６３１）に出力されて、不揮発性メモリ３０に書き込まれる。不揮発性メモリ管理装置１０は、不揮発性メモリ３０への書き込みが終了すると、例えば、ホストＣＰＵ２０に書き込みが終了したことを図示しない割込み信号で通知する。
【００３８】
続いて、書き込みアドレスの管理モードが「１」で、ホストＣＰＵ２０から不揮発性メモリ３０へ１Ｋバイトのデータを書き込む様子を例に、図６と図９を参照しながら管理モードが「０」と異なる点を中心に説明する。
【００３９】
まず、不揮発性メモリ管理装置１０は、データバッファ２００にホストＣＰＵ２０から入力された１Ｋバイト分のデータを受信して記憶する（図９のステップＳ２００）。
【００４０】
次に、不揮発性メモリ管理装置１０は、データバッファ２００に記憶したデータを書き込む不揮発性メモリ３０の書き込みアドレスをホストＣＰＵ２０から受信し、コントローラ１００内に記憶する。そして、ホストＣＰＵ２０から書き込みコマンドを受信する（図９のステップＳ２１０）。
【００４１】
書き込みコマンドを受信すると、不揮発性メモリ管理装置１０は、不揮発性メモリ３０への書き込み準備動作を開始する。まず、不揮発性メモリ３０に書き込みアドレスを出力した後、アドレス／モード情報１１０を調べる。ここでは、管理モードが「１」であるので、ホストＣＰＵ２０からの１Ｋバイトのデータがデータバッファ２００に記憶されているとして、データバッファ２００に記憶されたデータを図６（ａ）に示すように、２５６バイト毎の４つのサブブロック（７００、７１０、７２０、７３０）に分割する。
【００４２】
次に、データバッファ２００からデータを順次読み出し、読み出したデータをＥＣＣ生成付加回路３００、バッファインターフェース５１０を介して不揮発性メモリ３０に出力する。また同様に、ＥＣＣ生成付加回路３００ではＥＣＣコードが生成される（図９のステップＳ２２０）。
【００４３】
即ち、データバッファ２００から最初のサブブロックデータ７００が読み出され、不揮発性メモリ３０に出力されるとともに、ＥＣＣコード生成回路３１０にて対応するＥＣＣコードが生成される。ここでもサブブロックデータ７００に対して８シンボルのエラー訂正を行うので、２５６バイトのサブブロックデータに対して、１６シンボル（１６０ビット）、すなわち２０バイトのＥＣＣコード７０１が生成される。
【００４４】
次に、ＥＣＣコード７０１のデータがバッファインターフェース５１０を介して不揮発性メモリ３０に出力される（図９のステップＳ２３０）。
【００４５】
これにより、ＥＣＣコード生成回路３１０からの２０バイトのＥＣＣコード７０１が出力されて、不揮発性メモリ３０に書き込まれる。先頭のサブブロックデータ７００に対応するＥＣＣコード７０１は、図６（ｂ）に示すようにサブブロックデータ７００に続き不揮発性メモリ３０に書き込まれる。
【００４６】
次に、データバッファ２００に記憶されたデータの不揮発性メモリ３０への書き込みが終了したか否かを調べ（図９のステップＳ２４０）、終了していない時は、次のサブブロックデータ７１０、７２０、７３０に対して同じ動作を繰り返し実行する。その実行のために、コントローラ１００のデータバッファ２００へのアクセスアドレスやカウンタなどに等に所定のパラメータを設定してステップＳ２２０に戻る。
【００４７】
このようにして、不揮発性メモリ３０には図６（ｂ）の矢印で示す進行方向に２５６バイト毎のサブブロックデータとそれに対応するＥＣＣコードが交互（７００、７０１、７１０、７１１、７２０、７２１、７３０、７３１）に出力されて、不揮発性メモリ３０に書き込まれる。不揮発性メモリ管理装置１０は、不揮発性メモリ３０への書き込みが終了すると、管理モードが「０」の書き込みと同様に、ホストＣＰＵ２０に書き込みが終了したことを図示しない割込み信号で通知する。
【００４８】
（読み出し動作）
次に、読み出しアドレスの管理モードが「０」で、不揮発性メモリ３０からホストＣＰＵ２０へ２Ｋバイトのデータを読み出す様子を例に、図５と図１０と図１１を参照しながら説明する。
【００４９】
まず、不揮発性メモリ管理装置１０は、不揮発性メモリ３０からデータを読み出す読み出しアドレスをホストＣＰＵ２０から受信し、コントローラ１００内に記憶する。そして、ホストＣＰＵ２０からの読み出しコマンドを受信する（図１０のステップＳ３００）。
【００５０】
読み出しコマンドを受信すると、不揮発性メモリ管理装置１０は、不揮発性メモリ３０からの読み出し準備動作を開始する。まず、不揮発性メモリ３０に読み出しアドレスと読み出し開始コマンドを出力した後、アドレス／モード情報１１０を調べる。ここでは、該当アドレスの管理モードが「０」であるので、不揮発性メモリ３０から５１２バイトのサブブロックデータ６５０、６６０、６７０、６８０とそれに対応する２０バイトのＥＣＣコード６５１、６６１、６７１、６８１を順次読み出し、サブブロック毎にエラー検査と訂正処理を行って２Ｋバイト分のデータとして構築するようデータバッファ２００に書き込むためにコントローラ１００内の制御パラメータを設定する。
【００５１】
次に、不揮発性メモリ３０より読み出された５１２バイトのサブブロックデータ６５０とそれに対応するＥＣＣコード６５１は、バッファインターフェース５１０、エラー訂正回路４００を介してデータバッファ２００に出力される（図１０のステップＳ３１０）。
【００５２】
エラー訂正回路４００では、読み出された５１２バイトのサブブロックデータ６５０がデータバッファ２００にそのまま出力されて書き込まれるとともに、シンドローム生成回路４１０に入力される（図１０のステップＳ３２０）。
【００５３】
次に、不揮発性メモリ３０より読み出された２０バイトのＥＣＣコード６５１がシンドローム生成回路４１０に入力される。
【００５４】
シンドローム生成回路４１０は、５１２バイトのサブブロックデータ６５０と２０バイトのＥＣＣコード６５１とに基づいてシンドロームを生成する（図１０のステップＳ３３０）。
【００５５】
次に、生成されたシンドロームに基づいて、エラー訂正回路４００はデータバッファ２００に書き込まれたデータのエラー訂正を行う（図１０のステップＳ３４０）。
【００５６】
ここで、エラー訂正の手順を詳しく説明する。なお、このエラー訂正回路４００の処理手順での計算は、処理高速化のため、例えば今井秀樹著「符号理論」（２００３年１１月１０日発行：電子情報通信学会）の１６５頁乃至１７３頁に説明されている「ユークリッド演算回路やチェン探索回路」などの専用の演算回路が使用される。
【００５７】
そして、エラー訂正回路４００は生成されたシンドロームが「０」であるか否かによってエラーが検出されたか調べる（図１１のステップＳ３４１）。そして、エラーが検出された場合はステップＳ３４２に進み、エラーの検出がなければ、ステップＳ３４０のエラーデータの訂正ステップを終了してステップＳ３５０に進む。すなわち、読み出した５１２バイトのサブブロックデータ６５０とＥＣＣコード６５１とにより生成されたシンドローム（剰余）が「０」であれば、読み出したデータにエラー発生がないことを示しているので、エラー訂正回路４００はデータバッファ２００に書き込まれたデータの訂正処理は行ない。一方、生成されたシンドローム（剰余）が「１」であれば、エラー訂正回路４００は生成されたシンドロームを用いて、誤り位置多項式と誤り評価多項式の計算を行う（図１１のステップＳ３４２）。
【００５８】
即ち、シンドローム生成回路４１０のシンドローム演算回路で生成されたシンドロームは、ユークリッド演算回路に入力されて、誤り位置多項式と誤り評価多項式が求められ出力される。
【００５９】
次に、シンドローム生成回路４１０は、誤り位置と誤りの値を求める（図１１のステップＳ３４３）。シンドローム生成回路４１０のチェン探索回路は、ユークリッド演算回路が出力する誤り位置多項式と誤り評価多項式からそれぞれの係数を求め、その係数から誤り位置と誤りの値を求める。
【００６０】
次に、訂正回路４２０は、誤りデータの訂正を行う（図１１のステップＳ３４４）。コントローラ１００は、シンドローム生成回路４１０から出力された誤り位置の情報を用いてデータバッファ２００に於けるアドレスを計算して、そのアドレスを用いてデータバッファ２００からデータを読み出し、そのデータを訂正回路４２０に入力する。
【００６１】
訂正回路４２０は、シンドローム生成回路４１０から上記誤り位置に対応して出力された誤りの値を予め受信していて、データバッファ２００より読み出されたデータを受信すると当該誤りの値を用いてデータのエラー訂正を行うように演算して、その結果を記憶する。次に、コントローラ１００は、先程計算したアドレスをデータバッファ２００に出力して、訂正回路４２０から演算結果の訂正されたデータをデータバッファ２００の当該アドレスに書き込む。
【００６２】
次に、全てのエラー訂正が終了したか否かを調べる（図１１のステップＳ３４５）。そして、シンドローム生成回路４１０から出力された誤りの個数のエラー訂正処理が終了していない場合は、ステップＳ３４３に戻り次のエラー発生位置と誤りの値を求めて、当該位置のデータのエラー訂正を行う。２０バイトのＥＣＣコードで訂正可能な８シンボル分のエラー訂正が終了した場合は、図１０のステップＳ３４０を終了してステップＳ３５０に進む。
【００６３】
このように、バッファメモリ２００に読み出したサブブロックの全データのエラー訂正が終了すると、次に、不揮発性メモリ３０からの読み出しとデータバッファ２００への書き込みが終了したか調べる（図１０のステップＳ３５０）。そして、終了していない時は、データバッファ２００の次のサブブロックのデータの読み出しと書き込みを行う。そのため、コントローラ１００のデータバッファ２００へのアクセスアドレスやカウンタなどに必要なパラメータを設定してステップＳ３１０に戻る。
【００６４】
このようにして、不揮発性メモリ３０から図５（ａ）の矢印で示す進行方向にサブブロックデータとそれに対応するＥＣＣコードが交互（６５０、６５１、６６０、６６１、６７０、６７１、６８０、６８１）に読み出し、データバッファ２００に書き込む。そして、エラー訂正回路４００によってエラーを検出すると、当該データをデータバッファ２００から読み出し、エラー訂正を施してデータバッファ２００に書き戻し、正しいデータ（６５２、６６２、６７２、６８２）を生成する。
【００６５】
なお、生成された正しいデータに対し異なる番号を付与しているが、例えば読み出されたデータ６５０にエラー発生が無い時は、データ６５２とデータ６５０の内容は同じである。不揮発性メモリ管理装置１０は、不揮発性メモリ３０からの読み出しとデータバッファ２００への書き込みが終了すると、例えば、上述の不揮発性メモリ３０へデータの書き込みが終了した場合と同様に、ホストＣＰＵ２０に読み出しが終了したことを図示しない割込み信号で、通知する。ホストＣＰＵ２０は、読み出し終了を検知すると、データバッファ２００から２Ｋバイトのデータを読み出す。
【００６６】
続いて、読み出しアドレスの管理モードが「１」で、不揮発性メモリ３０からホストＣＰＵ２０へ１Ｋバイトのデータを読み出す様子を例に、図７と図１０と図１１を参照しながら管理モードが「０」と異なる点を中心に説明する。
【００６７】
まず、不揮発性メモリ管理装置１０は、不揮発性メモリ３０からデータを読み出す読み出しアドレスと、読み出しコマンドをホストＣＰＵ２０から受信する（図１０のステップＳ３００）。
【００６８】
読み出しコマンドを受信すると、不揮発性メモリ管理装置１０は、不揮発性メモリ３０からの読み出し準備動作を開始する。まず、不揮発性メモリ３０に読み出しアドレスと読み出し開始コマンドを出力した後、アドレス／モード情報１１０を調べる。ここでは、該当アドレスの管理モードが「１」であるので、不揮発性メモリ３０から２５６バイトのサブブロックデータ７５０、７６０、７７０、７８０とそれに対応するＥＣＣコード７５１、７６１、７７１、７８１を順次読み出し、サブブロック毎にエラー検査と訂正処理を行って１Ｋバイト分のデータとして構築するようデータバッファ２００に書き込むためにコントローラ１００内の制御パラメータを設定する。
【００６９】
次に、不揮発性メモリ３０より読み出された２５６バイトのサブブロックデータ７５０とそれに対応するＥＣＣコード７５１は、バッファインターフェース５１０、エラー訂正回路４００を介してデータバッファ２００に出力される（図１０のステップＳ３１０）。
【００７０】
エラー訂正回路４００では、読み出された２５６バイトのサブブロックデータ７５０がデータバッファ２００にそのまま出力されて書き込まれるとともに、シンドローム生成回路４１０に入力される（図１０のステップＳ３２０）。
【００７１】
次に、不揮発性メモリ３０より読み出された２０バイトのＥＣＣコード７５１がシンドローム生成回路４１０に入力される。
【００７２】
シンドローム生成回路４１０は、２５６バイトのサブブロックデータ７５０と２０バイトのＥＣＣコード７５１とに基づいてシンドロームを生成する（図１０のステップＳ３３０）。
【００７３】
次に、生成されたシンドロームに基づいて、エラー訂正回路４００はデータバッファ２００に書き込まれたデータのエラー訂正を行う（図１０のステップＳ３４０）。
【００７４】
まず、エラー訂正回路４００では、生成されたシンドロームが「０」である否かによってエラーが検出されたか調べる（図１１のステップＳ３４１）。そして、エラーが検出された場合（シンドロームが「１」）は、ステップＳ３４２に進み、エラーの検出がなければ、ステップＳ３４０を終了してステップＳ３５０に進む。
【００７５】
シンドロームが「１」である場合、エラー訂正回路４００は生成されたシンドロームを用いて、誤り位置多項式と誤り評価多項式の計算を行う（図１１のステップＳ３４２）。
【００７６】
即ち、シンドローム生成回路４１０のシンドローム演算回路で生成されたシンドロームは、ユークリッド演算回路に入力されて、誤り位置多項式と誤り評価多項式が求められ出力される。
【００７７】
次に、シンドローム生成回路４１０は、誤り位置と誤りの値を求める（図１０のステップＳ３４３）。シンドローム生成回路４１０のチェン探索回路は、ユークリッド演算回路が出力する誤り位置多項式と誤り評価多項式からそれぞれの係数を求め、その係数から誤り位置と誤りの値を求め、コントローラ１００に出力する。
【００７８】
次に、コントローラ１００は、エラー検出したデータをバッファメモリ２００から訂正回路４２０へ読み出し、訂正回路４２０にてエラー訂正処理を施してバッファメモリ２００に書き戻す処理によって誤りデータの訂正を行う（図１１のステップＳ３４４）。
【００７９】
次に、全てのエラー訂正が終了したかを調べる（図１１のステップＳ３４５）。そして、シンドローム生成回路４１０から出力された誤りの個数のエラー訂正処理が終了していない場合は、ステップＳ３４３に戻り次のエラー発生位置と誤りの値を求めて、当該位置のデータのエラー訂正を行う。２０バイトのＥＣＣコードで訂正可能な８シンボル分のエラー訂正が終了した場合は、図１０のステップＳ３４０を終了してステップＳ３５０に進む。
【００８０】
このように、バッファメモリ２００に読み出したサブブロックデータのエラー訂正が終了すると、次に、不揮発性メモリ３０からの読み出しとデータバッファ２００への書き込みが終了したか調べる（図１０のステップＳ３５０）。そして、終了していない時は、データバッファ２００の次のサブブロックのデータの読み出しと書き込みを行う。そのためにコントローラ１００のデータバッファ２００へのアクセスアドレスやカウンタなどに所定のパラメータを設定してステップＳ３１０に戻る。
【００８１】
このようにして、不揮発性メモリ３０から図５（ａ）の矢印で示す進行方向にサブブロックデータとそれに対応するＥＣＣコードが交互（７５０、７５１、７６０、７６１、７７０、７７１、７８０、７８１）に読み出し、データバッファ２００に書き込み。そして、エラー訂正回路４００によってエラーを検出すると、当該データをデータバッファ２００から読み出し、エラー訂正を施してデータバッファ２００に書き戻し、正しいデータ（７５２、７６２、７７２、７８２）を生成する。
【００８２】
不揮発性メモリ管理装置１０は、不揮発性メモリ３０からの読み出しとデータバッファへ２００の書き込みが終了すると、例えば、管理モードが「０」のアドレスからのデータ読み出しと同様に、ホストＣＰＵ２０に読み出しが終了したことを図示しない割込み信号で、通知する。ホストＣＰＵ２０は、読み出し終了を検知すると、データバッファ２００から１Ｋバイトのデータを読み出す。
【００８３】
なお、読み出し動作において、読み出したデータに２０バイトのＥＣＣコードで訂正できない数のエラーが発生した時の不揮発性メモリ管理装置１０のエラー処理手順は、使用される計算機システムに依存する部分が多いため省略している。
【００８４】
不揮発性メモリ管理装置１０を上述のように、アドレス／モード情報を用いて、ホストＣＰＵ２０と不揮発性メモリ３０とのデータの読み書きにおいて、データのサイズを変更できるように構成することで、読み書きするデータの訂正可能な数は、管理モードが「０」の場合は、２Ｋバイトのデータに対して３２シンボル（８シンボル＊４）であるが、管理モードが「１」の場合は、１Ｋバイトのデータに対して３２シンボルとなる。これにより、管理データを「１」と設定したアドレスに記憶させたデータに対するエラー訂正能力をほぼ２倍に向上させることができる。この不揮発性メモリ管理装置１０を用いたシステムでは、ホストＣＰＵ２０が、特に高い信頼性が必要となるデータやプログラム（例えば、ＢｏｏｔプログラムやＯＳなど）を記憶させる領域のアドレスのみの管理モードを「１」とすることで、システム全体の信頼性を向上させることができる。
【００８５】
本発明は、上記実施例に限定されるものではなく、発明の要旨を逸脱しない範囲で、種々、変形して実施できることは勿論である。
【００８６】
例えば、管理モードが「１」の場合の、２５６バイトのサブブロックのデータのサイズを「２５６」ではなく管理モードが「０」の場合のサブブロックのデータのサイズ５１２バイト未満のサイズにまで増加させることが可能であり、この場合は、信頼性の高いデータを記憶する不揮発性メモリ３０の記憶容量を増加させることができる。
【００８７】
また、管理モードが「１」の場合の、２５６バイトのサブブロックの数を「４」ではなくデータバッファ２００と不揮発性メモリ３０のアクセスのブロックサイズに収まる数に増加させることが可能であり、信頼性の高いデータを記憶する不揮発性メモリ３０の記憶容量を増加させることができる。
【００８８】
また、管理モードに「２」を設けて、１２８バイトのデータと２０バイトのＥＣＣコードを単位として不揮発性メモリ３０と読み書きするようにすれば、管理モード「１」に比べて訂正能力を更に２倍とすることができて、信頼性の要求レベルに応じて、管理モードを使い分けることができるので更に柔軟で信頼性の高いデータ管理が可能となる。なお、管理モード「２」は、管理モード「０」「１」と適宜組み合わせて使用することができ、例えば、管理モード「０」と「２」を組み合わせ、管理モード「０」と「１」と「２」を組み合わせて使用しても良い。
【００８９】
また、不揮発性メモリ管理装置１０のアドレス／モード情報を不揮発性メモリ３０に記憶させて読み書きすることを可能とすれば、不揮発性メモリ３０が取り外し取り付け可能な不揮発性メモリとすることができ、不揮発性メモリ管理装置１０は不揮発性メモリ３０が取り付けられた時に、その不揮発性メモリ３０に記憶されたモード管理情報を読み込み記憶しホストＣＰＵ２０に管理情報を読み込ませることで、その不揮発性メモリ３０に書き込まれたデータに信頼性レベルの異なるものが混在している場合も適切に読み書きが行えるようになり、利便性と信頼性の高いシステムを提供することができる。
【図面の簡単な説明】
【００９０】
【図１】本実施例の不揮発性メモリ管理装置の構成と不揮発性メモリ管理装置を有する計算機システムの構成を示すブロック図。
【図２】本実施例のＥＣＣコード生成付加回路の構成を示すブロック図。
【図３】本実施例のエラー訂正回路の構成を示すブロック図。
【図４】本実施例のデータバッファに書き込まれたデータと不揮発性メモリに書き込まれるデータのデータフォーマットを示す図。
【図５】本実施例の不揮発性メモリから読み出されたデータとデータバッファに書き込まれるデータのデータフォーマットを示す図。
【図６】本実施例のデータバッファに書き込まれたデータと不揮発性メモリに書き込まれるデータのデータフォーマットを示す図。
【図７】本実施例の不揮発性メモリから読み出されたデータとデータバッファに書き込まれるデータのデータフォーマットを示す図。
【図８】本実施例の不揮発性メモリ管理装置の初期設定の処理の制御手順を示すフローチャート図。
【図９】本実施例の不揮発性メモリ管理装置のメモリへの書き込み処理の制御手順を示すフローチャート図。
【図１０】本実施例の不揮発性メモリ管理装置のメモリからの読み出し処理制御手順を示すフローチャート図。
【図１１】本実施例の不揮発性メモリ管理装置のメモリからの読み出し処理でエラー訂正処理の制御手順を示すフローチャート図。
【符号の説明】
【００９１】
１０  不揮発性メモリ管理装置
２０  ホストＣＰＵ
３０  不揮発性メモリ
４０  バス
１００  コントローラ
１１０  アドレス／モード記憶部
２００  データバッファ
３００  ＥＣＣ生成付加回路
３１０  ＥＣＣコード生成回路
３２０  セレクタ
４００  エラー訂正回路
４１０  シンドローム生成回路
４２０  訂正回路
５００  バスインターフェース
５１０  バッファインターフェース
【図１】
2009259113.tif 000003
【図２】
2009259113.tif 000004
【図３】
2009259113.tif 000005
【図４】
2009259113.tif 000006
【図５】
2009259113.tif 000007
【図６】
2009259113.tif 000008
【図７】
2009259113.tif 000009
【図８】
2009259113.tif 000010
【図９】
2009259113.tif 000011
【図１０】
2009259113.tif 000012
【図１１】
2009259113.tif 000013