(57)【特許請求の範囲】
【請求項１】
メモリに格納されるデータに対する冗長コードの長さを指定する手段と、
データと該データに対応する冗長コードが１ワード内に存在するようにメモリに配置する手段と、
を備え、
１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の書き込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリに格納するにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
書き込みデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算する手段と、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを格納し、
アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝から前記ｑバイトの冗長コードのうちの（ｑ−ｓ）バイトの冗長コードを格納し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域に格納し、
前記ｐバイトのデータのうち残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから格納する手段と、
を備え、データ書き込み先の前記メモリにおいて、前記データに対応する冗長コードと、データの少なくとも一部とが、同一ワード中に配置されるように、書き込みを行う、ことを特徴とするメモリ装置。
【請求項２】
前記冗長コードが誤り訂正符号（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）を含む、ことを特徴とする請求項１記載のメモリ装置。
【請求項３】
前記メモリのデータ格納先のアドレスが予め定められた所定値となると、トレーラ情報を格納する手段を備えている、ことを特徴とする請求項１又は２記載のメモリ装置。
【請求項４】
前記トレーラ情報がＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｏｄｅ）情報、又はセクタ情報を含む、ことを特徴とする請求項３記載のメモリ装置。
【請求項５】
１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の読み込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリからデータを読み込み、読み出しデータを応答として返すにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
読み出しデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算する手段と、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを読み出し、残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから読み出して合成し、１ワードが、ｐバイトのデータを復元し、
前記ｑバイトの冗長コードのうち、アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝からの（ｑ−ｓ）バイトの冗長コードを読み出し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域から読み出し、ｑバイトのデータを復元する手段と、を備え、
前記復元された１ワードがｐバイトのデータとｑバイトのデータをリードデータとして要求元へ返す、請求項１記載のメモリ装置。
【請求項６】
１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の書き込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリに格納するにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
書き込みデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算し、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを格納し、
アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝から前記ｑバイトの冗長コードのうちの（ｑ−ｓ）バイトの冗長コードを格納し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域に格納し、
前記ｐバイトのデータのうち残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから格納し、
データ書き込み先の前記メモリにおいて、前記データに対応する冗長コードと、データの少なくとも一部とが、同一ワード中に配置されるように、書き込みを行う、メモリ制御方法。
【請求項７】
１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の読み込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリからデータを読み込み、読み出しデータを応答として返すにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
読み出しデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算し、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを読み出し、残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから読み出して合成し、１ワードが、ｐバイトのデータを復元し、
前記ｑバイトの冗長コードのうち、アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝からの（ｑ−ｓ）バイトの冗長コードを読み出し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域から読み出し、ｑバイトのデータを復元し、
前記復元された１ワードがｐバイトのデータとｑバイトのデータをリードデータとして要求元へ返す、請求項６記載のメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ装置に関し、特に、誤り訂正等データの信頼性向上を図る冗長コードを格納するメモリ装置と方法に関する。
【背景技術】
【０００２】
関連技術として、例えば特許文献１には、可変長の誤り訂正符号を使用して誤り率の変化に応じて使用可能な冗長を動的に変え、ペイロードと冗長との間での効率的なメモリ割当を可能とするためのシステムと方法が開示されている。すなわち、図８に示すように、ユーザが格納するデータと、誤り訂正符号が別のエリアに保存されており、誤り訂正符号が状況に応じて可変としている。１Ｄａｔａあたり１６バイト（Ｂｙｔｅ）であり、データ部（２０１）とＥＣＣ（Error Checking and Correcting Code、又は Error Corrcting(Correction) Code：誤り訂正符号）部（２０２）とがそれぞれ別エリアに保存され、ＥＣＣ部（２０２）が可変長であることから、ＥＣＣに２バイトや４バイトといった訂正能力の高い符号が設定可能とされている。なお、図８に示す例では、ＥＣＣは２バイト構成とされる。
【０００３】
【特許文献１】特開２００３−１３１９５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
特許文献１の開示事項は、本書に引用をもって繰り込み記載されているものとする。以下に本発明による関連技術の分析を与える。
【０００５】
図８に示したメモリ構成においては、格納するデータのビット数に対して、必要としているＥＣＣ（誤り訂正符号）のビット数を多く取ることができるため、高い訂正能力はあるが、以下のような問題点を有している。
【０００６】
第１の問題点は、メモリ制御に用いた場合、データのリード・ライト時や、誤りが発生した時の訂正処理が複雑となり、メモリのアクセス・スピードが遅くなる、ということである。図８の構成は、一般的なメモリのリード・ライト回路の延長線で実現できるものではなく、特殊な回路構成となる。これは、図８に示す構成のメモリ管理においては、データ部と誤り訂正符号（ＥＣＣコード）部を、互いに異なるアドレス上に配置していることによる。
【０００７】
データ部（２０１）の読み出しを行う場合でも、データ部（２０１）とＥＣＣ部（２０２）の両方へのメモリ・アクセスを行う必要があり、これら２つのアドレスは、完全に別のアドレスになっているため、連続して読み出すことができない。このため、それぞれを個々にアクセスすることが必要とされるとともに、アドレスやデータそのものを一時的に保存する回路や、リードしたＥＣＣコードのバイト位置を特定することが必要となる。したがって、図８の構成は、一般の回路とは異なる回路構成が必要となり、回路構成も複雑になる。
【０００８】
第２の問題点は、ＥＣＣを格納しているメモリ領域が故障した場合、故障の影響範囲が広く、データの復旧に時間がかかり、信頼性の低下を招くことになる、ということである。これは、ＥＣＣ（２０２）を、データ部（２０１）とは別のメモリ領域にまとめて格納しているためである。ＥＣＣをまとめて格納するメモリ領域が故障してしまうと、複数のＥＣＣを読み出すことができない。例えばＥＣＣを格納するメモリ１ワードに、データ部の８ワード分のＥＣＣを格納した場合、最悪は、ＥＣＣを格納するメモリの１ワード分のメモリ障害で、８ワード分のデータのＥＣＣが読み出せないことになる。このように、１つの故障に対する影響範囲が大きい。
【０００９】
また別の関連技術として、例えば図９に示すように１ワード内にデータ部（３０１）とＥＣＣ部（３０２）を保存する構成が、従来より知られている。この構成においては、７２ビットの汎用ＤＩＭＭ（Dual Inline Memory Module）等によって構成される安価なＤＩＭＭでメモリを構成することができ、多用されている。しかしながら、図９の構成の場合、ＥＣＣコードを保存するバイト数が少なく、保存するバイト数には制限があり、一定の信頼性を得ることはできるが、さらに高信頼性を図るメモリには適用できない。
【００１０】
これは、７２ビット汎用ＤＩＭＭを２個並列にした場合などでは（並列１４４ビット）、１ワードは、１６バイト（１２８ビット）のデータと２バイト（１６ビット）のＥＣＣ（誤り訂正符号）が最大となり、ＥＣＣは、２バイトまでしか定義できないためである。
【００１１】
もし、ＥＣＣを４バイトとすることが必要となった場合には、７２ビット汎用ＤＩＭＭであれば、４個並列（７２×４ビット）に動作させることが必要となり、メモリ制御側のピン数が増大し、コストの上昇を招く。
【００１２】
したがって本発明の目的は、汎用のＤＩＭＭ製品を利用でき、チップ故障を含めてデータの訂正ができ、高速・高信頼性な装置、方法を提供することにある。
【課題を解決するための手段】
【００１３】
本願で開示される発明は、前記課題を解決するため、概略以下の構成とされる。
【００１４】
本発明の１つの側面によれば、メモリに格納されるデータに対する冗長コードの長さを指定する手段と、データと該データに対応する冗長コードが１ワード内に存在するようにメモリに配置する手段を備えている装置が提供される。
【００１５】
本発明において、前記メモリのデータ格納先のアドレスが予め定められた所定値となると、トレーラ情報を格納する手段を備えた構成としてもよい。
【００１６】
本発明の１つの側面においては、１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の書き込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリに格納するにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
書き込みデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算し、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを格納し、
アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝から前記ｑバイトの冗長コードのうちの（ｑ−ｓ）バイトの冗長コードを格納し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域に格納し、
前記ｐバイトのデータのうち残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから格納し、データ書き込み先の前記メモリにおいて、前記データに対応する冗長コードと、データの少なくとも一部とが、同一ワード中に配置されるように、書き込みを行う。
【００１７】
本発明においては、１ワードがｐバイト幅のデータと該データに関連するｑバイト幅の冗長コード（ただし、ｐ、ｑは予め定められた所定の正整数）の読み込み要求に対して、
１ワードのデータ幅がｒバイト（ただし、ｒはｒ＜ｐの正整数）、ｓバイト（ただし、ｓはｓ＜ｑの正整数）の冗長コード領域を備えた構成のメモリからデータを読み込み、読み出しデータを応答として返すにあたり、
前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイトとし、冗長コード幅をｑバイトとして扱い、
読み出しデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算し、
前記ｐバイトのデータのうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを読み出し、残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから読み出して合成し、１ワードが、ｐバイトのデータを復元し、
前記ｑバイトの冗長コードのうち、アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝からの（ｑ−ｓ）バイトの冗長コードを読み出し、前記ｑバイトの冗長コードの残りのｓバイトを、前記ｓバイトの冗長コード領域から読み出し、ｑバイトのデータを復元し、
前記復元された１ワードがｐバイトのデータとｑバイトのデータをリードデータとして要求元へ返す。
【００１８】
本発明によれば、メモリに格納されるデータに対する冗長コードの長さを指定し、データと該データに対応する冗長コードが１ワード内に存在するようにメモリに配置するメモリアクセス方法が提供される。
【発明の効果】
【００１９】
本発明によれば、指定された長さの冗長コードに対して、データと該データに対応する冗長コードを、両者が１ワード内に存在するようにメモリに配置する構成としたことにより、汎用のＤＩＭＭ製品を利用でき、チップ故障を含めてデータの訂正が行え、高速・高信頼性を実現することができる。
【発明を実施するための最良の形態】
【００２０】
上記した本発明についてさらに詳細に説述すべく添付図面を参照して以下に説明する。本発明においては、指定されたＥＣＣ（誤り訂正符号）等の冗長コードの長さに応じて、データと該データに対応する冗長コードを、両者が１ワード内に存在するようにメモリに配置する。ＥＣＣ（誤り訂正符号）等の冗長コードを用いてメモリ訂正を行いデータの信頼性向上を図り、データ保全を目的としているサーバ装置やディスクアレイ装置などの高信頼性が求められるデータ処理装置等に適用可能とされる。さらに、本発明によれば、既製の汎用ＤＩＭＭが利用できるメモリ制御回路において、チップ故障を含めてデータの訂正ができ、一般的な汎用のＤＩＭＭではできなかった８ビット訂正や１６ビット訂正の誤り訂正符号を適用する可能とし、高速・高信頼性を実現するものである。以下実施例に即して説明する。
【実施例】
【００２１】
図１は、本発明の一実施例の構成を示す図である。図１を参照すると、本実施例に係るメモリ装置は、リクエスト入力部（１）と、リプライ出力部（２）と、訂正能力設定回路（３）と、アドレス演算回路（４）と、データ分割合成部（５）と、メモリ制御回路（６）と、メモリ（７）と、データ復元回路（８）と、を備えている。
【００２２】
訂正能力設定回路（３）は、メモリ（７）上に定義すべきＥＣＣ（誤り訂正符号）のバイト数を定義する。訂正能力設定回路（３）は、静的に訂正能力を各回路に通知する。訂正能力は、外部インタフェース（不図示）経由で設定されるか、あるいは、訂正能力設定回路（３）内部において半固定的に設定される。
【００２３】
アドレス演算回路（４）は、メモリ制御回路（６）に入ってくるメモリ（７）へのアクセスアドレスを分析し、アドレス演算を行う。
【００２４】
アドレス演算回路（４）は、訂正能力設定回路（３）から通知されたバイト数に関連したアドレス分を加算し、メモリ制御回路（６）にアドレスを渡す。
【００２５】
データ分割合成回路（５）は、メモリ制御回路（６）に入ってくるメモリ（７）へのデータを分析し、訂正能力設定回路（３）及びアドレス演算回路（４）からの演算結果から得られた情報を基にして、データの分割／構成変更を行う。
【００２６】
データ分割合成回路（５）により、ＥＣＣ（誤り訂正符号）を含めたメモリ（７）へのデータ処理を行い、後述するように、図３（Ａ）、（Ｂ）、（Ｃ）に示すような、メモリマッピングでデータを保存する。
【００２７】
メモリ制御回路（６）は、アドレス演算回路（４）から指定されたメモリ空間のデータのメモリ（７）に対するリード・ライト動作を処理する。メモリ制御回路（６）は、ＤＩＭＭなどのメモリ（７）を制御する。
【００２８】
データ復元回路（８）は、メモリ（７）から読み出したデータを、データ要求元に対して、正常な状態にデータを復元する。データ復元回路（８）は、メモリ（７）上に格納されているデータを、データ要求元の適正なデータに成形し直し、ＥＣＣ（誤り訂正符号）によるデータの正当性のチェックを行い、ＥＣＣ（誤り訂正符号）によるデータ復元を行う。
【００２９】
訂正能力設定回路（３）は、ＥＣＣ（誤り訂正符号）のバイト数を各回路に転送する。例えば、一般的な汎用ＤＩＭＭを２枚並列に用いた場合、１６バイトのデータと２バイトのＥＣＣを搭載することができるため、訂正能力設定回路（３）では、ＥＣＣ（誤り訂正符号）のバイト数として、２バイト以上の値と設定する。なお、誤り訂正設定回路（３）では、ＥＣＣ（誤り訂正符号）のバイト数を動的に可変することはなく、静的に設定する。
【００３０】
本実施例において、ＥＣＣのバイト長を４バイトとした場合、訂正能力設定回路（３）は「４」を、各回路に伝達する。
【００３１】
データ転送元（リクエスト要求元）からメモリへのデータ転送要求（２０）がリクエスト入力部（１）に入力された場合について説明する。
【００３２】
アドレス演算回路（４）では、訂正能力設定回路（３）から供給された「４」から「２」を引いた値（「２」は、メモリ（７）を構成する汎用ＤＩＭＭのＥＣＣ格納部分の容量である２バイトに対応する）を用いてアクセスするアドレス変換を行う。アドレスの変換は、以下となる。
【００３３】
ＡＤＲ＿ＰＬＵＳ＝ＩＮＴ（ＡＤＲ＿ＳＲＣ／（１ワードのデータ長（１８バイト−４）））            …（１）
【００３４】
ＡＤＲ＿ＭＥＭ＝ＡＤＲ＿ＳＲＣ＋（ＡＤＲ＿ＰＬＵＳ＊（ＥＣＣのバイト長−２））    …（２）
【００３５】
ただし、（１）、（２）において、
ＡＤＲ＿ＳＲＣは、転送元のアドレス（実際にメモリに書き込もうとした時のアドレス）、
ＡＤＲ＿ＰＬＵＳは、実際のメモリアドレスに変換するための差分アドレス、
ＡＤＲ＿ＭＥＭは、実際のメモリ上のアクセスアドレス、
である。
【００３６】
上式（１）、（２）により、アドレス演算回路（４）は、メモリ（７）にアクセスすべきアドレスＡＤＲ＿ＭＥＭを計算する。
【００３７】
データ分割合成回路（５）は、アドレスＡＤＲ＿ＭＥＭの下位４ビットの値によって、データをシフトし（例えばデータを上位バイト側にＳｈｉｆｔ）、その後、メモリ（７）に納める１ワードの値で分割を行う。この分割は、最大メモリの１ワードのバイト数−２まで、つまり、１６−２＝１４バイトまで、分割され、１ワードには、必ず分割されたデータと該データのＥＣＣ（誤り訂正符号）の両方が納められる。つまり、分割されたデータのバイト数（１４バイト）と、ＥＣＣ（誤り訂正符号）のバイト数（４バイト）の和が、必ず、ＤＩＭＭの１ワード（＝１６バイト＋２バイト）に収まる。
【００３８】
このように、本実施例においては、既製のＤＩＭＭのバイト幅（１ワード＝１６バイト＋２バイト）の範囲を超えない状態としているため、安価なメモリが使えることになる。
【００３９】
データ分割合成回路（５）では、ＥＣＣ（誤り訂正符号）をデータと同じワード位置に配置するため、メモリ制御回路（６）は、メモリ（７）への１回のアクセスで、データとＥＣＣ（誤り訂正符号）が得られる。
【００４０】
本実施例において、もとのデータは分割されているため、複数のワード位置に対してアクセスが必要であるが、一般的に、ＤＤＲ２−ＤＩＭＭやその他のメモリにおいても、連続したアドレスに対しては、１回の処理で、一連の作業（複数アクセス）が可能となるバースト転送がサポートされている。バースト転送の処理により、連続した複数のワードに、データが分割されている場合に、高速なデータ転送が行われる。
【００４１】
以下に本実施例の動作を概説する。データ要求元（リクエスト要求元）からのリクエスト（命令）（２０）をリクエスト入力部（１）が受信する。このリクエスト入力部（１）に入るリクエスト（２０）は、特に制限されないが、一般的なＰＣＩ（Ｐｅｒｏｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｅｎｃｔ）−ＸバスやＰＣＩ−Ｅｘｐｒｅｓｓなどの汎用インタフェースが用いられる。
【００４２】
訂正能力設定回路（３）は、ＥＣＣ（誤り訂正符号）のバイト数を提示する回路であるが、外部インタフェースおよび内部で半固定的に値が格納されており、静的に変化できる値を有する。１ワードが１６バイト（データ）＋２バイト（ＥＣＣ）構成のＤＩＭＭを用い、ＥＣＣ（誤り訂正符号）は４バイトとした場合で説明する。この場合、１４バイト（データ）＋４バイト（ＥＣＣ）となる。
【００４３】
リクエスト入力部（１）は、メモリアクセス要求されるアドレス（２１）とデータ（３１）とに分割を行い、アドレス（２１）についてはアドレス演算回路（４）に受け渡される。リクエスト要求元の処理イメージは、図３（Ａ）に示すように、１６バイト（データ）＋４バイト（ＥＣＣ）である。例えばアドレスをＡＤＲ＿ＳＲＣ＝００２０ｈ（ただし、ｈはヘキサデシマル表現を示す）とする。
【００４４】
アドレス演算回路（４）は、リクエスト入力部（１）からアドレス（２１）（ＡＤＲ＿ＳＲＣ＝００２０ｈ）を受け取ると、訂正能力設定回路（３）より受けとった、ＥＣＣ（誤り訂正符号）コードのバイト数＝４バイトを基にして、式（１）と式（２）から、アドレスを演算する。
【００４５】
ＡＤＲ＿ＳＲＣ＝００２０ｈより、ＡＤＬ＿ＰＬＵＳ＝００２０ｈ／（１８−４）＝３２／１４＝２
【００４６】
ＡＤＲ＿ＭＥＭ＝００２０ｈ＋（２＊（４−２））＝００２４ｈ
【００４７】
データ分割合成回路（５）は、アドレス演算回路（４）から演算結果（ＡＤＲ＿ＭＥＭ＝００２４ｈ）を受けとり、アドレス（ＡＤＲ＿ＭＥＭ）の下位の４ビット情報（＝０１００ｂ）に応じてデータを分割／シフト動作をし、目的のデータに合わせる。この場合、元のソースアドレスＡＤＲ＿ＳＲＣ＝００２０ｈからアドレス００２Ｆｈまでの計１６バイトのデータを、４バイト上位バイト側にシフトする。アドレス００２０ｈのバイトデータはアドレス００２４ｈバイトに移動する。図３（Ｂ）に示すように、もとの１６バイトのデータは、シフト後、アドレス００２４ｈからアドレス００２Ｄｈの１０バイト分のデータと、アドレス００３０ｈからアドレス００３５ｈの６バイトのデータに分割される。もとの４バイトのＥＣＣのうち２バイトは、アドレス００２Ｅｈと００２Ｆｈの２バイトに格納され、００２０ｈからの１６バイトデータに対応するＤＩＭＭの２バイトに格納され、図３（Ｂ）のように、Ｅ２として格納される。
【００４８】
図３（Ｃ）に示すように、もとのデータ幅：１６バイト、ＥＣＣ：４バイトの（Ｄ２、Ｅ２）は、１ワードのデータ幅：１６バイト、ＥＣＣ：２バイトのＤＩＭＭ内に、データ幅：１４バイト、ＥＣＣ：４バイトのフォーマット（計１８バイト）に変換されて、書き込まれる。図３には、同様にアドレス変換、データ分割された、もとのデータ幅：１６バイト、ＥＣＣ：４バイトの（Ｄ０、Ｅ０）、（Ｄ１、Ｅ１）、（Ｄ３、Ｅ３）・・・のメモリ保存形態が示されている。
【００４９】
図３に示した本実施例のメモリアクセス動作は以下のようになる。１ワードがｐバイト幅（図３では、ｐ＝１６）のデータと該データに関連するｑバイト幅（ｑ＝４）の冗長コード（ＥＣＣ）の書き込み要求に対して、１ワードのデータ幅がｒバイト（ｒ＝１６）、ｓバイト（ｓ＝２）のＥＣＣ領域を備えた構成のメモリに格納するにあたり、前記メモリでの１ワードのデータ幅を（ｒ＋ｓ−ｑ）バイト（１６＋４−２＝１４）とし、ＥＣＣ幅をｑバイト（４バイト）として扱い、書き込みデータの先頭アドレスＡＤＲ＿ＳＲＣを、（ｒ＋ｓ−ｑ）で除算した値｛ＡＤＲ＿ＳＲＣ／（ｒ＋ｓ−ｑ）｝の整数値ＡＤＲ＿ＰＬＵＳに（ｑ−ｓ）を乗じた値ＡＤＲ＿ＰＬＵＳ×（ｑ−ｓ）をＡＤＲ＿ＳＲＣに加算したアドレスＡＤＲ＿ＭＥＭを演算する。前記ｐバイト（１６バイト）のデータ（Ｄ２）のうち、演算後のアドレスＡＤＲ＿ＭＥＭからアドレスＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）−１まで［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイトのデータを格納する。アドレス｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝（００２０ｈ＋０００Ｅｈ）からｑバイトのＥＣＣのうちの（ｑ−ｓ）バイト（２バイト）のＥＣＣを格納し、ｑバイトのＥＣＣの残りのｓバイトを、ｓバイトのＥＣＣ領域に格納する。ｐバイトのデータのうち残りのｐ−［｛ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）｝−ＡＤＲ＿ＭＥＭ］バイト（６バイト）のデータを、ＡＤＲ＿ＳＲＣ＋（ｒ＋ｓ−ｑ）＋（ｑ−ｓ）＝ＡＤＲ＿ＳＲＣ＋ｒ、すなわち、次のワードから格納する。このように、データ書き込み先のメモリにおいて、データに対応するＥＣＣが、データと同一ワード中に含まれる配置となるように、書き込みを行う。
【００５０】
データ転送要求元のリクエスト（２０）がメモリからのデータ読み出しである場合には、メモリ制御回路（６）から読み出されたデータをデータ復元回路（８）が受信する。
【００５１】
データ復元回路（８）は、読み出されたＥＣＣのチェックを行い、訂正可能なエラーが発生した場合には、訂正を行い、それと同時に、アドレス演算回路（４）から得られているアドレス演算結果（２４）を基にしてデータを復元し、リプライ出力部（２）でリクエスト要求元に対するリプライ（３０）を生成する。
【００５２】
図２は、本発明の一実施例におけるライト動作を示すフローチャートである。ＥＣＣのバイト数を予め設定しておく（ステップＳ１）。前述したように、この設定は、動的には変更せず、システムとして存在する時に静的に値を設定しておくものであり、ここでは、ＥＣＣのバイト数は４バイトとする。すなわち、本実施例では、ＥＣＣのバイト長を動的に可変させることは想定していない。
【００５３】
データ要求元からリクエストを受信すると（ステップＳ２）、アドレス演算回路（４）は上式（１）、（２）にしたがい、アドレスＡＤＲ＿ＭＥＭの演算を行う（ステップＳ３）。アドレス演算回路（４）でのアドレス演算はデータ部分を１ワード１６バイトから、１ワード１４バイトに変更する為のアドレス演算であり、要求元のアドレスに対して、差分を求め、加算することで、１ワード１４バイトの時のアドレス位置を示す。
【００５４】
例えばリクエスト要求元のアドレス１０ｈへのアクセスが発生した場合では、上式（１）、（２）より、内部のアドレスＡＤＲ＿ＭＥＭは１２ｈとなる。すなわち、
ＡＤＲ＿ＰＬＵＳ＝１０ｈ／１４＝１６／１４＝１  
ＡＤＲ＿ＭＥＭ＝１０ｈ＋１＊（４−２）＝１２ｈ
【００５５】
また、リクエスト要求元のアドレス００２０ｈへのアクセスが発生した場合では、アドレス演算回路（４）のアドレスＡＤＲ＿ＭＥＭは００２４ｈとなる。アドレスＡＤＲ＿ＭＥＭとしては、１４バイト加算されるごとに、０２ｈずつアドレスが加算されることになる。
【００５６】
データについては、リクエスト要求元のアドレス００２０ｈのアクセスが発生した場合、アドレスとして４バイト分ずれる（シフトする）必要があるため、４バイト分データをシフトさせながら、１ワード１４バイトとしてデータを丸め込む（ステップＳ４）。
【００５７】
また、この時のＥＣＣについては、そのまま無加工として、上記の１４バイトに付加することにより、１ワード１８バイトとしてデータを生成する（ステップＳ５）。
【００５８】
メモリ（７）への書き込みを行う（ステップＳ６）。
【００５９】
これにより、アドレスとデータの位置を一致させることが可能となり、一般的なメモリ回路を用いてメモリにデータを書き込むことが可能となる。
【００６０】
図４は、本発明の一実施例のリード動作を説明するフローチャートである。図５は、メモリ読み出し動作のデータ、ＥＣＣの形態を説明する図である。図５（Ａ）は、図３（Ａ）と同じくリクエスト要求元の処理イメージである。以下では、リクエスト要求元がアドレス（ＡＤＲ＿ＳＲＣ）００２０ｈのデータ（Ｄ２、Ｅ２）の読み出し要求を行ったものとする。
【００６１】
図４において、ＥＣＣバイトの幅設定のステップＳ１１、リクエスト受信のステップＳ１２、アドレスの演算のステップＳ１３のは、ライト動作のステップＳ１〜Ｓ３と同じであるため説明は省略する。
【００６２】
リード動作では、ステップＳ１３で演算されたアドレスＡＤＲ＿ＭＥＭ（００２４ｈ）を用いて、図５（Ｂ）に示すように、メモリ（７）からデータ（１６バイト）Ｄ２、ＥＣＣ（４バイト）Ｅ２の読み出しを行う（ステップＳ１４）。
【００６３】
そして、ＡＤＲ＿ＳＲＣで示された位置にまでデータをシフトする（ステップＳ１５）。この場合、まず、ＡＤＲ＿ＭＥＭ＝００２４ｈから００２Ｄｈまでの１０バイトデータを４バイト分、低位側にシフトさせる。
【００６４】
また、１ワード１４バイトから１６バイトに復元させるために、図５（Ｃ）に示すように、次ワードのデータ（００３０ｈ〜００３５ｈの６バイトデータ）と合成（concatenate）することで、リクエスト要求元へのリプライデータが生成される（ステップＳ１６）。
【００６５】
リクエスト要求元にデータをリプライする（ステップＳ１７）。
【００６６】
また、上記処理において、ＥＣＣの再生成やデータ作り直しは不要であり、回路構成が簡素化される。
【００６７】
図６は、本発明の第２の実施例の構成を示す図である。本実施例においては、図３の構成にトレーラ生成回路（１０）が追加されている。アドレス演算回路（４）の演算結果において、トレーラ生成回路（１０）を動かし、一定のブロック単位に、セクタ番号や各処理用のフラグ等を埋め込む。
【００６８】
トレーラ生成回路（１０）は、アドレス演算結果が一定の値になると動作し、内部に書かれているセクタ番号等を、メモリ（７）上に埋め込む事で、トレーラデータをデータ内部に埋め込む。
【００６９】
図７は、１ワード１４バイト、ＥＣＣが４バイトのデータ列で格納するような場合を示す。これは、リクエスト要求元からのデータフォーマット（１０１）に対して、メモリへの書き込み状態（１０３）を示したものであり、データを、１ワード＝１４バイトにアライメントし直された場合、トレーラ（ＴＲＬ）（１０４）を納めるエリアがある。
【００７０】
トレーラ（ＴＲＬ）（１０４）は、Ｄ０〜Ｄ６のＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）演算を行った物を入れる場合や、Ｄ０〜Ｄ６を１セクタと設定し、セクタ番号を埋め込む事が可能となり、トレーラ（１０４）としてメモリ（７）に埋め込む。トレーラ（ＴＲＬ）（１０４）に、ＣＲＣを埋め込むと、１セクタ単位のＥＣＣによるチェックおよびＣＲＣによるチェックと、２重のチェックを行うことができ、信頼性の高いメモリ装置を構築することができる。
【００７１】
本実施例の作用効果を説明する。本実施例によれば、ＥＣＣ（誤り訂正符号）のビット幅を任意に設定できるため、４バイトや８バイトといった、４バイト以上のＥＣＣコードを搭載することができ、メモリの訂正能力が向上することにより、高信頼性なメモリ装置を実現することができる。
【００７２】
データ読み出し／書き込みにおいて、データとＥＣＣ等の誤り訂正符号が同じワード位置に格納されていることにより、前述の効果が期待できる回路でありながら、単純な回路構成で構築可能となり、安価なメモリ装置の提供ができる。
【００７３】
本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【００７４】
【図１】本発明の一実現例の構成を示す図である。
【図２】本発明の一実現例におけるメモリのライト動作のフローチャートである。
【図３】本発明の一実現例におけるライト動作を説明する図である。
【図４】本発明の一実現例におけるメモリのリードのフローチャートである。
【図５】本発明の一実現例におけるリード動作を説明する図である。
【図６】本発明の他の実現例の構成を示す図である。
【図７】本発明の他の実施例におけるメモリの保存形態を説明する図である。
【図８】関連技術１におけるメモリの保存形態を説明する図である。
【図９】関連技術２におけるメモリの保存形態を説明する図である。
【符号の説明】
【００７５】
１  リクエスト入力部
２  リプライ出力部
３  訂正能力設定回路
４  アドレス演算回路
５  データ分割合成回路
６  メモリ制御回路
７  メモリ
８  データ復元回路
１０  トレーラ生成回路
２０  リクエスト要求元からの命令（アドレス及びデータ等）
２１  リクエストアドレス
２２  訂正能力設定回路からのＥＣＣコードのバイト数
２３  アドレス演算結果
２４  アドレス演算結果
２６  ライトデータおよびＥＣＣコード
２７  リードデータおよびＥＣＣコード
２８  メモリアクセスアドレスおよびデータ
２９  復元されたデータ
３０  リクエスト要求元に返却するリプライデータ
３１  ライトデータ
１０１  データフォーマット
１０２  分割生成処理のライトデータ
１０３  ＥＣＣデータ
１０４  トレーラ
２０１  データ部
２０２  ＥＣＣ部（ＥＣＣコード）
３０１  データ
３０２  ＥＣＣ部（ＥＣＣコード）
【図１】
0005217570.tif 000002
【図２】
0005217570.tif 000003
【図３】
0005217570.tif 000004
【図４】
0005217570.tif 000005
【図５】
0005217570.tif 000006
【図６】
0005217570.tif 000007
【図７】
0005217570.tif 000008
【図８】
0005217570.tif 000009
【図９】
0005217570.tif 000010