(57)【要約】【課題】ランダムアクセス可能でありながら電源を切った後もデータ保持可能で、アプリケーションに応じたＥＣＣの付加が可能な不揮発性ランダムアクセスメモリおよび不揮発性メモリシステムを提供する。【解決手段】ＮＶＲＡＭ２１は、ランダムアクセス可能で、データ領域と、エラー訂正（ＥＣＣ）コードを保存するためのＥＣＣ領域の２つの領域を含む不揮発性記憶領域２１１と、データ領域にアクセスする際に使用するデータサイズをデータ領域単位サイズとして外部から設定するための不揮発性記憶領域設定機能を実現する不揮発性記憶領域制御部２１２と、を有し、不揮発性記憶領域制御部２１２は、設定されたデータ領域単位サイズに従ってデータ領域とＥＣＣ領域を管理し、データ領域単位サイズごとに、上記不揮発性記憶領域制御部が設定したＥＣＣ領域単位サイズのＥＣＣ領域を割り当てる機能を含む。【選択図】図６
2011039585.tif 000002
【特許請求の範囲】
【請求項１】
ランダムアクセス可能で、データを保存するデータ領域と、エラー訂正コード（ＥＣＣ）を保存するためのＥＣＣ領域の２つの領域を含む不揮発性記憶領域と、
上記データ領域にアクセスする際に使用するデータサイズをデータ領域単位サイズとして外部から設定するための不揮発性記憶領域設定機能を実現する不揮発性記憶領域制御部と、を有し、
上記不揮発性記憶領域制御部は、
上記設定されたデータ領域単位サイズに従って上記データ領域とＥＣＣ領域を管理し、上記データ領域のデータ領域単位サイズごとに、上記不揮発性記憶領域制御部が設定したＥＣＣ領域単位サイズのＥＣＣ領域を割り当てる機能を含む
不揮発性ランダムアクセスメモリ。
【請求項２】
上記不揮発性記憶領域制御部は、
上記データ領域とデータ領域単位サイズの設定と同様に、上記ＥＣＣ領域のＥＣＣ領域単位サイズを設定できる機能を含む
請求項１記載の不揮発性ランダムアクセスメモリ。
【請求項３】
上記不揮発性記憶領域制御部は、
設定したデータ領域単位サイズに従ってＥＣＣ領域単位サイズを設定し、上記データ領域のデータ領域単位サイズごとにＥＣＣ領域を割り当てる
請求項２記載の不揮発性ランダムアクセスメモリ。
【請求項４】
上記設定されたデータ領域単位サイズの上記データ領域にアクセスする機能を有する
請求項１から３のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項５】
上記設定されたＥＣＣ領域単位サイズの上記ＥＣＣ領域にアクセスする機能を有する
請求項１から４のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項６】
上記設定された各単位サイズの上記データ領域と、当該データ領域に割り当てられた上記ＥＣＣ領域に連続してアクセスする機能を有する
請求項１から３のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項７】
上記単位サイズの設定を有効とするデータ領域のアドレス範囲を指定する機能を有する
請求項１から６のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項８】
上記単位サイズの設定を有効とするデータ領域のアドレス範囲を複数指定する機能を有することによって、異なる単位サイズを持った複数のデータ領域とＥＣＣ領域の組合せを複数含む
請求項７記載の不揮発性ランダムアクセスメモリ。
【請求項９】
上記不揮発性記憶領域制御部で設定した情報を内部不揮発性記憶部に保持する機能を有する
請求項１から８のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項１０】
上記内部不揮発性記憶部に保持された設定情報を初期化処理の一部として外部からのアクセスを開始する前に、不揮発性記憶領域制御部へ読み込む機能を有する
請求項１から８のいずれか一に記載の不揮発性ランダムアクセスメモリ。
【請求項１１】
初期化処理終了後、アプリケーションの必要に応じて再設定は可能である
請求項１０記載の不揮発性ランダムアクセスメモリ。
【請求項１２】
ランダムアクセス可能な不揮発性ランダムアクセスメモリと、
上記不揮発性ランダムアクセスメモリへのアクセスを制御するメモリコントローラと、を有し、
上記不揮発性ランダムアクセスメモリは、
ランダムアクセス可能で、データ領域と、エラー訂正コード（ＥＣＣ）を保存するためのＥＣＣ領域の２つの領域を含む不揮発性記憶領域と、
上記データ領域にアクセスする際に使用するデータサイズをデータ領域単位サイズとして外部から設定するための不揮発性記憶領域設定機能を実現する不揮発性記憶領域制御部と、を有し、
上記不揮発性記憶領域制御部は、
上記設定されたデータ領域単位サイズに従って上記データ領域とＥＣＣ領域を管理し、上記データ領域単位サイズごとに、上記不揮発性記憶領域制御部が設定したＥＣＣ領域単位サイズのＥＣＣ領域を割り当てる機能を含む
不揮発性メモリシステム。
【請求項１３】
上記メモリコントローラは、
上記不揮発性記憶領域制御部を制御し、上記データ領域単位サイズを設定する機能と、上記ＥＣＣ領域単位サイズを設定する機能を含む
請求項１２記載の不揮発性メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ランダムアクセス可能な不揮発性ランダムアクセスメモリおよび不揮発性メモリシステムに関するものである。
【背景技術】
【０００２】
近年、揮発性ランダムアクセスメモリ（ＲＡＭ）であるＳＲＡＭやＤＲＡＭのようにランダムアクセス可能でありながら、電源を切った後もデータ保持可能な不揮発性メモリ（ＮＶＲＡＭ）としてＦｅＲＡＭ、ＰＣＲＡＭやＲｅＲＡＭの開発、製品化が進んでいる。
これらのＮＶＲＡＭは将来のＲＡＭの置き換えとして期待されており、さらに不揮発であるという特徴から新しいアプリケーションも模索されている。
【０００３】
フラッシュで代表される不揮発性メモリ（ＮＶＭ）では、メモリセルの書換え・消去回数の増加に従ってデータの保持特性が低下する特徴を持つため、書き込むデータに対してエラー訂正コード（ＥＣＣ）を付加することで信頼性を改善することができる。
ＮＶＲＡＭに対してもＥＣＣを付加することで同様の効果が期待されている。
【０００４】
図１は、ＮＡＮＤフラッシュとストレージ空間のマッピング例を示す図である。
図２は、ＮＡＮＤフラッシュのページサイズとセクタデータの配置例を示す図である。
図３は、ＮＡＮＤフラッシュのセクタ更新時の処理フローを示す図である。
【０００５】
ＮＡＮＤフラッシュは、図１に示すように、ページＰＧ単位でアクセスするため、セクタＳＣＴ単位（512Byte）でアクセスするストレージ用途に適している。
ページＰＧ上のデータは、図２および図３に示すように、ＥＣＣを付加することで、データエラーを修正でき、ストレージとしてのデータ書き換え回数を改善することができる。
【０００６】
近年、ＮＡＮＤフラッシュにおいて、書き込み単位としてのページサイズの増大はストレージとしてのセクタ単位のランダムアクセス性能を劣化させている。
ページのデータを更新するには、図３に示すように、少なくともそこに含まれるすべてのセクタＳＣＴのデータをＥＣＣとともに書き換える必要があるからである。
図３の例では、ページＰＧ１のセクタＳＣＴ２の部分だけを書き換える場合、ページＰＧ１は書込み単位であると同時にＥＣＣを計算する単位であることから、セクタＳＣＴ２の部分の新しいデータに更新したページＰＧ１のＥＣＣを再計算する必要がある。さらにＮＡＮＤフラッシュは消去が必要であるため、ブロックＢＬＫＡとは異なるブロックＢＬＫＢに更新後のデータを再計算後のＥＣＣと共に書き込む必要がある。
そのためＳＳＤやフラッシュカードなどＮＡＮＤフラッシュを応用してストレージを実現する装置では、ＥＣＣと書込み単位、さらに消去単位の違いを吸収し、セクタ単位でのランダムアクセス性能を改善するための工夫が必要となってきた。
また書き換え回数を維持するためにＥＣＣの訂正能力に対する要求が高くなってきており、ＥＣＣコードを保存するためのサイズも拡張されてきている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一方、上記のような新しいＮＶＲＡＭでＥＣＣによって書き換え回数を改善しようとした場合、ＲＡＭとしてアクセスされることが前提となる。このため、ＮＡＮＤフラッシュとは異なり、ストレージのセクタに代表されるような共通の基準となるアクセス単位サイズが存在しない。
したがって、メモリ側の仕様として単位となるデータサイズを規定することは、そのＮＶＲＡＭを使用するアプリケーションからのアクセスの自由度を著しく下げることになってしまうという不利益がある。
【０００８】
本発明は、ランダムアクセス可能でありながら電源を切った後もデータ保持可能で、アプリケーションに応じたＥＣＣの付加が可能な不揮発性ランダムアクセスメモリおよび不揮発性メモリシステムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の第１の観点の不揮発性ランダムアクセスメモリは、ランダムアクセス可能で、データを保存するデータ領域と、エラー訂正（ＥＣＣ）コードを保存するためのＥＣＣ領域の２つの領域を含む不揮発性記憶領域と、上記データ領域にアクセスする際に使用するデータサイズをデータ領域単位サイズとして外部から設定するための不揮発性記憶領域設定機能を実現する不揮発性記憶領域制御部と、を有し、上記不揮発性記憶領域制御部は、上記設定されたデータ領域単位サイズに従って上記データ領域とＥＣＣ領域を管理し、上記データ領域のデータ領域単位サイズごとに、上記不揮発性記憶領域制御部が設定したＥＣＣ領域単位サイズのＥＣＣ領域を割り当てる機能を含む。
【００１０】
本発明の第２の観点の不揮発性メモリシステムは、ランダムアクセス可能な不揮発性ランダムアクセスメモリと、上記不揮発性ランダムアクセスメモリへのアクセスを制御するメモリコントローラと、を有し、上記不揮発性ランダムアクセスメモリは、データを保存するデータ領域と、エラー訂正（ＥＣＣ）コードを保存するためのＥＣＣ領域の２つの領域を含む不揮発性記憶領域と、上記データ領域にアクセスする際に使用するデータサイズをデータ領域単位サイズとして外部から設定するための不揮発性記憶領域設定機能を実現する不揮発性記憶領域制御部と、を有し、上記不揮発性記憶領域制御部は、上記設定されたデータ領域単位サイズに従って上記データ領域とＥＣＣ領域を管理し、上記データ領域のデータ領域単位サイズごとに、上記不揮発性記憶領域制御部が設定したＥＣＣ領域単位サイズでＥＣＣ領域を割り当てる機能を含む。
【発明の効果】
【００１１】
本発明によれば、揮発性ランダムアクセスメモリ（ＲＡＭ）であるＳＲＡＭやＤＲＡＭのようにランダムアクセス可能でありながら、電源を切った後もデータ保持可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）を実現できる。
そして、このＮＶＲＡＭに対してアプリケーションがランダムアクセスしやすい方法でＥＣＣを付加することができる手段を提供し、データの信頼性の向上を図ることができる。
【図面の簡単な説明】
【００１２】
【図１】ＮＡＮＤフラッシュとストレージ空間のマッピング例を示す図である。
【図２】ＮＡＮＤフラッシュのページサイズとセクタデータの配置例を示す図である。
【図３】ＮＡＮＤフラッシュのセクタ更新時の処理フローを示す図である。
【図４】本発明の第１の実施形態に係る不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）を搭載した不揮発性メモリシステムの構成を示す図である。
【図５】データ領域とＥＣＣ領域との関係を示す図である。
【図６】本第１の実施形態に係るＮＶＲＡＭの不揮発性記憶領域制御部の具体的な構成例を示す図である。
【図７】本実施形態に係るレジスタ領域の一例を示す図である。
【図８】不揮発性記憶領域のＥＣＣ領域が８バイトの場合のメモリコントローラのレジスタとの関係の一例を示す図である。
【図９】メモリコントローラからみたデータ領域、レジスタ領域、ＥＣＣ領域の関係の一例を示す図である。
【図１０】本実施形態に係る不揮発性記憶領域設定機能の処理フローおよびレジスタ領域を示す図である。
【図１１】読み出し(Read)時のデータ領域およびＥＣＣ領域へのアクセス処理について説明するためのフローチャートである。
【図１２】書き込み(Write)時のデータ領域およびＥＣＣ領域へのアクセス処理について説明するためのフローチャートである。
【図１３】データ領域単位サイズのデータ領域と、ＥＣＣ領域単位サイズのＥＣＣ領域に１つのコマンドで連続してアクセスする処理を説明するための図である。
【図１４】データ領域のデータ領域単位サイズとＥＣＣ領域のＥＣＣ領域単位サイズを設定する場合に、その設定を有効とするデータ領域のアドレス範囲を指定する情報を含んだ場合の実現例のレジスタ領域を示す図である。
【図１５】起動時の処理として、ＮＶＲＡＭ内の設定保存機能の有無に応じた設定情報の処理を説明するためのフローチャートである。
【図１６】本発明の第２の実施形態に係るＮＶＲＡＭの構成例を示す図である。
【図１７】アクセス単位によるオーバーヘッドの例を示す図である。
【図１８】アドレス境界によるオーバーヘッドの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図面に関連付けて説明する。
なお、説明は以下の順序で行う。
１．第１の実施形態
２．第２の実施形態
【００１４】
＜１．第１の実施形態＞
図４は、本発明の第１の実施形態に係る不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）を搭載した不揮発性メモリシステムの構成を示す図である。
【００１５】
本第１の実施形態に係るメモリシステム１０は、ＮＶＲＡＭを含む不揮発性メモリシステム２０、および不揮発性メモリシステム２０のＮＶＲＡＭにアクセス可能なホスト装置３０を有する。
【００１６】
不揮発性メモリシステム２０は、ＮＶＲＡＭ２１、およびメモリコントローラ２２を有する。
本第１の実施形態のＮＶＲＡＭ２１は、不揮発性記憶領域２１１、および不揮発性記憶領域制御部２１２を有する。
【００１７】
不揮発性記憶領域２１１は、データ領域ＡＲＤＴと、エラー訂正コード（ＥＣＣ）を保存するための領域（ＥＣＣ領域ＡＲＥＣ）の２つの領域を含む。
【００１８】
図５は、データ領域ＡＲＤＴとＥＣＣ領域ＡＲＥＣとの関係を示す図である。
【００１９】
図５の例では、４バイトのデータ領域ＡＲＤＴと１バイトのＥＣＣ領域ＡＲＥＣが１対１対応の関係を持つ。
データ領域ＡＲＤＴは、メモリコントローラから直接アドレス指定することで、４バイト（Byte）を１ワードとしてアクセス可能である。ＥＣＣ領域ＡＲＥＣは、データ領域ＡＲＤＴのようにメモリコントローラから直接アドレスを指定してアクセスできなくてもよい。本実施形態では図７にあるようなレジスタ領域ＡＲＲＧのＥＣＣ＿ＣＯＤＥ＿ＲＥＧを介してアクセスすることができる。
たとえば、データ領域ＡＲＤＴのアドレスＤＡＴＡ［４］への書込み時は、４バイトのデータに対して計算されたＥＣＣコードは、図７のＥＣＣ＿ＣＯＤＥ＿０＿ＲＥＧに設定され、ＥＣＣ領域ＡＲＥＣのＥＣＣ１の１バイトに保存される。
また、データ領域ＡＲＤＴのアドレスＤＡＴＡ［４］の読み出し時は、ＥＣＣ領域ＡＲＥＣのＥＣＣ１を読み出し、メモリコントローラは図７にＥＣＣ＿ＣＯＤＥ０＿ＲＥＧを介してその値を取得し、データの誤り検出や訂正を行うことができる。
【００２０】
本第１の実施形態に係るＮＶＲＡＭ２１は、データ領域ＡＲＤＴとＥＣＣ領域ＡＲＥＣは一つの不揮発性記憶領域２１１に形成される。
【００２１】
ＮＶＲＡＭ２１の不揮発性記憶領域制御部２１２は、データ領域とＥＣＣ領域を設定された各単位サイズで管理し、データ領域ＡＲＤＴの各アクセス単位ごとにＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズをマッピングする機能を有する。
本実施形態では、ＮＶＲＡＭ２１の不揮発性記憶領域制御部２１２に対して、ホスト装置３０がメモリコントローラ２２を介してデータ領域ＡＲＤＴにアクセスする単位として、複数バイトからなるデータ領域単位サイズを設定するための機能を有する。この機能を不揮発性記憶領域設定機能と呼ぶ。
図７の実施例では、ＤＡＴＡ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧにデータ領域単位サイズを設定する。不揮発性記憶領域制御部２１２は、設定されたデータ領域単位サイズに従ってデータ領域ＡＲＤＴとＥＣＣ領域ＡＲＥＣを管理し、データ領域ＡＲＤＴの各アクセス単位ごとにＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズをマッピングする機能を有する。
図７の実施例では同様に、ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧを使用してデータ領域ＡＲＤＴの各アクセス単位にマッピングするＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズを外部から直接設定することができる。たとえば図５の状態のＮＶＲＡＭに対して、ＤＡＴＡ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧに４、ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧに１を設定した状態である。
【００２２】
データ領域ＡＲＤＴに対して、どのようなサイズのアクセス単位を使用するかは、実際にはホスト装置３０のオペレーティングシステム（ＯＳ）やアプリケーションによって決まる。
たとえば、プログラムコードであればＣＰＵの命令キャッシュに入力する数バイト単位のアクセスであり、仮想メモリやユーザデータの場合は、５１２バイト、４０９６バイトといった単位でアクセスされることが一般的である。
また、ＤＭＡコントローラの転送サイズなど、そのシステムのハードウェア（ＨＷ）仕様によって制約される場合もある。
【００２３】
図６は、本第１の実施形態に係るＮＶＲＡＭの不揮発性記憶領域制御部の具体的な構成例を示す図である。
【００２４】
図６の不揮発性記憶領域制御部２１２は、データ領域ＡＲＤＴとＥＣＣ領域ＡＲＥＣが一つの不揮発性記憶領域２１１上に割り当てられた場合の例を示している。
不揮発性記憶領域制御部２１２は、データ領域アドレス変換部２１２１、ＥＣＣ領域アクセス制御部２１２２、レジスタ（レジスタ領域ＡＲＲＧ）２１２３、および内部不揮発性メモリとしてのレジスタ設定保存部２１２４を有する。
また、図６において、ＡＢはアドレスバスを、ＣＢは制御信号バスを、ＤＢはデータバスを示している。
【００２５】
データ領域アドレス変換部２１２１は、メモリコントローラ２２からのデータ領域ＡＲＤＴへのアクセスに対して、アドレス変換を行う機能を有する。
レジスタ２１２３は、レジスタ領域ＡＲＲＧとしてメモリコントローラ２２からアクセスされる。
データ領域アドレス変換部２１２１は、レジスタ２１２３に設定された各単位サイズの値に従ってＮＶＲＡＭ２１に入力されたアドレスを内部アドレスに変換する方法を切換える機能を有している。
【００２６】
ＥＣＣ領域アクセス制御部２１２２は、メモリコントローラ２２がデータ領域ＡＲＤＴへアクセスした場合にそのデータ領域に割り当てられたＥＣＣ領域ＡＲＥＣへアクセスする機能を有する。
ＥＣＣ領域アクセス制御部２１２２は、外部からデータ領域ＡＲＤＴを指定するために入力されたデータアドレスから変換することでＥＣＣ領域ＡＲＥＣへのアクセスアドレスを生成する。
メモリコントローラ２２はレジスタ領域ＡＲＲＧの各レジスタ２１２３にアクセスすることで、不揮発性記憶領域制御部２１２に設定を行う。
ＥＣＣ領域アクセス制御部２１２２は、不揮発性記憶領域制御部２１２内にあるレジスタ２１２３に設定されたＥＣＣ領域のＥＣＣ領域単位サイズの値に従って、「ＥＣＣ_ＣＯＤＥ_ＲＥＧ」とＥＣＣ領域の間で転送を行う機能を有している。
これによって、データ領域ＡＲＤＴにアクセスした場合にはそのデータ領域に割り当てられたＥＣＣ領域ＡＲＥＣの値がレジスタ２１２３と不揮発性記憶領域２１１の間でマルチプレクサ２１３を介して入出力される。
メモリコントローラ２２は、ＥＣＣ_ＣＯＤＥ_ＲＥＧを経由して、ＥＣＣ領域ＡＲＥＣのデータにアクセスする。
【００２７】
図７は、本実施形態に係るレジスタ領域の一例を示す図である。
【００２８】
図７の例では、４バイトのレジスタ領域ＡＲＲＧが形成される。
アドレスＲＥＧ［０］は、データ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」であり、データ領域ＡＲＤＴのアクセス単位のサイズを設定するために使用される。
データ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、データ領域単位サイズが取得される。
データ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、書き込み（Write）時には、データ領域単位サイズ値が設定される。
【００２９】
アドレスＲＥＧ［４］は、ＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」であり、上記データ領域ＡＲＤＴのアクセス単位に割り当てられるＥＣＣ領域ＡＲＥＣのサイズを設定するために使用される。
ＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）には、ＥＣＣ領域単位サイズが取得される。
ＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、書き込み（Write）時には、ＥＣＣ領域単位サイズが設定される。
本レジスタが存在しない場合には、不揮発性記憶領域制御部２１２が不揮発性領域設定機能として、ＥＣＣ領域ＡＲＥＣをマッピングするデータ領域ＡＲＤＴのアクセス単位数に対してＥＣＣ領域を分配できるよう、ＥＣＣ領域単位サイズを決定する。
【００３０】
アドレスＲＥＧ［８］、ＲＥＧ［１２］・・・は、ＥＣＣコードレジスタ「ＥＣＣ_ＣＯＤＥ_Ｘ_ＲＥＧ」であり、ＥＣＣ領域とＥＣＣコードを入出力するために使用される。
使用する最終レジスタの番号（Ｘ）はＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定した値によって決まる。
ＥＣＣコードレジスタ「ＥＣＣ_ＣＯＤＥ_Ｘ_ＲＥＧ」は、データ領域ＡＲＤＴへ読み出しアクセス直後の読み出し（Read）によって、そのデータ領域に関連するＥＣＣ領域ＡＲＥＣの値が取得される。
ＥＣＣコードレジスタ「ＥＣＣ_ＣＯＤＥ_Ｘ_ＲＥＧ」の書き込み（Write）によって、それに続くデータ領域ＡＲＤＴへの書込みアクセス時に、そのデータ領域に関連するＥＣＣ領域ＡＲＥＣに値が設定される。
【００３１】
図８は、不揮発性記憶領域のＥＣＣ領域ＡＲＥＣが８バイトの場合のメモリコントローラのレジスタとの関係の一例を示す図である。ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧにはＥＣＣ領域単位サイズとして８バイトを示す0ｘ08の値が設定される。
【００３２】
図８の実施例では、メモリコントローラ２２のレジスタ２１２３上の各領域は４バイトで形成される。
したがってアドレスＲＥＧ［８］、ＲＥＧ［１２］の８バイト分の２つのＥＣＣコードレジスタ「ＥＣＣ_ＣＯＤＥ_（０，１）_ＲＥＧ」がＥＣＣ領域ＡＲＥＣのアドレスＥＣＣ「２」に割り当てられている。
【００３３】
以上のように、本実施形態においては、ＥＣＣ領域ＡＲＥＣはレジスタ領域経由でアクセスされ、データ領域ＡＲＤＴのように直接アクセスできない例をあげたが、データ領域と同様に直接ＥＣＣ領域のアドレスを指定しアクセスできた場合にも、本発明の効果は変わらない。
【００３４】
メモリコントローラ２２は、ＮＶＲＡＭ２１の不揮発性記憶領域制御部２１２を制御し、データ領域ＡＲＤＴを使用するデータ領域単位サイズを設定する機能を有する。
またこれに加えて、メモリコントローラ２２は、ＮＶＲＡＭ２１がＥＣＣ領域単位サイズレジスタのような、ＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズを設定する機能を持つ場合には、ＥＣＣ領域単位サイズを設定する機能も有する。
【００３５】
メモリコントローラ２２は、ＮＶＲＡＭ制御部２２１、データバッファ２２２、ホスト側のＲＡＭインタフェース２２３、およびＮＶＲＡＭ側のＮＶＲＡＭインタフェース２２４を有する。
【００３６】
ＮＶＲＡＭ制御部２２１は、ＥＣＣレジスタ２２１２を有する。
ＮＶＲＡＭ制御部２２１は、ホスト装置３０からのデータ書き込み時には、ＮＶＲＡＭ２１の不揮発性記憶領域２１１のデータ領域ＡＲＤＴのデータ領域単位サイズのアクセスごとにＥＣＣコードを計算し、その結果をＥＣＣ領域ＡＲＥＣに記録する。
ＮＶＲＡＭ制御部２２１は、データ読出し時には、不揮発性記憶領域２１１のデータ領域ＡＲＤＴからデータを、ＥＣＣ領域ＡＲＥＣから図７に示したレジスタ経由でＥＣＣコードを読み出す。
ＮＶＲＡＭ制御部２２１は、読み出したＥＣＣコードを利用してデータ領域ＡＲＤＴから読みだしたデータの確認・訂正を行う。
ＮＶＲＡＭ制御部２２１は、これにより、データ信頼性を向上させることができる。
【００３７】
図９は、メモリコントローラからみたデータ領域、レジスタ領域、ＥＣＣ領域の関係の一例を示す図である。
【００３８】
図９の例では、各データ領域、レジスタ領域は４バイト、ＥＣＣ領域は１バイトにより形成される。ＤＡＴＡ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧに設定されたデータ領域ＡＲＤＴのアクセス単位は４バイト、ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧに設定されたＥＣＣ領域ＡＲＥＣのアクセス単位は１バイトである。ＥＣＣ領域はレジスタ経由のアクセスであり、外部からは直接的に見えない。
図９の例では、アドレスＤＡＴＡ［８］のデータ領域ＡＲＤＴのＷｏｒｄ２にマッピングしたＥＣＣ領域ＡＲＥＣがアドレスＥＣＣ［２］のＥＣＣ２であった場合のアクセス例が示されている。
この場合、アドレスＤＡＴＡ［８］のデータ領域のＷｏｒｄ２への読み出しアクセス時には、アドレスＥＣＣ［２］のＥＣＣ２の値がＥＣＣ＿ＣＯＤＥ＿０＿ＲＥＧを経由して読み出される。
アドレスＤＡＴＡ［８］のデータ領域のＷｏｒｄ２への書き込みアクセス時には、同じくＥＣＣ＿ＣＯＤＥ＿０＿ＲＥＧに設定した値がアドレスＥＣＣ［２］のＥＣＣ２に書込まれる。
【００３９】
ＥＣＣ領域ＡＲＥＣは、図９の実施例では、レジスタを介してメモリコントローラ２２から４Ｂｙｔｅ単位でアクセスされる。なお、ＥＣＣ領域のＥＣＣ領域単位サイズに合わせて、ワード（Word）単位、バイト（Byte）単位の他、ビット（Bit）単位でアクセス可能であってもよい。
【００４０】
どのようなＥＣＣコードを使用するかは、ホスト装置３０側のアプリケーションによって決まる。煩雑に書き換えが発生するデータであるほど訂正能力の高いＥＣＣコードが必要とされる。
以下に具体例を示す。
【００４１】
［第１の具体例］
この例は、ＣＰＵのコード用として、データ領域ＡＲＤＴが１ワード（Word）＝４バイト（Byte）単位、読み出し専用（リードオンリ：Read Only）の場合で、ＥＣＣが不要である場合である。
図７に示すようなレジスタ領域ＡＲＲＧに対し、「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」＝０ｘ０４、「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ」＝０ｘ００が設定される。
プログラムコードのようにリードオンリであるデータについては、書換え回数が増大しないためＥＣＣコードを不要と判断し、ＥＣＣ領域ＡＲＥＣを０に設定にする。
これにより、ＥＣＣ領域ＡＲＥＣは未使用となり、ＥＣＣを持たない通常のＲＯＭのように使用することができる。
【００４２】
［第２の具体例］
この例は、ＣＰＵのデータ領域として、データ領域ＡＲＤＴが１２８バイト単位で、読み出し（Read）/書き込み（Write）アクセスする場合で、４バイトのＥＣＣが必要である場合である。
図７に示すようなレジスタ領域ＡＲＲＧに対し、「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」＝０ｘ８０、「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」＝０ｘ０４を設定する。
【００４３】
図１０は、本実施形態に係る不揮発性記憶領域設定機能の処理フローおよびレジスタ領域ＡＲＲＧを示す図である。
【００４４】
本実施形態では、不揮発性記憶領域制御部２１２に対して、ホスト装置３０がメモリコントローラ２２を介して主にアクセスする単位として使用する複数バイトからなるデータ領域単位サイズを設定する。
不揮発性記憶領域設定機能は、データ領域単位サイズをデータ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に書き込み（ＳＴ１）、ＥＣＣ領域単位サイズをＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に書き込む（ＳＴ２）。
【００４５】
次に、読み出し(Read)および書き込み(Write)時のデータ領域ＡＲＤＴおよびＥＣＣ領域ＡＲＥＣへのアクセス処理について、図１１および図１２に関連付けて説明する。
図１１は、読み出し(Read)時のデータ領域およびＥＣＣ領域へのアクセス処理について説明するためのフローチャートである。
図１２は、書き込み(Write)時のデータ領域およびＥＣＣ領域へのアクセス処理について説明するためのフローチャートである。
なお、ここでは、ＮＶＲＡＭ２１のデータバス幅が３２ビット（４バイト）であり、データ領域もＥＣＣ領域もこのバス幅でアクセスされる場合を例に説明する。したがって、ホスト側も４バイトの倍数をアクセス単位のサイズとして選択する。
【００４６】
まず、読み出し(Read)時のデータ領域ＡＲＤＴおよびＥＣＣ領域ＡＲＥＣへのアクセス処理について、図１１に関連付けて説明する。
【００４７】
データ領域ＡＲＤＴのデータが０バイトから４バイトごとに読み出される（ＳＴ１１〜ＳＴ１３）。
この読み出しは、バイトカウント値がレジスタ領域ＡＲＲＧのデータ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているデータ領域単位サイズまで行われる（ＳＴ１４）。
ステップＳＴ１４において、バイトカウント値がデータ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているデータ領域単位サイズを越えていると判定されると、データの読み出しに続いてＥＣＣ領域ＡＲＥＣのＥＣＣコードが読み出される。
【００４８】
ＥＣＣデータ領域ＡＲＥＣのデータが０バイトから４バイトごとに読み出される（ＳＴ１５〜ＳＴ１７）。
この読み出しは、バイトカウント値がレジスタ領域ＡＲＲＧのＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているＥＣＣ領域単位サイズまで行われる（ＳＴ１８）。
ステップＳＴ１８において、バイトカウント値がＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているＥＣＣ領域単位サイズを越えていると判定されると、データおよびＥＣＣコードの読み出しが終了される。
【００４９】
次に、書き込み(Write)時のデータ領域ＡＲＤＴおよびＥＣＣ領域ＡＲＥＣへのアクセス処理について、図１２に関連付けて説明する。
【００５０】
データ領域ＡＲＤＴに０バイトから４バイトごとにデータが書き込まれる（ＳＴ２１〜ＳＴ２３）。
この書き込みは、バイトカウント値がレジスタ領域ＡＲＲＧのデータ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているデータ領域単位サイズまで行われる（ＳＴ２４）。
ステップＳＴ１４において、バイトカウント値がデータ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているデータ領域単位サイズを越えていると判定されると、データの書き込みに続いてＥＣＣ領域ＡＲＥＣのＥＣＣコードが書き込まれる。
【００５１】
ＥＣＣデータ領域ＡＲＥＣに０バイトから４バイトごとにＥＣＣコードが書き込まれる（ＳＴ２５〜ＳＴ２７）。
この書き込みは、バイトカウント値がレジスタ領域ＡＲＲＧのＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているＥＣＣ領域単位サイズまで行われる（ＳＴ２８）。
ステップＳＴ２８において、バイトカウント値がＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」に設定されているＥＣＣ領域単位サイズを超えていると判定されると、データおよびＥＣＣコードの書き込みが終了される。
【００５２】
次に、データ領域単位サイズ分のデータ領域ＡＲＤＴと、ＥＣＣ領域単位サイズ分のＥＣＣ領域ＡＲＥＣに連続してアクセスする処理について、図１３（Ａ）および（Ｂ）に関連付けて説明する。
図１３（Ａ）および（Ｂ）は、データ領域単位サイズ分のデータ領域と、ＥＣＣ領域単位サイズ分のＥＣＣ領域に連続してアクセスする処理を説明するための図である。
図１３（Ａ）は、データ領域単位サイズ分のデータ領域と、ＥＣＣ領域単位サイズ分のＥＣＣ領域に連続してアクセスする処理を説明するためのフローチャートである。
図１３（Ｂ）は、データ領域単位サイズ分のデータ領域と、ＥＣＣ領域単位サイズ分のＥＣＣ領域に連続してアクセスする処理で用いられるレジスタ領域の一例を示している。
【００５３】
この連続アクセス処理においては、レジスタ領域ＡＲＲＧに、図７等のレジスタに加えてコマンドとデータ転送とその引数を設定するためのレジスタが追加されている。
すなわち、コマンド設定レジスタ「ＣＭＤ_ＲＥＧ」とデータ転送レジスタ「ＤＡＴＡ＿ＲＥＧ」とデータアドレスレジスタ「ＤＡＴＡ_ＡＤＲ_ＲＥＧ」の３つのレジスタが追加されている。
コマンド設定レジスタ「ＣＭＤ_ＲＥＧ」に対する書き込みは、レジスタにコマンドを設定し、実行することを意味する。
一例として、データ領域単位サイズ分のデータ領域ＡＲＤＴとＥＣＣ領域単位サイズ分のＥＣＣ領域ＡＲＥＣを連続して読み出す「ＲＥＡＤ_ＵＮＩＴコマンド（0x01）」と、データ領域単位サイズ分のデータ領域とＥＣＣ領域単位サイズ分のＥＣＣ領域を連続して書き込む「ＷＲＩＴＥ_ＵＮＩＴコマンド（0x02）」について説明する。
データアドレスレジスタ「ＤＡＴＡ_ＡＤＲ_ＲＥＧ」に対する書き込みは、コマンドの引数となるデータ領域のアドレスを設定することを意味する。
ＲＥＧ［０］はＣＭＤ＿ＲＥＧにコマンド設定後は、ＤＡＴＡ＿ＲＥＧに切り替わって使用する。つまり設定したコマンドに従って、ＲＥＡＤ＿ＵＮＩＴコマンドの場合は、ＤＡＴＡ＿ＲＥＧを繰り返し読み出すことによってデータの連続転送を行い、ＷＲＩＴＥ＿ＵＮＩＴコマンドの場合は、ＤＡＴＡ＿ＲＥＧに繰り返し書き込むことによってデータの連続転送を行う。
また、データ領域、ＥＣＣ領域それぞれの単位サイズは、連続アクセス処理開始以前に設定済みであるとする。
【００５４】
この連続アクセス処理においては、図１３（Ａ）に示すように、データアドレスレジスタ「ＤＡＴＡ_ＡＤＲ_ＲＥＧ」にコマンドの引数となるデータ領域ＡＲＤＴのアドレスが設定される（ＳＴ３１）。
次に、コマンド設定レジスタ「ＣＭＤ_ＲＥＧ」にコマンドが設定され、実行される（ＳＴ３２）。
設定されるコマンドが、「ＲＥＡＤ_ＵＮＩＴコマンド（0x01）」である場合には、次の処理が行われる。
第１のステップで、ＤＡＴＡ＿ＡＤＲ＿ＲＥＧに読み出しを行うデータ領域ＡＲＤＴのアドレスを設定し、第２のステップで、ＣＭＤ＿ＲＥＧにＲＥＡＤ＿ＵＮＩＴコマンドであることを示す０ｘ０１を設定し、連続アクセス処理を開始する。
第３のステップでは、指定したデータ領域ＡＲＤＴのアドレスからデータ領域単位サイズのデータがＤＡＴＡ＿ＲＥＧに出力され、第４のステップではそのデータ領域ＡＲＤＴに割り当てられたＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズのデータがＤＡＴＡ＿ＲＥＧに連続して出力される（ＳＴ３３、ＳＴ３４）。
設定されるコマンドが、「ＷＲＩＴＥ_ＵＮＩＴコマンド（0x02）」である場合、次の処理が行われる。
第１のステップで、ＤＡＴＡ＿ＡＤＲ＿ＲＥＧに読み出しを行うデータ領域ＡＲＤＴのアドレスを設定し、第２のステップで、ＣＭＤ＿ＲＥＧにＷＲＩＴＥ＿ＵＮＩＴコマンドであることを示す０ｘ０２を設定し、連続アクセス処理を開始する。
第３のステップでは、指定したデータ領域ＡＲＤＴのアドレスに書き込むデータ領域単位サイズのデータをＤＡＴＡ＿ＲＥＧに入力し、第４のステップではそのデータ領域に割り当てられたＥＣＣ領域ＡＲＥＣのＥＣＣ領域単位サイズのデータをＤＡＴＡ＿ＲＥＧに連続して入力し、各領域に書き込まれる（ＳＴ３３、ＳＴ３４）。
【００５５】
次に、データ領域ＡＲＤＴおよびＥＣＣ領域ＡＲＥＣの各単位サイズの設定を有効とするデータ領域ＡＲＤＴのアドレス範囲を指定することが可能である場合の実現例について、図１４に関連付けて説明する。
図１４は、データ領域ＡＲＤＴのデータ領域単位サイズを設定する場合に、その設定を有効とするデータ領域のアドレス範囲を指定するための拡張を行った場合のレジスタ領域ＡＲＲＧの一例を示す図である。
【００５６】
本実施例の場合、上記ＮＶＲＡＭ２１は同時に異なる単位サイズを持った複数のデータ領域ＡＲＤＴ、ＥＣＣ領域ＡＲＥＣを持つことができる。
この場合、図１４に示すように、レジスタ領域ＡＲＲＧに、図７等のレジスタに加えてデータ領域開始アドレス設定レジスタ「ＤＡＴＡ_ＳＴＡＲＴ_ＡＤＲ_ＲＥＧ」とデータ領域サイズレジスタ「ＤＡＴＡ_ＳＩＺＥ_ＲＥＧ」の２つのレジスタが追加されている。
【００５７】
データ領域開始アドレス設定レジスタ「ＤＡＴＡ_ＳＴＡＲＴ_ＡＤＲ_ＲＥＧ」は、
データ領域ＡＲＤＴ、ＥＣＣ領域ＡＲＥＣの各単位サイズを設定するデータ領域上の先頭アドレスが設定される。
【００５８】
「ＤＡＴＡ＿ＳＴＡＲＴ＿ＡＤＲ＿ＲＥＧ」にアドレス値を設定することによって、データ領域サイズレジスタ「ＤＡＴＡ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、次の処理を行う。すなわち、データ領域サイズレジスタ「ＤＡＴＡ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、「ＤＡＴＡ_ＳＴＡＲＴ_ＡＤＲ_ＲＥＧ」で指定されたアドレスを先頭とする領域のサイズを返す。
この状態で、「ＤＡＴＡ＿ＳＩＺＥ＿ＲＥＧ」に書き込みを行うことによって、ＤＡＴＡ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧ、ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧに設定した各単位サイズが有効であるデータ領域ＡＲＤＴ上のアドレス領域のサイズの設定が可能である。
【００５９】
「ＤＡＴＡ＿ＳＴＡＲＴ＿ＡＤＲ＿ＲＥＧ」にアドレス値を設定することによって、データ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、次の処理を行う。すなわち、データ領域単位サイズレジスタ「ＤＡＴＡ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、「ＤＡＴＡ_ＳＴＡＲＴ_ＡＤＲ_ＲＥＧ」で指定されたアドレスの、データ領域単位サイズを返す。
これによってメモリコントローラ２２は、そのデータ領域に設定したデータ領域単位サイズを確認することが可能である。
この状態で、「ＤＡＴＡ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧ」に書き込みを行うことによってデータ領域単位サイズの変更が可能である。
【００６０】
「ＤＡＴＡ＿ＳＴＡＲＴ＿ＡＤＲ＿ＲＥＧ」にアドレス値を設定することによって、ＥＣＣ領域単位サイズレジスタ「ＥＣＣ_ＵＮＩＴ_ＳＩＺＥ_ＲＥＧ」は、読み出し（Read）時には、「ＤＡＴＡ_ＳＴＡＲＴ_ＡＤＲ_ＲＥＧ」で指定されたアドレスの、ＥＣＣ領域単位サイズを返す。
これによってメモリコントローラ２２は、そのデータ領域に設定したＥＣＣ領域単位サイズを確認することが可能である。
この状態で、「ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧ」に書き込みを行うことによってＥＣＣ領域単位サイズの変更が可能である。
【００６１】
ＥＣＣコードレジスタ「ＥＣＣ＿ＣＯＤＥ＿０＿ＲＥＧ」〜「ＥＣＣ_ＣＯＤＥ_Ｘ_ＲＥＧ」は、読み出し（Read）時には、データ領域ＡＲＤＴへアクセスした際、そのデータ領域に割り当てられたＥＣＣ領域ＡＲＥＣの値が取得される。
書き込み（Write）時には、データ領域ＡＲＤＴへアクセスした際、そのデータ領域に割り当てられたＥＣＣ領域ＡＲＥＣの値を設定する。
Ｘの値は、ＥＣＣ＿ＵＮＩＴ＿ＳＩＺＥ＿ＲＥＧの設定として有効な最大値によって決まり、アクセス時に使用するＥＣＣ＿ＣＯＲＥ＿０＿ＲＥＧ〜ＥＣＣ＿ＣＯＤＥ＿Ｘ＿ＲＥＧの範囲はそのアドレスに割り当てられたＥＣＣ領域のサイズによって決まる。
【００６２】
なお、レジスタ領域ＡＲＲＧに設定した状態はＮＶＲＡＭ２１の内部に配置される設定保存機能部としての不揮発性メモリに保持することが望ましい。
保存する機能を持たない場合は、たとえば上記ＮＶＲＡＭを制御、管理するメモリコントローラ２２がＮＶＲＡＭ２１の初期化処理の一部としてレジスタに毎回設定する。
図１５（Ａ）および（Ｂ）は、ＮＶＲＡＭ内の設定保存機能の有無に応じた設定情報の処理を説明するためのフローチャートである。
【００６３】
図１５（Ａ）は、設定保存機能を有する場合の処理フローを示している。
この場合、ＮＶＲＡＭ２１への初期化後、たとえばリセット解除後、設定保存部から自動的に設定がロードされる（ＳＴ４１）。
【００６４】
図１５（Ｂ）は、設定保存機能を有していない場合の処理フローを示している。
この場合、ＮＶＲＡＭ２１にアクセスを開始する前にメモリコントローラ２２がレジスタ設定を行う（ＳＴ４２）。設定後、初期化し、ＮＶＲＡＭ２１にアクセスが開始される（ＳＴ４３）。
【００６５】
＜２．第２の実施形態＞
図１６は、本発明の第２の実施形態に係るＮＶＲＡＭの構成例を示す図である。
【００６６】
本第２の実施形態に係るＮＶＲＡＭ２１Ａが第１の実施形態のＮＶＲＡＭ２１と異なる点は、不揮発性記憶領域制御部２１２Ａはデータ領域とＥＣＣ領域が独立した不揮発性記憶領域２１１Ａ−２に割り当てられていることにある。
この場合も第１の実施形態と同様に、データ領域２１１Ａ−１はメモリコントローラ２２から与えられたアドレスでアクセスされ、ＥＣＣ領域２１１Ａ−２は不揮発性記憶領域制御部２１２によって生成されたアドレスでアクセスされる。
【００６７】
本発明の実施形態の対象となるＮＶＲＡＭはアドレス空間としてデータ領域とＥＣＣ領域が区別可能であることが必要であり、実際に物理的なメモリセルとして分割されていることを条件としない。図６および図１６はそれぞれの場合の例を示している。
【００６８】
上述した実施形態では、書き換え可能なＮＶＲＡＭについて説明してきたが、書き換え前に消去が必要となるＮＶＲＡＭについても適用可能である。
【００６９】
本実施形態では、ＥＣＣ領域へのアクセスをレジスタ経由としたが、制御ピンや、コマンドによって実現する手法も適用することが可能である。
【００７０】
以上説明したように、本実施形態によれば、以下の効果を得ることができる。
バイトの単位でランダムアクセス可能なＮＶＲＡＭにおいて、アプリケーションに適した仕様に従ってホスト装置側が設定できる。
ホスト装置が設定したサイズでランダムアクセスされることを前提にＮＶＲＡＭ内の構成を変更することができる。
ＥＣＣ領域に保存されるＥＣＣコードはホスト側で計算され、読み出し時にデータエラーからの復帰を可能にすることで、結果としてＮＶＲＡＭの書換え回数を改善することができる。
つまり、リードオンリ（Read Only）なデータの場合には、ＥＣＣ性能は最小限あるいは不要の設定が可能であり、煩雑に書込みを行うデータの場合には、ＥＣＣ性能を最大限に設定しデータの信頼性を上げるといったことが可能である。
ホスト装置は上記のような設定をメモリコントローラ内のＮＶＭ制御部を通して、ＮＶＲＡＭに対して設定することが可能である。
【００７１】
メモリコントローラは、ＮＶＲＡＭに対してＥＣＣコードを保存するためのデータ領域とＥＣＣ領域の各単位サイズを設定することができる。
ＥＣＣコードのサイズは、対象とするデータサイズと必要とされるＥＣＣの訂正・検出能力によって決まる。
つまり本実施形態によって、その不揮発性メモリを使用するホストはその上で動作するアプリケーションに最適なアクセス単位サイズ、ＥＣＣ性能によってＮＶＲＡＭへのアクセス方法を決定することができる。
【００７２】
上記設定においてホスト装置がランダムアクセス性能を重視する場合には、そのアクセス単位に合わせてデータ領域のデータ単位を設定可能である。
このアクセス単位は、もしホスト装置とメモリコントローラ間のデータ転送としてＤＭＡ転送などで高速アクセスを行う場合には、ＤＭＡ転送可能なサイズに合わせて決定することも可能である。
【００７３】
ホスト装置とその上で動作するアプリケーションが、本発明の実施形態に係るＮＶＲＡＭに対してランダムアクセスとして期待するアクセス単位を、データ領域単位サイズとして設定することできる。
そして、ＥＣＣコードを付加することによるデータ変更時のオーバーヘッドを小さくすることができる。
【００７４】
図１７は、アクセス単位によるオーバーヘッドの例を示す図である。
【００７５】
ハッチングで示す部分が実際のアクセスが発生するデータである（Half Word、16Bit）。
アクセスするサイズとデータ領域単位サイズが不一致のため、ＥＣＣを計算するために必ずWord（32Bit）で読み出す必要が発生する。
ここでは３２Ｂｉｔを例としたがこのデータ領域単位サイズが大きいほど、ＥＣＣを計算するために読み出すデータ量は増加し、オーバーヘッドが増大することでパフォーマンスを低下させる。
本実施形態によれば、データ領域単位サイズをアクセスサイズに合わせることでＥＣＣ計算のために余分なデータの読出しが不要となる。
【００７６】
また、ユーザーがランダムアクセスで期待するアドレス境界に合わせてＥＣＣコードを付加する領域を提供することで、ランダムアクセスに対するＥＣＣによるオーバーヘッドを小さくすることができる。
【００７７】
図１８は、アドレス境界によるオーバーヘッドの例を示す図である。
【００７８】
ハッチングで示す部分が実際のアクセスが発生するデータである（Word、32Bit）。
アクセスするサイズとデータ領域単位サイズは一致するが、データ境界が不一致のため、ＥＣＣを計算するために必ず２Word読み出す必要が発生する。
本実施形態によれば、データ領域単位サイズの境界を合わせることでＥＣＣ計算を１回にすることができる。
【符号の説明】
【００７９】
１０・・・メモリシステム、２０・・・ＮＶＲＡＭを含む不揮発性メモリシステム、２１，２１Ａ・・・ＮＶＲＡＭ、２１１・・・不揮発性記憶領域、２１１Ａ−１・・・データ領域（不揮発性記憶領域）、２１１Ａ−２・・・ＥＣＣ領域（不揮発性記憶領域）、２１２，２１２Ａ・・・不揮発性記憶領域制御部、２１２１・・・データ領域アドレス変換部、２１２２・・・ＥＣＣ領域アクセス制御部、２１２３・・・レジスタ（領域）、２１２４・・・レジスタ設定保存部、２２・・・メモリコントローラ、３０・・・ホスト装置３０、ＡＲＤＴ・・・データ領域、ＡＲＥＣ・・・ＥＣＣ領域。
【図１】
2011039585.tif 000003
【図２】
2011039585.tif 000004
【図３】
2011039585.tif 000005
【図４】
2011039585.tif 000006
【図５】
2011039585.tif 000007
【図６】
2011039585.tif 000008
【図７】
2011039585.tif 000009
【図８】
2011039585.tif 000010
【図９】
2011039585.tif 000011
【図１０】
2011039585.tif 000012
【図１１】
2011039585.tif 000013
【図１２】
2011039585.tif 000014
【図１３】
2011039585.tif 000015
【図１４】
2011039585.tif 000016
【図１５】
2011039585.tif 000017
【図１６】
2011039585.tif 000018
【図１７】
2011039585.tif 000019
【図１８】
2011039585.tif 000020