以下に、本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置、メモリ制御装置及び演算処理装置の制御方法が限定されるものではない。
図1は、演算処理装置のブロック図である。演算処理装置100は、CPU1、キャッシュ制御部2、メモリコントローラ3、メモリインタフェース部4、DIMM5、ハードディスク6及びネットワークインタフェース7を有する。
CPU1は、演算処理部の一例である。CPU1は、DIMM5、ハードディスク6又はネットワークインタフェース7からデータを取得する。そして、CPU1は、入力されたデータを用いて演算処理を行う。その後、CPU1は、演算結果を出力する。CPU1は、キャッシュ制御部2を介してデータの入出力を行う。
DIMM5は、主記憶装置であり、記憶部の一例である。DIMM5は、複数のDRAMを有する。本実施例では、DIMM5は、36個の4ビットDRAM51を有する。すなわち、DIMM5は、1サイクルで144ビットのデータの送受信を行う。さらに、本実施例では、メモリコントローラ3は、2サイクル分のデータ、すなわち288ビットのデータをECC単位とする。そして、DIMM5に格納されるECC単位のデータのうち、264ビットが実データであり、24ビットがECCチェックビットである。これにより、DIMM5は、8ビットの単位でエラー訂正及び検出が可能となる。DRAM51は、「格納領域」の一例にあたる。
メモリインタフェース部4は、メモリコントローラ3とDIMM5との間のデータの送受信を仲介するインタフェースである。
メモリコントローラ3は、メモリ制御装置である。メモリコントローラ3は、DIMM5に対して、データの読み出し及び書き込みの制御を行う。具体的には、メモリコントローラ3は、CPU1又はハードディスク6並びにネットワークインタフェース7を含むその他のデータ出入力装置からデータを受信する。そして、メモリコントローラ3は、受信した264ビットのデータを用いて24ビットのチェックビットを生成する。そして、メモリコントローラ3は、受信した264ビットのデータに、生成した24ビットのチェックビットを付加したデータを、メモリインタフェース部4を介して、DIMM5に格納させる。本実施例では、メモリコントローラ3は、8サイクル分のデータのバースト転送を行う。
また、メモリコントローラ3は、データ読み出し命令を、例えばCPU1から受けて、DIMM5からデータを読み出す。そして、メモリコントローラ3は、読み出したデータのチェックビットを用いて読み出したデータにエラーが発生していないか否かを判定する。エラーが発生していなければ、メモリコントローラ3は、読み出したデータを出力する。一方、エラーが発生した場合、メモリコントローラ3は、発生したエラーが訂正可能であれば、エラーを訂正してデータを出力する。また、発生したエラーの訂正が困難な場合、メモリコントローラ3は、エラー発生の通知を出力する。
ハードディスク6は、補助記憶装置である。ハードディスク6は、CPU1からの指示を受けて、データを格納する。また、ハードディスク6は、CPU1からの指示を受けて、データを読み出し、出力する。
ネットワークインタフェース7は、他の演算処理装置などの外部装置との通信インタフェースである。CPU1及びメモリコントローラ3は、ネットワークインタフェース7を介して、外部装置との間でデータの送受信を行う。
次に、図2を参照して、本実施例に係るメモリコントローラ3によるDIMM5に対するデータの書き込み及び読み出しについて詳細に説明する。図2は、実施例1に係るメモリコントローラのブロック図である。以下では、CPU1から送出されたデータの書き込み、及び、CPU1によるデータの読み出しの場合を例に説明する。
キャッシュ制御部2は、キャッシュ21及び調停部22を有する。キャッシュ21は、複数のキャッシュライン211を有する。
CPU1により入力された書込データは、各キャッシュライン211に一時的に格納される。調停部22は、書込データをどのキャッシュライン211から取得するか決定する。そして、調停部22は、決定したキャッシュライン211から書込データを取得し、メモリコントローラ3の受信部選択回路31へ出力する。
また、調停部22は、読出データをメモリコントローラ3の送出データ選択回路38から取得する。そして、調停部22は、読出データを格納するキャッシュライン211を決定する。その後、調停部22は、決定したキャッシュライン211へ読出データを書き込む。
データ書き込みの場合について説明する。受信部選択回路31は、調停部22から書込データを受信する。次に、受信部選択回路31は、書込データ受信部32aにデータが格納済みか否かを判定する。ここで、書込データ受信部32aにデータが格納済みとは、書込データ受信部32aに264ビットのデータが格納されている場合を指す。
書込データ受信部32aにデータが格納済みでない場合、受信部選択回路31は、受信した書込データの264ビット分の書込データを書込データ受信部32aへ出力する。また、書込データ受信部32aにデータが格納済みである場合、受信部選択回路31は、受信した書込データの264ビット分の書込データを書込データ受信部32bへ出力する。
書込データ受信部32aは、受信部選択回路31から264ビットの書込データの受信が完了するまでデータを蓄積する。さらに、書込データ受信部32aは、書込データ受信部32bが264ビットの書込データを受信するまで待機する。そして、書込データ受信部32bが264ビットの書込データの受信を完了すると、書込データ受信部32aは、保持する264ビットの書込データをチェックビット生成部33aへ出力する。
書込データ受信部32bは、受信部選択回路31から264ビットの書込データを受信するまで待機する。そして、264ビットの書込データの受信を完了すると、書込データ受信部32bは、保持する264ビットの書込データをチェックビット生成部33bへ出力する。
チェックビット生成部33aは、264ビットの書込データの入力を書込データ受信部32aから受ける。次に、チェックビット生成部33aは、受信した264ビットの書込データから24ビットの誤り訂正符号を生成する。この誤り訂正符号は、データのエラー訂正及び検出(ECC)を行うための「エラーチェック用符号」の一例にあたる。
そして、チェックビット生成部33aは、生成した24ビットの誤り訂正符号を受信した264ビットの書込データに付加し、288ビットの書込データを生成する。このチェックビット生成部33aにより生成された288ビットの書込データが誤り訂正符号付きデータ(ECC付データ)でありECC単位のデータとなる。そして、この誤り訂正符号付きデータ(ECC付データ)が、「エラーチェック符号付データ」の一例にあたる。以下では、書込データ選択回路34によって1度に書き込まれたECC単位のデータ群をグループと呼ぶ。
チェックビット生成部33bは、264ビットの書込データの入力を書込データ受信部32bから受ける。次に、チェックビット生成部33bは、受信した264ビットの書込データから24ビットの誤り訂正符号を生成する。そして、チェックビット生成部33bは、生成した24ビットの誤り訂正符号を受信した264ビットの書込データに付加し、288ビットの書込データを生成する。このチェックビット生成部33a及び33bが、「データ生成部」の一例にあたる。
書込データ選択回路34は、チェックビット生成部33a及び33bに合わせて4サイクル分の書き込みデータ、すなわちそれぞれに288ビットのデータが蓄積するまで待機する。
そして、書込データ選択回路34は、チェックビット生成部33a又はチェックビット生成部33bを書込データの取得元として順次選択する。ここでは、書込データ選択回路34は、最初の書込データの取得元としてチェックビット生成部33aを選択し、次に書込データの取得元としてチェックビット生成部33bを選択する場合で説明する。
書込データ選択回路34は、最初に選択したチェックビット生成部33aから72ビットの書込データを取得する。次に、書込データ選択回路34は、次に選択したチェックビット生成部33bから72ビットの書込データを取得する。そして、書込データ選択回路34は、取得したデータを合わせた144ビットの書込データを、メモリインタフェース部4を介して、DIMM5に書き込む。具体的には、書込データ選択回路34は、チェックビット生成部33aから受信した書込データを各DRAM51の0及び1ビット番目のビットに書き込む。また、書込データ選択回路34は、チェックビット生成部33bから受信した書込データを各DRAM51の2及び3番目のビットに書き込む。この144ビットの書込データの書き込みが、1サイクルの書き込みである。
書込データ選択回路34は、上述した書込データのDIMM5への書き込み処理をチェックビット生成部33a及び32bのそれぞれが保持する288ビットのデータがなくなるまで繰り返す。すなわち、書込データ選択回路34は、1サイクルで144ビットのデータをDIMM5に書き込むので、この場合、4サイクルの書き込み処理を行うことになる。この書込データ選択回路34が、「格納制御部」の一例にあたる。
書込データ選択回路34による4サイクルの書込処理により、各DRAM51の0及び1ビットには、あるグループにおけるエラー訂正及び検出の単位である8ビットのブロックが格納される。また、各DRAM51の2及び3ビットには、各DRAM51の0及び1ビットに格納されたデータの属するグループとは異なるグループのエラー訂正及び検出の単位である8ビットのブロックが格納される。このように、1つのDRAM51に2つの異なるグループのブロックが格納される。すなわち、1つのグループに属するデータを分割することで生成されたブロックは、各DRAM51の一部にそれぞれ格納される。また、DRAM51の0及び1ビットが、「上位側領域」の一例にあたる。また、DRAM51の2及び3ビットが、「下位側領域」の一例にあたる。さらに、複数のグループがある場合に、各グループに属するブロック(本実施例においては2つのグループのブロック)の総称が、「分割データ」の一例にあたる。
ここで、ECC機能を用いた場合、1つのDRAM51にエラーがあれば、1つのグループにつき2ビットのエラーであれば訂正が可能である。このため、本実施例のデータ格納状態であれば、1つのDRAM51のエラーであれば、4ビットのエラーの訂正が可能である。また、2つのDRAM51が故障した場合、それぞれの故障したビットが格納するデータが属するグループが異なれば、2ビットまでの故障であれば訂正が可能である。また、最大で4つのDRAM51の2ビットの故障の検出が可能である。
図2に戻って説明を続ける。受信部選択回路31、書込データ受信部32a及び32b、チェックビット生成部33a及び33b、並びに、書込データ選択回路34は、8バースト分の書込データの格納が完了するまで上述した書込データのDIMM5への格納処理を繰り返す。具体的には、上述した書込データのDIMM5への格納処理がもう1回繰り返されることで、8バースト分の書込データの格納が完了する。これで、メモリコントローラ3は、1回のデータ転送処理を完了する。書込データがさらにある場合には、メモリコントローラ3は、全ての書込データの書き込みが完了するまで、このデータ転送処理を繰り返す。
ここで、図3を参照して、本実施例に係るメモリコントローラ3によるDIMM5におけるデータの格納状態について詳しく説明する。図3は、実施例1におけるDIMMのデータの格納状態の一例を表す図である。
図3では、36個のDRAM51のそれぞれを、DRAM#0〜#35と表している。また、各データが属するグループをGRPに番号を付した符号で表し、さらに、各データが属するブロック(エラーの訂正及び検出が可能な単位)をBLKに番号を付した符号で表す。例えば、GRP0−BLK00であれば、そこに含まれるデータは、0番のグループの00番のブロックに属する。
図3に示すように、DRAM#0〜#35の0及び1番目のビットには、1〜4サイクルのデータとして、GRP0のグループに属するデータが格納されている。そして、DRAM#0〜#35のそれぞれの0及び1番目のビットに、異なるブロックが割り当てられている。さらに、DRAM#0〜#35の2及び3番目のビットには、0及び1番目のビットとは異なるグループであるGRP1のグループに属するデータが格納されている。そして、DRAM#0〜#35のそれぞれの2及び3番目のビットに、異なるブロックが割り当てられている。
また、DRAM#0〜#35の0及び1番目のビットには、5〜8サイクルのデータとして、GRP2のグループに属するデータが格納されている。さらに、DRAM#0〜#35の2及び3番目のビットには、5〜8サイクルのデータとして、GRP3のグループに属するデータが格納されている。
次に、読出データの読出処理について説明する。受信部選択回路35は、メモリインタフェース部4を介して、読出データをDIMM5のDRAM51から取得する。このとき、受信部選択回路35は、1サイクルで各DRAM51から4ビットずつ読出データを取得し、全部で144ビットの読出データを1サイクルで取得する。そして、受信部選択回路35は、144ビットの中のDRAM51の0及び1番目のビットから読み出した読出データを全て読出データ受信部36aに格納したか否かを判定する。
読出データ受信部36aに格納する読出データが残っている場合、受信部選択回路35は、DRAM51の0及び1番目のビットから読み出した読出データを読出データ受信部36aへ出力する。
次に、読出データ受信部36aへ読出データを全て格納した場合、受信部選択回路35は、DRAM51の2及び3番目のビットから読み出した読出データを全て読出データ受信部36bへ出力する。読出データ受信部36bへの読出データの格納が完了すると、受信部選択回路35は、読出データの読み出しの2サイクル目を行う。
受信部選択回路35は、8サイクル分のデータを出力するまで、データの読み出し及び出力を繰り返す。
読出データ受信部36aは、読出データの入力を受信部選択回路35から受ける。読出データ受信部36aは、1つのグループに含まれる288ビットの読出データ全てが格納されるまで待機する。そして、1つのグループの288ビットの読出データの格納が完了すると、読出データ受信部36aは、格納が完了したグループの読出データをエラー制御部37aへ出力する。
読出データ受信部36bは、読出データの入力を受信部選択回路35から受ける。読出データ受信部36bは、1つのグループに含まれる288ビットの読出データ全てが格納されるまで待機する。そして、1つのグループの288ビットの読出データの格納が完了すると、読出データ受信部36bは、格納が完了したグループの読出データをエラー制御部37bへ出力する。
エラー制御部37aは、1つのグループに含まれる288ビットの読出データの入力を読出データ受信部36aから受ける。そして、エラー制御部37aは、受信した読出データのチェックビットから24ビットの誤り訂正符号を取得する。そして、エラー制御部37aは、取得した誤り訂正符号を用いて、残りの264ビットの読出データのエラー検出を行う。エラー制御部37aは、1つのグループに属するデータに対して、1つのDRAM51の2ビット以下のエラーの訂正、又は、2つのDRAM51におけるそれぞれの2ビット以下のエラーの検出が可能である。
エラーが検出されなければ、エラー制御部37aは、受信した読出データを送出データ選択回路38へ出力する。
これに対して、検出したエラーが1つのDRAM51の2ビット以下の故障であれば、エラー制御部37aは、読出データのエラー訂正を行う。そして、エラー制御部37aは、エラー訂正を行った読出データを送出データ選択回路38へ出力する。
また、検出したエラーが2つのDRAM51におけるそれぞれ2ビット以下の故障の場合、エラー制御部37aは、検出したエラーを送出データ選択回路38へ通知する。
エラー制御部37bは、1つのグループの288ビットの読出データの入力を読出データ受信部36bから受ける。そして、エラー制御部37bは、受信した読出データのチェックビットから24ビットの誤り訂正符号を取得する。そして、エラー制御部37bは、取得した誤り訂正符号を用いて、残りの264ビットの読出データのエラー検出を行う。エラー制御部37bは、1つのDRAM51の2ビット以下の故障、又は、2つのDRAM51におけるそれぞれの2ビット以下の故障を検出する。
エラーが検出されなければ、エラー制御部37bは、受信した読出データを送出データ選択回路38へ出力する。
これに対して、検出したエラーが1つのDRAM51の2ビット以下の故障であれば、エラー制御部37bは、読出データのエラー訂正を行う。そして、エラー制御部37bは、エラー訂正を行った読出データを送出データ選択回路38へ出力する。
また、検出したエラーが2つのDRAM51におけるそれぞれ2ビット以下の故障の場合、エラー制御部37bは、検出したエラーを送出データ選択回路38へ通知する。
ここで、エラー制御部37aとエラー制御部37bとはそれぞれ、DRAM51において異なるビットに格納された異なるグループのデータに対してエラーチェックをそれぞれ独立して行う。すなわち、エラー制御部37a及び38bがエラーを検出したビットはそれぞれ異なるビットである。そのため、エラー制御部37a及び38bによる、それぞれのエラー訂正及び検出の結果は重複することはない。したがって、エラー制御部37a及び38bは、以下のエラー訂正及び検出を実現できる。
ここで、図3を参照して、本実施例に係るメモリコントローラ3によるエラー訂正及び検出についてさらに説明する。
例えば、DRAM#0の0番目のビットでエラーが発生した場合で説明する。DRAM#0の0番目のビットに格納されるデータは、区画501で示されるようにGRP0−BLK00に属する。この場合、GRP0のグループにおいて1つのブロックで1ビットのエラーが発生したので、エラー制御部37aにより、エラー訂正が行われる。
DRAM#0の0番目のビットでのエラーに加えて、DRAM#0の1番目のビットでエラーが発生した場合について説明する。DRAM#0の1番目のビットに格納されるデータは、区画501で示されるようにGRP0−BLK00に属する。この場合、GRP0のグループにおいて1つのブロックで2ビットのエラーが発生したので、エラー制御部37aにより、エラー訂正が行われる。
また、DRAM#0の2及び3番目のビットにおいてエラーが発生した場合について説明する。DRAM#0の2及び3番目のビットに格納されたデータは、区画502に示されるようにGRP1−BLK00に属する。すなわち、DRAM#0の2及び3番目のビットに格納されたデータは、DRAM#0の0及び1番目のビットとは異なるグループに属する。そのため、DRAM#0の2及び3番目のビットに格納されたデータについても、0及び1番目のビットとは独立してエラー制御部37bにより0及び1番目のビットと同様にエラー訂正が行われる。したがって、DRAM#0の0〜3番目のビットの全てでエラーが発生しても、エラー制御部37a及び37bによりエラー訂正が行われる。
また、DRAM#0の0及び1番目のビット、並びに、DRAM#1の2及び3番目のビットでエラーが発生した場合について説明する。DRAM#1の2及び3番目のビットに格納されるデータは、区画504で示されるようにGRP1−BLK01に属する。すなわち、DRAM#1の2及び3番目のビットについては、DRAM#0の2及び3番目のビットに対するエラー訂正と同様の処理が行われる。そこで、GRP0のグループにおける1つのブロックでの2ビット以下のエラーについては、エラー制御部37aにより、エラー訂正が行われる。また、GRP1のグループにおける1つのブロックでの2ビット以下のエラーについては、エラー制御部37bにより、エラー訂正が行われる。したがって、DRAM#0の0及び1番目のビットにおける2ビット以下のエラー及びDRAM#1の2及び3番目のビットにおける2ビット以下のエラーの発生が重なっても、メモリコントローラ3は、それぞれのエラーを訂正することが可能である。
これに対して、DRAM#0の0及び1番目のビットのエラーに加えて、DRAM#1の0及び1番目のビットでエラーが発生した場合について説明する。DRAM#1の0及び1番目のビットに格納されるデータは、区画503で示されるようにGRP0−BLK01に属する。すなわち、DRAM#0の0及び1番目のビットのデータ及びDRAM#1の0及び1番目のビットのデータは、いずれもGRP0のグループに属し、且つ、それぞれが異なるブロックに属する。この場合、同一グループの2つの異なるブロックでエラーが発生している。したがって、この場合は、エラー制御部37aは、エラーを検出することはできるが訂正することはできない。
また、エラー制御部37a及び37bでは、エラー検出はそれぞれ独立して行われる。そのため、2つのDRAM51のGRP0に属するデータを格納するビットのエラーの検出及び2つのDRAM51のGRP1に属するデータを格納するビットのエラーの検出が並行して可能である。例えば、DRAM#33及び#34の2及び3番目のビットに格納されたデータは、区画506及び508に示すように、GRP1のグループに属する。したがって、DRAM#0及び#1の0及び1番目のビットのエラー、並びに、DRAM#33及び#34の2及び3番目のビットのエラーが重ねて起こっても、メモリコントローラ3は、エラーを検出することができる。
これに対して、例えば、DRAM#33及び#34の0及び1番目のビットに格納されたデータは、区画505及び507に示すように、GRP0のグループに属する。そのため、DRAM#0及び#1の0及び1番目のビットでエラーが発生した状態で、DRAM#33又は#34の0及び1番目のビットにエラーが発生した場合、同一グループの3つ以上のブロックでエラーが発生している。そのため、この場合は、エラー制御部37aは、エラーの検出ができない。
以上をまとめると、本実施例に係るメモリコントローラ3では、1つのDRAM51の4ビットのエラーの訂正が行われる。また、2つのDRAM51において、故障したビットに格納されたデータが属するグループが異なる場合、それぞれの2ビット以下のエラーの訂正が行われる。ただし、故障したビットに格納されたデータが属するグループが同一の場合、エラーの検出のみが行われる。また、2つのDRAM51のそれぞれの4ビットの故障の検出が行われる。また、故障したビットに格納されたデータの属するグループが3つ以上重ならなければ、最大4つのDRAM51の2ビット以下のエラーの検出が行われる。
送信データ選択回路38は、エラー制御部37a又は37bからデータを受信すると、受信したデータを調停部22へ送出する。また、送信データ選択回路38は、エラー制御部37a又は37bからエラー発生の通知を受信した場合、CPU1にエラー発生を通知する。
次に、図4を参照して、本実施例に係るメモリコントローラ3による書込データのDIMM5への書込処理の流れについて説明する。図4は、実施例1に係るメモリコントローラによる書込データのDIMMへの書込処理のフローチャートである。
受信部選択回路31は、書込データを調停部22から受信する(ステップS101)。
受信部選択回路31は、書込データ受信部32aに書込データ格納済みか否かを判定する(ステップS102)。書込データ受信部32aに書込データが格納済みでない場合(ステップS102:否定)、受信部選択回路31は、受信した書込データを書込データ受信部32aに格納する(ステップS103)。その後、受信部選択回路31は、ステップS101に戻る。
これに対して、書込データ受信部32aに書込データが格納済みである場合(ステップS102:肯定)、受信部選択回路31は、受信した書込データを書込データ受信部32bに格納する(ステップS104)。書込データ受信部32a及び32bは、データの格納が完了すると、書込データをそれぞれチェックビット生成部33a及び33bへ出力する。
チェックビット生成部33a及び33bは、受信した書込データから誤り訂正符号を生成し、生成した誤り訂正符号を書込データに付加する(ステップS105)。
書込データ選択回路34は、チェックビット生成部33a及び33bが保持する書込データの中からDIMM5に書き込む書込データを選択する(ステップS106)。
次に、書込データ選択回路34は、チェックビット生成部33aの書込データを選択したか否かを判定する(ステップS107)。チェックビット生成部33aの書込データを選択した場合(ステップS107:肯定)、書込データ選択回路34は、各DRAM51の0及び1番目のビットを書き込み先として選択する(ステップS108)。
これに対して、チェックビット生成部33bの書込データを選択した場合(ステップS107:否定)、書込データ選択回路34は、各DRAM51の2及び3番目のビットを書き込み先として選択する(ステップS109)。
そして、書込データ選択回路34は、各DRAM51の選択したビットへ書込データを書き込む(ステップS110)。
次に、書込データ選択回路34は、4サイクル分のデータの書き込みを完了したか否かを判定する(ステップS111)。4サイクル分のデータの書き込みを完了していない場合(ステップS111:否定)、書込データ選択回路34は、ステップS106へ戻る。
これに対して、4サイクル分のデータの書き込みを完了した場合(ステップS111:肯定)、受信部選択回路31は、書込データの書き込みが全て完了したか否かを判定する(ステップS112)。すなわち、受信部選択回路31は、8サイクル分の書込データの書き込みを行ったかを判定する。書き込んでいない書込データが残っている場合(ステップS112:否定)、受信部選択回路31は、ステップS101に戻る。
一方、書込データの書き込みが全て完了した場合(ステップS112:肯定)、受信部選択回路31〜書込データ選択回路34は、書込処理を終了する。ここで、図4のフローチャートは、1回のバースト転送における書込処理を示しており、指定された書込データの全てをDIMM5に書き込むには、メモリコントローラ3は、図4のフローの処理を書込データがなくなるまで繰り返す。
次に、図5を参照して、本実施例に係るメモリコントローラ3による読出データのDIMM5からの読出処理の流れについて説明する。図5は、実施例1に係るメモリコントローラによる読出データのDIMMからの読出処理のフローチャートである。
受信部選択回路35は、1サイクル分の読出データをDIMM5のDRAM51から受信する(ステップS201)。
次に、受信部選択回路35は、読出データ受信部36aにデータを格納済みか否か、すなわち、DRAM51の0及び1番目のビットに格納されていた読出データを読出データ受信部36aに全て格納したか否かを判定する(ステップS202)。読出データ受信部36aに読出データが格納済みでない場合(ステップS202:否定)、受信部選択回路35は、DRAM51の0及び1番目のビットに格納されていた読出データを読出データ受信部36aに格納する(ステップS203)。そして、受信部選択回路35は、ステップS202へ戻る。
これに対して、読出データ受信部36aに読出データが格納済みである場合(ステップS202:肯定)、受信部選択回路35は、DRAM51の2及び3番目のビットに格納されていた読出データを読出データ受信部36bに格納する(ステップS204)。
そして、読出データ受信部36a及び36bは、それぞれ4サイクル分の読出データの格納が完了したか否かを判定する(ステップS205)。ここでの説明では、4サイクルで2つのグループのデータを読み出す場合で説明する。4サイクル分の読出データの格納が完了していない場合(ステップS205:否定)、受信部選択回路35は、ステップS201に戻る。
これに対して、4サイクル分の読出データの格納が完了した場合(ステップS205:肯定)、読出データ受信部36a及び36bは、それぞれエラー制御部37a及び37bに読出データを出力する。エラー制御部37a及び37bは、読出データの入力をそれぞれ読出データ受信部36a及び36bから受ける。そして、エラー制御部37a及び37bは、受信した読出データに付加された誤り訂正符号を用いて、エラー訂正及び検出を行う(ステップS206)。
送出データ選択回路38は、エラー制御部37aのデータを送出済みか否かを判定する(ステップS207)。エラー制御部37aのデータが送出済みでない場合(ステップS207:否定)、送出データ選択回路38は、読出データをエラー制御部37aから取得し、取得した読出データを調停部22へ送出する(ステップS208)。その後、送出データ選択回路38は、ステップS207へ戻る。
これに対して、エラー制御部37aのデータが送出済みである場合(ステップS207:肯定)、送出データ選択回路38は、読出データをエラー制御部37bから取得し、取得した読出データを調停部22へ送出する(ステップS209)。
次に、受信部選択回路35は、読出データの読み出しが全て完了したか否か、すなわち、8サイクル分のデータの読み出しが完了したか否かを判定する(ステップS210)。読み出していない読出データが残っている場合(ステップS210:否定)、受信部選択回路35は、ステップS201へ戻る。
一方、読出データの読み出しが全て完了した場合(ステップS210:肯定)、受信部選択回路35〜送出データ選択回路38は、読出処理を終了する。
以上に説明したように、本実施例に係るメモリコントローラは、1つのDRAMの異なるビットに、異なるECC単位に属するデータを格納する。これにより、2つのDRAMにおいて2ビット以下の故障が発生してもエラー訂正を行うことができる。また、4つのDRAMにおいて2ビット以下の故障が発生してもエラー検出を行うことができる。
また、本実施例に係るメモリコントローラは、チェック範囲を広くするためにチェックビットのサイズを大きくすることは行っていない。したがって、書き込みデータ量を減らさずにデータの訂正及び検出可能な範囲を大きくする演算処理装置、メモリ制御装置及び演算処理装置の制御方法を提供する。
(変形例)
次に、実施例1の変形例について説明する。実施例1では、各DRAM51の0及び1番目のビットに同じグループに属するデータを格納し、2及び3番目のビットに同じグループに属するデータを格納した。ただし、データの格納位置はこれに限らず、1つのDRAM51の2つのビットに同じグループに属するデータを格納すればよい。
本変形例に係るメモリコントローラ3は、例えば、図6に示すように、DRAM51の0及び2番目のビットに同じグループに属するデータを格納し、1及び3番目のビットに同じグループに属するデータを格納する。図6は、実施例1の変形例におけるDIMMのデータの格納状態の一例を表す図である。
図6のようにデータを格納しても、1つのDRAM51において2つのグループに属するデータが格納されている。すなわち、0及び2番目のビットに格納されたデータは、GRP0のグループにおけるECC機能によりエラー訂正及び検出が行われ、1及び3番目のビットに格納されたデータは、GRP1のグループにおけるECC機能によりエラー訂正及び検出が行われる。
したがって、図6のように1つのDRAMの2つのビットに同じグループに属するデータを格納すれば、実施例1と同様に、2つのDRAMにおいて2ビット以下の故障が発生してもエラー訂正を行うことができる。また、4つのDRAMにおいて2ビット以下の故障が発生してもエラー検出を行うことができる。
さらに、実施例1及び変形例では、全てのDRAM51の同じビットに同じグループに属するデータを格納したが、データの格納位置はこれに限らない。例えば、以下のように各DIAMの異なるビットに同じグループのデータを格納してもよい。すなわち、図6のDRAM#0には、0及び1番目のビットにGRP0のグループに属するデータを格納し、2及び3番目のビットにGRP1のグループに属するデータを格納する。また、DRAM#1には、0及び2番目のビットにGRP0のグループに属するデータを格納し、1及び3番目のビットにGRP1のグループに属するデータを格納する。このように、DRAM毎に異なるビットに同じグループに属するデータを格納しても、同様にエラー訂正及び検出を行うことができる。
図7は、実施例2に係るメモリコントローラのブロック図である。本実施例に係るメモリコントローラは、エラー制御部37が1つにまとめられたことが実施例1と異なる。以下では、実施例1と同様の各部の動作については説明を省略する。
本実施例のメモリコントローラ3は、書込データの前半の2サイクル分の264ビットのデータをGPR0又は2に割り当て、後半の2サイクル分の264ビットのデータをGPR1又は3に割り当てる。さらに、キャッシュ制御部2とメモリコントローラ3との間の1サイクル毎のデータの送受信単位が264ビット以下である。
この場合に、図7に示すように、1つのエラー制御部37で、各データに対するエラー訂正及び検出を管理することができる。
読出データ受信部36a及び36bは、1サイクル毎に72ビットのデータの入力を受信部選択回路35から受ける。そして、読出データ受信部36a及び36bは、288ビット溜まるまで読出データを保持する。
送出データ選択回路38は、読出データ受信部36a及び36bに288ビットの読出データが溜まると、読出データ受信部36aのデータの送出が完了したか否かを判定する。読出データ受信部36aのデータの送出が完了していなければ、送出データ選択回路38は、読出データ受信部36aからデータを取得し、エラー制御部37へ送信する。
また、読出データ受信部36aのデータの送出が完了していれば、送出データ選択回路38は、読出データ受信部36bからデータを取得し、エラー制御部37へ出力する。
エラー制御部37は、読出データの入力を送出データ選択回路38から受ける。そして、エラー制御部37は、受信した読出データの誤り訂正符号を用いてエラー訂正及び検出を行い、エラーが無いもしくは訂正可能であれば、調停部22へ出力する。また、訂正困難なエラーを検出した場合、エラー制御部37は、CPU1にエラーの発生を通知する。
このように、調停部22との間のデータのやり取りが264ビットである場合、エラー制御部37は、送信の都度、288ビットの読出データを受信し、エラー訂正及び検出を行ってデータを送出することができる。したがって、1つのエラー制御部37で、各グループに属するデータのエラー訂正及び検出を行うことができる。
次に、図8を参照して、本実施例に係るメモリコントローラ3による読出データのDIMM5からの読出処理の流れについて説明する。図8は、実施例2に係るメモリコントローラによる読出データのDIMMからの読出処理のフローチャートである。
受信部選択回路35は、読出データをDIMM5のDRAM51から受信する(ステップS301)。
次に、受信部選択回路35は、読出データ受信部36aに読出データを格納済みか否か、すなわち、DRAM51の0及び1番目のビットに格納されていた読出データを読出データ受信部36aに全て格納したか否かを判定する(ステップS302)。読出データ受信部36aに読出データが格納済みでない場合(ステップS302:否定)、受信部選択回路35は、取得した読出データを読出データ受信部36aに格納する(ステップS303)。そして、受信部選択回路35は、ステップS302へ戻る。
これに対して、読出データ受信部36aに読出データが格納済みである場合(ステップS302:肯定)、受信部選択回路35は、DRAM51の2及び3番目のビットに格納されていた読出データを読出データ受信部36bに格納する(ステップS304)。
そして、読出データ受信部36a及び36bは、それぞれ4サイクル分の読出データの格納が完了したか否かを判定する(ステップS305)。ここでの説明では、4サイクルで2つのグループのデータを読み出す場合で説明する。4サイクル分の読出データの格納が完了していない場合(ステップS305:否定)、受信部選択回路35は、ステップS301に戻る。
これに対して、4サイクル分の読出データの格納が完了した場合(ステップS305:肯定)、送出データ選択回路38は、読出データ受信部36aのデータを送出済みか否かを判定する(ステップS306)。読出データ受信部36aのデータが送出済みでない場合(ステップS306:否定)、送出データ選択回路38は、読出データを読出データ受信部36aから取得する(ステップS307)。そして、送出データ選択回路38は、取得した読出データをエラー制御部37へ出力する。
一方、読出データ受信部36aのデータが送出済みである場合(ステップS306:肯定)、送出データ選択回路38は、読出データを読出データ受信部36bから取得する(ステップS308)。そして、送出データ選択回路38は、取得した読出データをエラー制御部37へ出力する。
エラー制御部37は、読出データの入力を送出データ選択回路38から受ける。そして、エラー制御部37は、受信した読出データに付加された誤り訂正符号を用いて、エラー訂正及び検出を行う(ステップS309)。
そして、エラー制御部37は、エラー訂正及び検出を行ったデータを調停部22へ送出する(ステップS310)。
次に、送出データ選択回路38は、読出データ受信部36a及び36b双方のデータを送出済みか否かを判定する(ステップS311)。送出していないデータが残っている場合(ステップS311:否定)、送出データ選択回路38は、ステップS306へ戻る。
これに対して、読出データ受信部36a及び36b双方のデータを送出済みである場合(ステップS311:肯定)、受信部選択回路35は、読出データの読み出しが全て完了したか否か、すなわち、8サイクル分のデータの読み出しが完了したかを判定する(ステップS312)。読み出していない読出データが残っている場合(ステップS312:否定)、受信部選択回路35は、ステップS301へ戻る。
一方、読出データの読み出しが全て完了した場合(ステップS312:肯定)、受信部選択回路35〜送出データ選択回路38は、読出処理を終了する。
以上に説明したように、本実施例に係るメモリコントローラは、1つのエラー制御部により全ての読出データのエラー訂正及び検出を行う。これにより、回路規模の大きいエラー制御部の個数を抑えることができ、回路規模の増加を軽減することができる。
図9は、実施例3に係るメモリコントローラのブロック図である。本実施例に係るメモリコントローラは、1つのDRAMの異なる4つのビットそれぞれに異なるグループに属するデータを格納することが実施例1と異なる。以下では、実施例1と同様の各部の動作については説明を省略する。
本実施例に係るメモリコントローラ3は、書込データ受信部32a〜32d、チェックビット生成部33a〜33d、読出データ受信部36a〜36d及びエラー制御部37a〜37dを有する。
受信部選択回路31は、調停部22から受信した書込データのうち264ビットのデータを書込データ受信部32a〜32dのそれぞれに格納する。
書込データ受信部32a〜32dは、それぞれに書込データの格納が完了した後、保持する書込データをそれぞれチェックビット生成部33a〜33dへ出力する。
チェックビット生成部33a〜33dは、それぞれ書込データ受信部32a〜33dから読出データの入力を受ける。そして、チェックビット生成部33a〜33dは、24ビットの誤り訂正符号を生成し、生成した誤り訂正符号を付加して288ビットの書込データを生成する。
チェックビット生成部33a〜33dによる誤り訂正符号の付加が終わると、書込データ選択回路34は、チェックビット生成部33a〜33dのそれぞれから36ビットの書込データを取得する。
そして、書込データ選択回路34は、チェックビット生成部33aから取得した書込データを各DRAM51の0番目のビットに格納する。また、書込データ選択回路34は、チェックビット生成部33bから取得した書込データを各DRAM51の1番目のビットに格納する。また、書込データ選択回路34は、チェックビット生成部33cから取得した書込データを各DRAM51の2番目のビットに格納する。また、書込データ選択回路34は、チェックビット生成部33dから取得した書込データを各DRAM51の3番目のビットに格納する。書込データ選択回路34は、これらの書込データの格納を1サイクルで行う。
そして、書込データ選択回路34は、チェックビット生成部33a〜33dからの書込データの取得及び取得した書込データの格納を8回繰り返す、8サイクルのバースト転送を行う。これにより、書込データ選択回路34は、各DRAM51の各ビットに、1つのグループに属する8ビットの書込データを格納する。
ここで、図10を参照して、本実施例に係るメモリコントローラ3によるDIMM5におけるデータの格納状態について説明する。図10は、実施例3におけるDIMMのデータの格納状態の一例を表す図である。
図10に示すように、DRAM#0〜#35の0番目のビットには、GRP0のグループに属する8ビットのデータが格納されている。そして、DRAM#0〜#35のそれぞれの0番目のビットに、異なるブロックが割り当てられている。また、DRAM#0〜#35の1番目のビットには、GRP1のグループに属するデータが格納されている。そして、DRAM#0〜#35のそれぞれの1番目のビットに、異なるブロックが割り当てられている。また、DRAM#0〜#35の2番目のビットには、GRP2のグループに属するデータが格納されている。そして、DRAM#0〜#35のそれぞれの2番目のビットに、異なるブロックが割り当てられている。また、DRAM#0〜#35の3番目のビットには、GRP3のグループに属するデータが格納されている。そして、DRAM#0〜#35のそれぞれの3番目のビットに、異なるブロックが割り当てられている。
受信部選択回路35は、1サイクルで、各DRAM51から4ビットずつ全部で144ビットの読出データの読み出しを行う。そして、受信部選択回路35は、読み出した読出データの内、GRP0に属するデータを読出データ受信部36aに出力する。また、受信部選択回路35は、読み出した読出データの内、GRP1に属するデータを読出データ受信部36bに出力する。また、受信部選択回路35は、読み出した読出データの内、GRP2に属するデータを読出データ受信部36cに出力する。また、受信部選択回路35は、読み出した読出データの内、GRP3に属するデータを読出データ受信部36dに出力する。受信部選択回路35は、読出データの読み出し及び出力を8サイクル行う。
読出データ受信部36a〜36dは、読出データが288ビットになるまでデータを保持する。なぜなら、ECC単位が288ビットであり、1つのグループの全てのデータがそろうことで、次のエラー制御部37a〜37dにおいてエラー訂正及び検出が行えるからである。
そして、読出データ受信部36a〜36dは、読出データが288ビットになると、読出データをそれぞれエラー制御部37a〜37dへ送出する。
エラー制御部37a〜37dは、それぞれ同じグループの288ビットのデータの入力を読出データ受信部36a〜36dから受ける。そして、エラー制御部37a〜37dは、受信した読出データのエラー訂正及び検出を行う。
ここで、図10を参照して、本実施例におけるエラー制御部37a〜37dによるエラー訂正及び検出について説明する。エラー制御部37a〜37dは、それぞれ異なるグループに属するデータのエラー訂正及び検出を行う。すなわち、エラー制御部37a〜37dは、それぞれ独立してエラーチェックを行う。したがって、エラー制御部37a〜37dは、それぞれが保持する読出データにおいて、1つのDRAM51のエラーであれば訂正及び検出が可能である。また、エラー制御部37a〜37dは、それぞれが保持する読出データにおいて、2つのDRAM51におけるエラーであれば、検出が可能である。
すなわち、メモリコントローラ3は、4つのDRAM51において異なるグループのデータを格納する1ビットずつの故障が発生した場合、エラー訂正が可能である。すなわち、1つのDRAM51の故障であれば4ビットの故障まで訂正できる。
さらに、グループが異なる1ビットの故障であれば、どのDRAM51で故障が発生しても、メモリコントローラ3は、エラー訂正が可能である。例えば、メモリコントローラ3は、2つのDRAM51において異なるグループに属するデータを格納する2ビットが故障し、且つ故障したDRAM51間で故障したビットに格納されるデータの属するグループが異なる場合、エラー訂正が可能である。
また、2つのDRAM51であれば、最大それぞれで4ビットの故障が発生した場合にも、メモリコントローラ3は、エラー検出を行うことができる。
また、メモリコントローラ3は、2つのDRAM51の組において同じグループのデータを格納する1ビットの故障が、4つの異なるDRAM51の組で発生した場合、エラー検出が可能である。すなわち、本実施例に係るメモリコントローラ3は、最大8個のDRAM51の1ビットのエラー検出が可能である。
さらに、1つのDRAM51で2つのビットが故障し、それが4つのDRAM51でグループが3つ以上重ならないように発生した場合、メモリコントローラ3は、エラー検出が可能である。すなわち、本実施例に係るメモリコントローラ3は、最大4つのDRAM51のそれぞれが2ビットずつ故障した場合にもエラーの検出が可能である。
送出データ選択回路38は、エラー制御部37a〜37dのいずれかを選択し、読出データを取得する。そして、送出データ選択回路38は、取得した読出データを調停部22へ出力する。ここで、送出データ選択回路38によるデータの選択及び送出の順番は特に制限はない。
以上に説明したように、本実施例に係るメモリコントローラは、最大4つのDRAMの1ビットのエラーの訂正が可能である。また、本実施例に係るメモリコントローラは、最大4つのDRAMの2ビットのエラー検出が可能である。さらに、本実施例に係るメモリコントローラは、最大8つのDRAMの1ビットのエラー検出が可能である。このように、本実施例に係るメモリコントローラは、広い範囲のエラーの訂正及び検出を行うことができる。さらに、本実施例に係るメモリコントローラは、頻度の高い1ビットのエラーが発生した場合のシステムの安定性を向上させることができる。