以下、図面を用いて実施形態を説明する。
図1は、一実施形態におけるメモリ制御装置、情報処理装置およびメモリ制御装置の制御方法の例を示している。情報処理装置は、メモリ制御装置MCNT、コントローラCNTLおよびメモリ装置MEMを有する。例えば、情報処理装置は、サーバやPC(Personal Computer)である。メモリ制御装置MCNTおよびコントローラCNTLは、独立の半導体チップでもよく、1つの半導体チップに集積されていてもよい。
メモリ装置MEMは、メモリブロック32、34を有しており、メモリブロック32、34に共通の制御端子(ライトイネーブル端子等)、アドレス端子およびデータ端子を有する。メモリブロック32、34は、ブロックアドレス端子に供給されるブロックアドレス信号により選択され、あるいは、メモリブロック32、34毎に設けられるチップセレクト端子に供給されるチップセレクト信号により選択される。
例えば、メモリブロック32、34は、互いに同じメモリ容量を有し、ワード構成およびビット構成は、互いに同じである。メモリ装置MEMは、複数の半導体メモリチップが搭載される単一のメモリモジュールであり、あるいは単一の半導体メモリチップである。半導体メモリチップは、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、強誘電体メモリ、MRAM(Magnetic RAM)、相変化メモリ(Phase change RAM)またはReRAM(Resistive RAM)等である。
例えば、メモリブロック32は、アクセス要求に基づいてコントローラCNTLからメモリ装置MEMに供給されるデータDTを記憶する運用系メモリブロックである。メモリブロック34は、メモリブロック32にエラーが発生した場合に、メモリブロック32の代わりに動作してデータDTを記憶する退避系メモリブロックである。
なお、例えば、メモリ装置MEMは、4つのメモリブロックを含んでもよい。この場合、1つのメモリブロックが運用系メモリブロックに割り当てられ、残りの3つのブロックが退避系メモリブロックに割り当てられる。そして、運用系メモリブロックに不良が発生した場合、退避系メモリブロックの1つが新たな運用系メモリブロックとして動作する。新たな運用系メモリブロックにエラーが発生した場合、次の退避系メモリブロックが運用系メモリブロックとして順次に動作する。
あるいは、4つのメモリブロックのうちの2つが運用系メモリブロックに割り当てられ、残りの2つが退避系メモリブロックに割り当てられてもよい。この場合、1つの運用系メモリブロックと1つの退避系メモリブロックとが対応付けられ、あるいは、2つの退避系メモリブロックは、2つの運用系メモリブロックの1つにエラーが発生した場合に順次に使用される。さらに、4つのメモリブロックのうちの3つが運用系メモリブロックに割り当てられ、残りの1つが退避系メモリブロックに割り当てられてもよい。このように、メモリ装置MEMは、少なくとも1つの運用系メモリブロックと、少なくとも1つの退避系メモリブロックとを有する。
メモリ制御装置MCNTは、コントローラCNTLとメモリ装置MEMとの間に接続され、コントローラCNTLからのアクセス要求AREQに基づいてメモリ装置MEMのアクセスを制御する。メモリ制御装置MCNTは、コマンド生成部10、12、14、アクセス制御部16および検出部18を有する。
コマンド生成部10は、コントローラCNTLからのアクセス要求AREQに基づいてアクセスコマンドACMDを生成し、生成したアクセスコマンドACMDをアクセス制御部16に出力する。コマンド生成部10は、アクセス要求AREQに基づいてメモリブロック32またはメモリブロック34にアクセスするアクセスコマンドACMDを生成する第1コマンド生成部の一例である。アクセスコマンドACMDは、第1コマンドの一例である。
コマンド生成部12は、メモリブロック32にアクセスする診断コマンドDCMDを生成する。診断コマンドDCMDは、運用系メモリブロックであるメモリブロック32からデータを読み出し、読み出したデータのエラーを検出するコマンドであり、第2コマンドの一例である。エラーは、検出部18により検出される。コマンド生成部12は、メモリブロック32にアクセスする診断コマンドDCMDを生成する第2コマンド生成部の一例である。
コマンド生成部12は、検出部18から検出通知EDETを受けない場合、すなわち、メモリブロック32からの読み出しデータにエラーが検出されない場合、次のアドレスの診断コマンドDCMDを出力する。そして、メモリブロック32のメモリ領域が巡回的にアクセスさせ、読み出しデータのエラーの有無が検出される。
コマンド生成部12は、訂正可能なエラーが検出されたことを示す検出通知EDETを受けた場合、同じアドレスの診断コマンドDCMDを再度出力する。コマンド生成部12は、同じアドレスの読み出しデータに訂正可能なエラーがあることを示す検出通知EDETを再度受けた場合、診断コマンドDCMDの生成を停止する。そして、コマンド生成部12は、コマンド生成部14に開始要求CREQを出力し、メモリブロック32からメモリブロック34へのデータの退避の開始を指示する。
コマンド生成部14は、開始要求CREQに応答して、退避コマンドCCMDを生成する。コマンド生成部14は、検出部18による所定回数のエラーの検出に基づいて、メモリブロック32に保持されたデータをメモリブロック34に退避する退避コマンドCCMDを生成する第3コマンド生成部の一例である。退避コマンドCCMDは、メモリブロック32に保持されたデータをメモリブロック34に退避するコマンドであり、第3コマンドの一例である。
アクセス制御部16は、受け付けたアクセスコマンドACMD、診断コマンドDCMDおよび退避コマンドCCMDを、予め設定された優先順にしたがってメモリ装置MEMに出力する。アクセス制御部16からメモリ装置MEMに出力される各アクセスコマンドCMDは、アクセスコマンドACMD、診断コマンドDCMDおよび退避コマンドCCMDのいずれかである。
アクセス制御部16は、検出部18による所定回数のエラーの検出前に、アクセスコマンドACMDおよび診断コマンドDCMDをアクセスコマンドCMDとして、所定比率で交互にメモリブロック32に出力する。すなわち、アクセス制御部16は、診断コマンドDCMDを、アクセスコマンドACMDの合間にメモリ装置MEMに出力する。また、アクセス制御部16は、メモリブロック32からメモリブロック34へのデータの退避後に、アクセスコマンドACMDをアクセスコマンドCMDとしてメモリブロック34に出力する。
なお、アクセス制御部16は、メモリブロック32からメモリブロック34にデータを退避する退避期間に、アクセスコマンドACMDおよび診断コマンドDCMDをアクセスコマンドCMDとして、所定比率で交互にメモリ装置MEMに出力してもよい。すなわち、アクセス制御部16は、退避コマンドCCMDを、アクセスコマンドACMDの合間にメモリ装置MEMに出力してもよい。
検出部18は、診断コマンドDCMDに応答してメモリブロック32から読み出されるデータDTに訂正可能なエラーがあることを複数回検出した場合に、検出信号EDETをコマンド生成部12に出力する。例えば、検出部18は、メモリブロック32内の同じアドレスの記憶領域から読み出されるデータに、訂正可能なエラーが複数回検出された場合に、検出信号EDETを出力する。なお、コマンド生成部14は、開始要求CREQの代わりに検出通知EDETを受けて、退避コマンドCCMDの生成を開始してもよい。
コントローラCNTLは、プログラムの実行に基づいてメモリ装置MEMにアクセスするCPU(Central Processing Unit)等のプロセッサ、または情報処理装置に搭載されるキャッシュメモリのアクセスを制御するキャッシュコントローラである。キャッシュコントローラは、キャッシュメモリに所望のデータが格納されていない場合に、メモリ装置MEMから所望のデータを読み出すアクセス要求AREQを生成する。また、キャッシュコントローラは、キャッシュメモリとメモリ装置MEMとのデータを一致させるために、メモリ装置MEMにデータを書き込むアクセス要求AREQを生成する。
この実施形態では、メモリ制御装置MCNTは、メモリブロック32にエラーが発生するまで、メモリブロック34をアクセスしない。このため、メモリブロック34へのデータの退避前にメモリブロック32、34の両方を動作させる場合に比べて、メモリ装置MEMの消費電力を削減できる。例えば、メモリブロック34へのデータの退避を開始するまで、メモリブロック34を低電力モードに設定することにより、メモリ装置MEMの消費電力をさらに削減可能である。メモリ装置MEMがDRAMの場合、退避系メモリブロックのリフレッシュ動作が低電力モード中に禁止されてもよい。
また、メモリ制御装置MCNTは、アクセスコマンドACMDの合間に診断コマンドDCMDおよび退避コマンドCCMDをメモリ装置MEMに出力する。これにより、メモリブロック32のエラーを検出する診断期間およびメモリブロック34にデータを退避する退避期間においても、アクセス要求AREQに基づいてメモリブロック34にアクセスできる。この結果、コントローラCNTLは、所定の頻度でメモリ装置MEMにアクセスでき、情報処理装置の性能が低下することを抑制できる。また、コントローラCNTLは、診断期間および退避期間を認識する回路や、診断期間および退避期間にアクセス要求AREQを蓄積するバッファ等を持たない。
図2は、別の実施形態におけるメモリ制御装置、情報処理装置およびメモリ制御装置の制御方法の例を示している。図1に示した実施形態で説明した要素と同様または同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。
この実施形態の情報処理装置は、メモリ制御装置MCNT、コントローラCNTLおよびメモリモジュールDIMM(Dual Inline Memory Module)を有する。メモリモジュールDIMMは、メモリ装置の一例であり、例えば、複数のDRAMチップを有する。例えば、情報処理装置は、サーバやPC(Personal Computer)である。メモリ制御装置MCNTおよびコントローラCNTLは、独立の半導体チップでもよく、1つの半導体チップに集積されていてもよい。
例えば、メモリモジュールDIMMは、4つのバンクBANK(BANK0、BANK1、BANK2、BANK3)を各々含む2つのランクRANK(RANK0、RANK1)を有する。ランクRANK0、RANK1は、メモリブロックの一例である。
ランクRANK0、RANK1は、メモリモジュールDIMMのアドレス端子に供給されるランクアドレス信号により選択され、あるいは、メモリモジュールDIMMの2つのチップセレクト端子にそれぞれ供給されるチップセレクト信号により選択される。この実施形態では、ランクRANK0は、運用系メモリブロックに割り当てられ、ランクRANK1は、退避系メモリブロックに割り当てられる。なお、図1と同様に、メモリモジュールDIMMは、DRAMチップの代わりに、SRAM、強誘電体メモリ、MRAM、相変化メモリまたはReRAM等の半導体メモリチップを含んでもよい。
メモリ制御装置MCNTは、コントローラCNTLとメモリモジュールDIMMとの間に接続され、コントローラCNTLからのアクセス要求AREQに基づいてメモリモジュールDIMMのアクセスを制御する。メモリ制御装置MCNTは、コマンド制御部100、診断制御部200、コマンド調停部300、メモリインタフェース部400およびデータバッファ500を有する。
コマンド制御部100は、コントローラCNTLからのアクセス要求AREQを保持する複数の領域を有する。コマンド制御部100は、保持したアクセス要求AREQのうち、アクセス可能なバンクBANK0−BANK3に対応する最も早く受けたアクセス要求AREQを選択し、選択したアクセス要求AREQをアクセスコマンドACMDおよび要求通知REQAとして出力する。
コマンド制御部100は、許可通知PERAの受信に応答して、アクセスコマンドACMDがコマンド調停部300に受け付けられたことを認識し、受け付けられたアクセス要求AREQを削除または無効にする。そして、コマンド制御部100は、アクセス可能なバンクBANK0−BANK3に対応する最も早く受けた次のアクセス要求AREQを選択し、選択したアクセス要求AREQをアクセスコマンドACMDおよび要求通知REQAとして出力する。コマンド制御部100は、アクセス要求AREQに基づいてランクRANK0またはランクRANK1にアクセスするアクセスコマンドACMDを生成する第1コマンド生成部の一例である。コマンド制御部100の例は、図3および図4に示す。
診断制御部200は、診断コマンドDCMDまたは退避コマンドCCMDを要求通知REQDとともに出力する。診断コマンドDCMDは、運用系メモリブロックであるランクRANK0からデータを読み出し、読み出したデータに訂正可能なエラーが含まれるか否かを検出する診断期間に生成される。退避コマンドCCMDは、ランクRANK0内の同じアドレスの記憶領域に訂正可能なエラーが連続して検出された後、ランクRANK0に保持されたデータを、ランクRANK1に退避する退避期間に生成される。診断期間および退避期間は、図10で説明する。
また、診断制御部200は、許可通知PERDの受信に応答して、診断コマンドDCMDまたは退避コマンドCCMDがコマンド調停部300に受け付けられたことを認識する。診断制御部200は、診断コマンドDCMDの実行結果RSLTDおよび退避コマンドCCMDの実行結果RSLTCをメモリインタフェース部400から受ける。
そして、診断制御部200は、実行結果RSLTD、RSLTCに基づいて、次の診断コマンドDCMDまたは退避コマンドCCMDを要求通知REQDとともに出力する。さらに、診断制御部200は、診断処理の開始を宣言する通知NTCDおよび退避処理の開始を宣言する通知NTCCを出力する。診断制御部200の例および実行結果RSLTD、RSLTCおよび通知NTCD、NTCCの例は、図5で説明する。
コマンド調停部300は、受け付けたアクセスコマンドACMDおよび診断コマンドDCMDを所定比率で交互にアクセスコマンドICMDとしてメモリインタフェース部400に出力する。コマンド調停部300は、受け付けたアクセスコマンドACMDおよび退避コマンドCCMDを所定比率で交互にアクセスコマンドICMDとしてメモリインタフェース部400に出力する。また、コマンド調停部300は、アクセスコマンドACMD、診断コマンドDCMDおよび退避コマンドCCMDに含まれるアドレスをアドレスIADとして、アクセスコマンドICMDとともにメモリインタフェース部400に出力する。
例えば、コマンド調停部300は、アクセスコマンドACMDの受け付け比率と診断コマンドDCMDの受け付け比率を、2:1に設定し、アクセスコマンドACMDの受け付け比率と退避コマンドCCMDの受け付け比率を、2:1に設定する。そして、コマンド調停部300は、アクセスコマンドACMDを受け付け可能な期間に許可通知PERAを出力し、診断コマンドDCMDまたは退避コマンドCCMDを受け付け可能な期間に許可通知PERDを出力する。コマンド調停部300の例は、図6に示す。
メモリインタフェース部400は、コマンド調停部300からのアクセスコマンドICMDをメモリモジュールDIMMのインタフェース仕様に合わせたアクセスコマンドCMDに変換し、変換したアクセスコマンドCMDをメモリモジュールDIMMに出力する。メモリインタフェース部400は、アクセス要求AREQが書き込みコマンドの場合、データバッファ500から書き込みデータDTを受け、書き込みデータDTMとしてメモリモジュールDIMMに出力する。
メモリインタフェース部400は、アクセス要求AREQが読み出しコマンドの場合、メモリモジュールDIMMから読み出しデータDTMを受け、読み出しデータDTとしてデータバッファ500に出力する。メモリインタフェース部400は、書き込みデータからエラー訂正コードを生成する機能と、読み出しデータとともにメモリモジュールDIMMから読み出されるエラー訂正コードを用いて読み出しデータのエラーを検出する機能とを有する。メモリインタフェース部400の例は、図8に示す。
データバッファ500は、コントローラCNTLから受ける書き込みデータDTCを保持し、保持した書き込みデータをメモリインタフェース部400の動作タイミングに合わせて書き込みデータDTとして出力する。データバッファ500は、メモリインタフェース部400から受ける読み出しデータDTを保持し、保持した読み出しデータをコントローラCNTLの動作タイミングに合わせて書き込みデータDTCとして出力する。
図3は、図2に示したコマンド制御部100の例を示している。コマンド制御部100は、コマンド保持部110、ビジー検出部120およびコマンド送信部130を有する。
コマンド保持部110は、アクセス要求AREQを保持する複数の保持領域HLD(HLDa、HLDb、HLDc、HLDd)を有する。図3では、説明を簡単にするために、4つの保持領域HLDを示しているが、保持領域HLDの数は4つに限定されない。
アクセス要求AREQは、アクセスコマンドおよびメモリモジュールDIMM内のアクセスする記憶領域を示すアクセスアドレスを含む。アクセスアドレスは、バンクBANK0−BANK3を示すバンクアドレスおよびBANK0−BANK3内の記憶領域を示すアドレスを含む。なお、この実施形態では、アクセス要求AREQによりアクセス可能なメモリ領域は、ランクRANK0またはランクRANK1のいずれかのため、アクセスアドレスは、ランクRANKを示すランクアドレスは含まない。
保持領域HLDaは、保持したアクセス要求AREQに含まれるアクセスアドレスのうちバンクアドレスに対応するバンク信号BKa(BKa0、BKa1、BKa2、BKa3のいずれか)を出力する。バンク信号BKa0は、保持領域HLDaに保持されたバンクアドレスがバンクBANK0を示す場合に出力される。バンク信号BKa1は、保持領域HLDaに保持されたバンクアドレスがバンクBANK1を示す場合に出力される。バンク信号BKa2は、保持領域HLDaに保持されたバンクアドレスがバンクBANK2を示す場合に出力される。バンク信号BKa3は、保持領域HLDaに保持されたバンクアドレスがバンクBANK3を示す場合に出力される。また、保持領域HLDaは、アクセス要求AREQに含まれるアクセスコマンドをアクセス要求AREQaとして出力する。
保持領域HLDbは、保持したアクセス要求AREQに含まれるバンクアドレスに対応するバンク信号BKb(BKb0、BKb1、BKb2、BKb3のいずれか)を出力する。バンク信号BKb0、BKb1、BKb2、BKb3は、保持領域HLDbに保持されたバンクアドレスがバンクBANK0、BANK1、BANK2、BANK3を示す場合にそれぞれ出力される。また、保持領域HLDbは、アクセス要求AREQに含まれるアクセスコマンドをアクセス要求AREQbとして出力する。
保持領域HLDcは、保持したアクセス要求AREQに含まれるバンクアドレスに対応するバンク信号BKc(BKc0、BKc1、BKc2、BKc3のいずれか)を出力する。バンク信号BKc0、BKc1、BKc2、BKc3は、保持領域HLDcに保持されたバンクアドレスがバンクBANK0、BANK1、BANK2、BANK3を示す場合にそれぞれ出力される。また、保持領域HLDcは、アクセス要求AREQに含まれるアクセスコマンドをアクセス要求AREQcとして出力する。
保持領域HLDdは、保持したアクセス要求AREQに含まれるバンクアドレスに対応するバンク信号BKd(BKd0、BKd1、BKd2、BKd3のいずれか)を出力する。バンク信号BKd0、BKd1、BKd2、BKd3は、保持領域HLDbに保持されたバンクアドレスがバンクBANK0、BANK1、BANK2、BANK3を示す場合にそれぞれ出力される。また、保持領域HLDdは、アクセス要求AREQに含まれるアクセスコマンドをアクセス要求AREQdとして出力する。バンク信号BK(BKa、BKb、BKc、BKd)の末尾の数字は、アクセスされるバンクBANKの番号を示している。
ビジー検出部120は、バンク信号BK(BKa、BKb、BKc、BKd)と、運用系メモリブロックの各バンクBANK0−BANK3がビジー状態であることを示すビジー信号BSY(BSY0、BSY1、BSY2、BSY3)とを受ける。ビジー状態は、対応するバンクBANKがアクティブ状態であり、バンクBANK内のメモリセルに接続されたワード線のいずれかが活性化された状態である。なお、運用系メモリブロックは、初期状態ではランクRANK0であり、ランクRANK0のエラーの発生により、ランクRANK0からランクRANK1にデータが退避された後、切り替えによりランクRANK1になる。
ビジー信号BSYの末尾の数字は、バンクBANKの番号を示している。ビジー検出部120は、各バンク信号BKとビジー信号BSYとを比較し、ビジー状態でないバンクBANK(すなわち、レディ状態のバンクBANK)に対応するバンク信号BKを選択する。レディ状態は、対応するバンクBANKがインアクティブ状態(スタンバイ状態)であり、バンクBANK内のメモリセルに接続された全てのワード線が非活性化された状態である。
そして、ビジー検出部120は、選択したレディ状態のバンク信号BK(BKa、BKb、BKc、BKd)に対応するレディ信号RDY(RDYa、RDYb、RDYc、RDYd)をコマンド送信部130に出力する。レディ信号RDYの末尾のa、b、c、dは、レディ状態のバンクBANKに対するアクセス要求AREQを保持した保持領域HLDを示している。例えば、レディ信号RDYaは、保持領域HLDaに保持されたアクセス要求AREQaにより選択されるバンクBANKがアクセス可能(レディ状態)であることを示している。
コマンド送信部130は、レディ信号RDYが示す保持領域HLDから出力されたアクセス要求AREQ(AREQa、AREQb、AREQc、AREQd)を選択する。コマンド送信部130は、選択したアクセス要求AREQの中で最も早くコマンド制御部100が受けたアクセス要求AREQを選択し、選択したアクセス要求AREQをアクセスコマンドACMDとして図2に示したコマンド調停部300に出力する。また、コマンド送信部130は、アクセス要求AREQの発生を示す要求通知REQAをコマンド調停部300に出力する。なお、コマンド送信部130は、許可通知PERAを受けたか否かに拘わりなく、アクセスコマンドACMDおよび要求通知REQAを出力可能である。
コマンド送信部130は、アクセス要求AREQが読み出しコマンドの場合、読み出しコマンドを示すアクセスコマンドACMDをコマンド調停部300に出力する。コマンド送信部130は、アクセス要求AREQが書き込みコマンドの場合、書き込みコマンドを示すアクセスコマンドACMDをコマンド調停部300に出力する。コマンド送信部130は、アクセス要求AREQがリードモディファイライトコマンドの場合、まず、読み出しコマンドを示すアクセスコマンドACMDをコマンド調停部300に出力する。次に、コマンド送信部130は、許可通知PERAを受けた後に、リードモディファイライトコマンド用の書き込みコマンドを示すアクセスコマンドACMDをコマンド調停部300に出力する。
図4は、図3に示したコマンド制御部100の動作の例を示している。この例では、バンクBANK0に対するアクセス要求AREQa、AREQcが保持領域HLDa、HLDcにそれぞれ保持され、バンクBANK1に対するアクセス要求AREQbが保持領域HLDbに保持される。コマンド保持部110は、アクセス要求AREQa、AREQb、AREQcを、この順で受けて保持する。保持領域HLDaは、バンク信号BKa0を出力し、保持領域HLDbは、バンク信号BKb1を出力し、保持領域HLDcは、バンク信号BKc0を出力する。
運用系メモリブロックであるランクRANK0では、網掛けで示したバンクBANK1がビジー状態であり、図2に示したメモリインタフェース部400は、ビジー信号BSY1を出力する。ランクRANK0の他のバンクBANK0、BANK2、BANK3は、レディ状態であり、ビジー信号BSY0、BSY2、BSY3は出力されていない。
ビジー検出部120は、ビジー信号BSY1を受け、ビジー状態のバンクBANKを除くバンクBANK0、BANK2、BANK3に対応するバンク信号BKを選択する。この例では、ビジー検出部120は、バンク信号BKa0、BKc0を選択し、レディ信号RDYa、RDYcを出力し、ビジー状態のバンクBANK1に対応するレディ信号RDYbの出力を禁止する。
コマンド送信部130は、レディ信号RDYa、RDYcに対応して保持領域HLDa、HLDcから出力されたアクセス要求AREQa、AREQcの中でコマンド制御部100が最も早く受けたアクセス要求AREQaを選択する。そして、コマンド送信部130は、アクセスコマンドACMD(AREQa)および要求通知REQAを出力する。
この後、アクセス要求AREQaに応答して、メモリインタフェース部400からメモリモジュールDIMMにアクティブコマンドが供給されて、バンクBANK0はアクティブ状態になる。メモリインタフェース部400は、ビジー信号BSY0を出力し、読み出しコマンドまたは書き込みコマンドをメモリモジュールDIMMに出力する。ビジー検出部120は、ビジー信号BSY0を受け、レディ信号RDYcの出力を停止する。
コマンド保持部110の保持部HLDaに保持されたアクセス要求AREQaは、コマンド送信部130による選択に応じて削除され、あるいは無効にされる。保持部HLDaは、アクセス要求AREQを保持していない空の状態になり、バンク信号BKa0の出力を停止する。これにより、コマンド保持部110は、バンクBKb1、BKc0を出力する。
アクセス要求AREQcに含まれるアドレスにより選択されるワード線が、アクセス要求AREQaにより選択されるワード線と同じ場合、コマンド送信部130は、ビジー信号BSY0の出力中にアクセス要求AREQcを出力可能である。この場合、コマンド送信部130は、次の許可通知PERAを受けて、アクセスコマンドACMD(AREQc)および要求通知REQAを出力する。メモリインタフェース部400は、バンクBANK0に対するプリチャージコマンドを出力することなく、読み出しコマンドまたは書き込みコマンドをメモリモジュールDIMMに出力する。これにより、アクティブ状態のバンクBANK0をインアクティブ状態にすることなく、アクセス要求AREQcを連続してメモリモジュールDIMMに供給でき、アクセス効率を向上できる。
一方、アクセス要求AREQcに含まれるアドレスにより選択されるワード線が、アクセス要求AREQaにより選択されるワード線と異なる場合、コマンド送信部130は、次のように動作する。すなわち、ビジー検出部120がビジー信号BSY1の出力の停止を受け、レディ信号RDYbを出力する場合、コマンド送信部130は、レディ信号RDYbに応じて、アクセスコマンドACMD(AREQb)および要求通知PERAを出力する。ビジー検出部120がビジー信号BSY0の出力の停止を受け、レディ信号RDYcを出力する場合、コマンド送信部130は、レディ信号RDYcに応じて、アクセスコマンドACMD(AREQc)および要求通知PERAを出力する。
図5は、図2に示した診断制御部200の例を示している。診断制御部200は、診断コマンド生成部210、退避コマンド生成部220およびコマンド送信部230を有する。
診断コマンド生成部210は、診断コマンドDCMD0をコマンド送信部230に出力し、通知NTCDをメモリインタフェース部400に出力し、診断コマンドDCMDの実行結果RSLTDをメモリインタフェース部400から受ける。また、診断コマンド生成部210は、エラー訂正可能なエラーCEが同じアドレスで連続して2回検出されたことを、実行結果RSLTDにより認識した場合、データの退避の開始要求CREQを退避コマンド生成部220に出力する。
診断コマンドDCMD0は、運用系メモリブロックのエラーを診断する読み出しコマンドRDDを含む。通知NTCDは、読み出しコマンドRDDが生成される診断期間の開始の通知および退避系メモリブロックのリフレッシュ動作の開始要求の通知を含む。診断期間の例は、図10に示す。実行結果RSLTDは、読み出しコマンドRDDに対応する読み出しデータのエラーの有無とエラーの種類およびリフレッシュ動作の開始通知を含む。診断コマンド生成部210は、運用系メモリブロックにアクセスする診断コマンドDCMDを生成する第2コマンド生成部の一例である。
退避コマンド生成部220は、退避コマンドCCMD0をコマンド送信部230に出力し、通知NTCCをメモリインタフェース部400に出力し、退避コマンドCCMDの実行結果RSLTCをメモリインタフェース部400から受ける。退避コマンドCCMD0は、退避系メモリブロックに初期値を書き込む書き込みコマンドWRC、退避系メモリブロックのエラーを診断する読み出しコマンドRDCおよびリードモディファイライトコマンドRMWCを含む。リードモディファイライトコマンドRMWCは、運用系メモリブロックから退避系メモリブロックへのデータの退避に使用される。
通知NTCCは、書き込みコマンドWRCおよび読み出しコマンドRDCが生成される退避準備期間の開始の通知、およびリードモディファイライトコマンドRMWCが生成される退避期間の開始の通知を含む。退避準備期間および退避期間の例は、図10に示す。実行結果RSLTCは、読み出しコマンドRDCおよびリードモディファイライトコマンドRMWCによりメモリモジュールDIMMから読み出されるデータのエラーの有無とエラーの種類、および書き込みコマンドWRCに対応する書き込み動作の完了とを含む。
退避コマンド生成部220は、運用系メモリブロックの所定回数のエラーの検出に基づいて、運用系メモリブロックに保持されたデータを退避系メモリブロックに退避するリードモディファイライトコマンドRMWCを生成する第3コマンド生成部の一例である。また、退避コマンド生成部220は、退避系メモリブロックへのデータの退避が開始される前に、退避系メモリブロックに所定データを書き込む書き込みコマンドWRCを生成する第4コマンド生成部の一例である。さらに、退避コマンド生成部220は、退避系メモリブロックへの所定データの書き込み後、退避系メモリブロックへのデータの退避が開始される前に、退避系メモリブロックのエラーを検出する読み出しコマンドRDCを生成する第5コマンド生成部の一例である。
コマンド送信部230は、許可通知PERDを受ける期間に、診断コマンドDCMD0を診断コマンドDCMD(読み出しコマンドRDD)として要求通知REQDとともにコマンド調停部300に出力する。あるいは、コマンド送信部230は、許可通知PERDを受ける期間に、退避コマンドCCMD0を退避コマンドCCMD(書き込みコマンドWRCまたは読み出しコマンドRDC)として要求通知REQDとともにコマンド調停部300に出力する。なお、コマンド送信部230は、リードモディファイライトコマンドRMWCを受けた場合、読み出しコマンドRDおよび書き込みコマンドWRを要求通知REQDとともにコマンド調停部300に順次に出力する。
診断コマンドDCMDは、退避コマンドCCMDの供給期間に生成されず、退避コマンドCCMDは、診断コマンドDCMDの供給期間に生成されない。このため、コマンド送信部230は、診断コマンドDCMDと退避コマンドCCMDとの優先順を判断する回路を持たない。
図6は、図2に示したコマンド調停部300の例を示している。コマンド調停部300は、コマンド選択部310およびコマンド調整部320を有する。コマンド選択部310は、イネーブル信号ENAを受ける期間に、アクセスコマンドACMDをアクセスコマンドICMDおよびアドレスIADとしてメモリインタフェース部400に出力する。コマンド選択部310は、イネーブル信号ENDを受ける期間に、診断コマンドDCMDまたは退避コマンドCCMDをアクセスコマンドICMDおよびアドレスIADとしてメモリインタフェース部400に出力する。
コマンド調整部320は、所定比率を示す値がメモリ制御装置MCNTの外部から書き換え可能に設定されるレジスタRREQを有する。レジスタRREQは、設定部の一例である。例えば、レジスタRREQは、情報処理装置の初期化シーケンスにおいて、コントローラCNTLによって設定される。コマンド調整部320は、レジスタRREGに設定された比率にしたがって、許可通知PERA、PERDを出力する。
例えば、レジスタRREGに”2”が設定された場合、コマンド調整部320は、許可通知PERAを2回出力する毎に、許可通知PERDを1回出力する。これにより、アクセスコマンドACMDおよび診断コマンドDCMDのメモリインタフェース部400への出力回数の比率は、2:1になる。また、アクセスコマンドACMDおよび退避コマンドDCMDのメモリインタフェース部400への出力回数の比率は、2:1になる。
例えば、レジスタRREGに”3”が設定された場合、コマンド調整部320は、許可通知PERAを3回出力する毎に、許可通知PERDを1回出力する。これにより、アクセスコマンドACMDおよび診断コマンドDCMDのメモリインタフェース部400への出力回数の比率は、3:1になる。また、アクセスコマンドACMDおよび退避コマンドDCMDのメモリインタフェース部400への出力回数の比率は、3:1になる。
なお、コマンド調整部320は、許可通知PERA用のレジスタRREGと許可通知PERD用のレジスタRREGとを有していてもよい。この場合、許可通知PERAの出力回数と許可通知PERDの出力回数との比率を任意に設定可能である。レジスタRREGにより、アクセスコマンドACMDおよび診断コマンドDCMDの出力回数の比率と、アクセスコマンドACMDおよび退避コマンドCCMDの出力回数の比率を、情報処理装置の仕様やメモリ装置MEMのアクセス速度に合わせて設定できる。すなわち、情報処理装置の性能の低下と退避期間の長さとのバランスを最適に設定できる。
コマンド調整部320は、許可通知PERAを出力中に要求通知REQAを受けた場合に、イネーブル信号ENAを出力し、許可通知PERDを出力中に要求通知REQDを受けた場合に、イネーブル信号ENDを出力する。但し、コマンド調整部320は、メモリインタフェース部400からビジー信号BSYを受ける間、許可通知PERA、PERDの出力を禁止する。例えば、ビジー信号BSYは、メモリインタフェース部400からメモリモジュールDIMMにリフレッシュ要求が発行される場合、あるいは、バンクBANK内のアクセスするワード線をアクティブ状態に設定する場合に生成される。
図7は、図2に示したコマンド制御部100、診断制御部200およびコマンド調停部300により実行される退避期間の動作の例を示している。この例では、アクセスコマンドACMDと診断コマンドDCMDの実行比率は、2:1に設定される。このため、コマンド調停部300は、2回の許可通知PERAのハイレベルの出力と、1回の許可通知PERDのハイレベルの出力とを繰り返す。図7は、図10に示す診断期間の動作の例を示しているが、図10の退避準備期間および退避期間の動作は、診断コマンドDCMDを退避コマンドCCMDに置き換えることで示される。
例えば、コマンド送信部130は、クロックCLKの立ち下がりエッジに同期してコマンドACMDおよびハイレベルの要求通知REQAを出力する(図7(a))。同様に、コマンド送信部230は、クロックCLKの立ち下がりエッジに同期してコマンドDCMDおよびハイレベルの要求通知REQDを出力する(図7(b))。
この例では、0番目のクロックCLKの立ち上がりエッジより前に、許可通知PERAおよびイネーブル信号ENAは、ハイレベルに設定されており、許可通知PERDおよびイネーブル信号ENDは、ロウレベルに設定される(図7(c、d))。そして、コマンド調停部300は、ハイレベルのイネーブル信号ENAに基づいて、1番目のクロックCLKの立ち上がりエッジに同期してアクセスコマンドACMD(ACMD1)を選択し、アクセスコマンドICMDとして出力する(図7(e))。
コマンド調停部300は、アクセスコマンドACMDの受け付け後にハイレベルの許可通知PERAの出力を停止する(図7(f))。コマンド送信部130は、許可通知PERAのロウレベルを受け、ハイレベルの要求通知REQAの出力を停止し、1番目のクロックCLKの立ち下がりエッジに同期して、次のアクセスコマンドACMD(ACMD2)および要求通知REQAを出力する(図7(g))。
コマンド調停部300は、1番目のクロックCLKの立ち下がりエッジに同期して、許可通知PERAを再度出力する(図7(h))。2番目のクロックCLKの立ち上がりエッジおいて、イネーブル信号ENAはハイレベルに維持される。このため、コマンド調停部300は、2番目のクロックCLKの立ち上がりエッジに同期してアクセスコマンドACMD(ACMD2)を選択し、アクセスコマンドICMDとして出力する(図7(i))。
コマンド調停部300は、アクセスコマンドACMDの受け付け後に許可通知PERAの出力を停止する(図7(j))。コマンド送信部130は、許可通知PERAのロウレベルを受け、要求通知REQAの出力を停止し、2番目のクロックCLKの立ち下がりエッジに同期して、次のアクセスコマンドACMD(ACMD3)および要求通知REQAを出力する(図7(k))。
コマンド調停部300は、2番目のクロックCLKの立ち下がりエッジに同期して、ハイレベルのイネーブル信号ENAの出力を停止し、ハイレベルのイネーブル信号ENDを出力し、許可通知PERDを出力する(図7(l))。そして、コマンド調停部300は、3番目のクロックCLKの立ち上がりエッジに同期して診断コマンドDCMD(DCMD1)を選択し、アクセスコマンドICMDとして出力する(図7(m))。
コマンド調停部300は、診断コマンドDCMDの受け付け後にハイレベルの許可通知PERDの出力を停止する(図7(n))。コマンド送信部230は、許可通知PERDのロウレベルを受け、要求通知REQDの出力を停止し、3番目のクロックCLKの立ち下がりエッジに同期して、次の診断コマンドDCMD(DCMD2)および要求通知REQDを出力する(図7(o))。
コマンド調停部300は、3番目のクロックCLKの立ち下がりエッジに同期して、イネーブル信号ENBの出力を停止し、イネーブル信号ENAを出力し、許可通知PERAを出力する(図7(p、q))。そして、コマンド調停部300は、4番目のクロックCLKの立ち上がりエッジに同期してアクセスコマンドACMD(ACMD3)を選択し、アクセスコマンドICMDとして出力する(図7(r))。
コマンド調停部300は、アクセスコマンドACMDの受け付け後に許可通知PERAの出力を停止する(図7(s))。コマンド送信部130は、許可通知PERAのロウレベルを受け、要求通知REQAの出力を停止し、4番目のクロックCLKの立ち下がりエッジに同期して、次のアクセスコマンドACMD(ACMD4)および要求通知REQAを出力する(図7(t))。
コマンド調停部300は4番目のクロックサイクルにおいて、ビジー信号BSYをメモリインタフェース部400から受ける(図7(u))。例えば、ビジー信号BSYは、アクティブコマンドやプリチャージコマンドのメモリモジュールDIMMへの供給に伴い、アクセスコマンドICMDを受けられない場合に、メモリインタフェース部400からコマンド調停部300に出力される。
コマンド調停部300は、ビジー信号BSYに応じて、イネーブル信号ENAの出力を停止し、4番目のクロックサイクルでは、許可通知PERAを出力しない(図7(v、w))。これにより、5番目のクロックCLKの立ち上がりエッジでは、アクセスコマンドACMDおよび診断コマンドDCMDのいずれも選択されない。そして、コマンド調停部300は、NOP(No Operation)コマンドをアクセスコマンドICMDとしてメモリインタフェース部400に出力する(図7(x))。
コマンド調停部300は、5番目のクロックサイクルにおいて、ロウレベルのビジー信号BSYを受け、5番目のクロックCLKの立ち下がりエッジに同期して、イネーブル信号ENAを出力し、許可通知PERAを出力する(図7(y、z))。そして、コマンド調停部300は、6番目のクロックCLKの立ち上がりエッジに同期してアクセスコマンドACMD(ACMD4)を選択し、アクセスコマンドICMDとして出力する(図7(z1))。
この後、上述と同様に、イネーブル信号END、ENAのハイレベルパルスが1:2の比率で交互に出力され、許可通知PERD、PERAのハイレベルパルスが1:2の比率で出力される。そして、コマンド調停部300は、診断コマンドDCMDとアクセスコマンドACMDとを、1:2の比率でメモリインタフェース部400に出力する。
図8は、図2に示したメモリインタフェース部400の例を示している。メモリインタフェース部400は、コマンド処理部410、アクセス処理部420およびデータ処理部430を有する。コマンド処理部410、アクセス処理部420および図6に示したコマンド調停部300は、アクセス制御部の一例である。
コマンド処理部410は、コマンド調整部300からのアクセスコマンドICMD(ACMD、DCMD、CCMD)に基づいて、メモリモジュールDIMMに出力するアクセスコマンドCMDを生成する。例えば、アクセスコマンドCMDは、アクティブコマンドACT、読み出しコマンドRD、書き込みコマンドWR、リフレッシュコマンドREF、プリチャージコマンドPREを含む。また、コマンド処理部410は、アクセスコマンドCMDに基づいて、アクティブ中のバンクBANKを示すビジー信号BSY0−BSY3を図4に示したビジー検出部120に出力する。
アクセス処理部420は、アドレスIADをバンクアドレスBADおよびアドレスADとしてメモリモジュールDIMMに出力する。また、アクセス処理部420は、通知NTCC、NTCDに応じて、ランクRANK0またはランクRANK1を示すランクアドレスRADを出力する。例えば、アクセス処理部420は、通知NTCC、NTCDを受けていない場合、ランクRANK0を示すランクアドレスRADを出力する。このように、ランクRANK0、RANK1のいずれかにアクセスするかは、アクセス処理部420により判断される。
アクセス処理部420は、退避系メモリブロックに対する書き込みコマンドWRCおよび読み出しコマンドRDCを示す通知NTCCを受ける場合、書き込みコマンドWRCおよび読み出しコマンドRDCに応答して、ランクRANK1を示すランクアドレスRADを出力する。アクセス処理部420は、リードモディファイライトコマンドRMWCを示す通知NTCCを受ける場合、リードモディファイライトコマンドRMWCの読み出しコマンドRDに応答して、ランクRANK0を示すランクアドレスRADを出力する。アクセス処理部420は、リードモディファイライトコマンドRMWCを示す通知NTCCを受ける場合、リードモディファイライトコマンドRMWCのライトコマンドWRに応答して、ランクRANK1を示すランクアドレスRADを出力する。
さらに、アクセス処理部420は、アクセスコマンドACMDに基づいて運用系メモリブロックが動作する診断期間に、クロックイネーブル信号CKE1をロウレベルに設定し、ランクRANK1のリフレッシュ動作を禁止する。リフレッシュ動作の禁止により、ランクRANK1の状態は、低電力モードになる。
アクセス処理部420は、退避系メモリブロックのリフレッシュ動作の開始要求を示す通知NTCCを受けた場合に、クロックイネーブル信号CKE1をハイレベルに設定し、リフレッシュ動作の開始通知を示す実行結果RSLTDを出力する。メモリモジュールDIMMは、ハイレベルのクロックイネーブル信号CKE1に基づいてランクRANK1のリフレッシュ動作を開始する。クロックイネーブル信号CKE0、CKE1は、ランクRANK0、RANK1にそれぞれ供給され、ランクRANK0、RANK1の消費電力を制御する。
また、アクセス処理部420は、バンクアドレスBADおよびアドレスADを保持するレジスタ等の保持回路AHLDを有する。保持回路AHLDは、退避期間において、ランクRANK0からランクRANK1へのデータの退避が完了したバンクアドレスBADおよびアドレスADを保持する。
そして、退避期間において、アクセスコマンドACMDとともに供給されるアドレス値が保持回路AHLDに保持されたアドレス値以下の場合、アクセス処理部420は、ランクRANK1を示すランクアドレスRADを出力する。これにより、アクセスコマンドACMDに基づいて、ランクRANK1の読み出し動作または書き込み動作が実行される。このように、アクセスコマンドACMDとともに供給されるアドレスの値が、データの退避が完了した記憶領域を示す場合に、ランクRANK1がアクセスされる。なお、図13で説明するように、退避期間におけるランクRANK0からランクRANK1へのデータの退避は、例えば、値の小さいアドレスから順に実行される。
データ処理部430は、エラー検出訂正回路EDCCおよび期待値の保持回路EHLDを有する。エラー検出訂正回路EDCCは、検出部の一例である。エラー検出訂正回路EDCCは、書き込み動作において、図2に示したデータバッファ500から受ける書き込みデータDTを用いてエラー訂正コードECCを生成する。データ処理部430は、書き込み動作において、書き込みデータDTを書き込みデータDTMとしてエラー訂正コードECCとともにメモリモジュールDIMMに出力する。
エラー検出訂正回路EDCCは、アクセスコマンドACMDおよび診断コマンドDCMDによる読み出し動作において、メモリモジュールDIMMからの読み出しデータDTMおよびエラー検出コードECCを用いて、読み出しデータDTMのエラーを検出する。エラー検出訂正回路EDCCは、読み出しデータDTMに訂正可能なエラーがある場合、エラーを訂正してメモリモジュールDIMMに書き込む。例えば、訂正可能なエラーは、1ビットエラーであり、検出可能で訂正不可能なエラーは、2ビットエラーである。
また、エラー検出訂正回路EDCCは、診断コマンドDCMDおよび退避期間に供給されるリードモディファイライトコマンドRMWCによる読み出し動作において、読み出しデータのエラーの有無を示すエラー情報を、実行結果RSLTDとして出力する。エラー情報は、エラーなし(OK)、訂正可能なエラー(CE;Correctable Error)、訂正不可能なエラー(UCE;Un-Correctable Error)のいずれかである。
保持回路EHLDは、退避準備期間において、最初の書き込みコマンドWRCとともに供給される書き込みデータを期待値として保持する。保持回路EHLDに保持されたデータは、退避準備期間のその後の書き込みコマンドWRCに伴う書き込みデータとして使用される。また、保持回路EHLDに保持されたデータは、退避準備期間に供給される読み出しコマンドRDCに基づいてランクRANK1から読み出されるデータの期待値として使用される。
図9は、図2に示したメモリ制御装置MCNTのコマンドの流れの例を示している。コマンド保持部110は、例えば、読み出しコマンドRD、書き込みコマンドWRおよびリードモディファイライトコマンドRMWを、コントローラCNTLからのアクセス要求AREQとして保持する。コマンド保持部110は、保持したアクセス要求AREQを順にコマンド送信部130に出力する。
コマンド送信部130は、コマンド保持部110から供給されるアクセス要求AREQをアクセスコマンドACMDとして、許可通知PERAを受ける期間に、要求通知REQAとともにコマンド調停部300に出力する。例えば、コマンド送信部130は、リードモディファイライトコマンドRMWを、読み出しコマンドRD(RMW)と書き込みコマンドWR(RMW)とに分け、分けたコマンドを1つずつ出力する。
診断コマンド生成部210は、例えば、診断用の読み出しコマンドRDDおよびリードモディファイライトコマンドRMWDを診断コマンドDCMD0としてコマンド送信部230に出力する。退避コマンド生成部220は、例えば、退避用の書き込みコマンドWRC、読み出しコマンドRDCおよびリードモディファイライトコマンドRMWCを退避コマンドCCMD0としてコマンド送信部230に出力する。
コマンド送信部230は、コマンド送信部130と同様に、診断コマンドDCMD0を診断コマンドDCMDとして、許可通知PERDを受ける期間に、要求通知REQDとともにコマンド調停部300に出力する。同様に、コマンド送信部230は、退避コマンドCCMD0を退避コマンドCCMDとして、許可通知PERDを受ける期間に、要求通知REQDとともにコマンド調停部300に出力する。
コマンド送信部230は、リードモディファイライトコマンドRMWDを、読み出しコマンドRD(RMWD)と書き込みコマンドWR(RMWD)とに分け、分けたコマンドを1つずつ出力する。また、コマンド送信部230は、リードモディファイライトコマンドRMWCを、読み出しコマンドRD(RMWC)と書き込みコマンドWR(RMWC)とに分け、分けたコマンドを1つずつ出力する。
なお、診断コマンドDCMDに含まれる読み出しコマンドRDDと、退避コマンドCCMDに含まれる読み出しコマンドRDCとは、互いに同じコードで表される。診断コマンドDCMDに含まれるリードモディファイライトコマンドRMWDと、退避コマンドCCMDに含まれるリードモディファイライトコマンドRMWCとは、互いに同じコードで表される。図10に示すように、診断コマンドDCMDと退避コマンドCCMDとは、互いに異なる期間に生成される。このため、メモリインタフェース部400は、同じコードの診断コマンドDCMDと退避コマンドCCMDを、通知NTCD、NTCCにより識別可能である。
コマンド調停部300は、アクセスコマンドACMDと診断コマンドDCMDとの優先順、およびアクセスコマンドACMDと退避コマンドCCMDとの優先順を、所定比率に基づいてそれぞれ判定する。コマンド調停部300は、判定した順にアクセスコマンドICMDをメモリインタフェース部400に出力する。
メモリインタフェース部400は、アクセスコマンドICMDに応じて、アクセスコマンドCMDと、ランクRANK0またはRANK1を選択するランクアドレスRADと、バンクアドレスBAD、アドレスADを生成し、メモリモジュールDIMMに出力する。例えば、DRAMチップを含むメモリモジュールDIMMでは、アクセスコマンドCMDは、ロウアドレスストローブ信号/RAS、コラムアドレスストローブ信号/CASおよびライトイネーブル信号/WEとしてメモリモジュールDIMMに供給される。
また、メモリインタフェース部400は、メモリモジュールDIMMを低電力モードに設定するためのクロックイネーブル信号CKE0、CKE1を出力する。クロックイネーブル信号CKE0、CKE1は、ランクRANK0、RANK1をそれぞれ動作させるクロック信号CLK0、CLK1のランクRANK0、RANK1内への供給を許可する信号である。クロックイネーブル信号CKE0およびクロック信号CLK0は、ランクRANK0に供給され、クロックイネーブル信号CKE1およびクロック信号CLK1は、ランクRANK1に供給される。
例えば、クロックイネーブル信号CKE0がロウレベルに設定されることで、ランクRANK0の内部回路の動作が停止し、クロックイネーブル信号CKE1がロウレベルに設定されることで、ランクRANK1の内部回路の動作が停止する。例えば、DRAMチップを含むメモリモジュールDIMMでは、内部回路の動作の停止は、メモリセルに保持したデータを再書き込みするリフレッシュ動作の停止を含む。ランクRANK0またはRANK1の内部回路の動作の停止により、メモリモジュールDIMMの消費電力は低くなる。
ランクRANK0にアクセスするアクセスコマンドCMDとして、RD、WR、RD(RMW)、WR(RMW)、RDD、RD(RMWC)がある。ランクRANK1にアクセスするアクセスコマンドCMDとして、WRC、RDC、RD(RMWD)、WR(RMWD)、WR(RMWC)がある。アクセスコマンドCMDと、アクセスされるランクRANK0、RANK1との関係は、図10でも説明する。
メモリインタフェース部400は、読み出しコマンドRDD、RD(RMWD)により読み出されたデータのエラーの有無を示す実行結果RSLTDを診断コマンド生成部210に出力する。メモリインタフェース部400は、読み出しコマンドRDC、RD(RMWC)により読み出されたデータのエラーの有無を示す実行結果RSLTCを退避コマンド生成部220に出力する。
読み出しコマンドRDD、RD(RMWD)、RD(RMWC)により読み出されるデータのエラーチェックは、エラー検出訂正回路EDCCにより実行される。読み出しコマンドRDCにより読み出されるデータのエラーチェックは、エラー検出訂正回路EDCCを動作させず、保持回路EHLDに保持された期待値を比較することで実行される。後述するように、読み出しコマンドRDCにより読み出されるデータの期待値は、書き込みコマンドWRCによりランクRANK1に書き込まれるデータである。エラー検出訂正回路EDCCの動作を、読み出しコマンドRDCによるデータの読み出し時に停止させることで、エラー検出動作に必要な時間を短くできる。
図10は、図2に示した情報処理装置の動作の概要を示している。図10において、各ランクRANK0、RANK1の網掛けの領域は、アクセス可能な期間を示している。各ランクRANK0、RANK1の網掛けを除く領域は、低電力モード中であることを示している。例えば、情報処理装置の動作は、診断期間、退避準備期間、退避期間に分けられる。
各ランクRANK0、RANK1の脇に示した右向きの矢印は、コマンド制御部100から出力されるアクセスコマンドACMDを示し、左向きの矢印は、診断制御部200から出力される診断コマンドDCMDおよび退避コマンドCCMDを示している。
診断期間は、運用系メモリブロックであるランクRANK0、RANK1において、アクセスコマンドACMDによるアクセス動作と、診断コマンドDCMD(RDD)による診断とが、所定の比率(この例では、2:1)で実行される期間である。すなわち、診断コマンドDCMDは、アクセスコマンドACMDの合間に生成される。これにより、メモリ制御装置MCNTは、診断期間をコントローラCNTLに認識されることなく、ランクRANK0のエラーをチェックできる。ランクRANK1は、ランクRANK0のデータがランクRANK1に退避された後、新たな運用系メモリブロックとして動作する。診断期間の動作の例は、図11および図14に示す。
退避準備期間は、診断期間において、ランクRANK0に訂正可能なエラーが同じアドレスで連続して発生した場合に開始される。診断期間から退避準備期間に移行される場合、退避系メモリブロックであるランクRANK1のリフレッシュ動作が開始され、ランクRANK1は、データを保持可能になる。退避準備期間は、ランクRANK0のデータをランクRANK1に退避する退避期間の前に、ランクRANK1を初期化し、ランクRANK1が正常に動作することを確認する期間である。退避準備期間により退避用メモリブロックであるランクRANK1の動作を確認することで、退避期間にランクRANK1に退避されるデータの信頼性を向上できる。
ランクRANK1は、クロックイネーブル信号CKE1によりランクRANK1のリフレッシュ動作を開始した後、退避コマンドCCMDである書き込みコマンドWRCにより固定値をメモリセルに書き込むことで初期化される。ランクRANK1の動作の確認は、退避コマンドCCMDである読み出しコマンドRDCを用いて、メモリセルから読み出されるデータを固定値(期待値)と比較することで実行される。
アクセスコマンドACMDは、退避準備期間においてもランクRANK0に供給される。換言すれば、書き込みコマンドWRCおよび読み出しコマンドRDCは、アクセスコマンドACMDの合間に生成される。これにより、メモリ制御装置MCNTは、退避準備期間をコントローラCNTLに認識されることなく、ランクRANK1に初期値を書き込み、ランクRANK1が正常に動作することを確認できる。
退避準備期間におけるアクセスコマンドACMDと退避コマンドCCMDとの比率は、診断期間と同様の比率(この例では、2:1)である。退避準備期間の動作の例は、図12および図15に示す。
なお、退避準備期間にエラーの判定に使用する”同じアドレス”とは、ロウアドレスでもよく、ロウアドレスおよびコラムアドレスの両方でもよい。ロウアドレスは、メモリセルに接続されるワード線を示すアドレスであり、コラムアドレスは、ワード線に接続されるメモリセルのうちの所定数を選択するアドレスである。DRAMチップを含むメモリモジュールDIMMでは、ロウアドレスおよびコラムアドレスは、ロウアドレスストローブ信号/RASおよびコラムアドレスストローブ信号/CASにそれぞれ同期してメモリモジュールDIMMに供給される。
退避期間は、退避系メモリブロックであるランクRANK1の初期化と動作確認とが完了した後、ランクRANK0のデータをランクRANK1に退避する期間である。ランクRANK0からランクRANK1へのデータの退避は、専用のリードモディファイライトコマンドRMWCを用いて実行される。これにより、退避コマンド生成部220は、リードコマンドRDおよびライトコマンドWRをコマンド送信部230に個別に出力する代わりに、リードモディファイライトコマンドRMWCを使用でき、コマンドの生成効率を向上できる。
メモリインタフェース部400は、リードモディファイライトコマンドRMWCの読み出しコマンドRD(RMWC)をランクRANK0に供給し、ランクRANK0からデータを読み出す。次に、メモリインタフェース部400は、ランクRANK0から読み出したデータをエラー訂正し、訂正したデータを、リードモディファイライトコマンドRMWCの書き込みコマンドWR(RMWC)とともにランクRANK1に供給する。そして、ランクRANK0から読み出されたデータがランクRANK1の同じアドレスの記憶領域に書き込まれる。
アクセスコマンドACMDは、退避期間においてもランクRANK0に供給される。退避準備期間におけるアクセスコマンドACMDと退避コマンドCCMDとの比率は、診断期間および退避準備期間と同様の比率(この例では、2:1)である。退避期間の動作の例は、図13および図16に示す。
退避期間では、ランクRANK0からランクRANK1へのデータの退避は、アドレスを順次に更新して実行される。メモリインタフェース部400は、退避が完了したアドレスを保持するレジスタ等の保持回路AHLDを有する。そして、メモリインタフェース部400は、アクセスコマンドACMD(書き込みコマンド)とともに受けるアドレスが、データが退避されていない記憶領域を示す場合、データをランクRANK0に書き込む。メモリインタフェース部400は、アクセスコマンドACMD(書き込みコマンド)とともに受けるアドレスが、データが退避された記憶領域を示す場合、データをランクRANK1に書き込む。図10に示した退避期間において、ランクRANK1に供給されるアクセスコマンドACMD(WR)は、ランクRANK1に退避された領域に対するデータの書き込み動作を示している。
退避期間において、ランクRANK0からランクRANK1に全てのデータが退避された後、メモリインタフェース部400は、運用系メモリブロックをランクRANK0からRANK1に交替する。運用系メモリブロックの交替時、ランクRANK0は、低電力モードに設定され、例えば、ランクRANK0のリフレッシュ動作が禁止される。ランクRANK0がアクセスされない期間に、ランクRANK0を低電力モードに設定することで、メモリモジュールDIMMの消費電力を削減できる。
運用系メモリブロックの交替後、メモリインタフェース部400は、アクセスコマンドACMDをランクRANK1に供給する。そして、この後の診断期間では、新たな運用系メモリブロックであるランクRANK1において、アクセスコマンドACMDによるアクセス動作と、診断コマンドDCMD(RDD1)による診断とが、所定の比率で実行される。ランクRANK1の診断期間の動作の例は、図17に示す。
この実施形態では、退避準備期間および退避期間において、アクセスコマンドACMDをランクRANK0に供給できる。したがって、コントローラCNTLは、運用系メモリブロックに訂正可能なエラーが発生した場合にも、常に所定の頻度でメモリモジュールDIMMにアクセスでき、情報処理装置の性能は低下しない。
また、退避系メモリブロックであるランクRANK1の動作は、運用系メモリブロックのエラーが検出されるまで禁止され、運用系メモリブロックであるランクRANK0の動作は、運用系メモリブロックの交替後に禁止される。この実施形態では、運用系メモリブロックと退避系メモリブロックが互いに重複して動作する期間は、退避準備期間と退避期間である。これにより、運用系メモリブロックと退避系メモリブロックのリフレッシュ動作を常に実行する場合に比べて、メモリモジュールDIMMの消費電力を削減できる。
これに対して、アクセスコマンドACMDに応答して、運用系メモリブロックと退避系メモリブロックとの両方にデータが書き込まれる場合、常に2つのメモリブロックが動作するため、1つのメモリブロックを動作させる場合に比べて、消費電力は増加する。
図11は、図10に示した診断期間の動作フローの例を示している。図11の動作は、図2に示したメモリ制御装置MCNTにより実行される。なお、図11の各ステップは、動作を分かりやすくするための区分けであり、実際には、メモリ制御装置MCNT内のハードウエアが連動することにより、複数のステップが並列に実行されてもよい。
まず、ステップS100において、メモリインタフェース部400は、コマンド制御部100を介してコントローラCNTLから供給されるアクセスコマンドACMDを受け、ランクRANK0にアクセスする。ステップS102において、メモリインタフェース部400は、規定回数(例えば、2回)のアクセスコマンドACMDを受けたか否かを検出する。メモリインタフェース部400は、アクセスコマンドACMDを規定回数受けていない場合、図7に示した許可通知PERAを出力し、ステップS100に戻って、アクセスコマンドACMDを受け付ける。
規定回数のアクセスコマンドACMDを受けた場合、メモリインタフェース部400は、ステップS104において、図7に示した許可通知PERDを出力し、診断制御部200の診断コマンド生成部210からの診断コマンドDCMD(RDD)を受ける。ステップS106において、メモリインタフェース部400は、誤り検出訂正回路EDCCを用いて、ランクRANK0から読み出されるデータに訂正可能なエラーCEがあるか否かを検出する。訂正可能なエラーCEがある場合、メモリインタフェース部400は、訂正可能なエラーCEを検出したことを実行結果RSLTDとして診断コマンド生成部210に出力し、ステップS108の動作を開始する。
読み出したデータにエラーがない場合、ステップS112において、メモリインタフェース部400は、訂正不可能なエラーUCEがあるか否かを検出する。訂正不可能なエラーUCEがある場合、メモリインタフェース部400は、訂正不可能なエラーUCEを検出したことを実行結果RSLTD(エラー通知)として診断コマンド生成部210に出力し、診断処理を終了する。
診断コマンド生成部210は、エラー通知に基づいて、コントローラCNTLにエラーが発生したことを通知する。例えば、コントローラCNTLは、エラー通知を情報処理装置の外部にアラームとして通知し、その後、メモリモジュールDIMMが交換される。
メモリインタフェース部400は、読み出したデータにエラーがない場合、エラーがない旨を実行結果RSLTDとして診断コマンド生成部210に出力し、診断コマンド生成部210にステップS114の動作を開始させる。ステップS114において、診断コマンド生成部210は、読み出したデータにエラーがない場合、診断用のアドレスを更新し、次の診断コマンドDCMD(RDD)を出力する。この後、メモリインタフェース部400は、アクセスコマンドACMDを再び受け付ける。
一方、ステップS108において、メモリインタフェース部400は、エラーを訂正した正しいデータをランクRANK0に書き込む。ステップS110において、診断コマンド生成部210は、実行結果RSLTDとして受けたエラーCEの通知が、同じアドレスで連続して2回検出されたか否かを判断する。エラーCEが同じアドレスで連続して2回検出された場合、診断コマンド生成部210は、診断期間の終了を示す通知NTCDをメモリインタフェース部400に出力し、データの退避の開始要求CREQを退避コマンド生成部220に出力する。そして、アクセス制御装置MCNTは、退避準備動作を開始する。
訂正可能なエラーが連続して2回検出される場合、メモリセル等にソリッド不良が発生した可能性がある。ソリッド不良による1ビットエラーに加えて、同じアドレスでソフトエラー等による1ビットエラーが発生した場合、エラー訂正によりデータを復帰させることは困難である。この実施形態では、2ビットエラーが発生する前に、退避準備動作および退避動作を開始することで、メモリモジュールDIMMに保持されるデータの信頼性を向上できる。
診断コマンド生成部210は、エラーCEが同じアドレスで連続して2回検出されていない場合、すなわち、エラーCEの検出が1回目の場合、アドレスを更新することなく次の診断コマンドDCMD(RDD)を出力する。これにより、次のステップS104、S106では、同じアドレスの記憶領域からデータが再び読み出され、2回目のエラーの有無が検出される。
以上のように、診断コマンドDCMDによりランクRANK0から読み出されるデータにエラーがない場合、あるいは、訂正可能なエラーCEが2回連続して検出されない場合、ランクRANK0が運用系メモリブロックとしてアクセスされる。訂正可能なエラーCEが2回連続して検出される場合、ランクRANK0からランクRANK1へのデータの退避動作が実行される。診断コマンドDCMDによりランクRANK0から読み出されるデータに訂正不可能なエラーUCEが検出される場合、メモリモジュールDIMMにエラーが発生した旨のエラー通知が実行結果RSLTDとして、メモリインタフェース部400から診断コマンド生成部210に通知される。
図12は、図10に示した退避準備期間の動作フローの例を示している。図12の動作は、図2に示したメモリ制御装置MCNTにより実行される。なお、図12の各ステップは、動作を分かりやすくするための区分けであり、実際には、メモリ制御装置MCNT内のハードウエアが連動することにより、複数のステップが並列に実行されてもよい。
まず、ステップS200において、診断制御部200の退避コマンド生成部220は、退避系メモリブロックであるランクRANK1にリフレッシュ動作を開始させる通知NTCCをメモリインタフェース部400に出力する。メモリインタフェース部400は、通知NTCCに基づいて、クロックイネーブル信号CKE1を出力し、ランクRANK1の状態を低電力モードから通常モードに移行させ、ランクRANK1にリフレッシュ動作を開始させる。
次に、ステップS202、S204において、メモリインタフェース部400は、規定回数のアクセスコマンドACMDを受け、ランクRANK0にアクセスする。ステップS202、S204では、図11に示したS100、S102と同様の動作が実行される。
規定回数のアクセスコマンドACMDを受けた場合、メモリインタフェース部400は、ステップS206において、図7に示した許可通知PERDを出力し、診断制御部200の退避コマンド生成部220からの退避コマンドCCMD(WRC)を書き込みデータおよび書き込みアドレスとともに受ける。メモリインタフェース部400は、退避系メモリブロックであるランクRANK1にデータを書き込む。退避準備期間にランクRANK1の記憶領域に書き込まれるデータは、全て同じ値である。
次に、ステップS208、S210において、退避コマンド生成部220は、ランクRANK1の全ての領域にデータが書き込まれるまで、書き込みアドレスを更新する。例えば、書き込みアドレスは、アドレスを小さい側から1ずつインクリメントすることで更新される。ステップS210では、退避コマンド生成部220は、更新した読み出しアドレスとともに、次の診断コマンドCCMD(WRC)を出力する。
ランクRANK1の全ての領域に同じデータが書き込まれた場合、退避コマンド生成部220は、ステップS216、S218、S220、S222において、ランクRANK1の全ての領域からデータを読み出し、期待値と比較する。期待値は、ステップS206でランクRANK1に書き込んだ書き込みデータであり、保持回路EHLDに保持されたデータである。ステップS212、S214では、ステップS202、S204と同様の動作が実行される。
ステップS216において、メモリインタフェース部400は、許可通知PERDを出力し、退避コマンド生成部220からの退避コマンドCCMD(RDC)を読み出しアドレスとともに受ける。メモリインタフェース部400は、退避系メモリブロックであるランクRANK1からデータを読み出す。
ステップS218において、メモリインタフェース部400は、読み出しデータをステップS206の書き込み動作時に保持した期待値と比較する。メモリインタフェース部400は、読み出しデータが期待値と一致しない場合、ランクRANK1が退避系メモリブロックとして使用できないことを示す実行結果RSLTCを退避コマンド生成部220に出力する。
退避コマンド生成部220は、実行結果RSLTCを受け、退避動作を中止し、コントローラCNTLに、メモリモジュールDIMMの退避系メモリブロックにエラーが発生したことを通知する。例えば、コントローラCNTLは、エラーの通知を情報処理装置の外部にアラームとして通知し、その後、メモリモジュールDIMMが交換される。
読み出しデータが期待値と一致する場合、ステップS220において、退避コマンド生成部220は、ランクRANK1の全ての領域の読み出しデータを期待値と比較したか否かを判断する。ランクRANK1の全ての領域の読み出しデータが期待値と比較され、ランクRANK1が正常に動作することが確認された場合、退避準備期間は終了し、退避期間が開始される。期待値と比較していないデータがランクRANK1に存在する場合、ステップS222において、退避コマンド生成部220は、読み出しアドレスを更新し、次の診断コマンドCCMD(RDC)を出力する。例えば、読み出しアドレスは、アドレスを小さい側から1ずつインクリメントすることで更新される。
図13は、図10に示した退避期間の動作フローの例を示している。図13の動作フローは、図2に示したメモリ制御装置MCNTにより実行される。なお、図13の各ステップは、動作を分かりやすくするための区分けであり、実際には、メモリ制御装置MCNT内のハードウエアが連動することにより、複数のステップが並列に実行されてもよい。
退避期間の開始時に、退避コマンド生成部220は、退避期間の開始を示す通知NTCCをメモリインタフェース部400に出力する。メモリインタフェース部400は、退避期間の開始を示す通知NTCCを受け、例えば、退避期間を示すレジスタをセットする。ステップS300では、図11に示したS100と同様の動作が実行される。
ステップS302において、メモリインタフェース部400は、保持回路AHLDを参照し、アクセスコマンドACMDとともに受けるアドレスが、ランクRANK0からランクRANK1にデータを退避した記憶領域を示すか否かを判定する。アドレスがデータを退避していない記憶領域を示す場合、ステップS304において、メモリインタフェース部400は、運用系メモリブロックであるランクRANK0にアクセスコマンドACMDを供給する。アドレスがデータを退避した記憶領域を示す場合、ステップS306において、メモリインタフェース部400は、退避系メモリブロックであるランクRANK1にアクセスコマンドACMDを供給する。なお、読み出しコマンドRDとともに供給されるアドレスがデータを退避した記憶領域を示す場合、メモリインタフェース部400は、読み出しコマンドRDをランクRANK0に供給してもよい。
保持回路AHLDに保持されたアドレスがデータの退避が完了した記憶領域を示す場合に、アクセスコマンドACMDをランクRANK1に供給することで、退避期間にメモリモジュールDIMMに書き込まれるデータを失うことなく保持できる。換言すれば、退避コマンドCCMDがアクセスコマンドACMDの合間に生成され、アクセス要求AREQを受け付けながらデータの退避を実行する場合にも、メモリモジュールDIMMに書き込まれたデータは失われない。
これに対して、もし、書き込みデータが、データの退避が完了したランクRANK0の記憶領域に書き込まれる場合、書き込みデータは、これ以降の退避期間において、ランクRANK1に退避されない。このため、退避期間の終了後、運用系メモリブロックがランクRANK0からランクRANK1に交替された時点で、書き込みデータは失われる。
ステップS308では、図11に示したS102と同様の動作が実行される。ステップS310において、メモリインタフェース部400は、読み出しコマンドRD(RMWC)を受けた場合、ステップS312の動作を実行し、書き込みコマンドWR(RMWC)を受けた場合、ステップS314の動作を実行する。ステップS312の読み出し動作およびステップS314の書き込み動作は、退避コマンド生成部220により生成されるリードモディファイライトコマンドRMWCに基づいて実行される。なお、読み出しコマンドRD(RMWC)および書き込みコマンドWR(RMWC)とともにメモリインタフェース部400に供給されるアドレスは、保持回路AHLDに保持されたアドレスの次のアドレスであり、データの退避が完了していないアドレスである。
ステップS312において、メモリインタフェース部400は、退避期間を示すレジスタがセットされたため、運用系メモリブロックであるランクRANK0に読み出しコマンドを供給し、データを読み出す。なお、メモリインタフェース部400は、読み出したデータにエラー(CEまたはUCE)がある場合、退避処理を中止し、ランクRANK1が退避系メモリブロックとして使用できないことを示す実行結果RSLTCを退避コマンド生成部220に出力する。
退避コマンド生成部220は、実行結果RSLTCを受け、退避動作を中止し、コントローラCNTLに、メモリモジュールDIMMの退避系メモリブロックにエラーが発生したことを通知する。例えば、コントローラCNTLは、エラーの通知を情報処理装置の外部にアラームとして通知し、その後、メモリモジュールDIMMが交換される。
ステップS314において、メモリインタフェース部400は、退避期間を示すレジスタがセットされたため、退避系メモリブロックであるランクRANK1に書き込みコマンドを供給する。そして、メモリインタフェース部400は、ステップS312の実行によりランクRANK0から読み出したデータをランクRANK1に書き込む。
データのランクRANK1への書き込み後、ステップS316において、メモリインタフェース部400は、保持回路AHLDに保持されたアドレスを更新する。例えば、アドレスは、アドレスを小さい側から1ずつインクリメントすることで更新される。
ステップS318において、退避コマンド生成部220は、全てのデータがランクRANK0からランクRANK1に退避されたか否かを判断する。ランクRANK1に退避されていないデータがある場合、退避コマンド生成部220は、次のリードモディファイライトコマンドRMWCを更新したアドレスとともに出力し、動作はステップS300に戻る。
全てのデータがランクRANK0からランクRANK1に退避された場合、ステップS320において、退避コマンド生成部220は、運用系メモリブロックをランクRANK0からランクRANK1に交替する通知NTCCをメモリインタフェース部400に出力する。メモリインタフェース部400は、運用系メモリブロックの交替の通知NTCCを受けた以降、アクセスコマンドACMDをランクRANK1に供給し、ランクRANK1を運用系メモリブロックとして動作させる。
次に、ステップS322において、退避コマンド生成部220は、退避系メモリブロックであるランクRANK0にリフレッシュ動作を禁止させる通知NTCCをメモリインタフェース部400に出力する。メモリインタフェース部400は、通知NTCCに基づいて、クロックイネーブル信号CKE0の出力を停止し、ランクRANK0の状態を通常モードから低電力モードに移行させ、ランクRANK0にリフレッシュ動作を禁止させる。
図14は、図11に示した診断期間の動作の例を示している。図14は、メモリ制御装置MCNTの動作を示している。例えば、アクセスコマンドACMDの規定回数は2回に設定されており、コマンド調停部300は、アクセスコマンドACMDを2回出力する毎に、診断コマンドDCMDを1回出力する。診断コマンド生成部210が診断期間に生成する診断コマンドDCMDは、読み出しコマンドRDDである。末尾に付けた数字が同じ読み出しコマンドRDDは、アドレスが同じであることを示している。ランクRANK0の読み出し動作において、読み出しコマンドRDの右下に付けた”+WR”は、エラー検出訂正回路EDCCが訂正可能なエラーを検出し、エラー訂正したデータを再書き込みすることを示している。
メモリインタフェース部400は、所定の周期でリフレッシュコマンドREFをランクRANK0に出力し、ランクRANK0にリフレッシュ動作を実行させる(図14(a))。コマンド送信部130は、リードモディファイライトコマンドRMWをアクセス要求AREQとして受けた場合、読み出しコマンドRDと書き込みコマンドWRとを、共通のアドレスおよびビット演算情報とともに順次に出力する(図14(b))。読み出しコマンドRDにより読み出したデータは、ビット演算情報とビット演算され、書き込みコマンドWRにより書き込むデータとして生成される。
診断コマンド生成部210は、診断期間の最初に、診断期間の開始を示す通知NTCDをメモリインタフェース部400に出力する(図14(c))。メモリインタフェース部400は、診断期間を示すレジスタをセットし、診断コマンド生成部210から出力される読み出しコマンドRDDを、退避コマンド生成部220から出力される同じコードの読み出しコマンドRDCと区別する。読み出しコマンドRDDは、エラー検出訂正回路EDCCにより読み出しデータのエラーを判定する点で、期待値との比較により読み出しデータのエラーを検出する読み出しコマンドRDCと相違する。
読み出しコマンドRDD2によるランクRANK0の読み出し動作において、エラー検出訂正回路EDCCは、訂正可能なエラーCEを検出し、エラー訂正したデータを再書き込みする(図14(d))。メモリインタフェース部400は、エラーCEの検出を実行結果RSLTDとして、診断コマンド生成部210として通知する(図14(e))。なお、診断コマンドDCMDの欄において、下側の読み出しコマンドRDDは、診断コマンド生成部210から出力されることを示し、上側の読み出しコマンドRDDは、コマンド調停部300から出力されることを示している。
診断コマンド生成部210は、実行結果RSLTDを受け、同じアドレスの読み出しコマンドRDD2を再度出力する(図14(f))。エラー検出訂正回路EDCCは、読み出しコマンドRDD2に応じてランクRANK0から読み出されるデータにエラーがないことを検出する。メモリインタフェース部400は、同じアドレスの読み出しデータに連続してエラーが発生していないため、前回のエラーを、ノイズやソフトエラー等の間欠エラーと判断する。診断コマンド生成部210は、2回目の読み出しコマンドRDD2による読み出しデータにエラーがないことを実行結果RSLTD(OK)として受け、次のアドレスの読み出しコマンドRDD3を出力する(図14(g、h))。
診断コマンド生成部210は、読み出しコマンドRDD3による読み出しデータにエラーがないことを実行結果RSLTD(OK)として受け、次のアドレスの読み出しコマンドRDD4を出力する(図14(i、j))。読み出しコマンドRDD4によるランクRANK0の読み出し動作において、エラー検出訂正回路EDCCは、訂正可能なエラーCEを検出し、エラー訂正したデータを再書き込みする(図14(k))。メモリインタフェース部400は、エラーCEの検出を実行結果RSLTDとして、診断コマンド生成部210として通知する(図14(l))。
診断コマンド生成部210は、実行結果RSLTDを受け、同じアドレスの読み出しコマンドRDD4を再度出力する(図14(m))。読み出しコマンドRDD4によるランクRANK0の読み出し動作において、エラー検出訂正回路EDCCは、訂正可能なエラーCEを再度検出し、エラー訂正したデータを再書き込みする(図14(n))。メモリインタフェース部400は、エラーCEの検出を実行結果RSLTDとして、診断コマンド生成部210として通知する(図14(o))。
診断コマンド生成部210は、2回目の読み出しコマンドRDD4による読み出しデータに訂正可能なエラーがあることを実行結果RSLTD(CE)として受け、ランクRANK0の使用を停止することを判断する。そして、診断コマンド生成部210は、診断期間の終了を示す通知NTCD(DEND)をメモリインタフェース部400に出力する(図14(p))。メモリインタフェース部400は、診断期間を示すレジスタをリセットする。これにより、診断期間が終了する。
図15は、図12に示した退避準備期間の動作の例を示している。図15は、図14の続きを示しており、メモリ制御装置MCNTの動作を示している。図14と同一または同様の動作については、図14と同様に表記し、詳細な説明は省略する。末尾に付けた数字が同じ書き込みコマンドWRCは、アドレスが同じであることを示している。
退避準備期間の最初に、退避コマンド生成部220は、診断期間の開始を示す通知NTCDをメモリインタフェース部400に出力する(図15(a))。メモリインタフェース部400は、退避期間を示すレジスタをセットし、退避コマンド生成部220から出力される読み出しコマンドRDCを、診断コマンド生成部210から出力される同じコードの読み出しコマンドRDDと区別する。
退避コマンド生成部220は、最初の書き込みコマンドWRC1を書き込みデータ(期待値)とともにメモリインタフェース部400に出力する(図15(b))。なお、退避コマンドCCMDの欄において、下側の書き込みコマンドWRCは、退避コマンド生成部220から出力されることを示し、上側の書き込みコマンドWRCは、コマンド調停部300から出力されることを示している。
メモリインタフェース部400は、書き込みコマンドWRC1に応答して、書き込みコマンドWRおよび書き込みデータをランクRANK1に出力し、書き込み動作を実行する(図15(c))。また、メモリインタフェース部400は、書き込みデータをレジスタ等の保持回路に保持する。この後、メモリインタフェース部400は、退避コマンド生成部220からの書き込みコマンドWRC2、WRC3、...、WRC4、WRC5に応答して、書き込みコマンドWRおよび書き込みデータをランクRANK1に出力する(図15(d、e、f))。そして、ランクRANK1の書き込み動作が、アドレスを更新しながら順次に実行される。
2回目以降の書き込み動作において、メモリインタフェース部400は、レジスタ等の保持回路に保持した書き込みデータをランクRANK1に供給する。メモリインタフェース部400は、退避期間を示すレジスタがセットされたことに基づいて、レジスタ等に保持したデータを書き込む書き込みコマンドWRCを、他の書き込みコマンドと区別可能である。なお、メモリインタフェース部400は、退避期間を示すレジスタのセット後に最初に書き込みコマンドWRCを受けた場合、書き込みコマンドWRCとともに受ける書き込みデータをランクRANK1に出力する。
ランクRANK1の全ての領域にデータが書き込まれた後、退避コマンド生成部220は、読み出しコマンドRDCおよび読み出しアドレスの出力を開始する(図15(g))。メモリインタフェース部400は、読み出しコマンドRDCを読み出しコマンドRDとしてランクRANK1に供給し、読み出し動作を実行する(図15(h))。メモリインタフェース部400は、ランクRANK1から読み出されるデータを、レジスタに保持した期待値(書き込みデータ)と比較し、比較結果を実行結果RSLTCとして、退避コマンド生成部220に通知する(図15(i))。
この例では、読み出しデータが期待値と一致するため、エラーがないこと示す実行結果RSLTC(OK)が退避コマンド生成部220に出力される。読み出しデータが期待値と一致しない場合、エラーがあることを示す実行結果RSLTC(CEまたはUCE)が退避コマンド生成部220に出力される。退避コマンド生成部220は、エラーを示す実行結果RSLTCを受けた場合、退避動作を中止し、コントローラCNTLに、メモリモジュールDIMMの退避系メモリブロックにエラーが発生したことを通知する。
この実施形態では、エラー検出訂正回路EDCCを用いずに読み出しデータと期待値との比較を実行するため、エラー検出訂正回路EDCCを用いる場合に比べて退避準備期間を短縮でき、消費電力を削減できる。
図16は、図13に示した退避期間の動作の例を示している。図16は、図15の続きを示しており、メモリ制御装置MCNTの動作を示している。図14および図15と同一または同様の動作については、図14および図15と同様に表記し、詳細な説明は省略する。末尾に付けた数字が同じ読み出しコマンドRDCは、アドレスが同じであることを示している。
退避コマンド生成部220は、読み出しアドレスを更新しながら、読み出しコマンドRDCを順次に出力する(図16(a、b))。メモリインタフェース部400は、読み出しコマンドRDCをランクRANK1に供給し、ランクRANK1から読み出されたデータを期待値と比較する(図16(c、d))。メモリインタフェース部400は、比較結果を実行結果RSLTCとして、退避コマンド生成部220に通知する(図16(e、f))。
退避コマンド生成部220は、ランクRANK1から読み出した全てのデータにエラーがない場合、退避準備期間を終了し、退避期間を開始する。退避期間において、退避コマンド生成部220は、リードモディファイライトコマンドRMWCを、アドレスを更新しながらコマンド送信部230に順次に出力する(図16(g、h、i))。コマンド送信部230は、リードモディファイライトコマンドRMWCを読み出しコマンドRDと書き込みコマンドWRに分けて、メモリインタフェース部400に順次に出力する。
メモリインタフェース部400は、コマンド送信部230からの読み出しコマンドRDをランクRANK0に供給し、ランクRANK0からデータを読み出す(図16(j、k、l))。メモリインタフェース部400は、読み出したデータのエラーの有無をエラー検出訂正回路EDCCにより検出し、検出結果を実行結果RSLTCとして退避コマンド生成部220に出力する(図16(m、n、o))。退避コマンド生成部220は、エラーCEまたはエラーUCEを示す実行結果RSLTCを受けた場合、退避動作を中止し、コントローラCNTLに、メモリモジュールDIMMの退避系メモリブロックにエラーが発生したことを通知する。
また、メモリインタフェース部400は、コマンド送信部230からの書き込みコマンドWRを、ランクRANK0から読み出したデータとともにランクRANK1に供給し、ランクRANK1にデータを書き込む(図16(p、q))。
この際、リードモディファイライトコマンドRMWの読み出しコマンドRDとともに受けるアドレスを、データを書き込むアドレスとして用いてもよい。この場合、書き込みコマンドWR毎にアドレスを受ける場合に比べて、コマンド送信部130、230、コマンド調停部300およびメモリインタフェース部400内で動作する回路を少なくでき、消費電力を削減できる。
退避期間を示すレジスタがセットされたため、メモリインタフェース部400は、リードモディファイライトコマンドRMWCを、同じコードのリードモディファイライトコマンドRMWDと区別可能である。なお、図16には示していないが、メモリインタフェース部400は、ランクRANK1にデータを書き込む毎に、同じアドレスの読み出し動作を実行し、読み出したデータのエラーを検出してもよい。
一方、アクセスコマンドACMDとともに供給されるアドレスが、ランクRANK0からランクRANK1にデータを退避した記憶領域を示す場合、メモリインタフェース部400は、ランクRANK1にアクセスコマンドAMCDを供給する(図16(r、s))。なお、読み出しコマンドRDとともに供給されるアドレスが、データを退避した記憶領域を示す場合、メモリインタフェース部400は、ランクRANK0に読み出しコマンドRDを供給し、ランクRANK0からデータを読み出してもよい。
図17は、図10に示した運用系メモリブロックの交替動作の例を示している。図17は、図16の続きを示しており、メモリ制御装置MCNTの動作を示している。図14から図16と同一または同様の動作については、図14から図16と同様に表記し、詳細な説明は省略する。
まず、図16と同様に、リードモディファイライトコマンドRMWCにより、ランクRANK0から読み出されたデータがランクRANK1に書き込まれる(図17(a、b))。退避コマンド生成部220は、ランクRANK0からランクRANK1への全てのデータの退避後、退避系メモリブロックであるランクRANK0のリフレッシュ動作を禁止させる通知NTCC(REF0D)をメモリインタフェース部400に出力する(図17(c))。メモリインタフェース部400は、通知NTCC(REF0D)に基づいて、クロックイネーブル信号CKE0をロウレベルに設定し、ランクRANK0のリフレッシュ動作を禁止する。
退避コマンド生成部220は、運用系メモリブロックをランクRANK0からランクRANK1に交替する通知NTCC(SW)をメモリインタフェース部400に出力する(図17(d))。メモリインタフェース部400は、通知NTCC(SW)を受けた以降、コマンド制御部100から供給されるアクセスコマンドACMDをランクRANK1に供給する。すなわち、運用系メモリブロックがランクRANK0からRANK1に交替され、ランクRANK1が運用系メモリブロックとして動作する。
また、退避コマンド生成部220は、診断コマンド生成部210に、ランクRANK1が運用系メモリブロックとして動作を開始したことを通知する。診断コマンド生成部210は、通知を受けて、診断期間の開始を示す通知NTCDをメモリインタフェース部400に出力する(図17(e))。そして、ランクRANK1の診断期間が開始され、ランクRANK1において、図14と同様に、アクセスコマンドACMDによるアクセス動作と、診断コマンドDCMD(RDD)による診断とが、所定の比率で実行される。
以上、この実施形態においても、図1に示した実施形態と同様に、運用系メモリブロックのエラーが検出されるまで退避系メモリブロックのリフレッシュ動作を禁止することで、メモリ装置MEMの消費電力を削減できる。さらに、診断コマンドDCMDおよび退避コマンドCCMDがアクセスコマンドACMDの合間に供給されるため、コントローラCNTLは、診断期間、退避準備期間および退避期間を認識することなく、所定の頻度でメモリ装置MEMにアクセスできる。この結果、情報処理装置の性能が低下することを抑制できる。
アクセスコマンドACMDおよび診断コマンドDCMDの出力回数の比率と、アクセスコマンドACMDおよび退避コマンドCCMDの出力回数の比率を、情報処理装置の仕様やメモリ装置MEMのアクセス速度に合わせて任意の値に設定できる。リードモディファイライトコマンドRMWCを用いて、運用系メモリブロックから退避系メモリブロックにデータを退避することで、退避期間におけるコマンドの生成効率を向上できる。
退避準備期間において、メモリインタフェース部400は、エラー検出訂正回路EDCCを用いずに、読み出しデータを保持回路EHLDに保持された期待値と比較する。このため、エラー検出訂正回路EDCCを用いる場合に比べて退避準備期間を短縮できる。また、エラー検出訂正回路EDCCが動作しないため、退避準備期間の消費電力を削減できる。
図18は、別の実施形態におけるメモリ制御装置、情報処理装置およびメモリ制御装置の制御方法の例を示している。図2に示した実施形態で説明した要素と同様または同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。この実施形態では、メモリ制御装置MCNTは、図2に示したコマンド調停部300の代わりにコマンド調停部300Aを有する。コマンド調停部300Aは、図2から図17で説明した機能に加えて、リードモディファイライトコマンドRMW、RMWCの競合を制御する機能を有する。メモリ制御装置MCNTおよび情報処理装置のその他の構成は、図2と同様である。以下の説明では、リードモディファイライトコマンドRMW、RMWCをコマンドRMW、RMWCとも称する。
リードモディファイライトコマンドRMWによりメモリモジュールDIMMに書き込まれるデータは、コントローラCNTLから指示されるビット演算情報による演算後のデータである。一方、リードモディファイライトコマンドRMWCにより書き込まれるデータは、ランクRANK0からランクRANK1にコピーされるデータであり、診断期間にコントローラCNTLにより書き込まれたデータである。このため、同じアドレスの記憶領域に対するコマンドRMW、RMWCが競合する場合、コマンドRMWによる書き込みデータは、コマンドRMWCによる書き込みデータが記憶領域に書き込まれた後に書き込まれることが好ましい。
図19は、図18に示したコマンド調停部300Aにより実行される退避期間の動作フローの例を示している。図19の動作フローは、図13に示したステップS300の実行後に開始される。
まず、ステップS400において、コマンド調停部300Aは、コマンド制御部100からコマンドRMWを受けたか否かを判定する。コマンドRMWを受けた場合、ステップS402において、コマンド調停部300Aは、コマンドRMWを実行するアドレスが、メモリインタフェース部400の保持回路AHLDに保持された退避が完了したアドレスの次のアドレスであるか否かを判定する。すなわち、コマンド調停部300Aは、コマンドRMWを実行するアドレスが、次のコマンドRMWCによって退避される記憶領域のアドレスであるか否かを判定する。
コマンドRMWを実行するアドレスが、退避が完了したアドレスの次のアドレスである場合、ステップS404において、コマンド調停部300Aは、コマンドRMWと、退避コマンド生成部220から受けるコマンドRMWCとが競合するか否かを判定する。コマンドRMW、RMWCと競合する場合、ステップS406において、コマンド調停部300Aは、コマンドRMWをコマンドRMWCより先に受けるか否かを判定する。なお、ステップS400、S402、S404、S406は、並列に判定されてもよい。同じアドレスのコマンドRMW、RMWCが競合しない場合、メモリ制御装置MCNTの動作は、図13に示したステップS302に戻る。
コマンド調停部300Aは、コマンドRMWをコマンドRMWCにより早く受ける場合、ステップS408において、コマンドRMWに伴う読み出しコマンドを出力し、ステップS410において、コマンドRMWCに伴う読み出しコマンドを出力する。メモリインタフェース部400は、読み出しコマンドを順次に受け、コマンドRMWに伴う読み出し動作を先に実行し、コマンドRMWCに伴う読み出し動作を後に実行する。
コマンド調停部300Aは、コマンドRMWをコマンドRMWCより遅く受ける場合、ステップS412において、コマンドRMWCに伴う読み出しコマンドを出力し、ステップS414において、コマンドRMWに伴う読み出しコマンドを出力する。メモリインタフェース部400は、読み出しコマンドを順次に受け、コマンドRMWCに伴う読み出し動作を先に実行し、コマンドRMWに伴う読み出し動作を後に実行する。
次に、ステップS416において、コマンド調停部300Aは、コマンドRMWCに伴う書き込みコマンドを出力する。メモリインタフェース部400は、書き込みコマンドを受けてコマンドRMWCに伴う書き込み動作をメモリモジュールDIMMに指示し、ステップS418において、保持回路AHLDに保持したアドレスを更新する。
次に、ステップS420において、コマンド調停部300Aは、コマンドRMWに伴う書き込みコマンドを出力する。メモリインタフェース部400は、保持回路AHLDに保持されたアドレスに基づいて、コマンドRMWを実行するアドレスを、退避が完了したアドレスと認識し、コマンドRMWに伴う書き込み動作をランクRANK1に対して実行する。これにより、同じアドレスの記憶領域に対するコマンドRMW、RMWCが競合する場合にも、コマンドRMWに伴う書き込みデータを、コマンドRMWCに伴う書き込みデータにより上書きすることなくメモリモジュールDIMMに保持できる。
図20は、図18に示したコマンド制御部100、診断制御部200およびコマンド調停部300Aにより実行される退避期間の動作の例を示している。図7と同一または同様の動作については、図7と同様に表記し、詳細な説明は省略する。この例では、リフレッシュ要求が発生しないため、ビジー信号BSYはロウレベル”L”に維持される。
例えば、コマンド制御部100は、0番目のクロックサイクル以前に、コマンドRMWに伴う読み出しコマンドRD(RMW)を出力する(図20(a))。診断制御部200は、0番目のクロックサイクルにおいて、コマンドRMWCに伴う読み出しコマンドRD(RMWC)を出力する(図20(b))。すなわち、コマンドRMW、RMWCが重複して供給される。読み出しコマンドRD(RMW)、RD(RMWC)によりアクセスされるアドレスは同じであり、ランクRANK0からランクRANK1へのデータの退避が完了したアドレスの次のアドレスである。
コマンド調停部300Aは、コマンドRMWがコマンドRMWCより早く供給されたと判断し、1番目のクロックCLKの立ち上がりエッジに同期して読み出しコマンドRD(RMW)を選択し、アクセスコマンドICMDとして出力する(図20(c))。読み出しコマンドRD(RMW)とともに供給されるアドレスにより示されるメモリモジュールDIMMの記憶領域は、ランクRANK0からランクRANK1にデータが退避されていない領域である。このため、読み出しコマンドRD(RMW)に応答して、ランクRANK0の読み出し動作が実行される。
コマンド調停部300Aは、2番目のクロックCLKの立ち上がりエッジに同期して読み出しコマンドRD(RMWC)を選択し、アクセスコマンドICMDとして出力する(図20(d))。読み出しコマンドRD(RMWC)に応答して、ランクRANK0の読み出し動作が実行される。
コマンド調停部300Aは、3番目のクロックCLKの立ち上がりエッジに同期して書き込みコマンドWR(RMWC)を選択し、アクセスコマンドICMDとして出力する(図20(e))。書き込みコマンドWR(RMWC)によるランクRANK1への書き込み動作の実行により、退避が完了したアドレスが更新される。
コマンド調停部300Aは、4番目のクロックCLKの立ち上がりエッジに同期して書き込みコマンドWR(RMW)を選択し、アクセスコマンドICMDとして出力する(図20(f))。この時点で、書き込みコマンドWR(RMW)とともに供給されるアドレスは、退避が完了したアドレスである。このため、書き込みコマンドWR(RMW)による書き込み動作は、ランクRANK1に対して実行される。
図21は、図18に示したコマンド制御部100、診断制御部200およびコマンド調停部300Aにより実行される退避期間の動作の別の例を示している。図7および図20と同一または同様の動作については、図7および図20と同様に表記し、詳細な説明は省略する。
例えば、コマンド制御部100は、0番目のクロックサイクルにおいて、コマンドRMWに伴う読み出しコマンドRD(RMW)を出力する(図21(a))。診断制御部200は、0番目のクロックサイクル以前に、コマンドRMWCに伴う読み出しコマンドRD(RMWC)を出力する(図21(b))。すなわち、コマンドRMWC、RMWが重複して供給される。読み出しコマンドRD(RMW)、RD(RMWC)によりアクセスされるアドレスは同じであり、ランクRANK0からランクRANK1へのデータの退避が完了したアドレスの次のアドレスである。
コマンド調停部300Aは、1番目のクロックCLKの立ち上がりエッジに同期して読み出しコマンドRD(RMWC)を選択し、アクセスコマンドICMDとして出力する(図21(c))。読み出しコマンドRD(RMWC)に応答して、ランクRANK0の読み出し動作が実行される。
コマンド調停部300Aは、2番目のクロックCLKの立ち上がりエッジに同期して読み出しコマンドRD(RMW)を選択し、アクセスコマンドICMDとして出力する(図21(d))。読み出しコマンドRD(RMW)とともに供給されるアドレスにより示されるメモリモジュールDIMMの記憶領域は、ランクRANK0からランクRANK1にデータが退避されていない領域である。このため、読み出しコマンドRD(RMWC)に応答して、ランクRANK0の読み出し動作が実行される。
この後、図20と同様に、コマンド調停部300Aは、書き込みコマンドWR(RMWC)、WR(RMW)を順に選択し、書き込みコマンドWR(RMWC)、WR(RMW)による書き込み動作がランクRANK1に対して順次に実行される(図21(e、f))。このように、退避が完了したアドレスの次のアドレスに対応するコマンドRMW、RMWCが競合する場合、コマンド調停部300Aは、コマンドRMW、RMWCの先着順に拘わらず、書き込みコマンドWR(RMWC)、WR(RMW)を順次に出力する。
図22は、図18に示したメモリ制御装置MCNTの退避期間における動作の例を示している。図14および図16と同一または同様の動作については、図14および図16と同様に表記し、詳細な説明は省略する。図22において、供給タイミングが競合するコマンドRMW、RMWCによりアクセスされるアドレスは同じであり、ランクRANK0からランクRANK1へのデータの退避が完了したアドレスの次のアドレスである。
図20に示したように、コマンド調停部300Aは、コマンドRD(RMW)の先着を判断した場合、コマンドRD(RMW)、RD(RMWC)、WR(RMWC)、WR(RMW)を、メモリインタフェース部400に順次に出力する(図22(a、b))。コマンドRD(RMW)、RD(RMWC)に伴う読み出し動作は、ランクRANK0に対して実行される。コマンドWR(RMWC)に伴う書き込み動作の実行により、保持回路AHLDに保持された退避が完了したアドレスが更新される(図22(c))。このため、コマンドWR(RMW)に伴う書き込み動作は、ランクRANK1に対して実行される。
一方、図21に示したように、コマンド調停部300Aは、コマンドRD(RMWC)の先着を判断した場合、RD(RMWC)、コマンドRD(RMW)、WR(RMWC)、WR(RMW)をメモリインタフェース部400に順次に出力する(図22(d、e))。コマンドRD(RMWC)、RD(RMW)に伴う読み出し動作は、ランクRANK0に対して実行される。コマンドWR(RMWC)に伴う書き込み動作の実行により、保持回路AHLDに保持された退避が完了したアドレスが更新される(図22(f))。このため、コマンドWR(RMW)に伴う書き込み動作は、ランクRANK1に対して実行される。
以上、この実施形態においても、図1−図17に示した実施形態と同様に、運用系メモリブロックのエラーが検出されるまで退避系メモリブロックのリフレッシュ動作を禁止することで、メモリ装置MEMの消費電力を削減できる。また、診断コマンドDCMDおよび退避コマンドCCMDがアクセスコマンドACMDの合間に供給されるため、コントローラCNTLは、診断期間、退避準備期間および退避期間を認識することなく、所定の頻度でメモリ装置MEMにアクセスできる。
さらに、同じアドレスの記憶領域に対するコマンドRMW、RMWCが競合する場合にも、コマンドRMWに伴う書き込みデータを、コマンドRMWCに伴う書き込みデータにより上書きすることなくメモリモジュールDIMMに保持できる。
以上の図1から図22に示した実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1メモリブロックおよび第2メモリブロックを含むメモリ装置のアクセスを制御するメモリ制御装置において、
アクセス要求に基づいて前記第1メモリブロックまたは前記第2メモリブロックにアクセスする第1コマンドを生成する第1コマンド生成部と、
前記第1メモリブロックにアクセスする第2コマンドを生成する第2コマンド生成部と、
前記第2コマンドに応じて前記第1メモリブロックから読み出されるデータのエラーを検出する検出部と、
前記検出部による所定回数の前記エラーの検出に基づいて、前記第1メモリブロックに保持されたデータを前記第2メモリブロックに退避する第3コマンドを生成する第3コマンド生成部と、
前記検出部による前記所定回数の前記エラーの検出前に、前記第1コマンド生成部から受ける前記第1コマンドおよび前記第2コマンド生成部から受ける前記第2コマンドを、所定比率で交互に前記第1メモリブロックに出力し、前記第2メモリブロックへのデータの退避後に、前記第1コマンドを前記第2メモリブロックに出力するアクセス制御部と
を備えることを特徴とするメモリ制御装置。
(付記2)
前記アクセス制御部は、前記第2メモリブロックにデータを退避する退避期間中に、データが退避された前記第1メモリブロックの記憶領域に対する前記第1コマンドを前記第2メモリブロックに出力すること
を特徴とする付記1に記載のメモリ制御装置。
(付記3)
前記アクセス制御部は、前記第1コマンド生成部から受ける前記第1コマンドおよび前記第3コマンド生成部から受ける前記第3コマンドを、所定比率で交互に前記メモリ装置に出力すること
を特徴とする付記1または付記2に記載のメモリ制御装置。
(付記4)
前記アクセス制御部は、リードモディファイライトコマンドに基づく読み出しコマンドおよび書き込みコマンドを前記第3コマンドとして受け、前記読み出しコマンドを前記第1メモリブロックに出力し、前記書き込みコマンドを前記第2メモリブロックに出力すること
を特徴とする付記1ないし付記3のいずれか1項に記載のメモリ制御装置。
(付記5)
前記アクセス制御部は、リードモディファイライトコマンドである前記第3コマンドによりアクセスされるアドレスと、リードモディファイライトコマンドである前記第1コマンドによりアクセスされるアドレスとが同じ場合、前記第1コマンドに対応する書き込みコマンドを、前記第3コマンドに対応する書き込みコマンドの出力後に前記第2メモリブロックに出力すること
を特徴とする付記4に記載のメモリ制御装置。
(付記6)
前記検出部による前記所定回数の前記エラーの検出後、前記第2メモリブロックへのデータの退避が開始される前に、前記第2メモリブロックに所定データを書き込む第4コマンドを生成する第4コマンド生成部と、
前記第2メモリブロックへの前記所定データの書き込み後、前記第2メモリブロックへのデータの退避が開始される前に、前記第2メモリブロックのエラーを検出する第5コマンドを生成する第5コマンド生成部と
を備え、
前記第3コマンド生成部は、前記第5コマンドに基づいて前記第2メモリブロックが正常に動作すると判断された場合に、前記第3コマンドを生成すること
を特徴とする付記1ないし付記5のいずれか1項に記載のメモリ制御装置。
(付記7)
前記アクセス制御部は、
前記第1コマンド生成部から受ける前記第1コマンドおよび前記第4コマンド生成部から受ける前記第4コマンドを、所定比率で交互に前記第1メモリブロックおよび前記第2メモリブロックにそれぞれ出力し、
前記第1コマンド生成部から受ける前記第1コマンドおよび前記第5コマンド生成部から受ける前記第5コマンドを、所定比率で交互に前記第1メモリブロックおよび前記第2メモリブロックにそれぞれ出力すること
を特徴とする付記6に記載のメモリ制御装置。
(付記8)
前記アクセス制御部は、前記第4コマンドが出力される前に、前記第2メモリブロックに設定された低電力モードを解除すること
を特徴とする付記7に記載のメモリ制御装置。
(付記9)
前記アクセス制御部は、
前記第2メモリブロックに書き込む前記所定データを期待値として保持し、
前記第5コマンドに応じて前記第2メモリブロックから読み出されるデータを前記期待値と比較することにより、前記第2メモリブロックのエラーを検出すること
を特徴とする付記8に記載のメモリ制御装置。
(付記10)
前記第3コマンド生成部は、前記検出部により、前記第1メモリブロック内の同じアドレスの記憶領域から読み出されるデータに訂正可能なエラーが複数回検出された場合に、前記第3コマンドを生成すること
を特徴とする付記1ないし付記9のいずれか1項に記載のメモリ制御装置。
(付記11)
前記所定比率を前記メモリ制御装置の外部から書き換え可能に設定される設定部を備え、
前記アクセス制御部は、前記設定部に設定された前記所定比率に基づいて動作すること
を特徴とする付記1ないし付記10のいずれか1項に記載のメモリ制御装置。
(付記12)
第1メモリブロックおよび第2メモリブロックを含むメモリ装置と、
アクセス要求に基づいて第1コマンドを前記メモリ装置に出力するメモリ制御装置と、
前記アクセス要求を発行するコントローラと
を含む情報処理装置において、
前記メモリ制御装置は、
前記アクセス要求に基づいて前記第1メモリブロックまたは前記第2メモリブロックにアクセスする前記第1コマンドを生成する第1コマンド生成部と、
前記第1メモリブロックにアクセスする第2コマンドを生成する第2コマンド生成部と、
前記第2コマンドに応じて前記第1メモリブロックから読み出されるデータのエラーを検出する検出部と、
前記検出部による所定回数の前記エラーの検出に基づいて、前記第1メモリブロックに保持されたデータを前記第2メモリブロックに退避する第3コマンドを生成する第3コマンド生成部と、
前記検出部による前記所定回数の前記エラーの検出前に、前記第1コマンド生成部から受ける前記第1コマンドおよび前記第2コマンド生成部から受ける前記第2コマンドを、所定比率で交互に前記第1メモリブロックに出力し、前記第2メモリブロックへのデータの退避後に、前記第1コマンドを前記第2メモリブロックに出力するアクセス制御部と
を備えることを特徴とする情報処理装置。
(付記13)
第1メモリブロックおよび第2メモリブロックを含むメモリ装置のアクセスを制御するメモリ制御装置の制御方法において、
アクセス要求に基づいて前記第1メモリブロックまたは前記第2メモリブロックにアクセスする第1コマンドを生成し、
前記第1メモリブロックにアクセスする第2コマンドを生成し、
前記第2コマンドに応じて前記第1メモリブロックから読み出されるデータのエラーを検出し、
所定回数の前記エラーの検出に基づいて、前記第1メモリブロックに保持されたデータを前記第2メモリブロックに退避する第3コマンドを生成し、
前記所定回数の前記エラーの検出前に、前記第1コマンドおよび前記第2コマンドを、所定比率で交互に前記第1メモリブロックに出力し、前記第2メモリブロックへのデータの退避後に、前記第1コマンドを前記第2メモリブロックに出力すること
を特徴とするメモリ制御装置の制御方法。
(付記14)
前記第2メモリブロックにデータを退避する退避期間中に、データが退避された前記第1メモリブロックの記憶領域に対する前記第1コマンドを前記第2メモリブロックに出力すること
を特徴とする付記13に記載のメモリ制御装置の制御方法。
(付記15)
前記第1コマンドおよび前記第3コマンドを、所定比率で交互に前記メモリ装置に出力すること
を特徴とする付記13または付記14に記載のメモリ制御装置の制御方法。
(付記16)
リードモディファイライトコマンドに基づく読み出しコマンドおよび書き込みコマンドを前記第3コマンドとして受け、前記読み出しコマンドを前記第1メモリブロックに出力し、前記書き込みコマンドを前記第2メモリブロックに出力すること
を特徴とする付記13ないし付記15のいずれか1項に記載のメモリ制御装置の制御方法。
(付記17)
リードモディファイライトコマンドである前記第3コマンドによりアクセスされるアドレスと、リードモディファイライトコマンドである前記第1コマンドによりアクセスされるアドレスとが同じ場合、前記第1コマンドに対応する書き込みコマンドを、前記第3コマンドに対応する書き込みコマンドの出力後に前記第2メモリブロックに出力すること
を特徴とする付記16に記載のメモリ制御装置の制御方法。
(付記18)
前記所定回数の前記エラーの検出後、前記第2メモリブロックへのデータの退避が開始される前に、前記第2メモリブロックに所定データを書き込む第4コマンドを生成し、
前記第2メモリブロックへの前記所定データの書き込み後、前記第2メモリブロックへのデータの退避が開始される前に、前記第2メモリブロックのエラーを検出する第5コマンドを生成し、
前記第5コマンドに基づいて前記第2メモリブロックが正常に動作すると判断した場合に、前記第3コマンドを生成すること
を特徴とする付記13ないし付記17のいずれか1項に記載のメモリ制御装置の制御方法。
(付記19)
前記第1コマンドおよび前記第4コマンドを、所定比率で交互に前記第1メモリブロックおよび前記第2メモリブロックにそれぞれ出力し、
前記第1コマンドおよび前記第5コマンドを、所定比率で交互に前記第1メモリブロックおよび前記第2メモリブロックにそれぞれ出力すること
を特徴とする付記18に記載のメモリ制御装置の制御方法。
(付記20)
前記第4コマンドが出力される前に、前記第2メモリブロックに設定された低電力モードを解除すること
を特徴とする付記19に記載のメモリ制御装置の制御方法。
(付記21)
前記第2メモリブロックに書き込む前記所定データを期待値として保持し、
前記第5コマンドに応じて前記第2メモリブロックから読み出されるデータを前記期待値と比較することにより、前記第2メモリブロックのエラーを検出すること
を特徴とする付記20に記載のメモリ制御装置の制御方法。
(付記22)
前記第1メモリブロック内の同じアドレスの記憶領域から読み出されるデータに訂正可能なエラーが複数回検出された場合に、前記第3コマンドを生成すること
を特徴とする付記13ないし付記21のいずれか1項に記載のメモリ制御装置の制御方法。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。