(57)【特許請求の範囲】
【請求項１】
データを出力する演算処理部と、
前記演算処理部が出力したデータの格納領域を複数有する記憶部と、
前記演算処理部が出力する各データに対してチェックを行うためのエラーチェック用符号をそれぞれ生成し、生成した各エラーチェック用符号を各データに付加したエラーチェック符号付データを生成するデータ生成部と、
前記データ生成部が生成したエラーチェック符号付データを分割して分割データを生成し、異なる前記エラーチェック符号付データの前記分割データを結合して、各前記格納領域にそれぞれ格納する格納制御部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記演算処理部は、第１データ及び第２データを出力し、
前記データ生成部は、前記第１データを基に第１エラーチェック符号付データを生成し、前記第２データを基に第２エラーチェック符号付データを生成し、
前記格納制御部は、前記第１エラーチェック符号付データを分割して第１分割データを生成し、前記第２エラーチェック符号付データを分割して第２分割データを生成し、各格納領域を２分割した領域である上位側領域又は下位側領域のいずれか一方の分割領域の各々に前記第１分割データをそれぞれ格納し、各格納領域の他方の分割領域の各々に前記第２分割データをそれぞれ格納する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記データ生成部は、前記エラーチェック符号付データをｍ個（ｍは２以上の整数）合わせた、前記記憶部に１回に格納できる所定量をｎ倍（ｎは３以上の整数、且つ、ｎ＞ｍ）したデータ量のデータ群を蓄積し、
前記格納制御部は、前記データ生成部が蓄積する前記データ群から各所定量のデータを取得して各格納領域に格納する処理をｎ回繰り返すことで、ｍ個の前記エラーチェック符号付データそれぞれにおけるエラーチェックの対象となる単位のデータを各格納領域に格納する
ことを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
各前記格納領域に格納された分割された前記エラーチェック符号付データを取得して、前記エラーチェック符号付データを生成し、前記エラーチェック用符号を用いて生成した前記データのエラーチェックを行うエラー制御部をさらに備えたことを特徴とする請求項１〜３の何れか一つに記載の演算処理装置。
【請求項５】
前記格納制御部は、各格納領域に複数の前記エラーチェック符号付データを分割した分割データを格納し、
前記演算処理部は前記エラー制御部を複数備え、各前記エラー制御部は、各格納領域から前記分割データを取得することで前記エラーチェック符号付データのいずれか１つを各々取得して、各データのエラーチェックを行う
ことを特徴とする請求項４に記載の演算処理装置。
【請求項６】
前記格納制御部は、各格納領域に複数の前記エラーチェック符号付データを分割した分割データを格納し、
一つの前記エラー制御部が、各格納領域から前記分割データを取得することで複数の前記エラーチェック符号付データを順次取得して、前記データのエラーチェックを順次行う
ことを特徴とする請求項４に記載の演算処理装置。
【請求項７】
データを出力する演算処理部と、前記演算処理部が出力したデータの格納領域を複数有するメモリとに接続されるメモリ制御装置であって、
前記演算処理部が出力する各データに対してチェックを行うためのエラーチェック用符号をそれぞれ生成し、生成した各エラーチェック用符号を各データに付加したエラーチェック符号付データを生成するデータ生成部と、
前記データ生成部が生成したエラーチェック符号付データを分割して分割データを生成し、異なる前記エラーチェック符号付データの前記分割データを結合して、各前記格納領域にそれぞれ格納する格納制御部と
を備えたことを特徴とするメモリ制御装置。
【請求項８】
演算処理部及びデータの格納領域を複数有する記憶部を備えた演算処理装置の制御方法であって、
前記演算処理部が出力する各データに対してチェックを行うエラーチェック用符号をそれぞれ生成し、
生成した各エラーチェック符号を各データに付加したエラーチェック符号付データを生成し、
生成したエラーチェック符号付データを分割して分割データを生成し、
異なる前記エラーチェック符号付データの前記分割データを結合して、各前記格納領域にそれぞれ格納する、
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、メモリ制御装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＤＲＡＭ（Dynamic  Random  Access  Memory）などのメモリを持つ演算処理装置であり、且つ、サーバなどの高信頼性能が求められるシステムでは、ＥＣＣ（Error  Check  and  Correct）付きメモリ（以下、「ＥＣＣメモリ」という。）が用いられることが多い。
【０００３】
ＥＣＣメモリは、メモリにデータを書き込む際に、ＥＣＣチェックビットを生成し、データと同時に生成したＥＣＣチェックビットを書き込む。また、ＥＣＣメモリは、メモリからデータを読み出す際に、データとともにＥＣＣチェックビットも読み出し、読み出したＥＣＣチェックビットを用いてデータのエラー訂正及び検出を行う。
【０００４】
例えば、４ビットＤＲＡＭが１８個搭載されたＥＣＣ付きＤＩＭＭ（Dual  Inline  Memory  Module）が、メモリコントローラに２枚接続され、その２枚のＤＩＭＭに同時にアクセスするメモリシステムについて考える。ここで、２サイクル分のデータ２８８ビットを１つのチェックビットによるエラー訂正及び検出の対象とするＥＣＣ単位とする。そして、ここでは、ＥＣＣ単位に対してＳ８ＥＣ−Ｄ８ＥＤ（Single  8bit  Error  Correction-Double  8bit  Error  Detection）のコードを用いてデータ２６４ビットとＥＣＣチェックビット２４ビットに分けるものとする。この場合、メモリシステムは、１つのＤＲＡＭの４ビット全てが全サイクル故障しても訂正可能であり、２つのＤＲＡＭの同時故障も検出可能である。
【０００５】
このメモリシステムの動作を説明する。メモリシステムは、書き込みの場合、ＣＰＵ（Central  Processing  Unit）やＩ／Ｏ（Input/Output）制御部などからのメモリ書き込みデータを書き込みデータ受信部が受信する。そして、メモリシステムは、受信したデータからチェックビットを生成し、生成したチェックビットをデータに付与する。その後、メモリシステムは、メモリインタフェース部を経由させてＤＩＭＭにチェックビットが付与されたデータを書き込む。
【０００６】
また、読み出しの場合、メモリシステムは、メモリインタフェース部を介してＤＩＭＭからデータを読み出す。その後、メモリシステムは、データを訂正し、訂正したデータをＣＰＵやＩ／Ｏ制御部へ送出する。
【０００７】
そして、接続される２枚のＤＩＭＭのＤＲＡＭ３６個のそれぞれに訂正及び検出可能な８ビットの単位を割り当てることで、１つのＤＲＡＭにおける４ビットのエラー訂正が可能となる。また、これにより、２つのＤＲＡＭのそれぞれで発生した４ビットのエラー検出が可能となる。以下では、エラーの訂正及び検出が可能な８ビットの単位を、「ブロック」と呼ぶ。
【０００８】
ここで、１つのＤＲＡＭの故障の中では、１ビットのみの故障の頻度が高い。すなわち、２つのＤＲＡＭの同時故障が発生した場合でも、それぞれ１ビットずつ壊れる場合が多い。これに対して、４ビットＤＲＡＭのそれぞれにブロックを割り当てた場合、２つのＤＲＡＭのそれぞれ１ビットずつが壊れた場合でも訂正ができない。また、３つ以上のＤＲＡＭでエラーが発生した場合、エラーの検出すらできない場合がある。
【０００９】
そこで、複数のＤＲＡＭの１ビット故障を訂正するために、ＥＣＣチェックビットを増やす従来技術が提案されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−２４５２１８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、ＥＣＣチェックビットを増やす従来技術では、チェックビットを多く確保するため、書き込むデータ量が減少してしまう。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、書き込みデータ量を減らさずにデータの訂正及び検出可能な範囲を大きくする演算処理装置、メモリ制御装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法は、一つの態様において、演算処理部は、データを出力する。記憶部は、前記演算処理部が出力したデータの格納領域を複数有する。データ生成部は、前記演算処理部が出力する各データに対してチェックを行うためのエラーチェック用符号をそれぞれ生成し、生成した各エラーチェック用符号を各データに付加したエラーチェック符号付データを生成する。格納制御部は、前記データ生成部が生成したエラーチェック符号付データを分割して分割データを生成し、異なる前記エラーチェック符号付データの前記分割データを結合して、各前記格納領域にそれぞれ格納する。
【発明の効果】
【００１４】
本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法の一つの態様によれば、書き込みデータ量を減らさずにデータの訂正及び検出可能な範囲を大きくすることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、演算処理装置のブロック図である。
【図２】図２は、実施例１に係るメモリコントローラのブロック図である。
【図３】図３は、実施例１におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【図４】図４は、実施例１に係るメモリコントローラによる書込データのＤＩＭＭへの書込処理のフローチャートである。
【図５】図５は、実施例１に係るメモリコントローラによる読出データのＤＩＭＭからの読出処理のフローチャートである。
【図６】図６は、実施例１の変形例におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【図７】図７は、実施例２に係るメモリコントローラのブロック図である。
【図８】図８は、実施例２に係るメモリコントローラによる読出データのＤＩＭＭからの読出処理のフローチャートである。
【図９】図９は、実施例３に係るメモリコントローラのブロック図である。
【図１０】図１０は、実施例３におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【図１１】図１１は、実施例４に係るメモリコントローラのブロック図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００１７】
図１は、演算処理装置のブロック図である。演算処理装置１００は、ＣＰＵ１、キャッシュ制御部２、メモリコントローラ３、メモリインタフェース部４、ＤＩＭＭ５、ハードディスク６及びネットワークインタフェース７を有する。
【００１８】
ＣＰＵ１は、演算処理部の一例である。ＣＰＵ１は、ＤＩＭＭ５、ハードディスク６又はネットワークインタフェース７からデータを取得する。そして、ＣＰＵ１は、入力されたデータを用いて演算処理を行う。その後、ＣＰＵ１は、演算結果を出力する。ＣＰＵ１は、キャッシュ制御部２を介してデータの入出力を行う。
【００１９】
ＤＩＭＭ５は、主記憶装置であり、記憶部の一例である。ＤＩＭＭ５は、複数のＤＲＡＭを有する。本実施例では、ＤＩＭＭ５は、３６個の４ビットＤＲＡＭ５１を有する。すなわち、ＤＩＭＭ５は、１サイクルで１４４ビットのデータの送受信を行う。さらに、本実施例では、メモリコントローラ３は、２サイクル分のデータ、すなわち２８８ビットのデータをＥＣＣ単位とする。そして、ＤＩＭＭ５に格納されるＥＣＣ単位のデータのうち、２６４ビットが実データであり、２４ビットがＥＣＣチェックビットである。これにより、ＤＩＭＭ５は、８ビットの単位でエラー訂正及び検出が可能となる。ＤＲＡＭ５１は、「格納領域」の一例にあたる。
【００２０】
メモリインタフェース部４は、メモリコントローラ３とＤＩＭＭ５との間のデータの送受信を仲介するインタフェースである。
【００２１】
メモリコントローラ３は、メモリ制御装置である。メモリコントローラ３は、ＤＩＭＭ５に対して、データの読み出し及び書き込みの制御を行う。具体的には、メモリコントローラ３は、ＣＰＵ１又はハードディスク６並びにネットワークインタフェース７を含むその他のデータ出入力装置からデータを受信する。そして、メモリコントローラ３は、受信した２６４ビットのデータを用いて２４ビットのチェックビットを生成する。そして、メモリコントローラ３は、受信した２６４ビットのデータに、生成した２４ビットのチェックビットを付加したデータを、メモリインタフェース部４を介して、ＤＩＭＭ５に格納させる。本実施例では、メモリコントローラ３は、８サイクル分のデータのバースト転送を行う。
【００２２】
また、メモリコントローラ３は、データ読み出し命令を、例えばＣＰＵ１から受けて、ＤＩＭＭ５からデータを読み出す。そして、メモリコントローラ３は、読み出したデータのチェックビットを用いて読み出したデータにエラーが発生していないか否かを判定する。エラーが発生していなければ、メモリコントローラ３は、読み出したデータを出力する。一方、エラーが発生した場合、メモリコントローラ３は、発生したエラーが訂正可能であれば、エラーを訂正してデータを出力する。また、発生したエラーの訂正が困難な場合、メモリコントローラ３は、エラー発生の通知を出力する。
【００２３】
ハードディスク６は、補助記憶装置である。ハードディスク６は、ＣＰＵ１からの指示を受けて、データを格納する。また、ハードディスク６は、ＣＰＵ１からの指示を受けて、データを読み出し、出力する。
【００２４】
ネットワークインタフェース７は、他の演算処理装置などの外部装置との通信インタフェースである。ＣＰＵ１及びメモリコントローラ３は、ネットワークインタフェース７を介して、外部装置との間でデータの送受信を行う。
【００２５】
次に、図２を参照して、本実施例に係るメモリコントローラ３によるＤＩＭＭ５に対するデータの書き込み及び読み出しについて詳細に説明する。図２は、実施例１に係るメモリコントローラのブロック図である。以下では、ＣＰＵ１から送出されたデータの書き込み、及び、ＣＰＵ１によるデータの読み出しの場合を例に説明する。
【００２６】
キャッシュ制御部２は、キャッシュ２１及び調停部２２を有する。キャッシュ２１は、複数のキャッシュライン２１１を有する。
【００２７】
ＣＰＵ１により入力された書込データは、各キャッシュライン２１１に一時的に格納される。調停部２２は、書込データをどのキャッシュライン２１１から取得するか決定する。そして、調停部２２は、決定したキャッシュライン２１１から書込データを取得し、メモリコントローラ３の受信部選択回路３１へ出力する。
【００２８】
また、調停部２２は、読出データをメモリコントローラ３の送出データ選択回路３８から取得する。そして、調停部２２は、読出データを格納するキャッシュライン２１１を決定する。その後、調停部２２は、決定したキャッシュライン２１１へ読出データを書き込む。
【００２９】
データ書き込みの場合について説明する。受信部選択回路３１は、調停部２２から書込データを受信する。次に、受信部選択回路３１は、書込データ受信部３２ａにデータが格納済みか否かを判定する。ここで、書込データ受信部３２ａにデータが格納済みとは、書込データ受信部３２ａに２６４ビットのデータが格納されている場合を指す。
【００３０】
書込データ受信部３２ａにデータが格納済みでない場合、受信部選択回路３１は、受信した書込データの２６４ビット分の書込データを書込データ受信部３２ａへ出力する。また、書込データ受信部３２ａにデータが格納済みである場合、受信部選択回路３１は、受信した書込データの２６４ビット分の書込データを書込データ受信部３２ｂへ出力する。
【００３１】
書込データ受信部３２ａは、受信部選択回路３１から２６４ビットの書込データの受信が完了するまでデータを蓄積する。さらに、書込データ受信部３２ａは、書込データ受信部３２ｂが２６４ビットの書込データを受信するまで待機する。そして、書込データ受信部３２ｂが２６４ビットの書込データの受信を完了すると、書込データ受信部３２ａは、保持する２６４ビットの書込データをチェックビット生成部３３ａへ出力する。
【００３２】
書込データ受信部３２ｂは、受信部選択回路３１から２６４ビットの書込データを受信するまで待機する。そして、２６４ビットの書込データの受信を完了すると、書込データ受信部３２ｂは、保持する２６４ビットの書込データをチェックビット生成部３３ｂへ出力する。
【００３３】
チェックビット生成部３３ａは、２６４ビットの書込データの入力を書込データ受信部３２ａから受ける。次に、チェックビット生成部３３ａは、受信した２６４ビットの書込データから２４ビットの誤り訂正符号を生成する。この誤り訂正符号は、データのエラー訂正及び検出（ＥＣＣ）を行うための「エラーチェック用符号」の一例にあたる。
【００３４】
そして、チェックビット生成部３３ａは、生成した２４ビットの誤り訂正符号を受信した２６４ビットの書込データに付加し、２８８ビットの書込データを生成する。このチェックビット生成部３３ａにより生成された２８８ビットの書込データが誤り訂正符号付きデータ（ＥＣＣ付データ）でありＥＣＣ単位のデータとなる。そして、この誤り訂正符号付きデータ（ＥＣＣ付データ）が、「エラーチェック符号付データ」の一例にあたる。以下では、書込データ選択回路３４によって１度に書き込まれたＥＣＣ単位のデータ群をグループと呼ぶ。
【００３５】
チェックビット生成部３３ｂは、２６４ビットの書込データの入力を書込データ受信部３２ｂから受ける。次に、チェックビット生成部３３ｂは、受信した２６４ビットの書込データから２４ビットの誤り訂正符号を生成する。そして、チェックビット生成部３３ｂは、生成した２４ビットの誤り訂正符号を受信した２６４ビットの書込データに付加し、２８８ビットの書込データを生成する。このチェックビット生成部３３ａ及び３３ｂが、「データ生成部」の一例にあたる。
【００３６】
書込データ選択回路３４は、チェックビット生成部３３ａ及び３３ｂに合わせて４サイクル分の書き込みデータ、すなわちそれぞれに２８８ビットのデータが蓄積するまで待機する。
【００３７】
そして、書込データ選択回路３４は、チェックビット生成部３３ａ又はチェックビット生成部３３ｂを書込データの取得元として順次選択する。ここでは、書込データ選択回路３４は、最初の書込データの取得元としてチェックビット生成部３３ａを選択し、次に書込データの取得元としてチェックビット生成部３３ｂを選択する場合で説明する。
【００３８】
書込データ選択回路３４は、最初に選択したチェックビット生成部３３ａから７２ビットの書込データを取得する。次に、書込データ選択回路３４は、次に選択したチェックビット生成部３３ｂから７２ビットの書込データを取得する。そして、書込データ選択回路３４は、取得したデータを合わせた１４４ビットの書込データを、メモリインタフェース部４を介して、ＤＩＭＭ５に書き込む。具体的には、書込データ選択回路３４は、チェックビット生成部３３ａから受信した書込データを各ＤＲＡＭ５１の０及び１ビット番目のビットに書き込む。また、書込データ選択回路３４は、チェックビット生成部３３ｂから受信した書込データを各ＤＲＡＭ５１の２及び３番目のビットに書き込む。この１４４ビットの書込データの書き込みが、１サイクルの書き込みである。
【００３９】
書込データ選択回路３４は、上述した書込データのＤＩＭＭ５への書き込み処理をチェックビット生成部３３ａ及び３２ｂのそれぞれが保持する２８８ビットのデータがなくなるまで繰り返す。すなわち、書込データ選択回路３４は、１サイクルで１４４ビットのデータをＤＩＭＭ５に書き込むので、この場合、４サイクルの書き込み処理を行うことになる。この書込データ選択回路３４が、「格納制御部」の一例にあたる。
【００４０】
書込データ選択回路３４による４サイクルの書込処理により、各ＤＲＡＭ５１の０及び１ビットには、あるグループにおけるエラー訂正及び検出の単位である８ビットのブロックが格納される。また、各ＤＲＡＭ５１の２及び３ビットには、各ＤＲＡＭ５１の０及び１ビットに格納されたデータの属するグループとは異なるグループのエラー訂正及び検出の単位である８ビットのブロックが格納される。このように、１つのＤＲＡＭ５１に２つの異なるグループのブロックが格納される。すなわち、１つのグループに属するデータを分割することで生成されたブロックは、各ＤＲＡＭ５１の一部にそれぞれ格納される。また、ＤＲＡＭ５１の０及び１ビットが、「上位側領域」の一例にあたる。また、ＤＲＡＭ５１の２及び３ビットが、「下位側領域」の一例にあたる。さらに、複数のグループがある場合に、各グループに属するブロック（本実施例においては２つのグループのブロック）の総称が、「分割データ」の一例にあたる。
【００４１】
ここで、ＥＣＣ機能を用いた場合、１つのＤＲＡＭ５１にエラーがあれば、１つのグループにつき２ビットのエラーであれば訂正が可能である。このため、本実施例のデータ格納状態であれば、１つのＤＲＡＭ５１のエラーであれば、４ビットのエラーの訂正が可能である。また、２つのＤＲＡＭ５１が故障した場合、それぞれの故障したビットが格納するデータが属するグループが異なれば、２ビットまでの故障であれば訂正が可能である。また、最大で４つのＤＲＡＭ５１の２ビットの故障の検出が可能である。
【００４２】
図２に戻って説明を続ける。受信部選択回路３１、書込データ受信部３２ａ及び３２ｂ、チェックビット生成部３３ａ及び３３ｂ、並びに、書込データ選択回路３４は、８バースト分の書込データの格納が完了するまで上述した書込データのＤＩＭＭ５への格納処理を繰り返す。具体的には、上述した書込データのＤＩＭＭ５への格納処理がもう１回繰り返されることで、８バースト分の書込データの格納が完了する。これで、メモリコントローラ３は、１回のデータ転送処理を完了する。書込データがさらにある場合には、メモリコントローラ３は、全ての書込データの書き込みが完了するまで、このデータ転送処理を繰り返す。
【００４３】
ここで、図３を参照して、本実施例に係るメモリコントローラ３によるＤＩＭＭ５におけるデータの格納状態について詳しく説明する。図３は、実施例１におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【００４４】
図３では、３６個のＤＲＡＭ５１のそれぞれを、ＤＲＡＭ＃０〜＃３５と表している。また、各データが属するグループをＧＲＰに番号を付した符号で表し、さらに、各データが属するブロック（エラーの訂正及び検出が可能な単位）をＢＬＫに番号を付した符号で表す。例えば、ＧＲＰ０−ＢＬＫ００であれば、そこに含まれるデータは、０番のグループの００番のブロックに属する。
【００４５】
図３に示すように、ＤＲＡＭ＃０〜＃３５の０及び１番目のビットには、１〜４サイクルのデータとして、ＧＲＰ０のグループに属するデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの０及び１番目のビットに、異なるブロックが割り当てられている。さらに、ＤＲＡＭ＃０〜＃３５の２及び３番目のビットには、０及び１番目のビットとは異なるグループであるＧＲＰ１のグループに属するデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの２及び３番目のビットに、異なるブロックが割り当てられている。
【００４６】
また、ＤＲＡＭ＃０〜＃３５の０及び１番目のビットには、５〜８サイクルのデータとして、ＧＲＰ２のグループに属するデータが格納されている。さらに、ＤＲＡＭ＃０〜＃３５の２及び３番目のビットには、５〜８サイクルのデータとして、ＧＲＰ３のグループに属するデータが格納されている。
【００４７】
次に、読出データの読出処理について説明する。受信部選択回路３５は、メモリインタフェース部４を介して、読出データをＤＩＭＭ５のＤＲＡＭ５１から取得する。このとき、受信部選択回路３５は、１サイクルで各ＤＲＡＭ５１から４ビットずつ読出データを取得し、全部で１４４ビットの読出データを１サイクルで取得する。そして、受信部選択回路３５は、１４４ビットの中のＤＲＡＭ５１の０及び１番目のビットから読み出した読出データを全て読出データ受信部３６ａに格納したか否かを判定する。
【００４８】
読出データ受信部３６ａに格納する読出データが残っている場合、受信部選択回路３５は、ＤＲＡＭ５１の０及び１番目のビットから読み出した読出データを読出データ受信部３６ａへ出力する。
【００４９】
次に、読出データ受信部３６ａへ読出データを全て格納した場合、受信部選択回路３５は、ＤＲＡＭ５１の２及び３番目のビットから読み出した読出データを全て読出データ受信部３６ｂへ出力する。読出データ受信部３６ｂへの読出データの格納が完了すると、受信部選択回路３５は、読出データの読み出しの２サイクル目を行う。
【００５０】
受信部選択回路３５は、８サイクル分のデータを出力するまで、データの読み出し及び出力を繰り返す。
【００５１】
読出データ受信部３６ａは、読出データの入力を受信部選択回路３５から受ける。読出データ受信部３６ａは、１つのグループに含まれる２８８ビットの読出データ全てが格納されるまで待機する。そして、１つのグループの２８８ビットの読出データの格納が完了すると、読出データ受信部３６ａは、格納が完了したグループの読出データをエラー制御部３７ａへ出力する。
【００５２】
読出データ受信部３６ｂは、読出データの入力を受信部選択回路３５から受ける。読出データ受信部３６ｂは、１つのグループに含まれる２８８ビットの読出データ全てが格納されるまで待機する。そして、１つのグループの２８８ビットの読出データの格納が完了すると、読出データ受信部３６ｂは、格納が完了したグループの読出データをエラー制御部３７ｂへ出力する。
【００５３】
エラー制御部３７ａは、１つのグループに含まれる２８８ビットの読出データの入力を読出データ受信部３６ａから受ける。そして、エラー制御部３７ａは、受信した読出データのチェックビットから２４ビットの誤り訂正符号を取得する。そして、エラー制御部３７ａは、取得した誤り訂正符号を用いて、残りの２６４ビットの読出データのエラー検出を行う。エラー制御部３７ａは、１つのグループに属するデータに対して、１つのＤＲＡＭ５１の２ビット以下のエラーの訂正、又は、２つのＤＲＡＭ５１におけるそれぞれの２ビット以下のエラーの検出が可能である。
【００５４】
エラーが検出されなければ、エラー制御部３７ａは、受信した読出データを送出データ選択回路３８へ出力する。
【００５５】
これに対して、検出したエラーが１つのＤＲＡＭ５１の２ビット以下の故障であれば、エラー制御部３７ａは、読出データのエラー訂正を行う。そして、エラー制御部３７ａは、エラー訂正を行った読出データを送出データ選択回路３８へ出力する。
【００５６】
また、検出したエラーが２つのＤＲＡＭ５１におけるそれぞれ２ビット以下の故障の場合、エラー制御部３７ａは、検出したエラーを送出データ選択回路３８へ通知する。
【００５７】
エラー制御部３７ｂは、１つのグループの２８８ビットの読出データの入力を読出データ受信部３６ｂから受ける。そして、エラー制御部３７ｂは、受信した読出データのチェックビットから２４ビットの誤り訂正符号を取得する。そして、エラー制御部３７ｂは、取得した誤り訂正符号を用いて、残りの２６４ビットの読出データのエラー検出を行う。エラー制御部３７ｂは、１つのＤＲＡＭ５１の２ビット以下の故障、又は、２つのＤＲＡＭ５１におけるそれぞれの２ビット以下の故障を検出する。
【００５８】
エラーが検出されなければ、エラー制御部３７ｂは、受信した読出データを送出データ選択回路３８へ出力する。
【００５９】
これに対して、検出したエラーが１つのＤＲＡＭ５１の２ビット以下の故障であれば、エラー制御部３７ｂは、読出データのエラー訂正を行う。そして、エラー制御部３７ｂは、エラー訂正を行った読出データを送出データ選択回路３８へ出力する。
【００６０】
また、検出したエラーが２つのＤＲＡＭ５１におけるそれぞれ２ビット以下の故障の場合、エラー制御部３７ｂは、検出したエラーを送出データ選択回路３８へ通知する。
【００６１】
ここで、エラー制御部３７ａとエラー制御部３７ｂとはそれぞれ、ＤＲＡＭ５１において異なるビットに格納された異なるグループのデータに対してエラーチェックをそれぞれ独立して行う。すなわち、エラー制御部３７ａ及び３８ｂがエラーを検出したビットはそれぞれ異なるビットである。そのため、エラー制御部３７ａ及び３８ｂによる、それぞれのエラー訂正及び検出の結果は重複することはない。したがって、エラー制御部３７ａ及び３８ｂは、以下のエラー訂正及び検出を実現できる。
【００６２】
ここで、図３を参照して、本実施例に係るメモリコントローラ３によるエラー訂正及び検出についてさらに説明する。
【００６３】
例えば、ＤＲＡＭ＃０の０番目のビットでエラーが発生した場合で説明する。ＤＲＡＭ＃０の０番目のビットに格納されるデータは、区画５０１で示されるようにＧＲＰ０−ＢＬＫ００に属する。この場合、ＧＲＰ０のグループにおいて１つのブロックで１ビットのエラーが発生したので、エラー制御部３７ａにより、エラー訂正が行われる。
【００６４】
ＤＲＡＭ＃０の０番目のビットでのエラーに加えて、ＤＲＡＭ＃０の１番目のビットでエラーが発生した場合について説明する。ＤＲＡＭ＃０の１番目のビットに格納されるデータは、区画５０１で示されるようにＧＲＰ０−ＢＬＫ００に属する。この場合、ＧＲＰ０のグループにおいて１つのブロックで２ビットのエラーが発生したので、エラー制御部３７ａにより、エラー訂正が行われる。
【００６５】
また、ＤＲＡＭ＃０の２及び３番目のビットにおいてエラーが発生した場合について説明する。ＤＲＡＭ＃０の２及び３番目のビットに格納されたデータは、区画５０２に示されるようにＧＲＰ１−ＢＬＫ００に属する。すなわち、ＤＲＡＭ＃０の２及び３番目のビットに格納されたデータは、ＤＲＡＭ＃０の０及び１番目のビットとは異なるグループに属する。そのため、ＤＲＡＭ＃０の２及び３番目のビットに格納されたデータについても、０及び１番目のビットとは独立してエラー制御部３７ｂにより０及び１番目のビットと同様にエラー訂正が行われる。したがって、ＤＲＡＭ＃０の０〜３番目のビットの全てでエラーが発生しても、エラー制御部３７ａ及び３７ｂによりエラー訂正が行われる。
【００６６】
また、ＤＲＡＭ＃０の０及び１番目のビット、並びに、ＤＲＡＭ＃１の２及び３番目のビットでエラーが発生した場合について説明する。ＤＲＡＭ＃１の２及び３番目のビットに格納されるデータは、区画５０４で示されるようにＧＲＰ１−ＢＬＫ０１に属する。すなわち、ＤＲＡＭ＃１の２及び３番目のビットについては、ＤＲＡＭ＃０の２及び３番目のビットに対するエラー訂正と同様の処理が行われる。そこで、ＧＲＰ０のグループにおける１つのブロックでの２ビット以下のエラーについては、エラー制御部３７ａにより、エラー訂正が行われる。また、ＧＲＰ１のグループにおける１つのブロックでの２ビット以下のエラーについては、エラー制御部３７ｂにより、エラー訂正が行われる。したがって、ＤＲＡＭ＃０の０及び１番目のビットにおける２ビット以下のエラー及びＤＲＡＭ＃１の２及び３番目のビットにおける２ビット以下のエラーの発生が重なっても、メモリコントローラ３は、それぞれのエラーを訂正することが可能である。
【００６７】
これに対して、ＤＲＡＭ＃０の０及び１番目のビットのエラーに加えて、ＤＲＡＭ＃１の０及び１番目のビットでエラーが発生した場合について説明する。ＤＲＡＭ＃１の０及び１番目のビットに格納されるデータは、区画５０３で示されるようにＧＲＰ０−ＢＬＫ０１に属する。すなわち、ＤＲＡＭ＃０の０及び１番目のビットのデータ及びＤＲＡＭ＃１の０及び１番目のビットのデータは、いずれもＧＲＰ０のグループに属し、且つ、それぞれが異なるブロックに属する。この場合、同一グループの２つの異なるブロックでエラーが発生している。したがって、この場合は、エラー制御部３７ａは、エラーを検出することはできるが訂正することはできない。
【００６８】
また、エラー制御部３７ａ及び３７ｂでは、エラー検出はそれぞれ独立して行われる。そのため、２つのＤＲＡＭ５１のＧＲＰ０に属するデータを格納するビットのエラーの検出及び２つのＤＲＡＭ５１のＧＲＰ１に属するデータを格納するビットのエラーの検出が並行して可能である。例えば、ＤＲＡＭ＃３３及び＃３４の２及び３番目のビットに格納されたデータは、区画５０６及び５０８に示すように、ＧＲＰ１のグループに属する。したがって、ＤＲＡＭ＃０及び＃１の０及び１番目のビットのエラー、並びに、ＤＲＡＭ＃３３及び＃３４の２及び３番目のビットのエラーが重ねて起こっても、メモリコントローラ３は、エラーを検出することができる。
【００６９】
これに対して、例えば、ＤＲＡＭ＃３３及び＃３４の０及び１番目のビットに格納されたデータは、区画５０５及び５０７に示すように、ＧＲＰ０のグループに属する。そのため、ＤＲＡＭ＃０及び＃１の０及び１番目のビットでエラーが発生した状態で、ＤＲＡＭ＃３３又は＃３４の０及び１番目のビットにエラーが発生した場合、同一グループの３つ以上のブロックでエラーが発生している。そのため、この場合は、エラー制御部３７ａは、エラーの検出ができない。
【００７０】
以上をまとめると、本実施例に係るメモリコントローラ３では、１つのＤＲＡＭ５１の４ビットのエラーの訂正が行われる。また、２つのＤＲＡＭ５１において、故障したビットに格納されたデータが属するグループが異なる場合、それぞれの２ビット以下のエラーの訂正が行われる。ただし、故障したビットに格納されたデータが属するグループが同一の場合、エラーの検出のみが行われる。また、２つのＤＲＡＭ５１のそれぞれの４ビットの故障の検出が行われる。また、故障したビットに格納されたデータの属するグループが３つ以上重ならなければ、最大４つのＤＲＡＭ５１の２ビット以下のエラーの検出が行われる。
【００７１】
送信データ選択回路３８は、エラー制御部３７ａ又は３７ｂからデータを受信すると、受信したデータを調停部２２へ送出する。また、送信データ選択回路３８は、エラー制御部３７ａ又は３７ｂからエラー発生の通知を受信した場合、ＣＰＵ１にエラー発生を通知する。
【００７２】
次に、図４を参照して、本実施例に係るメモリコントローラ３による書込データのＤＩＭＭ５への書込処理の流れについて説明する。図４は、実施例１に係るメモリコントローラによる書込データのＤＩＭＭへの書込処理のフローチャートである。
【００７３】
受信部選択回路３１は、書込データを調停部２２から受信する（ステップＳ１０１）。
【００７４】
受信部選択回路３１は、書込データ受信部３２ａに書込データ格納済みか否かを判定する（ステップＳ１０２）。書込データ受信部３２ａに書込データが格納済みでない場合（ステップＳ１０２：否定）、受信部選択回路３１は、受信した書込データを書込データ受信部３２ａに格納する（ステップＳ１０３）。その後、受信部選択回路３１は、ステップＳ１０１に戻る。
【００７５】
これに対して、書込データ受信部３２ａに書込データが格納済みである場合（ステップＳ１０２：肯定）、受信部選択回路３１は、受信した書込データを書込データ受信部３２ｂに格納する（ステップＳ１０４）。書込データ受信部３２ａ及び３２ｂは、データの格納が完了すると、書込データをそれぞれチェックビット生成部３３ａ及び３３ｂへ出力する。
【００７６】
チェックビット生成部３３ａ及び３３ｂは、受信した書込データから誤り訂正符号を生成し、生成した誤り訂正符号を書込データに付加する（ステップＳ１０５）。
【００７７】
書込データ選択回路３４は、チェックビット生成部３３ａ及び３３ｂが保持する書込データの中からＤＩＭＭ５に書き込む書込データを選択する（ステップＳ１０６）。
【００７８】
次に、書込データ選択回路３４は、チェックビット生成部３３ａの書込データを選択したか否かを判定する（ステップＳ１０７）。チェックビット生成部３３ａの書込データを選択した場合（ステップＳ１０７：肯定）、書込データ選択回路３４は、各ＤＲＡＭ５１の０及び１番目のビットを書き込み先として選択する（ステップＳ１０８）。
【００７９】
これに対して、チェックビット生成部３３ｂの書込データを選択した場合（ステップＳ１０７：否定）、書込データ選択回路３４は、各ＤＲＡＭ５１の２及び３番目のビットを書き込み先として選択する（ステップＳ１０９）。
【００８０】
そして、書込データ選択回路３４は、各ＤＲＡＭ５１の選択したビットへ書込データを書き込む（ステップＳ１１０）。
【００８１】
次に、書込データ選択回路３４は、４サイクル分のデータの書き込みを完了したか否かを判定する（ステップＳ１１１）。４サイクル分のデータの書き込みを完了していない場合（ステップＳ１１１：否定）、書込データ選択回路３４は、ステップＳ１０６へ戻る。
【００８２】
これに対して、４サイクル分のデータの書き込みを完了した場合（ステップＳ１１１：肯定）、受信部選択回路３１は、書込データの書き込みが全て完了したか否かを判定する（ステップＳ１１２）。すなわち、受信部選択回路３１は、８サイクル分の書込データの書き込みを行ったかを判定する。書き込んでいない書込データが残っている場合（ステップＳ１１２：否定）、受信部選択回路３１は、ステップＳ１０１に戻る。
【００８３】
一方、書込データの書き込みが全て完了した場合（ステップＳ１１２：肯定）、受信部選択回路３１〜書込データ選択回路３４は、書込処理を終了する。ここで、図４のフローチャートは、１回のバースト転送における書込処理を示しており、指定された書込データの全てをＤＩＭＭ５に書き込むには、メモリコントローラ３は、図４のフローの処理を書込データがなくなるまで繰り返す。
【００８４】
次に、図５を参照して、本実施例に係るメモリコントローラ３による読出データのＤＩＭＭ５からの読出処理の流れについて説明する。図５は、実施例１に係るメモリコントローラによる読出データのＤＩＭＭからの読出処理のフローチャートである。
【００８５】
受信部選択回路３５は、１サイクル分の読出データをＤＩＭＭ５のＤＲＡＭ５１から受信する（ステップＳ２０１）。
【００８６】
次に、受信部選択回路３５は、読出データ受信部３６ａにデータを格納済みか否か、すなわち、ＤＲＡＭ５１の０及び１番目のビットに格納されていた読出データを読出データ受信部３６ａに全て格納したか否かを判定する（ステップＳ２０２）。読出データ受信部３６ａに読出データが格納済みでない場合（ステップＳ２０２：否定）、受信部選択回路３５は、ＤＲＡＭ５１の０及び１番目のビットに格納されていた読出データを読出データ受信部３６ａに格納する（ステップＳ２０３）。そして、受信部選択回路３５は、ステップＳ２０２へ戻る。
【００８７】
これに対して、読出データ受信部３６ａに読出データが格納済みである場合（ステップＳ２０２：肯定）、受信部選択回路３５は、ＤＲＡＭ５１の２及び３番目のビットに格納されていた読出データを読出データ受信部３６ｂに格納する（ステップＳ２０４）。
【００８８】
そして、読出データ受信部３６ａ及び３６ｂは、それぞれ４サイクル分の読出データの格納が完了したか否かを判定する（ステップＳ２０５）。ここでの説明では、４サイクルで２つのグループのデータを読み出す場合で説明する。４サイクル分の読出データの格納が完了していない場合（ステップＳ２０５：否定）、受信部選択回路３５は、ステップＳ２０１に戻る。
【００８９】
これに対して、４サイクル分の読出データの格納が完了した場合（ステップＳ２０５：肯定）、読出データ受信部３６ａ及び３６ｂは、それぞれエラー制御部３７ａ及び３７ｂに読出データを出力する。エラー制御部３７ａ及び３７ｂは、読出データの入力をそれぞれ読出データ受信部３６ａ及び３６ｂから受ける。そして、エラー制御部３７ａ及び３７ｂは、受信した読出データに付加された誤り訂正符号を用いて、エラー訂正及び検出を行う（ステップＳ２０６）。
【００９０】
送出データ選択回路３８は、エラー制御部３７ａのデータを送出済みか否かを判定する（ステップＳ２０７）。エラー制御部３７ａのデータが送出済みでない場合（ステップＳ２０７：否定）、送出データ選択回路３８は、読出データをエラー制御部３７ａから取得し、取得した読出データを調停部２２へ送出する（ステップＳ２０８）。その後、送出データ選択回路３８は、ステップＳ２０７へ戻る。
【００９１】
これに対して、エラー制御部３７ａのデータが送出済みである場合（ステップＳ２０７：肯定）、送出データ選択回路３８は、読出データをエラー制御部３７ｂから取得し、取得した読出データを調停部２２へ送出する（ステップＳ２０９）。
【００９２】
次に、受信部選択回路３５は、読出データの読み出しが全て完了したか否か、すなわち、８サイクル分のデータの読み出しが完了したか否かを判定する（ステップＳ２１０）。読み出していない読出データが残っている場合（ステップＳ２１０：否定）、受信部選択回路３５は、ステップＳ２０１へ戻る。
【００９３】
一方、読出データの読み出しが全て完了した場合（ステップＳ２１０：肯定）、受信部選択回路３５〜送出データ選択回路３８は、読出処理を終了する。
【００９４】
以上に説明したように、本実施例に係るメモリコントローラは、１つのＤＲＡＭの異なるビットに、異なるＥＣＣ単位に属するデータを格納する。これにより、２つのＤＲＡＭにおいて２ビット以下の故障が発生してもエラー訂正を行うことができる。また、４つのＤＲＡＭにおいて２ビット以下の故障が発生してもエラー検出を行うことができる。
【００９５】
また、本実施例に係るメモリコントローラは、チェック範囲を広くするためにチェックビットのサイズを大きくすることは行っていない。したがって、書き込みデータ量を減らさずにデータの訂正及び検出可能な範囲を大きくする演算処理装置、メモリ制御装置及び演算処理装置の制御方法を提供する。
【００９６】
（変形例）
次に、実施例１の変形例について説明する。実施例１では、各ＤＲＡＭ５１の０及び１番目のビットに同じグループに属するデータを格納し、２及び３番目のビットに同じグループに属するデータを格納した。ただし、データの格納位置はこれに限らず、１つのＤＲＡＭ５１の２つのビットに同じグループに属するデータを格納すればよい。
【００９７】
本変形例に係るメモリコントローラ３は、例えば、図６に示すように、ＤＲＡＭ５１の０及び２番目のビットに同じグループに属するデータを格納し、１及び３番目のビットに同じグループに属するデータを格納する。図６は、実施例１の変形例におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【００９８】
図６のようにデータを格納しても、１つのＤＲＡＭ５１において２つのグループに属するデータが格納されている。すなわち、０及び２番目のビットに格納されたデータは、ＧＲＰ０のグループにおけるＥＣＣ機能によりエラー訂正及び検出が行われ、１及び３番目のビットに格納されたデータは、ＧＲＰ１のグループにおけるＥＣＣ機能によりエラー訂正及び検出が行われる。
【００９９】
したがって、図６のように１つのＤＲＡＭの２つのビットに同じグループに属するデータを格納すれば、実施例１と同様に、２つのＤＲＡＭにおいて２ビット以下の故障が発生してもエラー訂正を行うことができる。また、４つのＤＲＡＭにおいて２ビット以下の故障が発生してもエラー検出を行うことができる。
【０１００】
さらに、実施例１及び変形例では、全てのＤＲＡＭ５１の同じビットに同じグループに属するデータを格納したが、データの格納位置はこれに限らない。例えば、以下のように各ＤＩＡＭの異なるビットに同じグループのデータを格納してもよい。すなわち、図６のＤＲＡＭ＃０には、０及び１番目のビットにＧＲＰ０のグループに属するデータを格納し、２及び３番目のビットにＧＲＰ１のグループに属するデータを格納する。また、ＤＲＡＭ＃１には、０及び２番目のビットにＧＲＰ０のグループに属するデータを格納し、１及び３番目のビットにＧＲＰ１のグループに属するデータを格納する。このように、ＤＲＡＭ毎に異なるビットに同じグループに属するデータを格納しても、同様にエラー訂正及び検出を行うことができる。
【実施例２】
【０１０１】
図７は、実施例２に係るメモリコントローラのブロック図である。本実施例に係るメモリコントローラは、エラー制御部３７が１つにまとめられたことが実施例１と異なる。以下では、実施例１と同様の各部の動作については説明を省略する。
【０１０２】
本実施例のメモリコントローラ３は、書込データの前半の２サイクル分の２６４ビットのデータをＧＰＲ０又は２に割り当て、後半の２サイクル分の２６４ビットのデータをＧＰＲ１又は３に割り当てる。さらに、キャッシュ制御部２とメモリコントローラ３との間の１サイクル毎のデータの送受信単位が２６４ビット以下である。
【０１０３】
この場合に、図７に示すように、１つのエラー制御部３７で、各データに対するエラー訂正及び検出を管理することができる。
【０１０４】
読出データ受信部３６ａ及び３６ｂは、１サイクル毎に７２ビットのデータの入力を受信部選択回路３５から受ける。そして、読出データ受信部３６ａ及び３６ｂは、２８８ビット溜まるまで読出データを保持する。
【０１０５】
送出データ選択回路３８は、読出データ受信部３６ａ及び３６ｂに２８８ビットの読出データが溜まると、読出データ受信部３６ａのデータの送出が完了したか否かを判定する。読出データ受信部３６ａのデータの送出が完了していなければ、送出データ選択回路３８は、読出データ受信部３６ａからデータを取得し、エラー制御部３７へ送信する。
【０１０６】
また、読出データ受信部３６ａのデータの送出が完了していれば、送出データ選択回路３８は、読出データ受信部３６ｂからデータを取得し、エラー制御部３７へ出力する。
【０１０７】
エラー制御部３７は、読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、受信した読出データの誤り訂正符号を用いてエラー訂正及び検出を行い、エラーが無いもしくは訂正可能であれば、調停部２２へ出力する。また、訂正困難なエラーを検出した場合、エラー制御部３７は、ＣＰＵ１にエラーの発生を通知する。
【０１０８】
このように、調停部２２との間のデータのやり取りが２６４ビットである場合、エラー制御部３７は、送信の都度、２８８ビットの読出データを受信し、エラー訂正及び検出を行ってデータを送出することができる。したがって、１つのエラー制御部３７で、各グループに属するデータのエラー訂正及び検出を行うことができる。
【０１０９】
次に、図８を参照して、本実施例に係るメモリコントローラ３による読出データのＤＩＭＭ５からの読出処理の流れについて説明する。図８は、実施例２に係るメモリコントローラによる読出データのＤＩＭＭからの読出処理のフローチャートである。
【０１１０】
受信部選択回路３５は、読出データをＤＩＭＭ５のＤＲＡＭ５１から受信する（ステップＳ３０１）。
【０１１１】
次に、受信部選択回路３５は、読出データ受信部３６ａに読出データを格納済みか否か、すなわち、ＤＲＡＭ５１の０及び１番目のビットに格納されていた読出データを読出データ受信部３６ａに全て格納したか否かを判定する（ステップＳ３０２）。読出データ受信部３６ａに読出データが格納済みでない場合（ステップＳ３０２：否定）、受信部選択回路３５は、取得した読出データを読出データ受信部３６ａに格納する（ステップＳ３０３）。そして、受信部選択回路３５は、ステップＳ３０２へ戻る。
【０１１２】
これに対して、読出データ受信部３６ａに読出データが格納済みである場合（ステップＳ３０２：肯定）、受信部選択回路３５は、ＤＲＡＭ５１の２及び３番目のビットに格納されていた読出データを読出データ受信部３６ｂに格納する（ステップＳ３０４）。
【０１１３】
そして、読出データ受信部３６ａ及び３６ｂは、それぞれ４サイクル分の読出データの格納が完了したか否かを判定する（ステップＳ３０５）。ここでの説明では、４サイクルで２つのグループのデータを読み出す場合で説明する。４サイクル分の読出データの格納が完了していない場合（ステップＳ３０５：否定）、受信部選択回路３５は、ステップＳ３０１に戻る。
【０１１４】
これに対して、４サイクル分の読出データの格納が完了した場合（ステップＳ３０５：肯定）、送出データ選択回路３８は、読出データ受信部３６ａのデータを送出済みか否かを判定する（ステップＳ３０６）。読出データ受信部３６ａのデータが送出済みでない場合（ステップＳ３０６：否定）、送出データ選択回路３８は、読出データを読出データ受信部３６ａから取得する（ステップＳ３０７）。そして、送出データ選択回路３８は、取得した読出データをエラー制御部３７へ出力する。
【０１１５】
一方、読出データ受信部３６ａのデータが送出済みである場合（ステップＳ３０６：肯定）、送出データ選択回路３８は、読出データを読出データ受信部３６ｂから取得する（ステップＳ３０８）。そして、送出データ選択回路３８は、取得した読出データをエラー制御部３７へ出力する。
【０１１６】
エラー制御部３７は、読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、受信した読出データに付加された誤り訂正符号を用いて、エラー訂正及び検出を行う（ステップＳ３０９）。
【０１１７】
そして、エラー制御部３７は、エラー訂正及び検出を行ったデータを調停部２２へ送出する（ステップＳ３１０）。
【０１１８】
次に、送出データ選択回路３８は、読出データ受信部３６ａ及び３６ｂ双方のデータを送出済みか否かを判定する（ステップＳ３１１）。送出していないデータが残っている場合（ステップＳ３１１：否定）、送出データ選択回路３８は、ステップＳ３０６へ戻る。
【０１１９】
これに対して、読出データ受信部３６ａ及び３６ｂ双方のデータを送出済みである場合（ステップＳ３１１：肯定）、受信部選択回路３５は、読出データの読み出しが全て完了したか否か、すなわち、８サイクル分のデータの読み出しが完了したかを判定する（ステップＳ３１２）。読み出していない読出データが残っている場合（ステップＳ３１２：否定）、受信部選択回路３５は、ステップＳ３０１へ戻る。
【０１２０】
一方、読出データの読み出しが全て完了した場合（ステップＳ３１２：肯定）、受信部選択回路３５〜送出データ選択回路３８は、読出処理を終了する。
【０１２１】
以上に説明したように、本実施例に係るメモリコントローラは、１つのエラー制御部により全ての読出データのエラー訂正及び検出を行う。これにより、回路規模の大きいエラー制御部の個数を抑えることができ、回路規模の増加を軽減することができる。
【実施例３】
【０１２２】
図９は、実施例３に係るメモリコントローラのブロック図である。本実施例に係るメモリコントローラは、１つのＤＲＡＭの異なる４つのビットそれぞれに異なるグループに属するデータを格納することが実施例１と異なる。以下では、実施例１と同様の各部の動作については説明を省略する。
【０１２３】
本実施例に係るメモリコントローラ３は、書込データ受信部３２ａ〜３２ｄ、チェックビット生成部３３ａ〜３３ｄ、読出データ受信部３６ａ〜３６ｄ及びエラー制御部３７ａ〜３７ｄを有する。
【０１２４】
受信部選択回路３１は、調停部２２から受信した書込データのうち２６４ビットのデータを書込データ受信部３２ａ〜３２ｄのそれぞれに格納する。
【０１２５】
書込データ受信部３２ａ〜３２ｄは、それぞれに書込データの格納が完了した後、保持する書込データをそれぞれチェックビット生成部３３ａ〜３３ｄへ出力する。
【０１２６】
チェックビット生成部３３ａ〜３３ｄは、それぞれ書込データ受信部３２ａ〜３３ｄから読出データの入力を受ける。そして、チェックビット生成部３３ａ〜３３ｄは、２４ビットの誤り訂正符号を生成し、生成した誤り訂正符号を付加して２８８ビットの書込データを生成する。
【０１２７】
チェックビット生成部３３ａ〜３３ｄによる誤り訂正符号の付加が終わると、書込データ選択回路３４は、チェックビット生成部３３ａ〜３３ｄのそれぞれから３６ビットの書込データを取得する。
【０１２８】
そして、書込データ選択回路３４は、チェックビット生成部３３ａから取得した書込データを各ＤＲＡＭ５１の０番目のビットに格納する。また、書込データ選択回路３４は、チェックビット生成部３３ｂから取得した書込データを各ＤＲＡＭ５１の１番目のビットに格納する。また、書込データ選択回路３４は、チェックビット生成部３３ｃから取得した書込データを各ＤＲＡＭ５１の２番目のビットに格納する。また、書込データ選択回路３４は、チェックビット生成部３３ｄから取得した書込データを各ＤＲＡＭ５１の３番目のビットに格納する。書込データ選択回路３４は、これらの書込データの格納を１サイクルで行う。
【０１２９】
そして、書込データ選択回路３４は、チェックビット生成部３３ａ〜３３ｄからの書込データの取得及び取得した書込データの格納を８回繰り返す、８サイクルのバースト転送を行う。これにより、書込データ選択回路３４は、各ＤＲＡＭ５１の各ビットに、１つのグループに属する８ビットの書込データを格納する。
【０１３０】
ここで、図１０を参照して、本実施例に係るメモリコントローラ３によるＤＩＭＭ５におけるデータの格納状態について説明する。図１０は、実施例３におけるＤＩＭＭのデータの格納状態の一例を表す図である。
【０１３１】
図１０に示すように、ＤＲＡＭ＃０〜＃３５の０番目のビットには、ＧＲＰ０のグループに属する８ビットのデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの０番目のビットに、異なるブロックが割り当てられている。また、ＤＲＡＭ＃０〜＃３５の１番目のビットには、ＧＲＰ１のグループに属するデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの１番目のビットに、異なるブロックが割り当てられている。また、ＤＲＡＭ＃０〜＃３５の２番目のビットには、ＧＲＰ２のグループに属するデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの２番目のビットに、異なるブロックが割り当てられている。また、ＤＲＡＭ＃０〜＃３５の３番目のビットには、ＧＲＰ３のグループに属するデータが格納されている。そして、ＤＲＡＭ＃０〜＃３５のそれぞれの３番目のビットに、異なるブロックが割り当てられている。
【０１３２】
受信部選択回路３５は、１サイクルで、各ＤＲＡＭ５１から４ビットずつ全部で１４４ビットの読出データの読み出しを行う。そして、受信部選択回路３５は、読み出した読出データの内、ＧＲＰ０に属するデータを読出データ受信部３６ａに出力する。また、受信部選択回路３５は、読み出した読出データの内、ＧＲＰ１に属するデータを読出データ受信部３６ｂに出力する。また、受信部選択回路３５は、読み出した読出データの内、ＧＲＰ２に属するデータを読出データ受信部３６ｃに出力する。また、受信部選択回路３５は、読み出した読出データの内、ＧＲＰ３に属するデータを読出データ受信部３６ｄに出力する。受信部選択回路３５は、読出データの読み出し及び出力を８サイクル行う。
【０１３３】
読出データ受信部３６ａ〜３６ｄは、読出データが２８８ビットになるまでデータを保持する。なぜなら、ＥＣＣ単位が２８８ビットであり、１つのグループの全てのデータがそろうことで、次のエラー制御部３７ａ〜３７ｄにおいてエラー訂正及び検出が行えるからである。
【０１３４】
そして、読出データ受信部３６ａ〜３６ｄは、読出データが２８８ビットになると、読出データをそれぞれエラー制御部３７ａ〜３７ｄへ送出する。
【０１３５】
エラー制御部３７ａ〜３７ｄは、それぞれ同じグループの２８８ビットのデータの入力を読出データ受信部３６ａ〜３６ｄから受ける。そして、エラー制御部３７ａ〜３７ｄは、受信した読出データのエラー訂正及び検出を行う。
【０１３６】
ここで、図１０を参照して、本実施例におけるエラー制御部３７ａ〜３７ｄによるエラー訂正及び検出について説明する。エラー制御部３７ａ〜３７ｄは、それぞれ異なるグループに属するデータのエラー訂正及び検出を行う。すなわち、エラー制御部３７ａ〜３７ｄは、それぞれ独立してエラーチェックを行う。したがって、エラー制御部３７ａ〜３７ｄは、それぞれが保持する読出データにおいて、１つのＤＲＡＭ５１のエラーであれば訂正及び検出が可能である。また、エラー制御部３７ａ〜３７ｄは、それぞれが保持する読出データにおいて、２つのＤＲＡＭ５１におけるエラーであれば、検出が可能である。
【０１３７】
すなわち、メモリコントローラ３は、４つのＤＲＡＭ５１において異なるグループのデータを格納する１ビットずつの故障が発生した場合、エラー訂正が可能である。すなわち、１つのＤＲＡＭ５１の故障であれば４ビットの故障まで訂正できる。
【０１３８】
さらに、グループが異なる１ビットの故障であれば、どのＤＲＡＭ５１で故障が発生しても、メモリコントローラ３は、エラー訂正が可能である。例えば、メモリコントローラ３は、２つのＤＲＡＭ５１において異なるグループに属するデータを格納する２ビットが故障し、且つ故障したＤＲＡＭ５１間で故障したビットに格納されるデータの属するグループが異なる場合、エラー訂正が可能である。
【０１３９】
また、２つのＤＲＡＭ５１であれば、最大それぞれで４ビットの故障が発生した場合にも、メモリコントローラ３は、エラー検出を行うことができる。
【０１４０】
また、メモリコントローラ３は、２つのＤＲＡＭ５１の組において同じグループのデータを格納する１ビットの故障が、４つの異なるＤＲＡＭ５１の組で発生した場合、エラー検出が可能である。すなわち、本実施例に係るメモリコントローラ３は、最大８個のＤＲＡＭ５１の１ビットのエラー検出が可能である。
【０１４１】
さらに、１つのＤＲＡＭ５１で２つのビットが故障し、それが４つのＤＲＡＭ５１でグループが３つ以上重ならないように発生した場合、メモリコントローラ３は、エラー検出が可能である。すなわち、本実施例に係るメモリコントローラ３は、最大４つのＤＲＡＭ５１のそれぞれが２ビットずつ故障した場合にもエラーの検出が可能である。
【０１４２】
送出データ選択回路３８は、エラー制御部３７ａ〜３７ｄのいずれかを選択し、読出データを取得する。そして、送出データ選択回路３８は、取得した読出データを調停部２２へ出力する。ここで、送出データ選択回路３８によるデータの選択及び送出の順番は特に制限はない。
【０１４３】
以上に説明したように、本実施例に係るメモリコントローラは、最大４つのＤＲＡＭの１ビットのエラーの訂正が可能である。また、本実施例に係るメモリコントローラは、最大４つのＤＲＡＭの２ビットのエラー検出が可能である。さらに、本実施例に係るメモリコントローラは、最大８つのＤＲＡＭの１ビットのエラー検出が可能である。このように、本実施例に係るメモリコントローラは、広い範囲のエラーの訂正及び検出を行うことができる。さらに、本実施例に係るメモリコントローラは、頻度の高い１ビットのエラーが発生した場合のシステムの安定性を向上させることができる。
【実施例４】
【０１４４】
図１１は、実施例４に係るメモリコントローラのブロック図である。本実施例に係るメモリコントローラは、エラー制御部が１つにまとめられたことが実施例３と異なる。以下では、実施例３と同様の各部の動作については説明を省略する。
【０１４５】
本実施例のメモリコントローラ３は、キャッシュ制御部２とメモリコントローラ３との間の１サイクル毎のデータの送受信単位が２６４ビット以下である。この場合に、図１１に示すように、１つのエラー制御部３７で、各データに対するエラー訂正及び検出を管理することができる。
【０１４６】
例えば、送出データ選択回路３８は、読出データ受信部３６ａから読出データを取得し、エラー制御部３７へ出力する。読出データ受信部３６ａから取得した読出データがエラー制御部３７から送出されると、送出データ選択回路３８は、読出データ受信部３６ｂから読出データを取得し、エラー制御部３７へ出力する。読出データ受信部３６ｂから取得した読出データがエラー制御部３７から送出されると、送出データ選択回路３８は、読出データ受信部３６ｃから読出データを取得し、エラー制御部３７へ出力する。読出データ受信部３６ｃから取得した読出データがエラー制御部３７から送出されると、送出データ選択回路３８は、読出データ受信部３６ｄから読出データを取得し、エラー制御部３７へ出力する。
【０１４７】
エラー制御部３７は、読出データ受信部３６ａから出力された読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、読出データ受信部３６ａから出力された読出データのエラー訂正及び検出を行う。そして、エラー制御部３７は、エラー訂正及び検出後の２６４ビットのデータを調停部２２へ送出する。
【０１４８】
次に、エラー制御部３７は、読出データ受信部３６ｂから出力された読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、読出データ受信部３６ｂから出力された読出データのエラー訂正及び検出を行う。そして、エラー制御部３７は、エラー訂正及び検出後の２６４ビットのデータを調停部２２へ送出する。
【０１４９】
次に、エラー制御部３７は、読出データ受信部３６ｃから出力された読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、読出データ受信部３６ｃから出力された読出データのエラー訂正及び検出を行う。そして、エラー制御部３７は、エラー訂正及び検出後の２６４ビットのデータを調停部２２へ送出する。
【０１５０】
次に、エラー制御部３７は、読出データ受信部３６ｄから出力された読出データの入力を送出データ選択回路３８から受ける。そして、エラー制御部３７は、読出データ受信部３６ｄから出力された読出データのエラー訂正及び検出を行う。そして、エラー制御部３７は、エラー訂正及び検出後の２６４ビットのデータを調停部２２へ送出する。
【０１５１】
これにより、エラー制御部３７は、８サイクル分の読出データの送出を完了する。
【０１５２】
以上に説明したように、本実施例に係るメモリコントローラは、実施例３の機能を有しつつ、１つのエラー制御部により全ての読出データのエラー訂正及び検出を行う。これにより、より広い範囲のエラーの訂正及び検出を実現しつつ、回路規模の大きいエラー制御部の個数を抑えることができ、回路規模の増加を軽減することができる。
【０１５３】
ここで、本実施例では、８バーストの転送である場合で説明したが、例えば、４バーストの転送のデータを２回蓄積し、８バースト分のデータとした後に、誤り訂正符号を作成付加してＤＩＭＭ５に本実施例と同様に格納してもよい。
【０１５４】
また、以上の各実施例では、４サイクル分のデータで２つのＥＣＣ単位、すなわちグループを作成する場合、及び８サイクル分のデータで４つのＥＣＣ単位を作成する場合で説明したがデータの格納方法はこれに限らない。ＥＣＣ単位に含まれる各ブロックを各ＤＲＡＭの一部のビットに格納すればよい。例えば、バースト転送における１サイクルの転送量が１４４ビットであり、ＥＣＣ単位が２８８ビットである場合、１４４ビット×ｎ（サイクル数）のデータで、２８８ビット×ｍ（ＥＣＣ単位、すなわちグループの数）を作成する。ここで、ｎは３以上の整数であり、ｍは２以上の整数であり、ｎ＞ｍを満たす。そして、作成したｍ個のＥＣＣ単位をブロックに分割して、各ＤＲＡＭに各ＥＣＣ単位のブロックが格納されるようにデータを格納すればよい。
【符号の説明】
【０１５５】
１  ＣＰＵ
２  キャッシュ制御部
３  メモリコントローラ
４  メモリインタフェース部
５  ＤＩＭＭ
６  ハードディスク
７  ネットワークインタフェース
２１  キャッシュ
２２  調停部
３１  受信回路選択部
３２ａ〜３２ｄ  書込データ受信部
３３ａ〜３３ｄ  チェックビット生成部
３４  書込データ選択回路
３５  受信部選択回路
３６ａ〜３６ｄ  読出データ受信部
３７，３７ａ〜３７ｄ  エラー制御部
３８  送出データ選択回路
５１  ＤＲＡＭ
１００  演算処理装置
２１１  キャッシュライン
【図１】
0006515555.tif 000002
【図２】
0006515555.tif 000003
【図３】
0006515555.tif 000004
【図４】
0006515555.tif 000005
【図５】
0006515555.tif 000006
【図６】
0006515555.tif 000007
【図７】
0006515555.tif 000008
【図８】
0006515555.tif 000009
【図９】
0006515555.tif 000010
【図１０】
0006515555.tif 000011
【図１１】
0006515555.tif 000012