本発明者は、従来の擬似的なデータエラーを利用したエラー訂正試験方法を、DDR SDRAM(Double-Data-Rate Synchronous DRAM)に適用する場合について検討した。本発明者の検討によれば、従来の擬似的なデータエラーを利用したエラー訂正試験方法を、DDR SDRAMに適用した場合には、図7〜図10に示すように、擬似故障が発生される。
図7及び図8は、読み出されたデータの中の1ビットが接地電位にクランプされない、換言すれば、ビットクランプ操作が無い場合における、2ビットのエラー検出及び1ビットのエラー訂正について示す。
なお、実際には、図7及び図8は、コンピュータが市場に出荷されて実際に運用されている場合において、ソフトエラーが生じない場合における、2ビットのエラー検出及び1ビットのエラー訂正を示す。
図7に示すように、DDR SDRAMのバースト転送においては、メモリクロックの半周期に同期したタイミングで、データ列#11〜データ列#14が、連続して出力される。この時、メモリクロックの半周期とデータ出力の1周期とは、データ出力の周期の更に半分だけずれている。2個のメモリクロックの周期(メモリクロックの2サイクル)において、4個のデータが出力される。
これにより、DDR SDRAMのバースト転送においては、メモリクロックの立ち上がり及びメモリクロックの立下りの双方のタイミングで、4個のデータ列#11〜データ列#14を読み出すことができる。具体的には、第1のメモリクロックの立ち上がりに同期してデータ列#11が読み出され、第1のメモリクロックの立下りに同期してデータ列#12が読み出される。第2のメモリクロックの立ち上がりに同期してデータ列#13が読み出され、第2のメモリクロックの立下りに同期してデータ列#14が読み出される。4個のデータ列#11〜データ列#14は、連続して読み出される。
なお、図7において、データ列#11〜データ列#14を「リードデータ」と表す。また、図7において、データ列#11〜データ列#14の各々は、64ビットのデータと、8ビットのECC用データとを含むデータとを含む。
図8に示すように、DIMMから読み出されたデータ列#11〜データ列#14の各々は、擬似故障ツールに入力される。データ列#11〜データ列#14において、64ビットのデータは「64bit」と表され、ECC用データは「ECC」と表され、64ビットのデータ及びECC用データは「64bit+ECC」と表される。データ列#11〜データ列#14の各々は、「64bit+ECC」と表される。データ列#21〜データ列#24は、擬似故障ツールに入力されたデータ列#11〜データ列#14である。
擬似故障ツールによるビットクランプ操作が無いとすると、データ列#21〜データ列#24は、そのままマザーボードのメモリコントローラに入力される。データ列#31〜データ列#34は、メモリコントローラに入力されたデータ列#21〜データ列#24である。メモリコントローラは、データ列#31〜データ列#34について、各々に含まれるECC用データを用いて、2ビットのエラー検出及び1ビットのエラー訂正を実行して、誤りを訂正した64ビットのデータをCPU(Central Processing Unit)に入力する。データ列#41〜データ列#44は、CPUに入力されたデータ列#31〜データ列#34である。データ列#41〜データ列#44は、ECC用データが除かれて、64ビットのデータのみを含む。
図9及び図10は、図7及び図8に示す場合についてのビットクランプ操作がある場合における、2ビットのエラー検出及び1ビットのエラー訂正について示す。換言すれば、図9及び図10は、読み出されたデータの中の1ビットについてのビットクランプ操作がある場合について示す。
なお、実際には、図9及び図10は、コンピュータを市場に出荷する前に、メーカにおいて実行されるテストを示す。このテストは、コンピュータにおけるメモリのエラーの評価の1つであり、「ソフトエラー(1回のみのエラー)に対して1回のECC訂正が行なわれ、1回のエラーログが報告される」ことを確認するためのテストである。
図9に示すように、DDR SDRAMのバースト転送において、メモリクロックの立ち上がり及びメモリクロックの立下りの双方のタイミングで、4個のデータ列#11〜データ列#14が連続して読み出される。データ列#11〜データ列#14の各々は、64ビットのデータと、8ビットのECC用データとを含む。
一方、例えば、読み出されたデータ列#11の中の予め定められた1ビットが、バススイッチにより接地電位にクランプされる。1ビットのクランプは、例えば、データバスの中の当該1ビットの信号が通過する信号線を、クランプ期間中だけ、バススイッチを用いて接地電位に接続することにより行われる。クランプ期間は、図9に示すように、データ列#11が出力される期間とほぼ一致する。図9において、接地電位は、太線で示される。
このクランプ操作により、クランプ操作された後のデータ列#21の予め定められた1ビットは、本来の値に拘らず、接地電位、換言すれば、「0」とされる。一方、クランプ期間は、次のデータ列#12の読出しのタイミング以前に終了するので、他のデータ列#22〜データ列#24には影響を与えない。データ列#21〜データ列#24については、図10に示す。
なお、図9において、クランプ操作された後のデータを「クランプ後のリードデータ」と表す。また、図9において、リードデータは、64ビットのデータと8ビットのECC用データとを含む(64bit+ECC)であるのに対して、クランプ後のリードデータは、データ列#21〜データ列#24において、クランプ操作された予め定められた1ビットの値のみを示す。換言すれば、図9のクランプ後のリードデータは、バススイッチにより接地電位にクランプされた信号線を通過した、予め定められた1ビットの信号の値のみを示す。
図10に示すように、DIMMから読み出されたデータ列#11〜データ列#14の各々は、擬似故障ツールに入力される。データ列#21〜データ列#24は、擬似故障ツールに入力されたデータ列#11〜データ列#14である。
ここで、前述したように、擬似故障ツールによるビットクランプ操作が実行される。具体的には、例えば、先頭のデータ列#21において、図9のクランプ後のリードデータに示すように、予め定められた1ビットが、本来のデータの値に拘らず、接地電位にクランプされる。これにより、結果的に、データ列#21は、1ビットのビットエラーを含むことになる。換言すれば、データ列#21は、1ビットのビットエラーを含む擬似故障データとされる。
一方、残りのデータ列#22〜データ列#24は、図9のクランプ期間に示すように、クランプ期間の終了後に読み出される。従って、残りのデータ列#22〜データ列#24は、図9のクランプ後のリードデータに示すように、クランプされずに、本来のデータの値のままとされる。換言すれば、残りのデータ列#22〜データ列#24は、そのままマザーボードのメモリコントローラに入力される。
メモリコントローラは、データ列#31〜データ列#34について、各々に含まれるECC用データを用いて、2ビットのエラー検出及び1ビットのエラー訂正を実行して、誤りを訂正した64ビットのデータをCPUに入力する。換言すれば、メモリコントローラは、データ列#31に含まれる1ビットのビットエラーを訂正して、訂正されたデータ列#31’を生成する。
メモリコントローラは、訂正したデータ列#31’及びデータ列#32〜データ列#34をCPUに入力する。また、メモリコントローラは、ECCエラー#51を、例えばBIOS(Basic Input Output System)に報告する。換言すれば、メモリコントローラは、データ列#31の1ビットのビットエラーを訂正したことを、報告する。BIOSは、メモリコントローラからの受信した報告を、エラーログとして保持する。これにより、前述したように、「ソフトエラー(1回のみのエラー)に対して1回のECC訂正が行なわれ、1回のエラーログが報告される」ことが、正しく実行されたことが確認される。
しかし、本発明者の検討によれば、従来の疑似故障ツールをより高速化されたメモリに使用して、誤り検出を再現しようとすると、図11〜図13に示すような問題を生じる。
なお、図11〜図13の状態は、メモリクロックの高速化により、現在のバススイッチのスイッチング速度では、バススイッチのオン/オフの動作が、データ列#11の出力の期間に納まらない場合があることに起因して発生する。
図11に示すように、DDR SDRAMのバースト転送において、メモリクロックの立ち上がり及びメモリクロックの立下りの双方のタイミングで、4個のデータ列#11〜データ列#14が連続して読み出される。一方、例えば、読み出されたデータ列#11の中の予め定められた1ビットが、バススイッチにより接地電位にクランプされる。このクランプ操作により、クランプ操作された後のデータ列#21の予め定められた1ビットは、本来の値に拘らず、接地電位、換言すれば、「0」とされる。
しかし、クランプ期間は、図11に示すように、データ列#11が出力される期間よりも長い。図11において、接地電位は、太線で示される。このため、クランプ期間は、次のデータ列#12の出力の期間、換言すれば、データ列#22の読出しのタイミングとなっても終了しない。この結果、データ列#21に続けて読み出されるデータ列#22においても、予め定められた1ビットが、バススイッチにより接地電位にクランプされる。このクランプ操作により、クランプ操作された後のデータ列#22の予め定められた1ビットは、本来の値に拘らず、接地電位、換言すれば、「0」とされる。
なお、図11において、クランプ操作された後のデータを「クランプ後のリードデータ」と表す。また、図11において、リードデータは、64ビットのデータと8ビットのECC用データとを含むデータ(64bit+ECC)であるのに対して、クランプ後のリードデータは、データ列#21〜データ列#24において、クランプ操作された予め定められた1ビットの値のみを示す。
図12に示すように、DIMMから読み出されたデータ列#11〜データ列#14の各々は、擬似故障ツールに入力される。データ列#21〜データ列#24は、擬似故障ツールに入力されたデータ列#11〜データ列#14である。
ここで、前述したように、擬似故障ツールによるビットクランプ操作が実行される。具体的には、例えば、先頭のデータ列#21において、図11のクランプ後のリードデータに示すように、予め定められた1ビットが、接地電位にクランプされる。これにより、結果的に、データ列#21は、1ビットのビットエラーを含むことになる。
しかし、前述したように、クランプ期間は、図11に示すように、データ列#11が出力される期間よりも長いので、データ列#21に続けて読み出されるデータ列#22において、図11のクランプ後のリードデータに示すように、予め定められた1ビットが、接地電位にクランプされてしまう。これにより、結果的に、2個のデータ列#21及びデータ列#22が、1ビットのビットエラーを含むことになる。
このため、メモリコントローラは、データ列#31及びデータ列#32に含まれる1ビットのビットエラーを訂正して、訂正されたデータ列#31’及びデータ列#32’を生成する。また、メモリコントローラは、ECCエラー#51及びECCエラー#52を、例えばBIOSに報告する。
図13は、前述のテストにおいて読み出されるデータ列#11〜データ列#14の一例を示し、データ列#11〜データ列#14が図11及び図12に示す処理により変化する状態を示す。
なお、図13において、データ列#11〜データ列#14の先頭のアドレスにおける先頭の1ビットが「0」にクランプされるものとする。また、図13において、「1」はデータの値がハイレベルであることを示し、「0」はデータの値がロウレベルであることを示し、「d」はデータの値がドントケアであること、換言すれば、「1」又は「0」のいずれの値であっても良いことを示す。
データ列#11〜データ列#14において、例えば、データ列#11及びデータ列#12の先頭のアドレスにおける先頭の1ビットの値が「1」であるとする。
擬似故障ツールは、データ列#11の先頭のアドレスにおける先頭の1ビットを「0」にクランプして、1回のみのエラー、換言すれば、擬似故障データ列#21を生成する。しかし、前述したように、バススイッチの動作速度が遅いため、データ列#12の先頭のアドレスにおける先頭の1ビットも、「0」にクランプしてしまう。この結果、擬似故障データ列#22が生成される。
これに応じて、メモリコントローラは、データ列#31及びデータ列#32の双方についてビットエラーを検出し、検出したビットエラーを訂正して、訂正されたデータ列#31’及びデータ列#32’を生成する。また、メモリコントローラは、2回のエラー発生をBIOSに報告する。
例えば、バススイッチのスイッチング速度は、バスイネーブル時間の最小値である、2.0〜4.0ns(ナノ秒)である。一方、いわゆるDDR3と言われるDDR SDRAMにおいては、メモリクロックの周波数は、1066〜533MHzである。従って、1周期は、0.9nsである。従って、通常のバススイッチのスイッチング速度では、図11に示すように、1回のバススイッチによるクランプの期間が、データ列#11の出力の期間を超えてしまう。
このため、前述したように、実際には、2回のビットエラーが発生し、2回のECCエラーがBIOSに報告されてしまう。
開示のエラー訂正試験方法は、メモリの動作速度が高速であっても、正確なデータエラーを発生させることができ、コンピュータのエラー検出及びエラー訂正の機能を正確にテストすることができる。
図1は、メモリ検査装置の構成の一例を示す図である。
メモリ検査装置は、サーバ1と、擬似故障ツール3とを含む。サーバ1は、例えばパーソナルコンピュータであってもよい。サーバ1は、その主メモリとして、例えばDIMM4を有する。本実施例では、DIMM4は、複数のDDR SDRAMから構成される。
DIMM4は、サーバ1のマザーボードのメモリソケットに、装着される。
図1においては、サーバ1とDIMM4との間に、擬似故障ツール3が接続される。従って、この場合、は、データバス21、アドレスバス22、コントロールバス23は、擬似故障ツール3を介して、サーバ1及びDIMM4を接続する。コントロールバス23は、データバス21及びアドレスバス22以外のバスである。
図1の例において、データバス21は、後述するように、64+8=72ビットのビット幅を有する。従って、DIMM4から読み出されるデータは、72ビットのデータである。データのビット幅は、これに限られず、種々の値であって良い。
サーバ1は、CPU11と、メモリコントローラ17と、キャッシュメモリ19とを含む。CPU11、メモリコントローラ17及びキャッシュメモリ19は、サーバ1のマザーボード上に設けられる。CPU11は、OS(オペレーティングシステム)12と、擬似故障処理プログラムを実行する。
サーバ1は、例えばハードディスク装置のようなディスク5を含む。ディスク5は、サーバ1のマザーボード外に設けられる。ディスク5は、テストデータ51を格納する。テストデータ51は、予めディスク5に格納される。テストデータ51は、図2を参照して後述するように、予め定められたビットパターンを有する。
ディスク5に格納されたテストデータ51は、DIMM4の格納領域41に格納される。格納領域41は、予め定められた複数のアドレスを有する、連続した領域である。OS12が動作している間はDIMM4には種々のデータが格納されるが、このようなデータはメモリ検査に用いることができない。そこで、予め定められたアドレスに、予め定められたビットパターンを有するテストデータ51が格納される。これにより、予め定められたビットパターンを有するテストデータ51を用いてテストを実行することができる。
なお、DIMM4において、OS12を実現するプログラムは、格納領域42に格納される。格納領域42は、OS12を実現するプログラムを格納する専用の領域である。また、DIMM4において、擬似故障処理プログラムは、格納領域43に格納される。格納領域43は、種々のアプリケーションプログラムを格納する領域である。
擬似故障ツール3は、DIMM4から読み出されたデータに擬似故障を発生させる。擬似故障ツール3は、バススイッチ31と、アドレス判定部32とを含む。バススイッチ31は、データバス21に挿入される。また、バススイッチ31には、コントロールバス23が接続される。アドレス判定部32には、アドレスバス22及びコントロールバス23が接続される。アドレスバス22及びコントロールバス23は、サーバ1とDIMM4とに接続される。
アドレス判定部32は、例えば、予めライトコマンド及びリードコマンドを保持し、これらとコントロールバス23上に出力された信号とを比較して、ライトコマンド及びリードコマンドを検出する。バススイッチ31は、例えば、予めライトコマンド及びリードコマンドを保持し、これらとコントロールバス23上に出力された信号とを比較して、ライトコマンド及びリードコマンドを検出する。
アドレス判定部32は、サーバ1からコントロールバス23を介してDIMM4へライトコマンドが出力された場合には、ライトコマンドを検出して、アドレス判定を行わない。また、バススイッチ31は、サーバ1からコントロールバス23を介してDIMM4へライトコマンドが出力された場合には、ライトコマンドを検出して、予め定められたビット位置に対応するスイッチを通過状態とし、クランプ状態としない。他のビット位置に対応するスイッチも、通過状態とされ、クランプ状態とされない。従って、この場合、DIMM4に書き込まれるデータは、そのままバススイッチ31を通過して、DIMM4に入力される。
アドレス判定部32は、サーバ1からコントロールバス23を介してDIMM4へリードコマンドが出力された場合には、リードコマンドを検出して、アドレス判定を行う。また、バススイッチ31は、アドレス判定部32におけるアドレス判定の結果に応じて、予め定められたビット位置に対応するスイッチをクランプ状態とし、通過状態としない。従って、この場合、DIMM4から読み出されたデータ、例えばテストデータ51は、予め定められたビット位置の値がクランプにより変更され、メモリコントローラ17に入力される。
バススイッチ31は、DIMM4に接続され、スイッチ群を含む。このスイッチ群は、DIMM4から読み出されるデータのビット毎に設けられた複数のスイッチを含む。複数のスイッチについては、図4を参照して後述する。従って、バススイッチ31は、予め定められたビット位置に対応するスイッチを含む。
各々のスイッチは、クランプ状態又は通過状態のいずれかの状態とされる。クランプ状態は、当該スイッチの出力を、第1の値、例えば「1」とは反対の値である第2の値、例えば「0」にクランプする状態である。通過状態は、当該スイッチの入力を、そのまま出力する状態である。
アドレス判定部32は、予め定められたアドレスを保持する。予め定められたアドレスは固定のアドレスである。固定のアドレスは、例えばアドレス判定部32の有するレジスタ等に固定的に設定される。固定のアドレスとしては、例えば「0番地」が用いられる。アドレス「0番地」は、後述する図2に示すデータ列#11における、先頭のアドレスに相当する。なお、予め定められたアドレスは、例えばディップスイッチ等により、擬似故障ツール3の外部から設定するようにしても良い。
アドレス判定部32は、リードコマンドを検出した場合、メモリクロックの立ち上がりに同期して、アドレスバス22上に出力されたアドレスを取込む。アドレス判定部32は、予め定められたアドレスと、取込んだアドレスとを比較することにより、予め定められたアドレスであるか否かを検出する。
アドレス判定部32は、予め定められたアドレスに対するリードコマンドを検出した場合に、コントロールバス23上を転送されるメモリクロックに同期した予め定められたタイミングで、バススイッチ31に各々のスイッチの制御信号を入力する。これにより、バススイッチ31において、予め定められたビット位置に対応するスイッチが、クランプ状態に切替えられ、予め定められたビット位置以外のビット位置に対応するスイッチが、通過状態のままとされる。
また、アドレス判定部32は、予め定められたアドレスを検出しない場合に、コントロールバス23上を転送されるメモリクロックに同期した予め定められたタイミングで、バススイッチ31に各々のスイッチの制御信号を入力する。これにより、バススイッチ31において、予め定められたビット位置に対応するスイッチが、通過状態に切替えられ、予め定められたビット位置以外のビット位置に対応するスイッチが、通過状態のままとされる。
ここで、DIMM4は、DDR SDRAMから構成されるため、リードコマンド及びアドレスを取込んだメモリクロックから予め定められた時間だけ遅れたタイミングのメモリクロックの立ち上がりに同期して、DIMM4は、テストデータ51の出力を開始する。
一方、DIMM4からテストデータ51の出力が開始されると、前述したように、テストデータ51の出力が開始されるメモリクロックの立下りに同期して、次のデータ列(第2のデータ列#12)が出力される。このため、あるデータ列(データ列#11)の出力期間において予め定められたビット位置に対応するスイッチをクランプ状態にした上で、更に、次のデータ列(データ列#12)の出力に先立って、予め定められたビット位置に対応するスイッチを通過状態に切替えることはできない。これは、バススイッチ31のスイッチの応答速度が遅いことに起因する。以上については、図4を参照して後述する。
サーバ1の電源が投入されて、CPU11がOS12を起動し、擬似故障処理プログラムを起動する。
CPU11は、擬似故障処理プログラムに従って、ディスク5に格納されたテストデータ51を、主メモリであるDIMM4にロードする。テストデータ51は、予め定められたデータパターンを有するデータである。ロード先のアドレスは、予め定められたアドレス、換言すれば、格納領域41のアドレスである。これにより、DIMM4において、特定のアドレスに特定のデータパターンを有するテストデータ51が格納される。
テストデータ51を格納後、キャッシュメモリ19に格納された、データ列#11とデータ列#12〜データ列#14とを、キャッシュメモリ19から追い出す処理を行う。具体的には、テストデータ51を格納したアドレス以外のDIMM4のデータを所定量参照する。
また、CPU11は、擬似故障処理プログラムに従って、擬似故障ツール3を介して、データ列#11〜データ列#14を、DIMM4から読み出す。
CPU11は、擬似故障処理プログラムに従って、メモリコントローラ17に対して、予め定められたアドレスである格納領域41のアドレスを指定して、DIMM4からのデータの読出しを要求する。これに応じて、メモリコントローラ17は、制御信号とアドレス信号を形成して、制御信号をコントロールバス23を介してDIMM4に送信し、アドレス信号をアドレスバス22を介してDIMM4に送信する。
これに応じて、DIMM4は、指定されたアドレスである格納領域41からテストデータを読出して、データバス21を介して、メモリコントローラ17に送信する。この時、テストデータは、擬似故障ツール3に入力される。
擬似故障ツール3は、バススイッチ31において、予め定められたビット位置に対応するスイッチを、クランプ状態に切替える。これにより、擬似故障ツール3は、バススイッチ31を用いて、読出したデータ列#11において、予め定められたビット位置の第1の値、例えば「1」を、第2の値、例えば「0」にクランプすることにより、データ列#11についての擬似故障データを生成する。
また、擬似故障ツール3は、データ列#12〜データ列#14の読出しと並列して、バススイッチ31における予め定められたビット位置に対応するスイッチを、クランプ状態から、通過状態に切替える。これにより、擬似故障ツール3は、バススイッチ31を用いて、読出したデータ列#12〜データ列#14において、予め定められたビット位置に対応するスイッチがクランプ状態である場合には、予め定められたビット位置の第2の値、例えば「0」を、第2の値、例えば「0」にクランプする。また、擬似故障ツール3は、予め定められたビット位置に対応するスイッチが通過状態である場合には、予め定められたビット位置の第2の値、例えば「0」を、そのまま通過させる。これにより、データ列#12〜データ列#14が出力される。
具体的には、アドレス判定部32は、予め定められたアドレスを検出した場合に、バススイッチ31において、予め定められたビット位置に対応するスイッチを、クランプ状態に切替える。これにより、擬似故障データが生成される。
一方、アドレス判定部32は、予め定められたアドレスを検出しない場合に、予め定められたビット位置に対応するスイッチを、通過状態に切替える。これにより、擬似故障データは生成されない。これにより、DIMM4から出力されたデータが、そのままメモリコントローラ17に入力される。
メモリコントローラ17は、ECC回路18において、受信したデータに基づいて、2ビットのエラー検出及び1ビットのエラー訂正を実行して、誤りを訂正したデータをCPU11に入力する。また、メモリコントローラ17は、2ビットのエラー検出及び1ビットのエラー訂正を実行した結果を、例えばBIOS13に報告する。
図2は、データエラーの擬似発生の説明図である。図2は、前述のテストにおいて読み出される、データ列#11〜データ列#14を含むテストデータの一例を示し、データ列#11〜データ列#14が変化する状態を示す。図2において、「1」はデータの値がハイレベルであることを示し、「0」はデータの値がロウレベルであることを示し、「d」はデータの値がドントケアであること、換言すれば、「1」又は「0」のいずれの値であっても良いことを示す。
テストデータ51は、前述したように、DIMM4に格納される。テストデータ51は、複数のデータ列#11〜データ列#14を含む。複数のデータ列#11〜データ列#14の各々は、並列に読み出される複数のビットを含む。
テストデータ51は、予め定められたビットパターンを有する。即ち、複数のデータ列#11〜データ列#14の中で、第1のデータ列#11は、予め定められたビット位置に、予め定められた第1の値を有する。また、複数のデータ列#11〜データ列#14の中で、少なくとも第1のデータ列#11の次の第2のデータ列#12は、予め定められたビット位置に、第2の値を有する。
第1の値は、例えば2値データにおける「1」、換言すれば、ハイレベルである。第2の値は、第1の値を反転した値である。第2の値は、例えば2値データにおける「0」、換言すれば、ロウレベルである。
テストデータ51は、第1のデータ列であるデータ列#11と、複数の第2のデータ列であるデータ列#12〜データ列#14とを含む。データ列#11は、エラー検出又はエラー訂正のための複数のビットを含むデータであって予め定められたビット位置に第1の値、例えば「1」を有する。データ列#12〜データ列#14の各々は、データ列#11に続けて読み出されるデータであって、エラー検出又はエラー訂正のための複数のビットを含むデータであって、予め定められたビット位置に第2の値、例えば「0」を有する。
例えば、データ列#11は、DIMM4の予め定められたアドレスに格納される。データ列#12〜データ列#14は、DIMM4において、データ列#11に連続して格納される。換言すれば、データ列#11〜データ列#14は、予め定められた1個の格納領域41に連続して格納される。
データ列#11〜データ列#14の各々は、8ビットずつ、換言すれば、1バイトずつ分かち書きされている。1バイト毎にアドレスが割り当てられる。従って、データ列#11の先頭の1バイトのアドレスが「0番地」であるとすると、データ列#11の最後の1バイトのアドレスは「7番地」である。また、データ列#12において、先頭の1バイトのアドレスは「8番地」であり、最後の1バイトのアドレスは「15番地」である。図2に示すデータ列#11〜データ列#14の各々は、64ビットであるので、ECC用データを除いたデータである。データ列#11が、第1のデータ列であって、最初に読み出されるデータである。データ列#12〜データ列#14が、第2のデータ列であって、データ列#11に続けて読み出されるデータである。
なお、データ列#11の先頭のアドレスにおける先頭の1ビットは、電源電位、換言すれば、「1(ハイレベル)」にクランプされるようにしても良い。換言すれば、サーバ1における2値信号のいずれか一方の値に固定されるようにすれば良い。
また、「0」にクランプされる1ビットは、先頭のアドレスにおける先頭の1ビットに限られない。従って、「0」にクランプされる1ビットは、先頭のアドレス以外のアドレスに存在していても良く、また、いずれかのアドレスにおける先頭の1ビット以外の1ビットであっても良い。
DIMM4に格納されたテストデータ51は、CPU11により、擬似故障ツール3を介して、読み出される。これにより、テストデータ51は、擬似故障ツール3に入力される。
擬似故障ツール3において、DIMM4から読み出されたテストデータ51から、擬似的なエラーを含むテストデータが生成される。換言すれば、以下に説明するように、第1のデータ列#11の予め定められたビット位置の第1の値「1」が、第2の値「0」に変更される。
具体的には、前述したように、データ列#11において、先頭のアドレスが、予め定められたアドレスとされる。従って、データ列#11の読出しが指示されると、アドレス判定部32により、予め定められたアドレスが検出され、バススイッチ31において、予め定められたビット位置に対応するスイッチが、クランプ状態に切替えられる。通過状態からクランプ状態に切替えられたスイッチは、スイッチ切替えの最も早いタイミングで、再度、通過状態に切り替えられる。
データ列#11〜データ列#14において、例えば、先頭のデータ列#11において、先頭のアドレスにおける先頭の1ビットの値が「1」、換言すれば、クランプ後の値「0」を反転した値とされる。データ列#11に続けて読み出されるデータ列#12〜データ列#14において、先頭のアドレスにおける先頭の1ビットの値が「0」、換言すれば、クランプ後の値「0」と等しい値とされる。
なお、先頭のアドレスにおける先頭の1ビットの値がクランプ後の値「0」と等しい値とされるデータの数は、3個に限られない。バススイッチ31の動作速度がDIMM4からのデータ読出し速度程度である場合には、データ列#11の次のデータ列#12のみにおいて、先頭のアドレスにおける先頭の1ビットの値が「0」とされるようにすれば良い。従って、データ列#11において先頭のアドレスにおける先頭の1ビットの値が「0」にクランプされる場合、少なくとも、データ列#11に連続して読み出される次の1個のデータ列#12において、先頭のアドレスにおける先頭の1ビットの値が、クランプ後の値「0」とされれば良い。
逆に、バーストモードにおいて連続して読み出されるデータは、4個のデータ列#11〜データ列#14に限られない。そして、この場合において、バススイッチ31の動作速度がDIMM4からのデータ読出し速度よりもかなり遅い場合には、例えば、データ列#11に続けて読み出される4〜5個のデータにおいて、先頭のアドレスにおける先頭の1ビットの値を「0」とするようにしても良い。
擬似故障ツールは、データ列#11の先頭のアドレスにおける先頭の1ビットを「0」にクランプして、1回のみのエラー、換言すれば、擬似故障データ列#21を生成する。この時、前述したように、バススイッチ31の動作速度が遅いため、データ列#12の先頭のアドレスにおける先頭の1ビットも、「0」にクランプしてしまう。しかし、データ列#12の先頭のアドレスにおける先頭の1ビットの値は、元々「0」である。従って、「0」にクランプされても、データ列#12の先頭のアドレスにおける先頭の1ビットの値は「0」で変化せず、クランプの影響はない。
この結果、擬似故障データ列#22が生成されるが、生成された擬似故障データ列#22は、元のデータ列#22と等しい。従って、擬似故障データ列#22は生成されないに等しい。換言すれば、データ列#22に対応するデータ列#32においては、ビットエラーは検出されない。
以上のように、テストデータ51は、DIMM4から読み出され、第1のデータ列#11の予め定められたビット位置の値を変更される。この後、テストデータ51は、メモリコントローラ17に入力される。これにより、メモリコントローラ17のECC回路18において、テストデータ51を用いてDIMM4についてのテストが実行される。
具体的には、メモリコントローラ17は、データ列#31のみについてビットエラーを検出し、検出したビットエラーを訂正して、訂正されたデータ列#31’を生成する。また、メモリコントローラ17は、1回のエラー発生をBIOSに報告する。
これにより、1回のバススイッチ31によるクランプの期間が、データ列#11の出力の期間を超えてしまう場合においても、1回のみのビットエラーが発生し、1回のみのECCエラーがBIOSに報告される。従って、「ソフトエラー(1回のみのエラー)に対して1回のECC訂正が行なわれ、1回のエラーログが報告される」ことが、正しく実行されたことは確認することができる。
この後、エラー訂正されたテストデータ51は、擬似故障処理プログラムの読出処理部15により、キャッシュメモリ19に格納される。この後、キャッシュメモリ19に格納されたエラー訂正されたテストデータ51は、擬似故障処理プログラムのキャッシュ処理部16により、キャッシュメモリ19から追い出される。これにより、擬似故障処理プログラムの読出処理部15がテストデータ51の読出コマンドを再度実行した場合であっても、テストデータ51を、キャッシュメモリ19からではなく、DIMM4から読み出すことができる。
図3は、データエラーの擬似発生の説明図である。
図3に示すように、DDR SDRAMのバースト転送において、メモリクロックの立ち上がり及びメモリクロックの立下りの双方に同期して、4個のデータ列#11〜データ列#14が連続して読み出される。
読み出されたデータ列#11の中の予め定められた1ビットが、バススイッチ31により接地電位にクランプされる。このクランプ操作により、クランプ操作された後のデータ列#21の予め定められた1ビットは、本来の値に拘らず、接地電位、換言すれば、「0」とされる。
なお、データの読出しのモードは、DDR SDRAMのバースト転送以外の読出しモードであっても良い。従って、例えば、メモリクロックの立ち上がりのみ又は立下りのみに同期して、データを読み出す読出しモードであっても良い。また、データを出力するメモリは、DIMM4以外のメモリであっても良い。更に、データを出力するメモリは、DDR SDRAM以外のメモリであっても良い。
先頭のデータ列#11において、前述したように、先頭のアドレスにおける先頭の1ビットの値が「1」とされる。一方、前述したように、データ列#11に続けて読み出されるデータ列#12〜データ列#14において、先頭のアドレスにおける先頭の1ビットの値が「0」とされる。
ここで、クランプ期間は、図3に示すように、データ列#11が出力される期間よりも長い。図3において、接地電位は、太線で示される。このため、クランプ期間は、次のデータ列#12の出力の期間、換言すれば、データ列#22の読出しのタイミングとなっても終了しない。従って、データ列#12の先頭のアドレスにおける先頭の1ビットも、「0」にクランプしてしまう。しかし、前述したように、データ列#12の先頭のアドレスにおける先頭の1ビットの値は、元々「0」である。従って、「0」にクランプされても、データ列#12の先頭のアドレスにおける先頭の1ビットの値は「0」で変化せず、クランプの影響はない。
なお、図3において、クランプ操作された後のデータを「クランプ後のリードデータ」と表す。また、図3において、リードデータは、64ビットのデータと8ビットのECC用データとを含むデータ(64bit+ECC)であるのに対して、クランプ後のリードデータは、データ列#21〜データ列#24において、クランプ操作された予め定められた1ビットの値のみを示す。
図4は、データエラーの擬似発生におけるクランプの説明図である。
例えば、前述したように、データ列#11の先頭のアドレスにおける先頭の1ビットの値「1」は、図4(A)に示すように、「0」にクランプされる。このために、バススイッチ31においてデータ列#11の先頭のアドレスにおける先頭の1ビットに対応するスイッチSWが、プルダウン抵抗Rを介して、接地電位、換言すれば、「0」に接続される。換言すれば、データ列#11の先頭のアドレスにおける先頭の1ビットに対応するスイッチSWが、クランプ状態とされる。これにより、データ列#21において、先頭のアドレスにおける先頭の1ビットの値が「0」とされる。バススイッチ31におけるスイッチSWは、例えば1又は複数のMOSFETにより構成される。
なお、図4(A)において、データ列#21においては、ECC用データを省略している。また、図4(A)において、スイッチSWは、データ列#21において、先頭のアドレスにおける先頭の1ビットに対応するスイッチと、最後のアドレスにおける最後の1ビットに対応するスイッチのみを示す。
バススイッチ31のスイッチング速度が遅いので、図4(B)に示すように、データ列#12の読出しのタイミングとなっても、データ列#12の先頭のアドレスにおける先頭の1ビットに対応するスイッチSWが、接地電位に接続された状態である。これにより、データ列#22においても、先頭のアドレスにおける先頭の1ビットの値が「0」とされる。
この後、バススイッチ31において、データ列#12の先頭のアドレスにおける先頭の1ビットに対応するスイッチSWが、クランプ状態から、当該スイッチSWの入力をそのまま出力する通過状態に切替えられる。これにより、データ列#12の先頭のアドレスにおける先頭の1ビットに対応するスイッチSWは、当該スイッチSWの入力をそのまま出力する。
従って、例えば、データ列#11の読出しのタイミングとなると、データ列#13の先頭のアドレスにおける先頭の1ビットの値「0」は、図4(C)に示すように、「0」にクランプされずに、スイッチSWをそのまま通過する。これにより、データ列#23において、先頭のアドレスにおける先頭の1ビットの値が「0」のままとされる。
図5は、データエラーの処理の説明図である。
図5に示すように、DIMM4から読み出されたデータ列#11〜データ列#14の各々は、擬似故障ツール3に入力される。
ここで、前述したように、擬似故障ツール3によるビットクランプ操作が実行される。具体的には、例えば、先頭のデータ列#21において、図3のクランプ後のリードデータに示すように、先頭のアドレスの先頭の1ビットが、本来のデータの値に拘らず、接地電位にクランプされる。これにより、結果的に、データ列#21は、1ビットのビットエラーを含むことになる。換言すれば、データ列#21は、1ビットのビットエラーを含む擬似故障データとされる。この1ビットのビットエラーは、実際のソフトエラーの代わりに発生させられた擬似的なエラーである。
この時、クランプ期間は、図3に示すように、データ列#11が出力される期間よりも長いので、データ列#21に続けて読み出されるデータ列#22において、図3のクランプ後のリードデータに示すように、先頭のアドレスの先頭の1ビットが、接地電位にクランプされる。
しかし、前述したように、データ列#12の先頭のアドレスにおける先頭の1ビットの値は、元々「0」である。従って、「0」にクランプされても、データ列#12の先頭のアドレスにおける先頭の1ビットの値は「0」で変化せず、クランプの影響はない。従って、データ列#22においては、先頭のアドレスにおける先頭の1ビットが「0」にクランプされるが、1ビットのビットエラーを含むことにはならない。この結果、擬似故障データ列#22は生成されるが、生成された擬似故障データ列#22は、元のデータ列#22と等しい。従って、擬似故障データ列#22は生成されないに等しい。
残りのデータ列#23〜データ列#24は、図3のクランプ期間に示すように、クランプ期間の終了後に読み出される。従って、残りのデータ列#23〜データ列#24は、図3のクランプ後のリードデータに示すように、クランプされずに、本来のデータの値のままとされる。換言すれば、残りのデータ列#23〜データ列#24は、そのままマザーボードのメモリコントローラに入力される。
メモリコントローラ17は、ECC回路18において、データ列#31〜データ列#34について、各々に含まれるECC用データを用いて、2ビットのエラー検出及び1ビットのエラー訂正を実行して、誤りを訂正した64ビットのデータをCPUに入力する。図1の例では、メモリコントローラ17は、ECC回路18において、データ列#31に含まれる1ビットのビットエラーを訂正して、訂正されたデータ列#31’を生成する。一方、メモリコントローラ17は、データ列#32にはビットエラーが含まれないので、データ列#32についてはビットエラーの訂正は実行しない。
メモリコントローラ17は、訂正したデータ列#31’及びデータ列#32〜データ列#34をCPU11に入力する。また、メモリコントローラ17は、ECCエラー#51を、例えばBIOS13に報告する。換言すれば、メモリコントローラ17は、データ列#31の1ビットのビットエラーを訂正したことを、報告する。BIOS13は、メモリコントローラ17からの受信した報告を、エラーログとして保持する。これにより、前述したように、「ソフトエラー(1回のみのエラー)に対して1回のECC訂正が行なわれ、1回のエラーログが報告される」ことが、正しく実行されたことが確認される。
図6は、データエラー擬似発生処理のフローチャートである。
擬似故障処理プログラムが、主メモリであるDIMM4において、予め定められた物理アドレスを有する格納領域41についてメモリマップし(ステップS1)、この後、メモリマップされた物理アドレスを有する格納領域41に予め定められたテストデータ51を書き込む(ステップS2)。これにより、DIMM4において、予め定められたアドレスにテストデータ51が格納される。
擬似故障処理プログラムが、キャッシュ処理部16を制御して、DIMM4において、リードエリアとしてキャッシュメモリ19のメモリ容量以上のサイズの領域(仮想メモリ)を獲得する(ステップS3)。
獲得した仮想メモリの内容を読出して、キャッシュメモリ19上の領域(ダミー領域)にコピーし(ステップS4)、ステップ5を繰り返す。これにより、キャッシュメモリ19にコピーされたテストデータ51がキャッシュメモリ19から追い出される。
擬似故障処理プログラムが、読出処理部15を制御して、予め定められた物理アドレスから、予め定められたテストデータ51を読み出す(ステップS5)。予め定められたアドレスからテストデータ51が、キャッシュメモリ19ではなく、DIMM4から読み出される。
以上は、メモリコントローラ17が、ECC回路18において、データ列#31に含まれる1ビットのビットエラーを訂正して、訂正されたデータ列#31’を生成する例である。
しかし、メモリコントローラ17が、ECC回路18において、データ列#31に含まれるECC用データを用いて、2ビットのエラー検出を実行して、検出したエラーをBIOSに報告するようにしても良い。
この場合、第1のデータ列であるデータ列#11は、2ヶ所の予め定められたビット位置に、第1の値、例えば「1」を有するようにされる。また、第2のデータ列であるデータ列#12〜データ列#14は、2ヶ所の予め定められたビット位置に、第2の値、例えば「0」を有するようにされる。
また、擬似故障ツール3において、2ヶ所の予め定められたビット位置に対応するスイッチが、クランプ状態に切替えられる。
擬似故障処理プログラムがデータ列#11をDIMM4から読み出すと、擬似故障ツール3は、読出したデータ列#11において、2ヶ所の予め定められたビット位置の第1の値を、各々、第2の値、例えば「0」にクランプする。これにより、2ビットのビットエラーを含む、データ列#11についての擬似故障データが生成される。
この後、擬似故障処理プログラムが、第2のデータ列であるデータ列#12〜データ列#14をDIMM4から読み出す。擬似故障ツール3は、データ列#12〜データ列#14の読出しと並列して、複数の予め定められたビット位置に対応するスイッチを、クランプ状態から、通過状態に切替える。
この結果、擬似故障ツール3は、読出したデータ列#12〜データ列#14において、2ヶ所の予め定められたビット位置に対応するスイッチがクランプ状態である場合には、2ヶ所の予め定められたビット位置の第2の値「0」を、各々、第2の値「0」にクランプし、2ヶ所の予め定められたビット位置に対応するスイッチが通過状態である場合には、2ヶ所の予め定められたビット位置の第2の値「0」を、各々、そのまま通過させる。これにより、データ列#12〜データ列#14が出力される。
これにより、メモリコントローラ17は、ECC回路18において、データ列#31に含まれるECC用データを用いて、2ビットのエラー検出を実行して、検出したエラーをBIOSに報告することができる。
なお、データ列#11〜データ列#14において、第1の値を有する、予め定められたビット位置の数は、2ヶ所に限られず、3ヶ所以上の複数であっても良い。