(57)【特許請求の範囲】
【請求項１】
本体データと冗長データで構成されるワードデータを記憶し当該ワードデータ単位で読み出し可能なメモリと、エラー処理回路とを備え、
前記本体データは、複数の部分ワードに分割されており、
前記冗長データは、全体が所定の誤り訂正アルゴリズムに基づいて前記本体データから生成された誤り訂正付加ビットであり、且つ、前記複数の部分ワードにそれぞれ対応する複数のパリティビットを含み、
前記エラー処理回路は、前記メモリから読み出される前記ワードデータが並列に入力される、シンドローム生成回路と誤り訂正回路とパリティ検査回路とを備え、
前記シンドローム生成回路は、前記ワードデータに基づいて、エラー種別を判定するためのシンドロームを生成する回路であり、
前記誤り訂正回路は、前記シンドロームを用いて同じワードデータに含まれる本体データにおける誤りを、前記誤り訂正アルゴリズムに基づいて訂正可能な回路であり、
前記パリティ検査回路は、入力されたワードデータに含まれる少なくとも１個の部分ワードと、当該部分ワードに対応するパリティビットとに基づいて、パリティ検査を行う回路であり、
前記エラー処理回路は、アクセス要求された部分ワードの前記パリティ検査の結果が、前記部分ワードにエラーがないと判定される場合には、前記部分ワードを出力し、
前記エラー処理回路は、前記シンドロームに基づいて、前記エラー種別がエラー無し、１ビットエラーが発生、２ビットエラーが発生のいずれであるかを判定し、
前記エラー処理回路は、前記エラー種別を１ビットエラーと判定した場合には、前記誤り訂正回路により誤り訂正した部分ワードを出力し、前記エラー種別を２ビットエラーと判定し、かつ、前記部分ワードの前記パリティ検査ではパリティエラーを検出できない場合には、出力された前記部分ワードを無効化するための通知を行う、
データ処理回路。
【請求項２】
請求項１において、前記誤り訂正アルゴリズムは、単一誤り訂正２重誤り検出が可能なアルゴリズムである、
データ処理回路。
【請求項３】
請求項２において、前記本体データはＮビット毎の前記部分ワードＬ個からなり、前記誤り訂正付加ビットはＭビットであり、前記誤り訂正付加ビットは前記本体データにＭ行Ｎ×Ｌ列の生成行列を乗ずることによって生成され、
前記生成行列は、前記Ｌ個の部分ワードそれぞれに対応して、当該部分ワードに対応する列が１であり他の列が０である行をＬ行含み、且つ、前記生成行列の各列は、それぞれ奇数個の１を含み、互いに異なる符号列で構成され、
前記パリティ検査回路には、前記パリティ検査の対象である部分ワードに対応する列のみが１である行によって生成された、前記誤り訂正付加ビットのうちの１ビットが、当該部分ワードに対応するパリティビットとして入力される、
データ処理回路。
【請求項４】
請求項３において、前記データ処理回路は、読み出しバスをさらに備え、
前記読み出しバスは前記部分ワードと同じビット幅の読み出しデータバスと読み出しパリティ信号とを含み、
前記エラー処理回路は、前記パリティ検査の対象である前記部分ワードを前記読み出しデータバスに、当該部分ワードに対応する前記パリティビットを前記読み出しパリティ信号に、それぞれ出力可能である、
データ処理回路。
【請求項５】
請求項４において、前記データ処理回路は、書き込みバスをさらに備え、
前記書き込みバスは前記部分ワードと同じビット幅の書き込みデータバスと書込みパリティ信号とを含み、
前記エラー処理回路は、ワード結合回路と誤り訂正符号生成回路とをさらに備え、
前記ワード結合回路は、前記書き込みバスから入力される複数の部分ワードを互いに結合することによって、前記メモリに書き込むためのワードデータのうちの本体データを構成して前記誤り訂正符号生成回路に供給し、
前記誤り訂正符号生成回路は、供給された本体データから前記生成行列を用いて誤り訂正付加ビットを生成し、当該本体データと結合して、前記メモリに書き込むためのワードデータを生成する、
データ処理回路。
【請求項６】
請求項３において、
前記生成行列において、前記Ｌ個の部分ワードそれぞれに対応する複数の列の前記Ｌ行以外の行で構成される、複数の部分行列が、互いに等しく、
前記誤り訂正回路は、前記ワードデータを構成する前記Ｌ個の部分ワードのうちの少なくとも１個の部分データと、前記誤り訂正付加ビットに基づいて、入力された部分ワードにおける誤りを訂正可能な回路である、
データ処理回路。
【請求項７】
請求項６において、前記データ処理回路は、読み出しバスをさらに備え、
前記読み出しバスは前記部分ワードと同じビット幅の読み出しデータバスと読み出しパリティ信号とを含み、
前記エラー処理回路は、前記パリティ検査の対象である前記部分ワードを前記読み出しデータバスに、当該部分ワードに対応する前記パリティビットを前記読み出しパリティ信号に、それぞれ出力可能である、
データ処理回路。
【請求項８】
請求項７において、前記データ処理回路は、書き込みバスをさらに備え、
前記書き込みバスは前記部分ワードと同じビット幅の書き込みデータバスと書込みパリティ信号とを含み、
前記エラー処理回路は、ワード結合回路と誤り訂正符号生成回路とをさらに備え、
前記ワード結合回路は、前記書き込みバスから入力される複数の部分ワードを互いに結合することによって、前記メモリに書き込むためのワードデータのうちの本体データを構成して前記誤り訂正符号生成回路に供給し、
前記誤り訂正符号生成回路は、供給された本体データから前記生成行列を用いて誤り訂正付加ビットを生成し、当該本体データと結合して、前記メモリに書き込むためのワードデータを生成する、
データ処理回路。
【請求項９】
請求項１において、前記メモリはフラッシュメモリである、
データ処理回路。
【請求項１０】
請求項１において、前記メモリはランダムアクセスメモリである、
データ処理回路。
【請求項１１】
請求項１において、単一の半導体基板上に形成される、
データ処理回路。
【請求項１２】
メモリと、
Ｎビット毎のＬ個の部分ワードからなるＮ×Ｌのビット長の情報ビットにＭ行（Ｎ×Ｌ）列の生成行列を乗じてＭビットのＥＣＣ付加ビットを生成するとともに、前記情報ビット及び前記ＥＣＣ付加ビットを前記メモリに格納するメモリ管理部と、
前記メモリから読み出した前記情報ビット及び前記ＥＣＣ付加ビットに対し、前記生成行列とＭ行Ｍ列の単位行列を結合して得られる検査行列を乗じてシンドロームを生成し、前記シンドロームを構成するビット列が全て０の場合にエラー無し、前記生成行列の任意の列と前記シンドロームを構成するビット列が一致していれば１ビットエラーが発生、前記任意の列と一致しなければ２ビットエラーが発生と判定する読み出し回路と、を備え、
前記読み出し回路は、前記部分ワードに対応するパリティビットを前記ＥＣＣ付加ビットから切り出してパリティエラーの有無を判定し、パリティエラーがない場合は、前記部分ワードを出力し、
前記読み出し回路は、前記１ビットエラーと判定した場合において、前記シンドロームを構成するビット列と一致した、前記生成行列の列番号に基づき、前記メモリから読み出した情報ビットにおける前記列番号に対応するビット位置のデータを反転してエラーを訂正する誤り訂正回路を備え、
前記読み出し回路は、前記１ビットエラーと判定した場合には、前記誤り訂正回路により誤り訂正した部分ワードを出力し、前記２ビットエラーと判定し、かつ、前記部分ワードについてパリティエラーを検出できない場合には、出力された前記部分ワードを無効化するための通知を行う、
データ処理回路。
【請求項１３】
前記メモリ管理部は、前記ＥＣＣ付加ビットの一部として、前記Ｌ個の部分ワード夫々に対応する列のみが１である行との排他的論理和演算により前記Ｌ個の部分ワード夫々に対し偶数パリティを与えるパリティビットを夫々生成し、
前記読み出し回路は、前記Ｌ個の部分ワードと夫々に対応する前記パリティビットに基づいてパリティ検査を実施する、請求項１２に記載のデータ処理回路。
【請求項１４】
前記読み出し回路は、前記シンドロームの生成及び前記シンドロームに基づく前記判定と、前記パリティ検査とを並列に実行する
請求項１３に記載のデータ処理回路。
【請求項１５】
前記生成行列は、各列が、それぞれ奇数個の１を含み、互いに異なる符号列で構成されている
請求項１２に記載のデータ処理回路。
【請求項１６】
Ｎビット毎のＬ個の部分ワードからなるＮ×Ｌのビット長の情報ビットに、Ｍ行（Ｎ×Ｌ）列の生成行列を乗ずることで、ＭビットのＥＣＣ付加ビットを生成する付加ビット生成ステップと、
前記ＥＣＣ付加ビットの一部として、前記Ｌ個の部分ワード夫々に対応する列のみが１である行との排他的論理和演算により、前記Ｌ個の部分ワード夫々に偶数パリティを与えるパリティビットを生成するパリティビット生成ステップと、
前記情報ビット及び前記ＥＣＣ付加ビットをメモリに格納するメモリ格納ステップと、
前記メモリから読み出した前記情報ビット及び前記ＥＣＣ付加ビットに対し、前記生成行列とＭ行Ｍ列の単位行列を結合して得られる検査行列を乗じてシンドロームを生成するシンドローム生成ステップと、
前記シンドロームを構成するビット列が全て０の場合にエラー無し、前記生成行列の任意の列と前記シンドロームを構成するビット列が一致していれば１ビットエラーが発生、前記任意の列と一致しなければ２ビットエラーが発生と判定する、判定ステップと、
前記１ビットエラーと判定した場合において、前記シンドロームを構成するビット列と一致した前記生成行列の列番号に基づき、前記メモリから読み出した情報ビットにおける前記列番号に対応するビット位置のデータを反転してエラーを訂正する、エラー訂正ステップと、
アクセス要求された部分ワードに対応する前記パリティビットに基づいてパリティ検査を実施するパリティ検査ステップと、
前記パリティ検査ステップの結果に基づいて前記アクセス要求された部分ワードを出力する部分ワード出力ステップと、
を備え、
前記部分ワード出力ステップでは、前記１ビットエラーと判定した場合には、エラーを訂正した部分ワードを出力し、２ビットエラーと判定し、かつ、前記部分ワードの前記パリティ検査ではパリティエラーを検出できない場合には、出力された前記部分ワードを無効化するための通知を行う、
エラー訂正方法。
【請求項１７】
請求項１において、前記エラー処理回路は、更にワード切出し回路を備え、
前記ワード切出し回路は、前記ワードデータからアクセス要求された部分ワードを切り出して前記誤り訂正回路に出力し、
前記誤り訂正回路は、前記ワード切出し回路により切出された部分ワードに対して誤りを訂正する、
データ処理回路。
【請求項１８】
請求項１７において、前記エラー処理回路は、更に訂正データ選択回路を備え、
前記パリティ検査回路は、前記ワード切出し回路により切出された部分ワードと、前記ワード切出し回路により切出された部分ワードに対応するパリティビットに対してパリティ検査を実行し、訂正可能エラー信号を出力し、
前記訂正データ選択回路は、前記訂正可能エラー信号がパリティエラーがあることを示す場合には、前記誤り訂正回路で誤りを訂正された部分ワードを選択し、前記訂正可能エラー信号がパリティエラーがないことを示す場合には、前記ワード切出し回路により切出された部分ワードを選択し、
前記エラー処理回路は前記訂正データ選択回路が選択した部分ワードを出力する、
データ処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理回路に関し、特に書き込まれたデータが誤り訂正符号によって保護されているメモリと、当該メモリから読み出されるデータに対する誤り訂正処理に好適に利用できるものである。
【背景技術】
【０００２】
メモリの信頼性を向上するために、記憶される本体データに誤り訂正符号（ＥＣＣ：Error Correction Code）を付加して記憶し、読み出されたデータに対して誤り検出・誤り訂正処理を施すメモリが採用されている。このようなメモリには、１ビットの誤りを訂正し２ビットの誤りを検出する（訂正は不能）、単一誤り訂正二重誤り検出（ＳＥＣＤＥＤ：Single Error Correction Double Error Detection）が多用されている。
【０００３】
特許文献１には、ＳＥＣＤＥＤ符号を使用し、簡単な回路で２ビット誤りを訂正することができる回路方式が開示されている。
【０００４】
特許文献２には、データのブロック転送をメモリにおける、データのエラー訂正方法が開示されている。データブロック全体にＥＣＣデータを付加するとともに、データブロックを複数のデータ列に分割してデータ列ごとにパリティビットを付加する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−１６５７３６号公報
【特許文献２】特開平１０−９７４７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１及び２について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００７】
ＣＰＵ（Central Processing Unit）などのプロセッサからアクセスされるメモリは、そのアクセス単位が命令コード長（例えば３２ビット命令、６４ビット命令等）やデータ長とされるのに対して、メモリ自体の回路構成は、１ワード当たりのデータ長は１２８ビットへ、さらに２５６ビットへと、アクセス単位よりも急な増加傾向にある。そのため、データ読み出し時には、物理的には１ワード単位で読み出されるデータから、読み出した要求されたアドレスに対応する一部を切り出して出力する。このとき、ＥＣＣは１ワードのデータに対して付加されている。即ち、１ワードで読み出されるビット長の一部が本体データであり、他の一部がこの本体データから生成されたＥＣＣ付加ビットである。誤り訂正処理回路は、読み出されたデータ全体（本体データとＥＣＣ付加ビット）からシンドロームを生成し、エラー種別として、エラーがないか、１ビットエラーか、２ビットエラーかを判定してその結果を出力し、１ビットエラーの場合には本体データを訂正して出力する。
【０００８】
シンドロームの生成及びエラー種別の判定のためには、本体データとＥＣＣ付加ビットの全てが入力される必要があるため、一般にその判定に要する時間は、データ長の対数に比例して増加する。例えば、１２８ビットデータに９ビットのＥＣＣ付加ビットが付加されている場合、エラー種別の判定に要する遅延は、２入力の排他的論理和８段と２入力ＯＲゲート５段と見積もられ、２５６ビットデータに１０ビットのＥＣＣ付加ビットが付加されている場合に、２入力の排他的論理和９段と２入力ＯＲゲート５段と見積もられる。遅延は、このような直列のゲート段数に依存する他、並列方向の規模の増大に伴う配線負荷にも依存する。このように、シンドローム生成及びエラー種別判定のための遅延は、データ長に強く依存する。
【０００９】
これに対してプロセッサの速度は高速化が望まれる傾向にあり、上記のシンドロームの生成及びエラー種別の判定に要する遅延は、メモリのアクセス速度の向上を阻害し、プロセッサの高速化を阻害する要因となる可能性が高いことがわかった。
【００１０】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施の形態によれば、下記の通りである。
【００１２】
すなわち、本体データと冗長データで構成されるワードデータを記憶し当該ワードデータ単位で読み出し可能なメモリと、エラー処理回路とを備え、以下のように構成される。
【００１３】
本体データは、複数の部分ワードに分割される。冗長データは、全体が所定の誤り訂正アルゴリズムに基づいて本体データから生成された誤り訂正付加ビットであり、且つ、複数の部分ワードにそれぞれ対応する複数のパリティビットである。
【００１４】
エラー処理回路は、メモリから読み出されるワードデータが並列に入力される、誤り訂正回路とパリティ検査回路とを備える。誤り訂正回路は、入力されたワードデータに含まれる冗長データを用いて同じワードデータに含まれる本体データにおける誤りの種別を判定し、訂正可能か誤りを訂正する。パリティ検査回路は、入力されたワードデータに含まれる部分ワードと、当該部分ワードに対応するパリティビットとに基づいて、パリティ検査を行う。
【発明の効果】
【００１５】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１６】
すなわち、外部からのアクセス単位である部分ワードを複数個含むワードデータの単位で誤り訂正符号が付加され読み出されるメモリにおいて、ワード長の増加に伴うアクセス速度の低下を抑えることができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、ＳＥＣＤＥＤにおけるＥＣＣ付加ビットの生成方法を示す説明図である。
【図２】図２は、ＳＥＣＤＥＤにおけるシンドロームの生成方法を示す説明図である。
【図３】図３は、各実施形態が利用する誤り訂正アルゴリズムにおけるＥＣＣ付加ビットの生成方法を示す説明図である。
【図４】図４は、各実施形態が利用する誤り訂正アルゴリズムにおけるシンドロームの生成方法を示す説明図である。
【図５】図５は、メモリにエラー処理回路が付加された比較例の構成を示すブロック図である。
【図６】図６は、メモリにエラー処理回路が付加された、実施形態２の構成例を示すブロック図である。
【図７】図７は、図５のエラー処理回路の動作例を示すタイミングチャートである。
【図８】図８は、図６のエラー処理回路の動作例を示すタイミングチャートである。
【図９】図９は、比較例である図５のエラー処理回路に入力されるワードデータに含まれる、ＥＣＣ付加ビットの生成方法を示す説明図である。
【図１０】図１０は、比較例である図５のエラー処理回路におけるシンドロームの生成方法を示す説明図である。
【図１１】図１１は、実施形態２に係る図６のエラー処理回路に入力されるワードデータに含まれる、ＥＣＣ付加ビットの生成方法を示す説明図である。
【図１２】図１２は、実施形態２に係る図６のエラー処理回路におけるシンドロームの生成方法を示す説明図である。
【図１３】図１３は、図６のエラー処理回路のより詳細な構成例を示すブロック図である。
【図１４】図１４は、メモリにエラー処理回路が付加された、実施形態３の構成例を示すブロック図である。
【図１５】図１５は、実施形態３に係る図１４のエラー処理回路に入力されるワードデータに含まれる、ＥＣＣ付加ビットの生成方法を示す説明図である。
【図１６】図１６は、実施形態３に係る図１４のエラー処理回路におけるシンドロームの生成方法を示す説明図である。
【図１７】図１７は、図１４のエラー処理回路のより詳細な構成例を示すブロック図である。
【図１８】図１８は、図１４のエラー処理回路の動作例を示すタイミングチャートである。
【図１９】図１９は、図１３に示すエラー処理回路の変形例を示すブロック図である。
【図２０】図２０は、図１７に示すエラー処理回路の変形例を示すブロック図である。
【図２１】図２１は、実施形態２に係るメモリ及びエラー処理回路を、バスデータがパリティ符号で保護されたシステムに搭載する場合の構成例を示すブロック図である。
【図２２】図２２は、実施形態３に係るメモリ及びエラー処理回路を、バスデータがパリティ符号で保護されたシステムに搭載する場合の構成例を示すブロック図である。
【図２３】図２３は、図２１の構成に、メモリへデータを書き込むための回路を追加した構成例を示すブロック図である。
【図２４】図２４は、図２２の構成に、メモリへデータを書き込むための回路を追加した構成例を示すブロック図である。
【発明を実施するための形態】
【００１８】
実施の形態について詳述する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００１９】
〔実施形態１〕＜動作原理＞
まず、本願の各実施形態が利用する誤り訂正アルゴリズムについて簡単に説明する。
【００２０】
基本となるアルゴリズムはハミング符号である。ハミング符号とは任意の正整数ｍに対して２を法とするガロア体（Galois Field）ＧＦ（２）上の０でないｍ次元ベクトルで異なるものの数は２＾ｍ−１であるので、これらをすべて列とした並べた行列を検査行列とする、符号長ｎ＝２＾ｍ−１、情報ビット数ｋ＝ｎ−ｍの符号である（ｋ、ｎは正整数）。ここで、「２＾ｍ」は２のｍ乗を意味する（本願明細書全体について同じ）。ハミング符号は、符号語間の最小距離が３であり、１ビットの誤りを訂正することができる。これに対して最小距離を４に増やすことにより、２ビット誤り検出を可能としたのが、拡大ハミング符号であり、その代表的な例がＳＥＣＤＥＤ符号である。
【００２１】
ＳＥＣＤＥＤ符号のアルゴリズムについて説明する。
【００２２】
図１は、ＳＥＣＤＥＤにおけるＥＣＣ付加ビットの生成方法を示す説明図である。ｋビットの情報ビット（ｄ０〜ｄｋ−１）に、ｍ＋１行ｋ列の生成行列を乗ずることによって、ｍビットのＥＣＣ付加ビット（ｐ０〜ｐｍ）が生成される（ｋ、ｍは正整数）。生成行列において、上側に図示されるｍ行ｋ列の各列は、上記ハミング符号と同様に「ｍ次元ベクトルで異なるもの」であり、すべてが０となる組合せを除く２＾ｍ−１の組合せのうち互いに異なるベクトルによって構成されている。最下段にすべてが１の行が追加されることによって、上述のように符号間の最小距離を４とすることができ、１ビット誤り訂正に加えて２ビット誤り検出の機能が追加される。あるいは、互いに異なるベクトルがそれぞれ奇数個の１を持つように構成することによっても、上述のように符号間の最小距離を４とすることができ、１ビット誤り訂正に加えて２ビット誤り検出の機能が追加される。偶数個の１を持つように構成してもよい。
【００２３】
情報ビットｄ０〜ｄｋ−１と生成されたＥＣＣ付加ビットｐ０〜ｐｍが結合されてメモリに記憶され、読み出される。メモリから読み出されるデータを、ｘ０〜ｘｋ−１、ｐ０〜ｐｍとする。ｘ０〜ｘｋ−１は、エラーがなければ情報ビットｄ０〜ｄｋ−１と同一である。ＥＣＣ付加ビットｐ０〜ｐｍにもエラーが生じる可能性があるが、便宜的に同じ符号を用いる。エラー種別の判別のために、まず、シンドロームを求める。
【００２４】
図２は、ＳＥＣＤＥＤにおけるシンドロームの生成方法を示す説明図である。メモリから読み出されたデータｘ０〜ｘｋ−１、ｐ０〜ｐｍに対して、ｍ＋１行ｋ＋ｍ＋１列の検査行列を乗ずることによりシンドロームｓ０〜ｓｍが生成される。検査行列は、ｍ＋１行ｋ列の上記生成行列にｍ＋１行ｍ＋１列の単位行列が結合されたものである。
【００２５】
生成されたシンドロームｓ０〜ｓｍは、エラー種別の判定に利用される。シンドロームｓ０〜ｓｍが全て０の場合は、エラーなしと判定される。シンドロームｓ０〜ｓｍは、検査行列のうちの上記ｍ＋１行ｋ列の生成行列に対応する部分の各列と比較され、一致する列があれば１ビットエラーと判定され、一致する列がなければ２ビットエラーであり訂正不能と判定される。３ビット以上のエラーは判定不能である。
【００２６】
シンドロームｓ０〜ｓｍと一致した列の番号は、エラーが発生した情報ビットのビット位置に相当するので、メモリから読み出されたデータｘ０〜ｘｋ−１の該当するビット位置のデータを反転することによって、エラーを訂正し、情報ビットｄ０〜ｄｋ−１を復元する。
【００２７】
図３は、各実施形態が利用する誤り訂正アルゴリズムにおけるＥＣＣ付加ビットの生成方法を示す説明図である。Ｎ×Ｌビットの情報ビットにＭ行Ｎ×Ｌ列の生成行列を乗ずることによってＭビットのＥＣＣ付加ビット（ｐ０〜ｐＭ−１）が生成される（Ｌ，Ｍ，Ｎは正整数）。情報ビットは、Ｎビット毎の部分ワードに分割され、Ｌ個の部分ワードから成る。即ち、第１の部分ワードが「ｄ０，ｄ１，…，ｄＮ−１」で表され、第２の部分ワードが「ｄＮ，ｄＮ＋１，…，ｄ２Ｎ−１」で表され、第Ｌの部分ワード「ｄ（Ｌ−１）Ｎ，ｄ（Ｌ−１）（Ｎ＋１），…，ｄＬＮ−１」まで同様に続く。情報ビット全体のビット長はＮ×Ｌビットである。
【００２８】
生成行列は、Ｍ行Ｎ×Ｌ列で構成される。列数が情報ビットのビット数と同数である点は、図１に示されるＳＥＣＤＥＤの場合と同様である。生成行列の第０列から第Ｎ−１列は第１の部分ワードｄ０，ｄ１，…，ｄＮ−１に対応し、生成行列の第Ｎ列から第２Ｎ−１列は第２の部分ワードｄＮ，ｄＮ＋１，…，ｄ２Ｎ−１に対応し、同様に、生成行列の第（Ｌ−１）Ｎ列から第ＬＮ−１列は第Ｌの部分ワードｄ（Ｌ−１）Ｎ，ｄ（Ｌ−１）（Ｎ＋１），…，ｄＬＮ−１に対応する。
【００２９】
生成行列のＭ行のうちのｍ行は、上記ハミング符号と同様に「ｍ次元ベクトルで異なるもの」であり、すべてが０となる組合せを除く２＾ｍ−１の組合せのうち互いに異なるベクトルによって構成されている。ＳＥＣＤＥＤでは１行追加することにより符号間の最小距離を４として２ビット誤り検出の機能を追加しているのに対して、本アルゴリズムではＬ行追加している。追加されたＬ行は、それぞれ、部分ワードに対応する列のみが１、他の列は０で構成される。追加される行数が多いので、符号間の最小距離は４よりも大きくなる場合がある。その場合は、各列がＳＥＣＤＥＤの要求を満足できる限り、全体の行数Ｍを減らすこともできる。ここでいうＳＥＣＤＥＤの要求とは、例えば「全ての列が互いに異なり、且つ、奇数個の１を持つ」という仕様である。追加されたＬ行を含めた全体のＭ行でＳＥＣＤＥＤの要求を満たせば、１ビット誤り訂正と２ビット誤り検出が可能だからである。
【００３０】
この生成行列によって生成されるＥＣＣ付加ビット（ｐ０〜ｐＭ−１）の一部は、各部分ワードに対応するパリティビットになっている。即ち、第１の部分ワードｄ０，ｄ１，…，ｄＮ−１に対応する列のみが１である第Ｍ−Ｌ＋１行によって生成されるｐＭ−Ｌは、ｄ０，ｄ１，…，ｄＮ−１の排他的論理和として生成されており、第１の部分ワードに偶数パリティを与えるパリティビットとなっている。同様に、第２の部分ワードｄＮ，ｄＮ＋１，…，ｄ２Ｎ−１に対応するｐＭ−Ｌ＋１は、第２の部分ワードに偶数パリティを与えるパリティビットとなっており、以下順次同様に、第Ｌの部分ワードｄ（Ｌ−１）Ｎ，ｄ（Ｌ−１）（Ｎ＋１），…，ｄＬＮ−１に対応するｐＭ−１は、第Ｌの部分ワードに偶数パリティを与えるパリティビットとなっている。
【００３１】
図４は、本アルゴリズムにおけるシンドロームの生成方法を示す説明図である。図２を引用して説明したＳＥＣＤＥＤの場合と同様に、メモリから読み出されたデータｘ０，ｘ１，…，ｘＮ−１，ｘＮ，ｘＮ＋１，…，ｘ２Ｎ−１，…，ｘ（Ｌ−１）Ｎ，ｘ（Ｌ−１）（Ｎ＋１），…，ｘＬＮ−１、ｐ０〜ｐＭ−１に対して、Ｍ行Ｎ×Ｌ＋Ｍ列の検査行列を乗ずることによりシンドロームｓ０〜ｓＭ−１が生成される。検査行列は、Ｍ行Ｎ×Ｌ列の上記生成行列にＭ行Ｍ列の単位行列が結合されたものである。
【００３２】
生成されたシンドロームｓ０〜ｓＭ−１は、エラー種別の判定に利用される。シンドロームｓ０〜ｓＭ−１が全て０の場合は、エラーなしと判定される。シンドロームｓ０〜ｓＭ−１は、検査行列のうちの上記Ｍ行Ｎ×Ｌ列の生成行列に対応する部分の各列と比較され、一致する列があれば１ビットエラーと判定され、一致する列がなければ２ビットエラーであり訂正不能と判定される。３ビット以上のエラーは判定不能である。
【００３３】
シンドロームｓ０〜ｓＭ−１と一致した列の番号は、エラーが発生した情報ビットのビット位置に相当する。メモリから読み出されたデータｘ０，ｘ１，…，ｘＮ−１，ｘＮ，ｘＮ＋１，…，ｘ２Ｎ−１，…，ｘ（Ｌ−１）Ｎ，ｘ（Ｌ−１）（Ｎ＋１），…，ｘＬＮ−１の該当するビット位置のデータを反転することによって、エラーを訂正し、情報ビットｄ０，ｄ１，…，ｄＮ−１，ｄＮ，ｄＮ＋１，…，ｄ２Ｎ−１，…，ｄ（Ｌ−１）Ｎ，ｄ（Ｌ−１）（Ｎ＋１），…，ｄＬＮ−１を復元する。
【００３４】
以上説明したように、本アルゴリズムによる誤り訂正は、ＳＥＣＤＥＤと同様である。
【００３５】
本アルゴリズムでは、上述のように、パリティｐＭ−Ｌ〜ｐＭ−１は、それぞれ第１〜第Ｌの部分ワードに対応するパリティビットになっているので、部分ワード毎のパリティ検査（パリティデコード）を、上述のシンドローム生成、エラー種別の判定と並列に実行することができる。全ての部分ワードについて並列にパリティデコードを行っても良いし、時分割により順次行ってもよい。
【００３６】
なお、図示された行列は全て線形であり、行の交換、列の交換は任意である。
【００３７】
本アルゴリズムが適用されるメモリは、本体データとＥＣＣ付加ビットとを含む１ワードを書込みと読出しの単位とし、外部からのアクセス単位を部分ワードとする、メモリである。メモリは例えばフラッシュメモリなどのＲＯＭ（Read Only Memory）であり、本アルゴリズムが適用されるエラー処理回路が付加される。メモリをＲＡＭ（Random Access Memory）とし、さらに書込みデータ（アドレスを含んでも良い）からＥＣＣ付加ビットを生成する、符号化回路をさらに付加しても良い。メモリから読み出されたデータ全体には、上述のエラー種別判定と誤り訂正が実行され、これと並列に部分ワードに対するパリティ検査が実行される。即ち、メモリから読み出されたデータから、部分ワードと対応するパリティとを抜き出し、これを対象としてパリティデコード（パリティ検査）を実行することにより、その部分ワードに１ビットエラーがあるか否かを判定することができる。パリティ検査であるので、１ビットエラーを検出することができるに留まり、訂正はできない。
【００３８】
このように、本アルゴリズムでは、メモリから読み出されたデータ全体に対してＳＥＣＤＥＤと同様の１ビット誤り訂正２ビット誤り検出を行うために、Ｎ×Ｌ＋Ｍビットからシンドロームｓ０〜ｓＭ−１を生成し、エラー種別の判定を行うのと並列に、部分ワード毎にパリティ検査を実行することができる。部分ワード毎のパリティ検査は、その入力がＮ＋１ビットであり、上記シンドローム生成のＮ×Ｌ＋Ｍビットと比べて概ね１／Ｌであるから、回路遅延は著しく小さい。上記部分ワードのビット数を、メモリのアクセス単位と一致させておくことにより、アクセス要求があった部分ワードに１ビット誤りがないことをいち早く検出することができる。１ビット誤りがある場合には、メモリから読み出されたデータ全体からの誤り訂正を待って出力する。また、メモリから読み出されたデータ全体で２ビット誤りがある場合には、部分ワード毎のパリティ検査では検出することができない場合もあり得る。この場合のデータ処理は後段に任される。実際の回路動作では、エラーがない場合が圧倒的に多く、１ビットエラーは稀であり、２ビットエラーはさらに稀である。したがって、平均的なメモリのアクセス速度は、エラーがない場合の遅延によって支配的に規定されるため、全体としてのメモリのアクセス性能を向上することができる。
【００３９】
以上は、ハミング符号及び拡大ハミング符号（ＳＥＣＤＥＤ符号）に基づく誤り訂正アルゴリズムを利用する場合について説明したが、他の誤り訂正符号に変更してもよい。即ち、所定の誤り訂正アルゴリズムに則った本体データ全体を対象とする誤り訂正のためのＥＣＣ付加ビットが、本体データを複数の部分ワードに部分ワードに分割したときの部分ワード毎のパリティビットを含むように、生成行列と検査行列を構成する。メモリは、本体データとＥＣＣ付加ビットとを含む１ワードを書込みと読出しの単位とし、外部からのアクセス単位を部分ワードとする。本体データとＥＣＣ付加ビットがメモリに記憶され、その後読み出されたときに、本体データとＥＣＣ付加ビットから、当該誤り訂正アルゴリズムに則ってエラー種別の判定と誤り訂正を行うのと並列に、アクセス要求された部分ワードのパリティデコード（パリティ検査）を実行する。パリティデコード（パリティ検査）の結果、アクセス要求された部分ワードにエラーがないと判定されたときには、読み出されたデータから該当する部分ワードを高速に出力することができる。一方、エラーがあると判定された場合は、当該誤り訂正アルゴリズムに則った前記エラー種別の判定の結果に基づいて、適宜誤り訂正を行い、訂正されたデータからアクセス要求された部分ワードを出力するか、出力された部分ワードのデータを無効化するなどの、後段でのエラー処理に進むための通知を行う。これにより、外部からのアクセス単位である部分ワードを複数個含むワードデータの単位で誤り訂正符号（ＥＣＣ付加ビット）が付加され読み出されるメモリにおいて、ワード長の増加に伴うアクセス速度の低下を抑えることができる。
【００４０】
〔実施形態２〕＜パリティデコードの並列化＞
より詳細な実施の形態について説明する。
【００４１】
図５は、メモリにエラー処理回路が付加された、比較例の構成を示すブロック図であり、図６は本実施形態２の構成例を示すブロック図である。図中の配線は１本または複数の信号配線によるバス構成のディジタル信号であるが、バス表記は省略されている。また、クロック等、パイプラインを構成し、制御するための信号線や、アドレス線などのメモリアクセスを制御するための信号線は、図示が省略されている。本願の他の図面についても同様である。
【００４２】
図５に示される比較例のデータ処理回路は、メモリ２０にエラー処理回路１０が接続されて構成される。エラー処理回路１０は、シンドローム生成回路１、エラー種別判定回路２、エラー訂正回路３、訂正データ選択回路４、アクノレッジ生成回路５、ワード切出し回路６、及び、パイプラインを構成する複数のフリップフロップ９＿１〜９＿３を含んで構成される。メモリ２０から読み出されるデータＲＤＷは、本体データＸとＥＣＣ付加ビットＰとを含むワードデータである。シンドローム生成回路１には読み出されたワードデータ全体ＲＤＷ（Ｘ，Ｐ）が供給され、エラー訂正回路３には本体データ部分ＲＤＷ（Ｘ）がフリップフロップ９＿１を介して供給される。シンドローム生成回路１で生成されたシンドロームＳは、フリップフロップ９＿２を介してエラー種別判定回路２とエラー訂正回路３に供給される。エラー種別判定回路２は、エラーなし（ＮＥＤ：No Error Detected）、１ビットエラー（ＳＥＣ：Single Error Corrected）、または、２ビットエラー（ＤＥＤ：Double Error Detected）のいずれであるかを判定し、エラー種別ＥＲＲとして出力する。エラー訂正回路３は、入力されたシンドロームＳに基づいて、読み出された訂正前の本体データＸに対する誤り訂正処理を実行し、訂正後の本体データＹを、フリップフロップ９＿３を介して出力する。訂正データ選択回路４は、エラー種別ＥＲＲに基づいて、訂正前の本体データＸまたは訂正後の本体データＹのいずれかを選択して出力する。１ビットエラーの場合は訂正後の本体データＹが選択され、エラーなしまたは２ビットエラーの場合は、訂正前の本体データＸが選択されて出力される。ワード切出し回路６は、訂正データ選択回路４から出力された訂正前または訂正後の本体データＸまたはＹから、メモリ２０に対して要求された部分ワードを切り出して、出力データＲＤＴとして出力する。アクノレッジ生成回路５は、エラー種別ＥＲＲに基づいて、出力データＲＤＴに有効なデータが出力されるタイミングを示すアクノレッジ信号ＡＣＫを生成する。エラー種別が１ビットエラーであって、エラー訂正回路３によってそのエラーが訂正される場合には、エラー訂正処理に時間を要するため、訂正後の本体データＹは訂正前の本体データＸよりも１サイクル遅れて出力される。このため、アクノレッジ生成回路５は、エラー種別ＥＲＲが１ビットエラーである場合には、エラーなしの場合よりも１サイクル後に、アクノレッジ信号ＡＣＫをアサートする。エラー種別ＥＲＲが２ビットエラーの場合は、エラーを訂正することができない。この場合の各信号の出力は、後段のエラー処理からの要求によって適宜規定される。
【００４３】
図７は、図５のエラー処理回路の動作例を示すタイミングチャートである。横軸は時刻であり、フリップフロップ９＿１〜９＿３に供給されるパイプラインクロックのサイクルを単位として時刻ｔ１〜ｔ５が示されている。縦軸方向には、メモリから読み出されたワードデータＲＤＷ、シンドロームＳ、訂正前と訂正後の本体データＸとＹが上から順に示される。さらに、エラーなし、１ビットエラー、２ビットエラーの３通りのエラー種別ごとに、エラー種別ＥＲＲ、アクノレッジＡＣＫ、及び、出力される部分ワードＲＤＴが、それぞれ示される。着目するアクセスサイクルのデータは、波形中に信号名を記載して表記する一方、空白のサイクルは着目しない別のアクセスサイクルのデータによって使用されてもよい。この点は本願の他のタイミングチャートについても同様である。
【００４４】
時刻ｔ１にメモリ２０からワードデータＲＤＷが読み出される。このワードデータＲＤＷには、本体データＸとＥＣＣ付加ビットＰが含まれる。シンドローム生成回路１で生成されたシンドロームＳは、フリップフロップ９＿２に取り込まれ、時刻ｔ２に出力される。読み出されたワードデータＲＤＷのうちの本体データＸは、フリップフロップ９＿１を介して時刻ｔ２にエラー訂正回路３に供給される。対応するシンドロームＳも同じ時刻ｔ２にエラー訂正回路３に供給され、エラー訂正回路３はエラー訂正処理を実行して訂正後の本体データＹを、フリップフロップ９＿３を介して時刻ｔ３に出力する。エラー種別判定回路２は、シンドロームＳが供給される時刻ｔ２にエラー種別を判定し、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれかをエラー種別ＥＲＲとして出力する。
【００４５】
エラーなし（ＥＲＲ＝ＮＥＤ）の場合は、同じ時刻ｔ２に出力されている訂正前の本体データＸが訂正データ選択回路４によって選択されて出力され、ワード切出し回路６によって、アクセス対象の部分ワードが切り出されて、出力データＲＤＴ（Ｘ）として出力される。このとき、アクノレッジ生成回路５は、同じ時刻ｔ２に、アクノレッジ信号ＡＣＫをアサートする。
【００４６】
１ビットエラー（ＥＲＲ＝ＳＥＣ）の場合は、１サイクル遅れの時刻ｔ３に出力されている訂正後の本体データＹが訂正データ選択回路４によって選択されて出力され、ワード切出し回路６によって、アクセス対象の部分ワードが切り出されて、出力データＲＤＴ（Ｙ）として出力される。このとき、アクノレッジ生成回路５は、同じく１サイクル遅れの時刻ｔ３に、アクノレッジ信号ＡＣＫをアサートする。
【００４７】
２ビットエラー（ＥＲＲ＝ＤＥＤ）の場合は、同じ時刻ｔ２に出力されている訂正前の本体データＸが訂正データ選択回路４によって選択されて出力され、ワード切出し回路６によって、アクセス対象の部分ワードが切り出されて、出力データＲＤＴ（Ｘ）として出力される。このとき、アクノレッジ生成回路５は、同じ時刻ｔ２に、アクノレッジ信号ＡＣＫをアサートする。即ち、エラー種別が２ビットエラー（ＥＲＲ＝ＤＥＤ）と判定されているにも関わらず、エラーを含んでいる可能性のある訂正前の本体データＸを出力する。これは、エラー訂正回路３の訂正能力を超えているため、エラー処理を後段に任せるためである。２ビットエラー（ＥＲＲ＝ＤＥＤ）の場合の出力信号の仕様は、後段でのエラー処理の内容に合わせて適宜変更することができる。
【００４８】
図６は本実施形態２の構成例を示すブロック図である。図６に示される本実施形態２のデータ処理回路は、メモリ２０にエラー処理回路１０が接続されて構成される。エラー処理回路１０は、図５に示される比較例と同様に、シンドローム生成回路１、エラー種別判定回路２、エラー訂正回路３、訂正データ選択回路４、アクノレッジ生成回路５、ワード切出し回路６、及び、パイプラインを構成する複数のフリップフロップ９＿１〜９＿３を含み、さらにワード＋パリティ切出し回路７とパリティデコード回路８とを含んで構成される。メモリ２０から読み出されるデータＲＤＷは、本体データＸとＥＣＣ付加ビットＰとを含むワードデータである。シンドローム生成回路１には読み出されたワードデータ全体ＲＤＷ（Ｘ，Ｐ）が供給され、エラー訂正回路３には本体データ部分ＲＤＷ（Ｘ）がフリップフロップ９＿１を介して供給され、これらと並列に、ワードデータ全体ＲＤＷ（Ｘ，Ｐ）がワード＋パリティ切出し回路７に供給される。
【００４９】
シンドローム生成回路１で生成されたシンドロームＳは、フリップフロップ９＿２を介してエラー種別判定回路２とエラー訂正回路３に供給される。エラー種別判定回路２は、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれであるかを判定し、エラー種別ＥＲＲとして出力する。エラー訂正回路３は、入力されたシンドロームＳに基づいて、読み出された訂正前の本体データＸに対する誤り訂正処理を実行し、訂正後の本体データＹを、フリップフロップ９＿３を介してワード切出し回路６に出力する。ワード切出し回路６は、訂正後の本体データＹから、メモリ２０に対して要求された部分ワードを切り出して、訂正データ選択回路４に出力する。
【００５０】
ワード＋パリティ切出し回路７は、供給されたワードデータＲＤＷ（Ｘ，Ｐ）から、メモリ２０に対して要求された部分ワードとその部分ワードに対応するパリティビットを切り出して、パリティデコード回路８に供給する。切り出された部分ワードは、訂正データ選択回路４に出力される。パリティデコード回路８は供給された部分ワードとパリティビットに対してパリティデコードを実行し、パリティエラーの有無を判定し、訂正可能エラー信号ＣＥＲ（Correctable ERror）を出力する。ここで判定されるのは、パリティエラーの有無だけであるので、実際に訂正可能であるかどうかは、エラー種別判定回路２から出力されるエラー種別信号ＥＲＲによって判定されるべきであるが、ここではパリティエラーの有無を訂正可能エラー信号ＣＥＲとして出力する。
【００５１】
訂正データ選択回路４は、訂正可能エラー信号ＣＥＲに基づいて、訂正後の本体データＹから切り出された部分ワードまたは訂正前の本体データＸから切り出された部分ワードのいずれかを選択して出力する。パリティエラーがある場合は訂正後の本体データＹから切り出された部分ワードが選択され、パリティエラーがない場合は、訂正前の本体データＸから切り出された部分ワードが選択されて出力される。
【００５２】
アクノレッジ生成回路５は、訂正可能エラー信号ＣＥＲに基づいて、出力データＲＤＴに有効なデータが出力されるタイミングを示すアクノレッジ信号ＡＣＫを生成する。パリティエラーが検出されなかった場合には、訂正前の本体データＸから切り出された部分ワードが、メモリから読み出されたサイクル内で出力されるので、そのサイクルにアクノレッジ信号ＡＣＫをアサートする。一方、パリティエラーが検出された場合には、エラー訂正回路３によるエラー訂正処理を待って、訂正後の本体データＹから切り出された部分ワードが、２サイクル遅れて出力されるため、アクノレッジ生成回路５は、パリティエラーが検出されなかった場合よりも２サイクル遅れてアクノレッジ信号ＡＣＫをアサートする。
【００５３】
図８は、図６のエラー処理回路の動作例を示すタイミングチャートである。図７と同様に、横軸は時刻であり、フリップフロップ９＿１〜９＿３に供給されるパイプラインクロックのサイクルを単位として時刻ｔ１〜ｔ５が示されている。縦軸方向には、メモリから読み出されたワードデータＲＤＷ、シンドロームＳ、訂正前と訂正後の本体データＸとＹ、及びエラー種別ＥＲＲが上から順に示される。さらに、パリティエラーなしの場合とパリティエラーありの場合に分けて、訂正可能エラー信号ＣＥＲ、アクノレッジＡＣＫ、及び、出力される部分ワードＲＤＴが、それぞれ示される。
【００５４】
時刻ｔ１に、本体データＸとＥＣＣ付加ビットＰとを含むワードデータＲＤＷが、メモリ２０から読み出される。シンドローム生成回路１で生成されたシンドロームＳは、フリップフロップ９＿２に取り込まれ、時刻ｔ２に出力される。読み出されたワードデータＲＤＷのうちの本体データＸは、フリップフロップ９＿１を介して時刻ｔ２にエラー訂正回路３に供給される。対応するシンドロームＳも同じ時刻ｔ２にエラー訂正回路３に供給され、エラー訂正回路３はエラー訂正処理を実行して訂正後の本体データＹを、フリップフロップ９＿３を介して時刻ｔ３に出力する。エラー種別判定回路２は、シンドロームＳが供給される時刻ｔ２にエラー種別を判定し、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれかをエラー種別ＥＲＲとして出力する。ここまでの動作は、図７に示した比較例の動作と同じである。
【００５５】
ワードデータＲＤＷがメモリ２０から読み出される時刻ｔ１に、ワード＋パリティ切出し回路７は、部分ワードとその部分ワードに対応するパリティビットを切り出して、パリティデコード回路８に供給する。切り出された部分ワードは、訂正データ選択回路４に出力される。パリティデコード回路８は供給された部分ワードとパリティビットに対してパリティデコードを実行し、パリティエラーの有無を判定し、訂正可能エラー信号ＣＥＲを出力する。ワード＋パリティ切出し回路７は、ワードデータＲＤＷから部分ワードとパリティを選択するだけの単純な回路であるし、パリティデコード回路８はデコード対象がワードデータＲＤＷの数分の１の部分ワードであるので、遅延段数の少ない高速な回路構成を採り得るため、ワードデータＲＤＷがメモリ２０から読み出されるのと同じサイクル内で実行することができる。
【００５６】
パリティエラーなし（ＣＥＲ＝０）の場合は、時刻ｔ１に出力されている、訂正前の本体データＸから切り出された部分ワードが、訂正データ選択回路４によって選択され、出力データＲＤＴ（Ｘ）として出力される。パリティエラーあり（ＣＥＲ＝１）の場合は、時刻ｔ３に出力されている、訂正後の本体データＹから切り出された部分ワードが、訂正データ選択回路４によって選択され、出力データＲＤＴ（Ｙ）として出力される。
【００５７】
部分ワードについてパリティエラーなし（ＣＥＲ＝０）と判定された場合であっても、ワードデータＲＤＷでは、エラーなし（ＥＲＲ＝ＮＥＤ）とは限らない。当該部分ワード以外の部分にエラーがある可能性があり、また、当該部分ワード内に２ビットのエラーがある可能性もある。したがって、上述のように時刻ｔ１に出力された出力データＲＤＴ（Ｘ）は、エラーのないワードデータから切り出された部分ワードであるとは限らない。しかし、実際にエラーが発生する確率は低いので、パリティエラーがない場合のデータを出力データＲＤＴとして後段で使用することにより、メモリのアクセスサイクルが向上する。図７と図８を比較すると、図８では１サイクル早く出力されている。一方、シンドロームＳに基づいて判定される正確なエラー種別ＥＲＲは、上述の通り時刻ｔ２に出力されるため、一旦、時刻ｔ１に出力された出力データＲＤＴ（Ｘ）に対して、正確なエラー種別ＥＲＲの結果に基づいて、後段において適切な処理を行なう。例えば、１ビットエラー（ＥＲＲ＝ＳＥＣ）の場合は、一旦出力された出力データＲＤＴ（Ｘ）を無効化して、訂正後の本体データＹから切り出された部分ワードによる出力データＲＤＴ（Ｙ）に置き換え、２ビットエラー（ＥＲＲ＝ＤＥＤ）の場合は、適切なエラー処理に移行する。
【００５８】
実際の回路動作では、エラーがない場合が圧倒的に多く、１ビットエラーは稀であり、２ビットエラーはさらに稀であるので、平均的なメモリのアクセス速度は、エラーがない場合の遅延によって支配的に規定されるため、全体としてのメモリのアクセス性能を向上することができる。
【００５９】
なお、本実施形態で示したパイプライン構成は一例に過ぎず、各パイプラインステージにおける回路遅延を考慮して適宜変更することができ、その結果によっては、図７及び図８に示したタイミングチャートも変更される。
【００６０】
エラー処理回路の具体的構成例について説明する。理解を容易にするために、本体データを９ビットとし、各部分ワードを３ビットとして説明する。このビット数は、一例に過ぎず、任意に変更可能である。
【００６１】
図９は、比較例である図５のエラー処理回路に入力されるワードデータに含まれる、ＥＣＣ付加ビットの生成方法を示す説明図である。９ビットの本体データｄ０〜ｄ８に、５行９列の生成行列を乗ずることによって、５ビットのＥＣＣ付加ビットｐ０〜ｐ４が生成される。生成行列の各列は互いに異なり、奇数個の１によって構成されている、拡張ハミング符号の生成行列である。
【００６２】
図１０は、図５のエラー処理回路におけるシンドロームの生成方法を示す説明図である。メモリから読み出されたワードデータｘ０〜ｘ８、ｐ０〜ｐ４に対して、５行１４列の検査行列を乗ずることによりシンドロームｓ０〜ｓ４が生成される。検査行列は、５行９列の上記生成行列に５行５列の単位行列が結合されたものである。図５のシンドローム生成回路１は、この式に従って、シンドロームｓ０〜ｓ４を生成する。
【００６３】
図１１は、本実施形態２に係る図６のエラー処理回路に入力されるワードデータに含まれる、ＥＣＣ付加ビットの生成方法を示す説明図である。９ビットの本体データｄ０〜ｄ８に、６行９列の生成行列を乗ずることによって、６ビットのＥＣＣ付加ビットｐ０〜ｐ５が生成される。生成行列の各列は互いに異なり、奇数個の１によって構成されている、拡張ハミング符号の生成行列であると同時に、各部分ワードパリティ符号を生成する部分を持つ。即ち、生成行列の４行目は、第１の部分ワードｄ０〜ｄ２に対応する第１列〜第３列が１、他の列が０とされ、この４行目によって生成されるパリティｐ３が、第１の部分ワードｄ０〜ｄ２のパリティ符号となる。同様に、生成行列の５行目は、第２の部分ワードｄ３〜ｄ５に対応する第４列〜第６列が１、他の列が０とされ、この５行目によって生成されるパリティｐ４が、第２の部分ワードｄ３〜ｄ５のパリティ符号となる。また、生成行列の６行目は、第３の部分ワードｄ６〜ｄ８に対応する第７列〜第９列が１、他の列が０とされ、この６行目によって生成されるパリティｐ５が、第３の部分ワードｄ６〜ｄ８のパリティ符号となる。
【００６４】
図１２は、実施形態２に係る図６のエラー処理回路におけるシンドロームの生成方法を示す説明図である。メモリから読み出されたワードデータｘ０〜ｘ８、ｐ０〜ｐ５に対して、６行１５列の検査行列を乗ずることによりシンドロームｓ０〜ｓ５が生成される。検査行列は、６行９列の上記生成行列に６行６列の単位行列が結合されたものである。図６のシンドローム生成回路１は、この式に従って、シンドロームｓ０〜ｓ５を生成する。
【００６５】
ＥＣＣ付加ビットｐ０〜ｐ５のうちのｐ３〜ｐ５は、上述のようにそれぞれ第１〜第３の部分ワードのパリティ符号になっているため、各部分ワードのパリティ検査を、上記シンドローム生成及びそれに続くエラー種別判定処理やエラー訂正処理と並列に実行することができる。
【００６６】
図１３は、図６のエラー処理回路のより詳細な構成例を示すブロック図である。
【００６７】
メモリ２０から読み出された、訂正前の本体データＸ（ｘ０〜ｘ８）とＥＣＣ付加ビットＰ（ｐ０〜ｐ５）が入力される。シンドローム生成回路１には読み出されたワードデータ全体ｘ０〜ｘ８とｐ０〜ｐ５とが入力され、エラー訂正回路３には本体データｘ０〜ｘ８がフリップフロップ９＿１を介して入力される。
【００６８】
シンドローム生成回路１で生成されたシンドロームｓ０〜ｓ５は、フリップフロップ９＿２を介してエラー種別判定回路２とエラー訂正回路３に供給される。エラー種別判定回路２は、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれであるかを判定し、エラー種別ＥＲＲとして出力する。エラー訂正回路３は、入力されたシンドロームｓ０〜ｓ５に基づいて、読み出された訂正前の本体データｘ０〜ｘ８に対する誤り訂正処理を実行し、訂正後の本体データｙ０〜ｙ８を、フリップフロップ９＿３を介してワード切出し回路６に出力する。ワード切出し回路６は、訂正後の本体データｙ０〜ｙ８から、メモリ２０に対して要求された部分ワードｙ０〜ｙ２またはｙ３〜ｙ５またはｙ６〜ｙ８を切り出して、訂正データ選択回路４に出力する。
【００６９】
ワード＋パリティ切出し回路７は、本体データｘ０〜ｘ８から部分ワードを切り出すセレクタ７１と、ＥＣＣ付加ビットｐ０〜ｐ５からパリティビットを切り出すセレクタ７２とで構成される。セレクタ７１は、本体データｘ０〜ｘ８から、メモリ２０に対して要求された部分ワードｘ０〜ｘ２またはｘ３〜ｘ５またはｘ６〜ｘ８を切り出して、訂正データ選択回路４とパリティデコード回路８に出力する。セレクタ７２は、ＥＣＣ付加ビットｐ０〜ｐ５から上記部分ワードに対応するパリティビットｐ３またはｐ４またはｐ５を切り出して、パリティデコード回路８に出力する。パリティデコード回路８は供給された部分ワードとパリティビットに対してパリティデコードを実行し、パリティエラーの有無を判定し、訂正可能エラー信号ＣＥＲを出力する。
【００７０】
訂正データ選択回路４は、訂正可能エラー信号ＣＥＲに基づいて、訂正後の本体データＹから切り出された部分ワードまたは訂正前の本体データＸから切り出された部分ワードのいずれかを選択して出力する。パリティエラーがある場合は訂正後の本体データＹから切り出された部分ワードが選択され、パリティエラーがない場合は、訂正前の本体データＸから切り出された部分ワードが選択されて出力される。
【００７１】
アクノレッジ生成回路５は、訂正可能エラー信号ＣＥＲに基づいて、出力データＲＤＴに有効なデータが出力されるタイミングを示すアクノレッジ信号ＡＣＫを生成する。
【００７２】
このように、シンドローム生成回路１は、メモリから読み出されたデータ全体ｘ０〜ｘ８とＥＣＣ付加ビットｐ０〜ｐ５の合計１５ビットが入力されて、６ビットのシンドロームｓ０〜ｓ５を生成する。これに対して、部分ワード毎のパリティ検査は、ワード＋パリティ切出し回路７におけるセレクタ７１または７２の１段を経て、部分ワード３ビットとパリティビット１ビットの合計４ビットがパリティデコード回路８に入力され、訂正可能エラー信号ＣＥＲが生成される。したがって、合計１５ビットが入力されるシンドローム生成回路１と比較して、回路遅延を著しく小さくすることができる。これにより、パリティエラーがないことが高速に判定され、エラーの発生確率を考慮した平均的なメモリのアクセス速度を向上することができる。
【００７３】
本実施形態２においては、パリティデコード回路８を時分割で動作させる構成を例示したが、部分ワード毎に設けて並列に動作させることもできる。
【００７４】
図１９は、図１３に示すエラー処理回路の変形例を示すブロック図である。複数のフリップフロップと、アクノレッジ生成回路５は、図示が省略されている。パリティデコード回路８は、部分ワード毎に３個のパリティデコード回路８１〜８３が並列に設けられ、デコード結果ｐｅ０〜ｐｅ２をそれぞれ出力する。メモリから読み出されたデータ全体ｘ０〜ｘ８とＥＣＣ付加ビットｐ０〜ｐ５の全てがパリティデコード回路８に入力されるので、ワード＋パリティ切出し回路７は不要となり省略される。訂正データ選択については、部分ワード毎に３個の訂正データ選択回路４＿１〜４＿３を並列に備える。ワード切出し回路６は、３個の訂正データ選択回路４＿１〜４＿３の後段に設けられる。
【００７５】
〔実施形態３〕＜エラー訂正前のワード切出し＞
詳細な別の実施の形態について説明する。
【００７６】
図１４は実施形態３の構成例を示すブロック図である。図１４に示される本実施形態３のデータ処理回路も図６に示される実施形態２と同様に、メモリ２０にエラー処理回路１０が接続されて構成される。エラー処理回路１０は、シンドローム生成回路１、エラー種別判定回路２、エラー訂正回路３、訂正データ選択回路４、アクノレッジ生成回路５、ワード切出し回路６、ワード＋パリティ切出し回路７、パリティデコード回路８、及び、複数のフリップフロップを含んで構成される点で実施形態２と同様であるが、ワード切出し回路６がエラー訂正回路３の前段に配置されている点が異なる。ワード切出し回路６はメモリ２０から読み出されるデータＲＤＷの本体データＸから、メモリ２０に対して要求された部分ワードを切り出して、エラー訂正回路３に供給する。エラー訂正回路３は、本体データＸ全体ではなく、切り出された部分ワードに対するエラー訂正処理を行なう回路であるので、回路遅延は小さい。そのため、パイプラインを構成するフリップフロップの配置も変更される。即ち、図６ではエラー訂正回路３の前段に配置されていたフリップフロップ９＿３が省略され、代わりにエラー訂正回路３の後段のフリップフロップ９＿４が追加されている。これに伴って、シンドロームＳのためのフリップフロップ９＿２は、エラー訂正回路３へ入力されるための分岐よりも後段に移動されている。このように、エラー訂正処理を部分ワードに対して実行するエラー訂正回路３を備える点で大きく異なる一方、これに伴ってパイプライン構造が多少変更される以外は実施形態２と同様の動作をする。実施形態２と同様の構成及び動作についての説明は省略するが、以下に、相違点を中心に、本実施形態３のエラー処理回路１０の動作について説明する。
【００７７】
ＳＥＣＤＥＤなどの誤り訂正符号アルゴリズムでは、通常、誤り訂正処理の対象は本体データ全体に限られ、その一部だけを誤り訂正処理の対象とすることはできない。本実施形態３では、これを実現する生成行列を採用する。
【００７８】
図１５は、本実施形態３に係る、ＥＣＣ付加ビットの生成方法を示す説明図である。図１１に示される実施形態２と同様に、９ビットの本体データｄ０〜ｄ８に、６行９列の生成行列を乗ずることによって、６ビットのＥＣＣ付加ビットｐ０〜ｐ５が生成される。生成行列の各列は互いに異なり、奇数個の１によって構成されている、拡張ハミング符号の生成行列であると同時に、各部分ワードパリティ符号を生成する部分を持つ点も、実施形態２と同じである。実施形態２と異なる点は、生成行列における、各部分ワードパリティ符号を生成する部分以外の部分の要素が、各部分ワードに対応する複数列ごとに同じ部分行列で構成されている点である。即ち、以下の各部分行列が互いに同じ行列とされる。
第１の部分ワードに対応する第１列〜第３列のうち、各部分ワードパリティ符号を生成する第４行〜第６行以外の部分である、３行３列の部分行列。
第２の部分ワードに対応する第４列〜第６列のうち、各部分ワードパリティ符号を生成する第４行〜第６行以外の部分である、３行３列の部分行列。
第３の部分ワードに対応する第７列〜第９列のうち、各部分ワードパリティ符号を生成する第４行〜第６行以外の部分である、３行３列の部分行列。
【００７９】
このような生成行列であっても、「各列が互いに異なり、奇数個の１によって構成されている」という、拡張ハミング符号の生成行列に求められる条件は、依然満足している。
【００８０】
図１６は、実施形態３に係るシンドロームの生成方法を示す説明図である。上述のように生成行列を変更したのに伴って、検査行列も変更されているが、拡張ハミング符号に求められる条件を満足しているため、拡張ハミング符号のアルゴリズムに則って、シンドロームｓ０〜ｓ５を生成することができ、これを使ったエラー訂正処理も同様に行うことができる。また、シンドロームｓ３〜ｓ５は、各部分ワードに対応する部分ワードパリティ符号になっている。
【００８１】
生成されたシンドロームｓ０〜ｓ５は、エラー種別の判定に利用される。シンドロームｓ０〜ｓ５が全て０の場合は、エラーなしと判定される。シンドロームｓ０〜ｓ５は、検査行列のうちの生成行列に対応する部分の各列と比較され、一致する列があれば１ビットエラーと判定され、一致する列がなければ２ビットエラーであり訂正不能と判定される。３ビット以上のエラーは判定不能である。
【００８２】
本実施形態３では、部分ワードパリティ符号であるシンドロームｓ３〜ｓ５以外のシンドロームｓ０〜ｓ２と、第１行〜第３行の生成行列に対応する部分の各列が比較される。即ち、シンドロームｓ０〜ｓ２が、第１行〜第３行の第１列〜第９列と比較される。ここで、図１５を引用して説明した通り、第１行〜第３行では、第１列〜第３列の部分行列と、第４列〜第６列の部分行列と、第７列〜第９列の部分行列とはすべて同じであるから、シンドロームｓ０〜ｓ２の比較は、３通りの列データとの比較で足りる。３通りの列データとは、第１、第４及び第７列の列データ、第２、第４及び第８列の列データ、第３、第６及び第９列の列データである。
【００８３】
拡張ハミング符号のエラー訂正処理では、シンドロームｓ０〜ｓ５と一致した列の番号は、エラーが発生した情報ビットのビット位置に相当するので、メモリから読み出されたデータｘ０〜ｘ８の該当するビット位置のデータを反転することによって、エラーを訂正し、情報ビットｄ０〜ｄ８を復元する。これに対して、本実施形態３では、シンドロームｓ０〜ｓ２と一致する列は、第１、第４及び第７列の列データ、第２、第４及び第８列の列データ、または、第３、第６及び第９列の列データとなる。
【００８４】
一方、エラー訂正回路３には、メモリ２０から読み出された本体データｘ０〜ｘ８のうち、ワード切出し回路６で切り出された部分ワードｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８が入力される。シンドロームｓ０〜ｓ２が第１、第４及び第７列の列データときは、どの部分ワードが入力されている場合であっても、第１ビットｘ０、ｘ３またはｘ６を訂正する。シンドロームｓ０〜ｓ２が第２、第５及び第８列の列データときは、どの部分ワードが入力されている場合であっても、第２ビットｘ１、ｘ４またはｘ７を訂正する。シンドロームｓ０〜ｓ２が第３、第６及び第９列の列データときは、どの部分ワードが入力されている場合であっても、第３ビットｘ２、ｘ５またはｘ８を訂正する。
【００８５】
このようにして訂正された部分ワードｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８は、フリップフロップ９＿４を介して訂正データ選択回路４に入力される。訂正データ選択回路４の他方には、訂正前の本体データＸから切り出された部分ワードｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８が入力されている。訂正データ選択回路４は、訂正可能エラー信号ＣＥＲに基づいて、訂正後の本体データＹから切り出された部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）または訂正前の本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）のいずれかを選択して出力する。パリティエラーがある場合は訂正後の本体データＹから切り出された部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）が選択され、パリティエラーがない場合は、訂正前の本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）が選択されて出力される。
【００８６】
本実施形態３における、エラー処理回路１０の構成について、より詳細に説明する。
【００８７】
図１７は、図１４のエラー処理回路１０のより詳細な構成例を示すブロック図である。
【００８８】
メモリ２０から読み出された、訂正前の本体データＸ（ｘ０〜ｘ８）とＥＣＣ付加ビットＰ（ｐ０〜ｐ５）が入力される。ワードデータ全体ｘ０〜ｘ８とｐ０〜ｐ５が、シンドローム生成回路１とワード＋パリティ切出し回路７に入力される。シンドローム生成回路１は、シンドロームｓ０〜ｓ５を生成して、エラー訂正回路３に供給し、また、フリップフロップ９＿２を介してエラー種別判定回路２に供給する。エラー種別判定回路２は、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれであるかを判定し、エラー種別ＥＲＲとして出力する。
【００８９】
ワード＋パリティ切出し回路７は、本体データｘ０〜ｘ８から部分ワードを切り出すセレクタ７１と、ＥＣＣ付加ビットｐ０〜ｐ５からパリティビットを切り出すセレクタ７２とで構成される。セレクタ７１は、本体データｘ０〜ｘ８から、メモリ２０に対して要求された部分ワードｘ０〜ｘ２またはｘ３〜ｘ５またはｘ６〜ｘ８を切り出して、エラー訂正回路３と訂正データ選択回路４とパリティデコード回路８に出力する。セレクタ７２は、ＥＣＣ付加ビットｐ０〜ｐ５から上記部分ワードに対応するパリティビットｐ３またはｐ４またはｐ５を切り出して、パリティデコード回路８に出力する。図１４には、ワード切出し回路６が示されているが、図１７では、ワード＋パリティ切出し回路７のうちのセレクタ７１が同じ機能であるので、その出力を流用している。パリティデコード回路８は供給された部分ワードとパリティビットに対してパリティデコードを実行し、パリティエラーの有無を判定し、訂正可能エラー信号ＣＥＲを出力する。
【００９０】
エラー訂正回路３は、入力されたシンドロームｓ０〜ｓ５に基づいて、訂正前の本体データから切り出された部分ワードｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８に対して、上述した誤り訂正処理を実行し、訂正された部分ワードｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８を出力する。訂正された部分ワードｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８は、フリップフロップ９＿４を介して訂正データ選択回路４に入力される。
【００９１】
訂正データ選択回路４は、訂正可能エラー信号ＣＥＲに基づいて、訂正後の本体データＹから切り出された部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）または訂正前の本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）のいずれかを選択して出力する。パリティエラーがある場合は訂正後の本体データＹから切り出された部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）が選択され、パリティエラーがない場合は、訂正前の本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）が選択されて出力される。
【００９２】
アクノレッジ生成回路５は、訂正可能エラー信号ＣＥＲに基づいて、出力データＲＤＴに有効なデータが出力されるタイミングを示すアクノレッジ信号ＡＣＫを生成する。
【００９３】
図１８は、図１４のエラー処理回路の動作例を示すタイミングチャートである。図８と同様に、横軸は時刻であり、フリップフロップ９＿１、９＿２、９＿４に供給されるパイプラインクロックのサイクルを単位として時刻ｔ１〜ｔ５が示されている。縦軸方向には、メモリから読み出されたワードデータＲＤＷ、シンドロームＳ、訂正前と訂正後の本体データＸとＹ、及びエラー種別ＥＲＲが上から順に示される。さらに、パリティエラーなしの場合とパリティエラーありの場合に分けて、訂正可能エラー信号ＣＥＲ、アクノレッジＡＣＫ、及び、出力される部分ワードＲＤＴが、それぞれ示される。
【００９４】
時刻ｔ１に、本体データＸとＥＣＣ付加ビットＰとを含むワードデータＲＤＷが、メモリ２０から読み出される。シンドローム生成回路１で生成されたシンドロームＳは、フリップフロップ９＿２を介さずにそのままエラー訂正回路３に供給される。同じ時刻ｔ１に、読み出されたワードデータＲＤＷのうちの本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）が、エラー訂正回路３に供給される。エラー訂正回路３はエラー訂正処理を実行して訂正後の部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）を、フリップフロップ９＿４を介して時刻ｔ２に出力する。
【００９５】
時刻ｔ２に、シンドロームＳがフリップフロップ９＿２を介してエラー種別判定回路２に供給され、エラー種別判定回路２は、エラー種別を判定し、エラーなし（ＮＥＤ）、１ビットエラー（ＳＥＣ）、または、２ビットエラー（ＤＥＤ）のいずれかをエラー種別ＥＲＲとして出力する。
【００９６】
ワードデータＲＤＷがメモリ２０から読み出される時刻ｔ１に、ワード＋パリティ切出し回路７は、部分ワードとその部分ワードに対応するパリティビットを切り出して、パリティデコード回路８に供給する。切り出された部分ワードは、訂正データ選択回路４に出力される。パリティデコード回路８は供給された部分ワードとパリティビットに対してパリティデコードを実行し、パリティエラーの有無を判定し、訂正可能エラー信号ＣＥＲを出力する。
【００９７】
パリティエラーなし（ＣＥＲ＝０）の場合は、時刻ｔ１に出力されている、訂正前の本体データＸから切り出された部分ワード（ｘ０〜ｘ２、ｘ３〜ｘ５、または、ｘ６〜ｘ８）が、訂正データ選択回路４によって選択され、出力データＲＤＴ（Ｘ）として出力される。パリティエラーあり（ＣＥＲ＝１）の場合は、時刻ｔ２に出力されている、訂正後の部分ワード（ｙ０〜ｙ２、ｙ３〜ｙ５、または、ｙ６〜ｙ８）が、訂正データ選択回路４によって選択され、出力データＲＤＴ（Ｙ）として出力される。
【００９８】
本実施形態３においては、エラー訂正回路３が部分ワードのみを対象としてエラー訂正処理を実行するので、その遅延は小さく、回路規模も小さい。そのため、図１４、１７、１８に例示したように、図６、８、１３に例示した実施形態２の場合よりも、１サイクル早く訂正結果を出力することができる。各図に引用したのは、本体データとして９ビット、部分ワードとして３ビットの例であるが、ビット数を変更した場合にも同様に、エラー訂正回路３の回路遅延を小さく、また回路規模を小さく抑えることができる。
【００９９】
本実施形態３においては、エラー訂正回路３を時分割で動作させる構成を例示したが、部分ワードを対象としてエラー訂正処理を実行するエラー訂正回路３を部分ワード毎に設けて並列に動作させることもできる。
【０１００】
図２０は、図１７に示すエラー処理回路の変形例を示すブロック図である。複数のフリップフロップと、アクノレッジ生成回路５は、図示が省略されている。図１９と同様に、ワード＋パリティ切出し回路７は省略され、パリティデコード回路８に、部分ワード毎に３個のパリティデコード回路８１〜８３が並列に設けられ、デコード結果ｐｅ０〜ｐｅ２をそれぞれ出力する。また、３個のエラー訂正回路３＿１〜３＿３が設けられ、それぞれ対応する部分ワードを対象とするエラー訂正処理を並列に実行し、訂正された部分ワードｙ０〜ｙ２、ｙ３〜ｙ５及びｙ６〜ｙ８を出力する。３個の訂正データ選択回路４＿１〜４＿３を並列に備え、パリティデコード結果ｐｅ０〜ｐｅ２に基づいて、それぞれ、訂正前か訂正後かいずれかの部分ワードを選択して、後段のワード切出し回路６に出力する。
【０１０１】
〔実施形態４〕＜バスデータがパリティ符号で保護されたシステム＞
以上説明した実施形態１〜３で説明したメモリ及びエラー処理回路は、バスデータがパリティ符号で保護されたシステムに搭載することができる。実施形態１〜３で説明したメモリ及びエラー処理回路は、部分ワード毎のパリティ符号の信号を内部に持っている。そのため、部分ワードのビット長をバス幅と一致させておけば、パリティ付きのバスに接続する場合に、内部のパリティ符号信号をそのままバスに出力することができる。
【０１０２】
図２１は、実施形態２に係るメモリ及びエラー処理回路を、バスデータがパリティ符号で保護されたシステムに搭載する場合の構成例を示すブロック図である。エラー処理回路１０の構成は、実施形態２に係る図６に示されるエラー処理回路１０の構成と比較して、アクノレッジ生成回路５が省略されている点、訂正可能エラー信号ＣＥＲとアクノレッジ信号ＡＣＫの出力が省略されている点、及び、部分ワードに対応するパリティＲＤＴ（ｐａｒｉｔｙ）が出力されている点が異なる。エラー処理回路１０内の他の構成と動作については、図６と同様であるので、説明を省略する。エラー処理回路１０が出力する部分ワードＲＤＴ（ｄａｔａ）と対応するパリティＲＤＴ（ｐａｒｉｔｙ）は、読み出しバス４０に出力され、エラー種別ＥＲＲとともに、バスマスタ３０に入力される。バスマスタ３０はパリティデコード回路３１とアクノレッジ生成回路３２とを備え、入力された部分ワードＲＤＴ（ｄａｔａ）と対応するパリティＲＤＴ（ｐａｒｉｔｙ）に基づいて、訂正可能エラー信号ＣＥＲとアクノレッジ信号ＡＣＫとを自ら生成する。
【０１０３】
図２２は、実施形態３に係るメモリ及びエラー処理回路を、バスデータがパリティ符号で保護されたシステムに搭載する場合の構成例を示すブロック図である。エラー処理回路１０の構成は、実施形態３に係る図１４に示されるエラー処理回路１０の構成と比較して、アクノレッジ生成回路５が省略されている点、訂正可能エラー信号ＣＥＲとアクノレッジ信号ＡＣＫの出力が省略されている点、及び、部分ワードに対応するパリティＲＤＴ（ｐａｒｉｔｙ）が出力されている点が異なる。エラー処理回路１０内の他の構成と動作については、図１４と同様であるので、説明を省略する。エラー処理回路１０が出力する部分ワードＲＤＴ（ｄａｔａ）と対応するパリティＲＤＴ（ｐａｒｉｔｙ）は、読み出しバス４０に出力され、エラー種別ＥＲＲとともに、バスマスタ３０に入力される。バスマスタ３０はパリティデコード回路３１とアクノレッジ生成回路３２とを備え、入力された部分ワードＲＤＴ（ｄａｔａ）と対応するパリティＲＤＴ（ｐａｒｉｔｙ）に基づいて、訂正可能エラー信号ＣＥＲとアクノレッジ信号ＡＣＫとを自ら生成する。
【０１０４】
以上のように、バスデータがパリティ符号で保護されたシステムに搭載する場合には、部分ワードＲＤＴ（ｄａｔａ）と対応するパリティＲＤＴ（ｐａｒｉｔｙ）を読み出しバス４０に出力すればよいので、アクノレッジ生成を不要とすることができる。
【０１０５】
部分ワードのビット長は、実施形態２及び３に示された例に依らず任意であり、バス４０のデータ幅と一致させることができる。
【０１０６】
〔実施形態５〕＜ＲＡＭ＞
以上の実施形態１〜４では、専らメモリからの読み出し側について説明したが、エラー処理回路１０にＥＣＣ生成回路を搭載することにより、メモリへの書き込みにも対応することができる。
【０１０７】
図２３は、図２１の構成に、メモリへデータを書き込むための回路を追加した構成例を示すブロック図である。バスマスタ３０は書き込みバス４１を経由して書込みデータとパリティをエラー処理回路１０に供給する。エラー処理回路１０は、書き込みデータ用パリティデコード回路１３を備え、入力された書込みデータとパリティを対象としてパリティデコード（パリティ検査）を実行し、エラーがあると判定した場合には、バスパリティエラーをバスマスタ３０に返信する。書き込みデータは、部分ワードと同じビット長であるので、ワード結合回路１２は、複数回の書き込みデータの供給を待って、メモリ２０の１ワードを構成し、ＥＣＣＣ生成回路１１に入力する。ＥＣＣ生成回路１１は、上述の生成行列（図１１に例示）を用いてＥＣＣ付加ビットを生成して書込みデータに付加し、メモリ２０に書き込む。
【０１０８】
図２４は、図２２の構成に、メモリへデータを書き込むための回路を追加した構成例を示すブロック図である。バスマスタ３０は書き込みバス４１を経由して書込みデータとパリティをエラー処理回路１０に供給する。エラー処理回路１０は、書き込みデータ用パリティデコード回路１３を備え、入力された書込みデータとパリティを対象としてパリティデコード（パリティ検査）を実行し、エラーがあると判定した場合には、バスパリティエラーをバスマスタ３０に返信する。書き込みデータは、部分ワードと同じビット長であるので、ワード結合回路１２は、複数回の書き込みデータの供給を待って、メモリ２０の１ワードを構成し、ＥＣＣＣ生成回路１１に入力する。ＥＣＣ生成回路１１は、上述の生成行列（図１５に例示）を用いてＥＣＣ付加ビットを生成して書込みデータに付加し、メモリ２０に書き込む。
【０１０９】
図２３及び図２４には、メモリに書き込まれるべきワードデータが複数の部分ワードとして書き込みバス４１から供給される例を示したが、それよりも少ない数の部分ワードが供給され、リードモディファイライトによって、メモリに書き込まれるように構成してもよい。即ち、供給された部分ワードを含むワードデータが一旦メモリから読み出され、エラー訂正回路３によって訂正された後に、ワード結合回路１２に供給される。ワード結合回路１２は、エラー訂正回路３によって訂正され供給された本体データのうち、書き込みバス４１から供給された部分データを書き換えて新たな本体データを構成して、ＥＣＣ生成回路１１に供給する。ＥＣＣ生成回路１１は、上述の生成行列（図１５に例示）を用いてＥＣＣ付加ビットを生成して新たな本体データに付加し、メモリ２０に書き込む。
【０１１０】
以上のように、エラー処理回路１０にＥＣＣ生成回路１１を搭載することにより、メモリへの書き込みにも対応することができる。
【０１１１】
部分ワードのビット長は、実施形態２及び３に示された例に依らず任意であり、読み出しバス４０や書込みバス４１のデータ幅と一致させることができる。
【０１１２】
以上の各実施形態１〜５で説明した、メモリ２０、エラー処理回路１０、及び、実施形態４〜５で説明した、バス４０、４１とバスマスタ３０は、特に制限されないが、半導体装置１は、例えば、公知の半導体集積回路製造技術を用いて、シリコンなどの単一半導体基板上に形成される。
【０１１３】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１１４】
例えば、パイプラインを構成するためのフリップフロップの配置は適宜変更可能である。
【符号の説明】
【０１１５】
１  シンドローム生成
２  エラー種別判定
３  エラー訂正
４  訂正データ選択
５  アクノレッジ生成
６  ワード切出し
７  ワード＋パリティ切出し
８、８１、８２、８３  パリティデコード
９  フリップフロップ（ＦＦ）
１０  エラー処理回路
１１  ＥＣＣ生成
１２  ワード結合
１３  書き込みデータ用パリティデコード
２０  メモリ
３０  バスマスタ
３１  バスマスタ側パリティデコード
３２  バスマスタ側アクノレッジ生成
４０  読出しバス
４１  書き込みバス
７１、７２  セレクタ
【図１】
0006600146.tif 000002
【図２】
0006600146.tif 000003
【図３】
0006600146.tif 000004
【図４】
0006600146.tif 000005
【図５】
0006600146.tif 000006
【図６】
0006600146.tif 000007
【図７】
0006600146.tif 000008
【図８】
0006600146.tif 000009
【図９】
0006600146.tif 000010
【図１０】
0006600146.tif 000011
【図１１】
0006600146.tif 000012
【図１２】
0006600146.tif 000013
【図１３】
0006600146.tif 000014
【図１４】
0006600146.tif 000015
【図１５】
0006600146.tif 000016
【図１６】
0006600146.tif 000017
【図１７】
0006600146.tif 000018
【図１８】
0006600146.tif 000019
【図１９】
0006600146.tif 000020
【図２０】
0006600146.tif 000021
【図２１】
0006600146.tif 000022
【図２２】
0006600146.tif 000023
【図２３】
0006600146.tif 000024
【図２４】
0006600146.tif 000025