(57)【要約】  メモリにおけるワード毎に、当該ワード内における各ビットについてのカップリングフォルトをテストするワード内テスト手段と、メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についてのカップリングフォルトをテストするワード間テスト手段と、メモリにおける部分配列間におけるカップリングフォルトをテストするブロック間テスト手段とを備え、或る程度の診断精度を維持しつつ高速のカップリングフォールト診断をなし得るようにする。
2007055068.tif 000002
【特許請求の範囲】
【請求項１】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおける所定のブロック毎に、当該ブロック内における各ビットについての故障をテストするブロック内テスト手段と、
前記メモリにおける各ブロック間における故障をテストするブロック間テスト手段と、
を備えることを特徴とするメモリ診断装置。
【請求項２】
ブロック内テスト手段は、当該ブロックに所定のテストパターンを書き込んだ後、当該ブロックから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ブロック間テスト手段は、全ブロックに所定の第１のテストパターンを書き込むとともに１つのブロックに前記第１のテストパターンを反転した反転テストパターンを書き込んだ後、反転テストパターンが書き込まれたブロック以外のブロックについて当該ブロックから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転テストパターンを書き込むブロックを順次変化させながら繰り返し実行することを特徴とする請求項１に記載のメモリ診断装置。
【請求項３】
前記ブロックは、１ワードであることを特徴とする請求項１または２に記載のメモリ診断装置。
【請求項４】
前記ブロックは、複数ワードであることを特徴とする請求項１または２に記載のメモリ診断装置。
【請求項５】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおけるワード毎に、当該ワード内における各ビットについての故障をテストするワード内テスト手段と、
前記メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についての故障をテストするワード間テスト手段と、
前記メモリにおける部分配列間における故障をテストするブロック間テスト手段と、
を備えることを特徴とするメモリ診断装置。
【請求項６】
ワード内テスト手段は、当該ワードに所定のテストパターンを書き込んだ後、当該ワードから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ワード間テスト手段は、１つの部分配列に所定の第１のテストパターンを書き込むとともにこの部分配列内の１つのワードに前記第１のテストパターンを反転した反転第１のテストパターンを書き込んだ後、反転第１のテストパターンが書き込まれたワード以外のワードについて当該ワードから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転第１のテストパターンを書き込むワードを順次変化させながら繰り返し実行し、
前記部分配列間テスト手段は、メモリに所定の第２のテストパターンを書き込むとともにメモリ内の１つの部分配列に前記第２のテストパターンを反転した反転第２のテストパターンを書き込んだ後、反転第２のテストパターンが書き込まれた部分配列以外の部分配列について当該部分配列から読み出したデータと前記第２のテストパターンとを比較する処理を、前記反転第２のテストパターンを書き込む部分配列を順次変化させながら繰り返し実行することを特徴とする請求項５に記載のメモリ診断装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シーケンス制御装置などのメモリの故障を自動診断するメモリ診断装置に関するものである。
【背景技術】
【０００２】
高信頼性が要求される組込みシステム、例えば非常停止シーケンス制御装置は、最低でも一日に一回のメモリ診断を行うことを要求されているので、高速で診断精度のよいメモリ診断方式が要望されている。【０００３】
メモリ（ＲＡＭ）の故障のひとつに、あるメモリセルにRead/Writeしたときに他のメモリセルのデータ値が変化するカップリングフォールトがある。このカップリングフォールトの診断手法として、例えば、WalkpathやGalpat（Galloping  Pattern  試験）などがある。Walkpathにおいては、最初に、試験対象となる全メモリ領域に、０が均一に書き込まれ、つぎにある１ビットの着目メモリセルが１に反転され、残りのメモリ領域（バックグラウンド）のデータ値が正しいか否かが試験される。その後、着目メモリセルが試験のために再度読み出され、再度反転される。このようなプロセスが、後続する全てのメモリセルについて繰り返し実行される。つぎに、全メモリ領域に１が書き込まれ、同様のプロセスが繰り返される。このように、Walkpathにおいては、データが均一に書き込まれたメモリ領域に、１個の反転要素が挿入され、残りの全てのセルの内容が正しいか否かについてチェックされる。Galpatにおいては、Walkpathとは異なり、残りのメモリセルの１つを読み出した後に、毎回、反転メモリセル（着目メモリセル）に対し、試験読み出しが実行される。【０００４】
また、他の従来のメモリ診断方法としては、例えば、特許文献１がある。特許文献１においては、メモリのアドレス５５hとＡＡhには、テストデータＡＡＡＡhを書き込み、それ以外のアドレスには、テストデータ５５５５hを書き込み、その後、メモリから順次データを読み出す。アドレスを５５hまたはＡＡhとして読み出したデータに関しては、テストデータＡＡＡＡhとの比較を行い、それ以外のアドレスで読み出したデータに関しては、テストデータ５５５５hとの比較を行い、一致の場合正常と判断し、不一致の場合異常と判断している。特許文献１において、例えば、ビット７が０固定で故障した場合、アドレスＡＡhが２Ａhとなるため、アドレス２ＡhにテストデータＡＡＡＡhが上書きされ、アドレス２Ａhのデータ読み出し時にデータＡＡＡＡhが出力され、期待値である５５５５hと不一致となり、アドレス線の故障を検出することができる。【０００５】
【特許文献１】特許第３５７０３８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１においては、複数ビットから成るテストデータ内の各ビットセル間でのカップリングフォールトについての診断を行っていないので、診断精度に問題がある。また、アドレス値反転の組を前提とするため、１度のテストデータ幅は、メモリデータ幅以下でなくてはならず、テストデータ幅を長くして処理の高速化を行うことができない。【０００７】
また、WalkpathやGalpatの手法では、どのアドレス同士にカップリングフォールトが発生したかまでを検出することができるが、アドレスへのテストパターン書き込みと全アドレスの読み込みテストを繰り返す必要があったため、メモリアクセス回数が増加し診断時間が長くなるという問題がある。例えば、メモリサイズをＮビットとすると、Ｎの２乗オーダのメモリアクセスが必要となるため、メモリサイズがメガビット以上になると診断時間が数十時間を越えてしまうので、WalkpathやGalpatの手法を定期的なメモリ診断を必要とする上記ののようなシーケンサシステムなどにそのまま適用することはできない。【０００８】
本発明は、上記に鑑みてなされたものであって、或る程度の診断精度を維持しつつ高速のメモリ故障診断をなし得るメモリ診断装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、メモリの故障を診断するメモリ診断装置において、前記メモリにおける所定のブロック毎に、当該ブロック内における各ビットについての故障をテストするブロック内テスト手段と、前記メモリにおける各ブロック間における故障をテストするブロック間テスト手段とを備えることを特徴とする。【００１０】
また、この発明は、メモリの故障を診断するメモリ診断装置において、前記メモリにおけるワード毎に、当該ワード内における各ビットについての故障をテストするワード内テスト手段と、前記メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についての故障をテストするワード間テスト手段と、前記メモリにおける部分配列間における故障をテストするブロック間テスト手段とを備えることを特徴とする。
【発明の効果】
【００１１】
この発明によれば、メモリの故障診断をブロック内テスト、ブロック間テストと階層的に実施するようにしたので、故障発生箇所の特定がワード単位になるかわりに、WalkpathやGalpatの手法に比べメモリアクセス回数を減らし診断時間を短縮することができる。したがって、メモリ診断を通常アプリケーションの合間に実行することが可能となる。【００１２】
また、この発明によれば、メモリ故障診断をワード内テスト、ワード間テスト、部分配列間テストと階層的に実施するようにしたので、故障発生箇所の特定が部分配列単位になるかわりに、従来方式に比べメモリアクセス回数を減らし診断時間を短縮できる。したがって、メモリ診断を通常アプリケーションの合間に実行可能となる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明にかかるメモリ診断装置の実施の形態を示すブロック図である。
【図２】図２は、実施の形態１のメモリ診断手順を概念的に示す工程図である。
【図３】図３は、実施の形態１のメモリ診断のワード内テスト手順を示すフローチャートである。
【図４】図４は、実施の形態１のメモリ診断のワード間テスト手順を示すフローチャートである。
【図５】図５は、実施の形態１のメモリ診断の概念図である。
【図６】図６は、実施の形態２のメモリ診断手順を概念的に示す工程図である。
【図７】図７は、実施の形態２のメモリ診断の部分配列間テスト手順を示すフローチャートである。
【図８】図８は、実施の形態２のメモリ診断の概念図である。
【符号の説明】
【００１４】
１１  ＣＰＵ
１２  バス
１３  ランダムアクセスメモリテスト領域
１４  ランダムアクセスメモリ退避領域
１５  不揮発性メモリ
１６  レジスタ
【発明を実施するための最良の形態】
【００１５】
以下に、本発明にかかるメモリ診断装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。【００１６】
実施の形態１．
図１は、本発明にかかるメモリ診断を実施するための構成を示すものである。図１において、ランダムアクセスメモリ（ＲＡＭ）のテスト領域１３および退避領域１４は、バス１２によってＣＰＵ１１と接続されている。ＣＰＵ１１は不揮発性メモリ１５に格納されたシステム制御用のアプリケーションソフトウェアを実行する。また、この場合、不揮発性メモリ１５には、以下に説明するメモリ診断プログラムが格納されており、ＣＰＵ１１はメモリ診断時には、不揮発性メモリ１５に格納されたメモリ診断プログラムを実行する。ＣＰＵ１１は、テスト領域１３にテストデータを書き込むためのレジスタ１６を有している。テスト領域１３と退避領域１４は同一のメモリ上に違う領域として構成してもよい。【００１７】
図２は、実施の形態１のメモリ診断処理手順を示すものである。実施の形態１においては、テスト領域１３をワードと全体の二階層に分けて診断する。すなわち、実施の形態１においては、最初にワード内の各ビット間のカップリングフォールトを含む故障をテストし（ステップＳ１００）、その後ワード間のカップリングフォールトを含む故障をテストする（ステップＳ１１０）。【００１８】
まず、図３に従って、ワード内の各ビット間のカップリングフォールトテスト手順について説明する。まず、テスト領域１３の先頭ワードについて、そのワードに含まれるビット間にカップリングフォールトがないことをテストする。この先頭ワードについてのメモリ診断処理を実行する前に、テスト領域１３の先頭ワードの記憶データを退避領域１４に予めバックアップコピーしておく。つぎに、レジスタ１６を０で初期化し、最下位ビットを１にして（ステップＳ２００）、このレジスタ値（００００…００１）をテスト領域１３の先頭ワードに書き込み（ステップＳ２１０）、該当ワード（この場合先頭ワード）を読み出し、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２２０）。次にレジスタ１６をビットシフトし（ステップＳ２４０）、ビットシフトしたレジスタ値（００００…０１０）を同先頭ワードに書き込んで読み出し（ステップＳ２１０）、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２２０）。このような診断を１を最上位ビットにシフトするまで繰り返す（ステップＳ２３０）。もし、レジスタ値と読み出したメモリワード値が異なっていれば、そのメモリワードにカップリングフォールトがあるので、エラー報告する（ステップＳ２９５）。以上の診断は続行しても中断してもよい。【００１９】
次に、レジスタ１６を１で初期化し、最下位ビットを０にして（ステップＳ２５０）、このレジスタ値（１１１１…１１０）をテスト領域１３の先頭ワードに書き込み（ステップＳ２６０）、該当ワード（この場合先頭ワード）を読み出し、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２７０）。次にレジスタ１６をビットシフトし（ステップＳ２９０）、ビットシフトしたレジスタ値（１１１１…１０１）を同先頭ワードに書き込んで読み出し（ステップＳ２６０）、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２７０）。このような診断を０を最上位ビットにシフトするまで繰り返す（ステップＳ２８０）。もし、レジスタ値と読み出したメモリワード値が異なっていれば、そのメモリワードにカップリングフォールトがあるので、エラー報告する（ステップＳ２９５）。この先頭ワードについての診断が完了すれば、退避領域１４から先頭ワードのデータをテスト領域１３に復旧する。以上の確認により、先頭ワードの内部においてビット間のカップリングフォールトが無いことをテストすることができる。【００２０】
以上のようにして、先頭ワードについてのワード内テストを終了したが、この次に先頭ワードを被試験ワードとした後述のワード間テストを行うようにしてもよいが、この場合は、テスト領域１３における全てのワードについて、前述と同様にして、ワード内テストを実行するものとする。【００２１】
図３の説明では、ワード内テストを最下位ビットから行うようにしたが、ワード内テストを最上位ビットから行うようにしてもよい。また、先にワード内全体を１で初期化して、その後にワード内全体を０で初期化してワード内テストを実行するようにしてもよい。さらに、ＡＡＡＡhや５５５５hなどの特定パターンで被試験ワードを初期化し、この特定パターンとワードから読み出したデータとを比較する処理を、ビットシフトさせた複数の特定パターンについて実施させることによって、ワード内テストを行うようにしてもよい。要は、ワード内の各ビットに０と１を書き込み、他ビットに影響ないことを確認できればよい。【００２２】
このようにして、全てのワードについてのワード内テストが終われば、つぎに、テスト領域１３のある一つのワードと他ワードとの間にカップリングフォールトがないことをテストするワード間テストを実行する。図４にしたがって、ワード間テスト手順について説明する。このワード間テストを実行する前に、テスト領域１３の記憶データを退避領域１４にコピーしておく。【００２３】
まず、テスト領域１３の全体を０で初期化する。次にワード内テストを実施した１つの被試験ワードに全ビット１を書き込み（ステップＳ３００）、テスト領域１３の他ワードの記憶データを順次読み出し、読み出したデータ値が全てが０であることを確認する（ステップＳ３１０〜Ｓ３３０）。もし、読み出したデータ値に１がある場合は、データ値に１が含まれるワードと被試験ワードとの間にカップリングフォールトがあるので、エラー報告する（ステップＳ３８０）。【００２４】
次に、テスト領域１３の全体を１で初期化した後、上記被試験ワードに全ビット０を書き込み（ステップＳ３４０）、テスト領域１３の他ワードの記憶データを順次読み出し、読み出したデータ値が全てが１であることを確認する（ステップＳ３５０〜Ｓ３７０）。もし、読み出したデータ値に０がある場合は、データ値に０が含まれるワードと被試験ワードとの間にカップリングフォールトがあるので、エラー報告する（ステップＳ３８０）。以上の処理により、１つの被試験ワードと他ワードの間にカップリングフォールトがないことを診断することができる。【００２５】
以下、被試験ワードを次のアドレスのワードとして同様のテストを繰り返す。このようなワード間テストをテスト領域１３の先頭ワードから順に全ワードについて実施することで、テスト領域１３の全体の診断を行うことができる。ワード間テストが完了すれば、退避領域１４からテスト領域１３にメモリ値を復旧コピーする。その後、ＣＰＵ１１は組込みシステムとしての動作を再開する。【００２６】
図５は上述した実施の形態１のメモリ診断手順を概念的に示すものである。まず、先頭ワードから最終ワードまで各ワード内部のビット間テストを、１のビットシフトと０のビットシフトの２種類のビットシフトパターンを用いて実行する。次に、テスト領域全体を０に初期化するとともに被試験ワードに全ビット１を書込み、被試験ワードと他ワード間のカップリングフォールトのテストを行い、さらにテスト領域全体を１に初期化するとともに被試験ワードに全ビット０を書込み、被試験ワードと他ワード間のカップリングフォールトのテストを行う。これを全ワードについて繰り返す。【００２７】
テスト領域１３のメモリサイズがＮビットとすると、従来のWalkpathやGalpatによる手法であれば、Ｎビットのテスト領域を診断するのに、Ｎ2のメモリアクセス回数が必要である。１ワードをＬビットとすると、実施の形態１の方式では、ワード内テストに、Ｌ2×（Ｎ／Ｌ）回、ワード間テストに（Ｎ／Ｌ）2回必要なので、アクセス回数は、Ｌ2×（Ｎ／Ｌ）＋（Ｎ／Ｌ）2となる。Ｎ＝Ｌ2とした場合、実施の形態１の方式は、約Ｌ倍の高速化を図ることができる。【００２８】
なお、上記の説明では、最初全てのワードについてのワード内テストを終了した後、ワード間テストを全てのワードについて実行するようにしたが、１つのワードのワード内テストが終了すると、このワード内テストを終了したワードを被試験ワードとしたワード間テストを実行し、つぎに次のワードのワード内テストを実施し、このワード内テストを終了した次のワードを被試験ワードとしたワード間テストを実行するというように、ワード内テストとワード間テストを１ワードずつ交互に行うようにしてもよい。また、所定数のワード（例えば８ワード）のワード内テストを順次連続して行い、その後これらワード内テストがテストが終了した複数のワードについてのワード間テストを順次連続して行い、この後次の所定数のワード（例えば８ワード）のワード内テストを順次連続して行い、その後これらワード内テストがテストが終了した複数のワードについてのワード間テストを順次連続して行うというように、ワード内テストとワード間テストを複数ワードずつ交互に行うようにしてもよい。また、ワード間テストは、ワード内テスト実施済みのワードであればどのような順序で被試験ワードを選んでも良い。また、ワード間テストの際に、被試験ワードを全て１とするとともに他のワードを全て０として行う図４のステップＳ３００〜Ｓ３３０に示したテストを、被試験ワードを先頭ワードから最終ワードまでの全てのワードに設定して順次実行させ、この後、被試験ワードを全て０とするとともに他のワードを全て１として行う図４のステップＳ３４０〜Ｓ３７０に示したテストを、被試験ワードを先頭ワードから最終ワードまでの全てのワードに設定して順次実行させるようにしてもよい。【００２９】
また、初期化パターンおよび被試験ワードのテストパターンに任意のテストパターンを選んでも良い。ただし、初期化値と被試験ワードのテストパターンの両方が１または両方０であるビット間にカップリングフォールトがあった場合、検出洩れとなるので、初期化パターンと、被試験ワードのテストパターンとは、例えば、ＡＡＡＡhと５５５５hのように、互いにビットの値が反転している関係にあるものを採用しなくてはならない。【００３０】
また、上記では、テスト領域１３のテスト完了までＣＰＵ１１は診断以外の処理を行わないようにしている。これは、ＣＰＵ１１が処理を行うためのメモリ（テスト領域１３）が診断データで埋められているからである。しかし、ＣＰＵ１１が診断以外の処理、例えば組込みシステムのアプリケーションを処理したいタイミングで、所定のメモリ診断シーケンスのなかでメモリ診断がどのシーケンスまで完了したかを示す中断シーケンス情報を退避領域１４または不揮発性領域１５に記録するようにすれば、退避領域１４からテスト領域１３にデータをコピーしてＣＰＵ１１が診断以外の処理を実行した後、再度テスト領域１３から退避領域１４にデータをコピーし、中断シーケンス情報を参照して診断を再開させることが可能となる。【００３１】
例えば、ワード内テストとワード間テストを１ワードずつ交互に行うようにする場合、ＣＰＵ１１が診断以外の処理を行うに先立ち、被試験ワードが先頭からどこまで完了したかを示す完了ワード情報を退避領域１４または不揮発性領域１５に記録する。次に、ＣＰＵ１１は退避領域１４からテスト領域１３にデータをコピーして、診断以外の処理を行う。ＣＰＵ１１がメモリ診断を再開する場合は、テスト領域１３を退避領域１４にコピーして、記録しておいた完了ワードの次のワードから被試験ワードとしてテスト再開する。このような処理によれば、メモリ診断を時分割で実施できるため、アプリケーション処理の合間にメモリ診断を実施することができ、アプリケーション処理を滞らすことがない。【００３２】
また、最初にテスト領域１３を退避領域１４にコピーしたら、ＣＰＵ１１はアプリケーション処理には退避領域１４をアクセスして行い、メモリ診断にはテスト領域１３をアクセスする。メモリ診断が完了すれば、退避領域１４をテスト領域１３にコピーして、テスト領域１３と退避領域１４のアドレスを切り替える。このようにすれば、上述したメモリ診断を時分割で行う際のテスト領域１３−退避領域１４間のコピーが不要となるため、上記よりもさらに高速化することができる。【００３３】
このように実施の形態１によれば、メモリのカップリング診断をワード内テスト、ワード間テストと階層的に実施するようにしたので、故障発生箇所の特定がワード単位になるかわりに（すなわち、本方式では異なるワードに跨ったカップリングフォールトまでは検出できないが）、WalkpathやGalpatの手法に比べメモリアクセス回数を減らし診断時間を短縮することができる。したがって、メモリ診断が組込みシステムのアプリケーションの合間に実行可能となる。また、診断を一時中断する際にワード間テストが完了したワードアドレスを記録しておき、診断再開時にはそのアドレスから再実施することで、メモリ診断を時分割で行うことができる。【００３４】
なお、上記実施の形態１によれば、ワード単位にワード内テストおよびワード間テストを行うようにしたが、任意のブロック単位にブロック内テストおよびブロック間テストを行うようにしてもよい。ブロックの単位としては、たとえば、１ワード、複数ワードに対応するメモリ量である後述の部分配列などがある。【００３５】
実施の形態２．
つぎに、図６〜図８などを用いてこの発明の実施の形態２について説明する。図６は、実施の形態２のメモリ診断処理手順を示すものである。実施の形態２においては、メモリをワード、部分配列（アレイ）および全体の三階層に分けて診断する。部分配列とは、複数ワードに対応するメモリ量を云う。すなわち、実施の形態２においては、最初にワード内の各ビット間のカップリングフォールトを含む故障をテストし（ステップＳ４００）、その後、部分配列内におけるワード間のカップリングフォールトを含む故障をテストし（ステップＳ４１０）、その後、部分配列間のカップリングフォールトを含む故障をテストする（ステップＳ４２０）。【００３６】
このワード間テストを実行する前に、テスト領域１３の最初の部分配列の記憶データを退避領域１４にコピーしておく。まず、テスト領域１３の最初の部分配列の先頭ワードについて、先の図３に示した手順と同様にして、ワード内テストを実施する。このワード内テストが正常であれば、最初の部分配列におけるテストしたワード（この場合先頭ワード）とそのワードを含む部分配列の他ワードとの間にカップリングフォールトがないことをテストするため、先の図４に示した手順と同様にして、テストしたワードを被試験ワードとした部分配列内でのワード間テストを実施する。【００３７】
つぎに、テスト領域１３の最初の部分配列における先頭ワードの次のワードについて、先の図３に示した手順と同様にして、ワード内テストを実施する。このワード内テストが正常であれば、最初の部分配列におけるテストしたワード（この場合先頭ワードの次のワード）とそのワードを含む部分配列の他ワードとの間にカップリングフォールトがないことをテストするため、先の図４に示した手順と同様にして、テストしたワードを被試験ワードとした部分配列内でのワード間テストを実施する。以下、同様にして、最初の部分配列内の各ワードについて、ワード内テストおよびワード間テストを実施する。【００３８】
次に、テストした部分配列（この場合最初の部分配列）と他の部分配列との間にカップリングフォールトがないことをテストする部分配列間テストを実施する。図７にしたがって、部分配列間テスト手順について説明する。この部分配列間テストを実行する前に、テスト領域１３の記憶データを退避領域１４にコピーしておく。【００３９】
まず、テスト領域１３の全体を０で初期化し、次に部分配列内テストを実施した１つの部分配列を被試験部分配列とし、この被試験部分配列に全ビット１を書き込む（ステップＳ５００）。つぎに、テスト領域１３における被試験部分配列以外の部分配列の記憶データを順次読み出し、読み出したデータ値が全てが０であることを確認する（ステップＳ５１０〜Ｓ５３０）。もし、読み出したデータ値に１がある場合は、データ値に１が含まれる部分配列と被試験部分配列との間にカップリングフォールトがあるので、エラー報告する（ステップＳ５８０）。【００４０】
次に、テスト領域１３の全体を１で初期化した後、上記被試験部分配列に全ビット０を書き込み（ステップＳ５４０）、テスト領域１３の被試験部分配列以外の部分配列の記憶データを順次読み出し、読み出したデータ値が全てが１であることを確認する（ステップＳ５５０〜Ｓ５７０）。もし、読み出したデータ値に０がある場合は、データ値に０が含まれる部分配列と被試験部分配列との間にカップリングフォールトがあるので、エラー報告する（ステップＳ５８０）。以上の処理により、１つの被試験部分配列と他の部分配列の間にカップリングフォールトがないことを診断することができる。【００４１】
つぎに、つぎの部分配列について、前述と同様にして、ワード内テストおよびワード間テストを実施し、その後この部分配列を被試験部分配列とした前述の部分配列間テストを実施する。このような処理をテスト領域１３内の全ての部分配列について順次実行することで、テスト領域１３の全域についてのカップリングフォールト診断を行うことができる。このようにして全メモリのテストが完了すれば、退避領域１４からテスト領域１３にメモリ値を復旧コピーする。その後、ＣＰＵ１１は組込みシステムとしての動作を再開する。【００４２】
図８は上述した実施の形態２のメモリ診断手順を概念的に示すものである。まず、最初の部分配列について各ワードをワード内テストし、次にその部分配列についてワード間テストを実施する。さらにテスト領域全体を初期化し部分配列間テストを実施する。テスト領域の全部分配列について、ワード内テスト、ワード間テスト、部分配列間テストを繰り返し、全テスト領域のテストが完了する。【００４３】
テスト領域１３が、Ｍワードの部分配列Ｎ個から構成されているとする。WalkpathやGalpatによる手法であれば、ＭＮワードのテスト領域を診断するのにワード内テスト以外に（Ｍ×Ｎ）2のメモリアクセス回数が必要である。実施の形態２の方式であれば、部分配列のワード間テストにＮ×（Ｍ2）回、部分配列間テストにＮ×（ＮＭ）回であり、合計でＮ×（Ｍ2）＋Ｎ×（ＮＭ）回のメモリアクセス回数となる。いま、Ｍ＝Ｎ＝１０００、すなわち１メガワードメモリとすると、実施の形態２の方式は従来方式に比べメモリアクセス回数は１０００分の１になる。【００４４】
なお、上記の説明では、１つの部分配列内において、ワード内テストとワード間テストを交互に行うようにしたが、１つの部分配列内において、全てのワードについてのワード内テストを終了させた後、各ワードについてのワード間テストを実行させるようにしてもよい。また、１つの部分配列内において、ワード内テストとワード間テストを複数ワードずつ交互に行うようにしてもよい。また、ワード間テストは、ワード内テスト実施済みのワードであればどのような順序で被試験ワードを選んでも良い。１つの部分配列内におけるワード間テストの際に、被試験ワードを全て１とするとともに他のワードを全て０として行う図４のステップＳ３００〜Ｓ３３０に示したテストを、被試験ワードを１つの部分配列内における先頭ワードから最終ワードまでの全てのワードに設定して順次実行させ、この後、被試験ワードを全て０とするとともに他のワードを全て１として行う図４のステップＳ３４０〜Ｓ３７０に示したテストを、被試験ワードを１つの部分配列内における先頭ワードから最終ワードまでの全てのワードに設定して順次実行させるようにしてもよい。【００４５】
また、最初、テスト領域内における全てのワードについてワード内テストを実行し、その後各部分配列内におけるワード間テストを全て実行し、この後に部分配列間テストを実行するようにしてもよい。また、部分配列間テストは、ワード間テスト実施済みの部分配列であればどのような順序で被試験部分配列を選んでも良い。【００４６】
また、初期化パターンおよび被試験ワードのテストパターンに任意のテストパターンを選んでも良い。ただし、初期化値と被試験ワードのテストパターンの両方が１または両方０であるビット間にカップリングフォールトがあった場合、検出洩れとなるので、初期化パターンと、被試験ワードのテストパターンとは、例えば、ＡＡＡＡhと５５５５hのように、互いにビットの値が反転している関係にあるものを採用しなくてはならない。同様に、初期化パターンおよび被試験部分配列のテストパターンに任意のテストパターンを選んでも良い。この場合も、互いにビットの値が反転している関係にあるものを採用しなくてはならない。【００４７】
また、実施の形態２においても、ＣＰＵ１１が診断以外の処理、例えば組込みシステムのアプリケーションを処理したいタイミングで、所定のメモリ診断シーケンスのなかでメモリ診断がどのシーケンスまで完了したかを示す中断シーケンス情報を退避領域１４または不揮発性領域１５に記録するようにすれば、退避領域１４からテスト領域１３にデータをコピーしてＣＰＵ１１が診断以外の処理を実行した後、再度テスト領域１３から退避領域１４にデータをコピーし、中断シーケンス情報を参照して診断を再開させることが可能となる。【００４８】
例えば、ＣＰＵ１１が診断以外の処理を行うに先立ち、被試験ワードが先頭からどこまで完了したかを示す完了ワードを退避領域１４または不揮発性領域１５に記録する。次に、ＣＰＵ１１は退避領域１４からテスト領域１３にデータをコピーして、診断以外の処理を行う。ＣＰＵ１１がメモリ診断を再開する場合は、テスト領域１３を退避領域１４にコピーして、記録しておいた完了ワードの次のワードから被試験ワードとしてテスト再開する。ワード間テストの完了したワードを記録するのではなく、部分配列間テストが完了した部分配列アドレスを記録しても良い。このような処理によれば、メモリ診断を時分割で実施できるため、アプリケーション処理の合間にメモリ診断を実施することができ、アプリケーション処理を滞らすことがない。【００４９】
また、最初にテスト領域１３を退避領域１４にコピーしたら、ＣＰＵ１１はアプリケーション処理には退避領域１４をアクセスして行い、メモリ診断にはテスト領域１３をアクセスする。メモリ診断が完了すれば、退避領域１４をテスト領域１３にコピーして、テスト領域１３と退避領域１４のアドレスを切り替える。このようにすれば、上述したメモリ診断を時分割で行う際のテスト領域１３−退避領域１４間のコピーが不要となるため、上記よりもさらに高速化することができる。【００５０】
このように実施の形態２によれば、また、メモリカップリング診断をワード内テスト、ワード間テスト、部分配列間テストと階層的に実施するようにしたので、故障発生箇所の特定が部分配列単位になるかわりに（すなわち、本方式では異なる部分配列に跨ったカップリングフォールトの位置までは検出できないが）、従来方式に比べメモリアクセス回数を減らし診断時間を短縮できる。したがって、メモリ診断が組込みシステムのアプリケーションの合間に実行可能となる。また、診断を一時中断する際にワード間テストが完了したワードアドレスや部分配列間テストが完了したアドレスを記録しておき、診断再開時にはそれらのアドレスから再実施することで、メモリ診断を時分割で行うことができる。
【産業上の利用可能性】
【００５１】
以上のように、本発明にかかるメモリ診断装置は、高信頼性が要求される組込みシステム、例えば最低でも一日に一回のメモリ診断を行う非常停止シーケンス制御装置のメモリ診断に有用である。
【図１】
2007055068.tif 000003
【図２】
2007055068.tif 000004
【図３】
2007055068.tif 000005
【図４】
2007055068.tif 000006
【図５】
2007055068.tif 000007
【図６】
2007055068.tif 000008
【図７】
2007055068.tif 000009
【図８】
2007055068.tif 000010
【手続補正書】
【提出日】平成19年5月2日(2007.5.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
（削除）
【請求項２】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおける所定のブロック毎に、当該ブロック内における各ビットについての故障をテストするブロック内テスト手段と、
前記メモリにおける各ブロック間における故障をテストするブロック間テスト手段と、
を備え、
ブロック内テスト手段は、当該ブロックに所定のテストパターンを書き込んだ後、当該ブロックから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ブロック間テスト手段は、全ブロックに所定の第１のテストパターンを書き込むとともに１つのブロックに前記第１のテストパターンを反転した反転第１テストパターンを書き込んだ後、反転第１テストパターンが書き込まれたブロック以外のブロックについて当該ブロックから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転第１テストパターンを書き込むブロックを順次変化させながら繰り返し実行することを特徴とするメモリ診断装置。
【請求項３】
前記ブロックは、１ワードであることを特徴とする請求項２に記載のメモリ診断装置。
【請求項４】
前記ブロックは、複数ワードであることを特徴とする請求項２に記載のメモリ診断装置。
【請求項５】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおけるワード毎に、当該ワード内における各ビットについての故障をテストするワード内テスト手段と、
前記メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についての故障をテストするワード間テスト手段と、
前記メモリにおける部分配列間における故障をテストするブロック間テスト手段と、
を備えることを特徴とするメモリ診断装置。
【請求項６】
ワード内テスト手段は、当該ワードに所定のテストパターンを書き込んだ後、当該ワードから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ワード間テスト手段は、１つの部分配列に所定の第１のテストパターンを書き込むとともにこの部分配列内の１つのワードに前記第１のテストパターンを反転した反転第１のテストパターンを書き込んだ後、反転第１のテストパターンが書き込まれたワード以外のワードについて当該ワードから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転第１のテストパターンを書き込むワードを順次変化させながら繰り返し実行し、
前記部分配列間テスト手段は、メモリに所定の第２のテストパターンを書き込むとともにメモリ内の１つの部分配列に前記第２のテストパターンを反転した反転第２のテストパターンを書き込んだ後、反転第２のテストパターンが書き込まれた部分配列以外の部分配列について当該部分配列から読み出したデータと前記第２のテストパターンとを比較する処理を、前記反転第２のテストパターンを書き込む部分配列を順次変化させながら繰り返し実行することを特徴とする請求項５に記載のメモリ診断装置。
【請求項７】
前記ブロック間テスト手段は、さらに、全ブロックに前記第１のテストパターンを反転した第２のテストパターンを書き込むとともに１つのブロックに前記第２のテストパターンを反転した反転第２テストパターンを書き込んだ後、反転第２テストパターンが書き込まれたブロック以外のブロックについて当該ブロックから読み出したデータと前記第２のテストパターンとを比較する処理を、前記反転第２テストパターンを書き込むブロックを順次変化させながら繰り返し実行することを特徴とする請求項１に記載のメモリ診断装置。
【請求項８】
ブロック間テスト手段は、前記ブロック内テスト手段によるブロック内テストが終了しているブロックに前記反転第１テストパターンが書き込まれるようにすることを特徴とする請求項１に記載のメモリ診断装置。
【請求項９】
ブロック間テスト手段は、前記ブロック内テスト手段によるブロック内テストが終了しているブロックに前記反転第１テストパターンおよび反転第２テストパターンが書き込まれるようにすることを特徴とする請求項７に記載のメモリ診断装置。
【手続補正書】
【提出日】平成20年5月12日(2008.5.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおける所定のブロック毎に、当該ブロック内における各ビットについての故障をテストするブロック内テスト手段と、
前記メモリにおける各ブロック間における故障をテストするブロック間テスト手段と、
を備え、
前記ブロック内テスト手段は、当該ブロックに所定のテストパターンを書き込んだ後、当該ブロックから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ブロック間テスト手段は、全ブロックに所定の第１のテストパターンを書き込むとともに１つのブロックに前記第１のテストパターンを反転した反転第１テストパターンを書き込んだ後、反転第１テストパターンが書き込まれたブロック以外のブロックについて当該ブロックから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転第１テストパターンを書き込むブロックを順次ブロック単位で変化させながら繰り返し実行することを特徴とするメモリ診断装置。
【請求項２】
前記ブロックは、１ワードであることを特徴とする請求項１に記載のメモリ診断装置。
【請求項３】
前記ブロックは、複数ワードであることを特徴とする請求項１に記載のメモリ診断装置。
【請求項４】
メモリの故障を診断するメモリ診断装置において、
前記メモリにおけるワード毎に、当該ワード内における各ビットについての故障をテストするワード内テスト手段と、
前記メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についての故障をテストするワード間テスト手段と、
前記メモリにおける部分配列間における故障をテストする部分配列間テスト手段と、
を備えることを特徴とするメモリ診断装置。 
【請求項５】
前記ワード内テスト手段は、当該ワードに所定のテストパターンを書き込んだ後、当該ワードから読み出したデータと前記テストパターンとを比較する処理を、前記テストパターンを変化させながら繰り返し実行し、
前記ワード間テスト手段は、１つの部分配列に所定の第１のテストパターンを書き込むとともにこの部分配列内の１つのワードに前記第１のテストパターンを反転した反転第１のテストパターンを書き込んだ後、反転第１のテストパターンが書き込まれたワード以外のワードについて当該ワードから読み出したデータと前記第１のテストパターンとを比較する処理を、前記反転第１のテストパターンを書き込むワードを順次変化させながら繰り返し実行し、
前記部分配列間テスト手段は、メモリに所定の第２のテストパターンを書き込むとともにメモリ内の１つの部分配列に前記第２のテストパターンを反転した反転第２のテストパターンを書き込んだ後、反転第２のテストパターンが書き込まれた部分配列以外の部分配列について当該部分配列から読み出したデータと前記第２のテストパターンとを比較する処理を、前記反転第２のテストパターンを書き込む部分配列を順次変化させながら繰り返し実行することを特徴とする請求項４に記載のメモリ診断装置。
【請求項６】
前記ブロック間テスト手段は、さらに、全ブロックに前記第１のテストパターンを反転した第２のテストパターンを書き込むとともに１つのブロックに前記第２のテストパターンを反転した反転第２テストパターンを書き込んだ後、反転第２テストパターンが書き込まれたブロック以外のブロックについて当該ブロックから読み出したデータと前記第２のテストパターンとを比較する処理を、前記反転第２テストパターンを書き込むブロックを順次変化させながら繰り返し実行することを特徴とする請求項１に記載のメモリ診断装置。
【請求項７】
ブロック間テスト手段は、前記ブロック内テスト手段によるブロック内テストが終了しているブロックに前記反転第１テストパターンが書き込まれるようにすることを特徴とする請求項１に記載のメモリ診断装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シーケンス制御装置などのメモリの故障を自動診断するメモリ診断装置に関するものである。
【背景技術】
【０００２】
高信頼性が要求される組込みシステム、例えば非常停止シーケンス制御装置は、最低でも一日に一回のメモリ診断を行うことを要求されているので、高速で診断精度のよいメモリ診断方式が要望されている。
【０００３】
メモリ（ＲＡＭ）の故障のひとつに、あるメモリセルにRead/Writeしたときに他のメモリセルのデータ値が変化するカップリングフォールトがある。このカップリングフォールトの診断手法として、例えば、WalkpathやGalpat（Galloping Pattern  試験）などがある。Walkpathにおいては、最初に、試験対象となる全メモリ領域に、０が均一に書き込まれ、つぎにある１ビットの着目メモリセルが１に反転され、残りのメモリ領域（バックグラウンド）のデータ値が正しいか否かが試験される。その後、着目メモリセルが試験のために再度読み出され、再度反転される。このようなプロセスが、後続する全てのメモリセルについて繰り返し実行される。つぎに、全メモリ領域に１が書き込まれ、同様のプロセスが繰り返される。このように、Walkpathにおいては、データが均一に書き込まれたメモリ領域に、１個の反転要素が挿入され、残りの全てのセルの内容が正しいか否かについてチェックされる。Galpatにおいては、Walkpathとは異なり、残りのメモリセルの１つを読み出した後に、毎回、反転メモリセル（着目メモリセル）に対し、試験読み出しが実行される。
【０００４】
また、他の従来のメモリ診断方法としては、例えば、特許文献１がある。特許文献１においては、メモリのアドレス５５hとＡＡhには、テストデータＡＡＡＡhを書き込み、それ以外のアドレスには、テストデータ５５５５hを書き込み、その後、メモリから順次データを読み出す。アドレスを５５hまたはＡＡhとして読み出したデータに関しては、テストデータＡＡＡＡhとの比較を行い、それ以外のアドレスで読み出したデータに関しては、テストデータ５５５５hとの比較を行い、一致の場合正常と判断し、不一致の場合異常と判断している。特許文献１において、例えば、ビット７が０固定で故障した場合、アドレスＡＡhが２Ａhとなるため、アドレス２ＡhにテストデータＡＡＡＡhが上書きされ、アドレス２Ａhのデータ読み出し時にデータＡＡＡＡhが出力され、期待値である５５５５hと不一致となり、アドレス線の故障を検出することができる。
【０００５】
【特許文献１】特許第３５７０３８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１においては、複数ビットから成るテストデータ内の各ビットセル間でのカップリングフォールトについての診断を行っていないので、診断精度に問題がある。また、アドレス値反転の組を前提とするため、１度のテストデータ幅は、メモリデータ幅以下でなくてはならず、テストデータ幅を長くして処理の高速化を行うことができない。
【０００７】
また、WalkpathやGalpatの手法では、どのアドレス同士にカップリングフォールトが発生したかまでを検出することができるが、アドレスへのテストパターン書き込みと全アドレスの読み込みテストを繰り返す必要があったため、メモリアクセス回数が増加し診断時間が長くなるという問題がある。例えば、メモリサイズをＮビットとすると、Ｎの２乗オーダのメモリアクセスが必要となるため、メモリサイズがメガビット以上になると診断時間が数十時間を越えてしまうので、WalkpathやGalpatの手法を定期的なメモリ診断を必要とする上記のようなシーケンサシステムなどにそのまま適用することはできない。
【０００８】
本発明は、上記に鑑みてなされたものであって、或る程度の診断精度を維持しつつ高速のメモリ故障診断をなし得るメモリ診断装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、メモリの故障を診断するメモリ診断装置において、前記メモリにおける所定のブロック毎に、当該ブロック内における各ビットについての故障をテストするブロック内テスト手段と、前記メモリにおける各ブロック間における故障をテストするブロック間テスト手段とを備えることを特徴とする。
【００１０】
また、この発明は、メモリの故障を診断するメモリ診断装置において、前記メモリにおけるワード毎に、当該ワード内における各ビットについての故障をテストするワード内テスト手段と、前記メモリにおける複数ワードとしての部分配列毎に、部分配列内における各ワード間についての故障をテストするワード間テスト手段と、前記メモリにおける部分配列間における故障をテストする部分配列間テスト手段とを備えることを特徴とする。
【発明の効果】
【００１１】
この発明によれば、メモリの故障診断をブロック内テスト、ブロック間テストと階層的に実施するようにしたので、故障発生箇所の特定がワード単位になるかわりに、WalkpathやGalpatの手法に比べメモリアクセス回数を減らし診断時間を短縮することができる。したがって、メモリ診断を通常アプリケーションの合間に実行することが可能となる。
【００１２】
また、この発明によれば、メモリ故障診断をワード内テスト、ワード間テスト、部分配列間テストと階層的に実施するようにしたので、故障発生箇所の特定が部分配列単位になるかわりに、従来方式に比べメモリアクセス回数を減らし診断時間を短縮できる。したがって、メモリ診断を通常アプリケーションの合間に実行可能となる。
【発明を実施するための最良の形態】
【００１３】
以下に、本発明にかかるメモリ診断装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１４】
実施の形態１．
図１は、本発明にかかるメモリ診断を実施するための構成を示すものである。図１において、ランダムアクセスメモリ（ＲＡＭ）のテスト領域１３および退避領域１４は、バス１２によってＣＰＵ１１と接続されている。ＣＰＵ１１は不揮発性メモリ１５に格納されたシステム制御用のアプリケーションソフトウェアを実行する。また、この場合、不揮発性メモリ１５には、以下に説明するメモリ診断プログラムが格納されており、ＣＰＵ１１はメモリ診断時には、不揮発性メモリ１５に格納されたメモリ診断プログラムを実行する。ＣＰＵ１１は、テスト領域１３にテストデータを書き込むためのレジスタ１６を有している。テスト領域１３と退避領域１４は同一のメモリ上に違う領域として構成してもよい。
【００１５】
図２は、実施の形態１のメモリ診断処理手順を示すものである。実施の形態１においては、テスト領域１３をワードと全体の二階層に分けて診断する。すなわち、実施の形態１においては、最初にワード内の各ビット間のカップリングフォールトを含む故障をテストし（ステップＳ１００）、その後ワード間のカップリングフォールトを含む故障をテストする（ステップＳ１１０）。
【００１６】
まず、図３に従って、ワード内の各ビット間のカップリングフォールトテスト手順について説明する。まず、テスト領域１３の先頭ワードについて、そのワードに含まれるビット間にカップリングフォールトがないことをテストする。この先頭ワードについてのメモリ診断処理を実行する前に、テスト領域１３の先頭ワードの記憶データを退避領域１４に予めバックアップコピーしておく。つぎに、レジスタ１６を０で初期化し、最下位ビットを１にして（ステップＳ２００）、このレジスタ値（００００…００１）をテスト領域１３の先頭ワードに書き込み（ステップＳ２１０）、該当ワード（この場合先頭ワード）を読み出し、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２２０）。次にレジスタ１６をビットシフトし（ステップＳ２４０）、ビットシフトしたレジスタ値（００００…０１０）を同先頭ワードに書き込んで読み出し（ステップＳ２１０）、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２２０）。このような診断を１を最上位ビットにシフトするまで繰り返す（ステップＳ２３０）。もし、レジスタ値と読み出したメモリワード値が異なっていれば、そのメモリワードにカップリングフォールトがあるので、エラー報告する（ステップＳ２９５）。以上の診断は続行しても中断してもよい。
【００１７】
次に、レジスタ１６を１で初期化し、最下位ビットを０にして（ステップＳ２５０）、このレジスタ値（１１１１…１１０）をテスト領域１３の先頭ワードに書き込み（ステップＳ２６０）、該当ワード（この場合先頭ワード）を読み出し、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２７０）。次にレジスタ１６をビットシフトし（ステップＳ２９０）、ビットシフトしたレジスタ値（１１１１…１０１）を同先頭ワードに書き込んで読み出し（ステップＳ２６０）、読み出したデータ値がレジスタ値と同じであるか否かを確認する（ステップＳ２７０）。このような診断を０を最上位ビットにシフトするまで繰り返す（ステップＳ２８０）。もし、レジスタ値と読み出したメモリワード値が異なっていれば、そのメモリワードにカップリングフォールトがあるので、エラー報告する（ステップＳ２９５）。この先頭ワードについての診断が完了すれば、退避領域１４から先頭ワードのデータをテスト領域１３に復旧する。以上の確認により、先頭ワードの内部においてビット間のカップリングフォールトが無いことをテストすることができる。
【００１８】
以上のようにして、先頭ワードについてのワード内テストを終了したが、この次に先頭ワードを被試験ワードとした後述のワード間テストを行うようにしてもよいが、この場合は、テスト領域１３における全てのワードについて、前述と同様にして、ワード内テストを実行するものとする。
【００１９】
図３の説明では、ワード内テストを最下位ビットから行うようにしたが、ワード内テストを最上位ビットから行うようにしてもよい。また、先にワード内全体を１で初期化して、その後にワード内全体を０で初期化してワード内テストを実行するようにしてもよい。さらに、ＡＡＡＡhや５５５５hなどの特定パターンで被試験ワードを初期化し、この特定パターンとワードから読み出したデータとを比較する処理を、ビットシフトさせた複数の特定パターンについて実施させることによって、ワード内テストを行うようにしてもよい。要は、ワード内の各ビットに０と１を書き込み、他ビットに影響ないことを確認できればよい。
【００２０】
このようにして、全てのワードについてのワード内テストが終われば、つぎに、テスト領域１３のある一つのワードと他ワードとの間にカップリングフォールトがないことをテストするワード間テストを実行する。図４にしたがって、ワード間テスト手順について説明する。このワード間テストを実行する前に、テスト領域１３の記憶データを退避領域１４にコピーしておく。
【００２１】
まず、テスト領域１３の全体を０で初期化する。次にワード内テストを実施した１つの被試験ワードに全ビット１を書き込み（ステップＳ３００）、テスト領域１３の他ワードの記憶データを順次読み出し、読み出したデータ値が全てが０であることを確認する（ステップＳ３１０〜Ｓ３３０）。もし、読み出したデータ値に１がある場合は、データ値に１が含まれるワードと被試験ワードとの間にカップリングフォールトがあるので、エラー報告する（ステップＳ３８０）。
【００２２】
次に、テスト領域１３の全体を１で初期化した後、上記被試験ワードに全ビット０を書き込み（ステップＳ３４０）、テスト領域１３の他ワードの記憶データを順次読み出し、読み出したデータ値が全てが１であることを確認する（ステップＳ３５０〜Ｓ３７０）。もし、読み出したデータ値に０がある場合は、データ値に０が含まれるワードと被試験ワードとの間にカップリングフォールトがあるので、エラー報告する（ステップＳ３８０）。以上の処理により、１つの被試験ワードと他ワードの間にカップリングフォールトがないことを診断することができる。
【００２３】
以下、被試験ワードを次のアドレスのワードとして同様のテストを繰り返す。このようなワード間テストをテスト領域１３の先頭ワードから順に全ワードについて実施することで、テスト領域１３の全体の診断を行うことができる。ワード間テストが完了すれば、退避領域１４からテスト領域１３にメモリ値を復旧コピーする。その後、ＣＰＵ１１は組込みシステムとしての動作を再開する。
【００２４】
図５は上述した実施の形態１のメモリ診断手順を概念的に示すものである。まず、先頭ワードから最終ワードまで各ワード内部のビット間テストを、１のビットシフトと０のビットシフトの２種類のビットシフトパターンを用いて実行する。次に、テスト領域全体を０に初期化するとともに被試験ワードに全ビット１を書込み、被試験ワードと他ワード間のカップリングフォールトのテストを行い、さらにテスト領域全体を１に初期化するとともに被試験ワードに全ビット０を書込み、被試験ワードと他ワード間のカップリングフォールトのテストを行う。これを全ワードについて繰り返す。
【００２５】
テスト領域１３のメモリサイズがＮビットとすると、従来のWalkpathやGalpatによる手法であれば、Ｎビットのテスト領域を診断するのに、Ｎ2のメモリアクセス回数が必要である。１ワードをＬビットとすると、実施の形態１の方式では、ワード内テストに、Ｌ2×（Ｎ／Ｌ）回、ワード間テストに（Ｎ／Ｌ）2回必要なので、アクセス回数は、Ｌ2×（Ｎ／Ｌ）＋（Ｎ／Ｌ）2となる。Ｎ＝Ｌ2とした場合、実施の形態１の方式は、約Ｌ倍の高速化を図ることができる。
【００２６】
なお、上記の説明では、最初全てのワードについてのワード内テストを終了した後、ワード間テストを全てのワードについて実行するようにしたが、１つのワードのワード内テストが終了すると、このワード内テストを終了したワードを被試験ワードとしたワード間テストを実行し、つぎに次のワードのワード内テストを実施し、このワード内テストを終了した次のワードを被試験ワードとしたワード間テストを実行するというように、ワード内テストとワード間テストを１ワードずつ交互に行うようにしてもよい。また、所定数のワード（例えば８ワード）のワード内テストを順次連続して行い、その後これらワード内テストがテストが終了した複数のワードについてのワード間テストを順次連続して行い、この後次の所定数のワード（例えば８ワード）のワード内テストを順次連続して行い、その後これらワード内テストがテストが終了した複数のワードについてのワード間テストを順次連続して行うというように、ワード内テストとワード間テストを複数ワードずつ交互に行うようにしてもよい。また、ワード間テストは、ワード内テスト実施済みのワードであればどのような順序で被試験ワードを選んでも良い。また、ワード間テストの際に、被試験ワードを全て１とするとともに他のワードを全て０として行う図４のステップＳ３００〜Ｓ３３０に示したテストを、被試験ワードを先頭ワードから最終ワードまでの全てのワードに設定して順次実行させ、この後、被試験ワードを全て０とするとともに他のワードを全て１として行う図４のステップＳ３４０〜Ｓ３７０に示したテストを、被試験ワードを先頭ワードから最終ワードまでの全てのワードに設定して順次実行させるようにしてもよい。
【００２７】
また、初期化パターンおよび被試験ワードのテストパターンに任意のテストパターンを選んでも良い。ただし、初期化値と被試験ワードのテストパターンの両方が１または両方０であるビット間にカップリングフォールトがあった場合、検出洩れとなるので、初期化パターンと、被試験ワードのテストパターンとは、例えば、ＡＡＡＡhと５５５５hのように、互いにビットの値が反転している関係にあるものを採用しなくてはならない。
【００２８】
また、上記では、テスト領域１３のテスト完了までＣＰＵ１１は診断以外の処理を行わないようにしている。これは、ＣＰＵ１１が処理を行うためのメモリ（テスト領域１３）が診断データで埋められているからである。しかし、ＣＰＵ１１が診断以外の処理、例えば組込みシステムのアプリケーションを処理したいタイミングで、所定のメモリ診断シーケンスのなかでメモリ診断がどのシーケンスまで完了したかを示す中断シーケンス情報を退避領域１４または不揮発性領域１５に記録するようにすれば、退避領域１４からテスト領域１３にデータをコピーしてＣＰＵ１１が診断以外の処理を実行した後、再度テスト領域１３から退避領域１４にデータをコピーし、中断シーケンス情報を参照して診断を再開させることが可能となる。
【００２９】
例えば、ワード内テストとワード間テストを１ワードずつ交互に行うようにする場合、ＣＰＵ１１が診断以外の処理を行うに先立ち、被試験ワードが先頭からどこまで完了したかを示す完了ワード情報を退避領域１４または不揮発性領域１５に記録する。次に、ＣＰＵ１１は退避領域１４からテスト領域１３にデータをコピーして、診断以外の処理を行う。ＣＰＵ１１がメモリ診断を再開する場合は、テスト領域１３を退避領域１４にコピーして、記録しておいた完了ワードの次のワードから被試験ワードとしてテスト再開する。このような処理によれば、メモリ診断を時分割で実施できるため、アプリケーション処理の合間にメモリ診断を実施することができ、アプリケーション処理を滞らすことがない。
【００３０】
また、最初にテスト領域１３を退避領域１４にコピーしたら、ＣＰＵ１１はアプリケーション処理には退避領域１４をアクセスして行い、メモリ診断にはテスト領域１３をアクセスする。メモリ診断が完了すれば、退避領域１４をテスト領域１３にコピーして、テスト領域１３と退避領域１４のアドレスを切り替える。このようにすれば、上述したメモリ診断を時分割で行う際のテスト領域１３−退避領域１４間のコピーが不要となるため、上記よりもさらに高速化することができる。
【００３１】
このように実施の形態１によれば、メモリのカップリング診断をワード内テスト、ワード間テストと階層的に実施するようにしたので、故障発生箇所の特定がワード単位になるかわりに（すなわち、本方式では異なるワードに跨ったカップリングフォールトまでは検出できないが）、WalkpathやGalpatの手法に比べメモリアクセス回数を減らし診断時間を短縮することができる。したがって、メモリ診断が組込みシステムのアプリケーションの合間に実行可能となる。また、診断を一時中断する際にワード間テストが完了したワードアドレスを記録しておき、診断再開時にはそのアドレスから再実施することで、メモリ診断を時分割で行うことができる。
【００３２】
なお、上記実施の形態１によれば、ワード単位にワード内テストおよびワード間テストを行うようにしたが、任意のブロック単位にブロック内テストおよびブロック間テストを行うようにしてもよい。ブロックの単位としては、たとえば、１ワード、複数ワードに対応するメモリ量である後述の部分配列などがある。
【００３３】
実施の形態２．
つぎに、図６〜図８などを用いてこの発明の実施の形態２について説明する。図６は、実施の形態２のメモリ診断処理手順を示すものである。実施の形態２においては、メモリをワード、部分配列（アレイ）および全体の三階層に分けて診断する。部分配列とは、複数ワードに対応するメモリ量を云う。すなわち、実施の形態２においては、最初にワード内の各ビット間のカップリングフォールトを含む故障をテストし（ステップＳ４００）、その後、部分配列内におけるワード間のカップリングフォールトを含む故障をテストし（ステップＳ４１０）、その後、部分配列間のカップリングフォールトを含む故障をテストする（ステップＳ４２０）。
【００３４】
このワード間テストを実行する前に、テスト領域１３の最初の部分配列の記憶データを退避領域１４にコピーしておく。まず、テスト領域１３の最初の部分配列の先頭ワードについて、先の図３に示した手順と同様にして、ワード内テストを実施する。このワード内テストが正常であれば、最初の部分配列におけるテストしたワード（この場合先頭ワード）とそのワードを含む部分配列の他ワードとの間にカップリングフォールトがないことをテストするため、先の図４に示した手順と同様にして、テストしたワードを被試験ワードとした部分配列内でのワード間テストを実施する。
【００３５】
つぎに、テスト領域１３の最初の部分配列における先頭ワードの次のワードについて、先の図３に示した手順と同様にして、ワード内テストを実施する。このワード内テストが正常であれば、最初の部分配列におけるテストしたワード（この場合先頭ワードの次のワード）とそのワードを含む部分配列の他ワードとの間にカップリングフォールトがないことをテストするため、先の図４に示した手順と同様にして、テストしたワードを被試験ワードとした部分配列内でのワード間テストを実施する。以下、同様にして、最初の部分配列内の各ワードについて、ワード内テストおよびワード間テストを実施する。
【００３６】
次に、テストした部分配列（この場合最初の部分配列）と他の部分配列との間にカップリングフォールトがないことをテストする部分配列間テストを実施する。図７にしたがって、部分配列間テスト手順について説明する。この部分配列間テストを実行する前に、テスト領域１３の記憶データを退避領域１４にコピーしておく。
【００３７】
まず、テスト領域１３の全体を０で初期化し、次に部分配列内テストを実施した１つの部分配列を被試験部分配列とし、この被試験部分配列に全ビット１を書き込む（ステップＳ５００）。つぎに、テスト領域１３における被試験部分配列以外の部分配列の記憶データを順次読み出し、読み出したデータ値が全てが０であることを確認する（ステップＳ５１０〜Ｓ５３０）。もし、読み出したデータ値に１がある場合は、データ値に１が含まれる部分配列と被試験部分配列との間にカップリングフォールトがあるので、エラー報告する（ステップＳ５８０）。
【００３８】
次に、テスト領域１３の全体を１で初期化した後、上記被試験部分配列に全ビット０を書き込み（ステップＳ５４０）、テスト領域１３の被試験部分配列以外の部分配列の記憶データを順次読み出し、読み出したデータ値が全てが１であることを確認する（ステップＳ５５０〜Ｓ５７０）。もし、読み出したデータ値に０がある場合は、データ値に０が含まれる部分配列と被試験部分配列との間にカップリングフォールトがあるので、エラー報告する（ステップＳ５８０）。以上の処理により、１つの被試験部分配列と他の部分配列の間にカップリングフォールトがないことを診断することができる。
【００３９】
つぎに、つぎの部分配列について、前述と同様にして、ワード内テストおよびワード間テストを実施し、その後この部分配列を被試験部分配列とした前述の部分配列間テストを実施する。このような処理をテスト領域１３内の全ての部分配列について順次実行することで、テスト領域１３の全域についてのカップリングフォールト診断を行うことができる。このようにして全メモリのテストが完了すれば、退避領域１４からテスト領域１３にメモリ値を復旧コピーする。その後、ＣＰＵ１１は組込みシステムとしての動作を再開する。
【００４０】
図８は上述した実施の形態２のメモリ診断手順を概念的に示すものである。まず、最初の部分配列について各ワードをワード内テストし、次にその部分配列についてワード間テストを実施する。さらにテスト領域全体を初期化し部分配列間テストを実施する。テスト領域の全部分配列について、ワード内テスト、ワード間テスト、部分配列間テストを繰り返し、全テスト領域のテストが完了する。
【００４１】
テスト領域１３が、Ｍワードの部分配列Ｎ個から構成されているとする。WalkpathやGalpatによる手法であれば、ＭＮワードのテスト領域を診断するのにワード内テスト以外に（Ｍ×Ｎ）2のメモリアクセス回数が必要である。実施の形態２の方式であれば、部分配列のワード間テストにＮ×（Ｍ2）回、部分配列間テストにＮ×（ＮＭ）回であり、合計でＮ×（Ｍ2）＋Ｎ×（ＮＭ）回のメモリアクセス回数となる。いま、Ｍ＝Ｎ＝１０００、すなわち１メガワードメモリとすると、実施の形態２の方式は従来方式に比べメモリアクセス回数は１０００分の１になる。
【００４２】
なお、上記の説明では、１つの部分配列内において、ワード内テストとワード間テストを交互に行うようにしたが、１つの部分配列内において、全てのワードについてのワード内テストを終了させた後、各ワードについてのワード間テストを実行させるようにしてもよい。また、１つの部分配列内において、ワード内テストとワード間テストを複数ワードずつ交互に行うようにしてもよい。また、ワード間テストは、ワード内テスト実施済みのワードであればどのような順序で被試験ワードを選んでも良い。１つの部分配列内におけるワード間テストの際に、被試験ワードを全て１とするとともに他のワードを全て０として行う図４のステップＳ３００〜Ｓ３３０に示したテストを、被試験ワードを１つの部分配列内における先頭ワードから最終ワードまでの全てのワードに設定して順次実行させ、この後、被試験ワードを全て０とするとともに他のワードを全て１として行う図４のステップＳ３４０〜Ｓ３７０に示したテストを、被試験ワードを１つの部分配列内における先頭ワードから最終ワードまでの全てのワードに設定して順次実行させるようにしてもよい。
【００４３】
また、最初、テスト領域内における全てのワードについてワード内テストを実行し、その後各部分配列内におけるワード間テストを全て実行し、この後に部分配列間テストを実行するようにしてもよい。また、部分配列間テストは、ワード間テスト実施済みの部分配列であればどのような順序で被試験部分配列を選んでも良い。
【００４４】
また、初期化パターンおよび被試験ワードのテストパターンに任意のテストパターンを選んでも良い。ただし、初期化値と被試験ワードのテストパターンの両方が１または両方０であるビット間にカップリングフォールトがあった場合、検出洩れとなるので、初期化パターンと、被試験ワードのテストパターンとは、例えば、ＡＡＡＡhと５５５５hのように、互いにビットの値が反転している関係にあるものを採用しなくてはならない。同様に、初期化パターンおよび被試験部分配列のテストパターンに任意のテストパターンを選んでも良い。この場合も、互いにビットの値が反転している関係にあるものを採用しなくてはならない。
【００４５】
また、実施の形態２においても、ＣＰＵ１１が診断以外の処理、例えば組込みシステムのアプリケーションを処理したいタイミングで、所定のメモリ診断シーケンスのなかでメモリ診断がどのシーケンスまで完了したかを示す中断シーケンス情報を退避領域１４または不揮発性領域１５に記録するようにすれば、退避領域１４からテスト領域１３にデータをコピーしてＣＰＵ１１が診断以外の処理を実行した後、再度テスト領域１３から退避領域１４にデータをコピーし、中断シーケンス情報を参照して診断を再開させることが可能となる。
【００４６】
例えば、ＣＰＵ１１が診断以外の処理を行うに先立ち、被試験ワードが先頭からどこまで完了したかを示す完了ワードを退避領域１４または不揮発性領域１５に記録する。次に、ＣＰＵ１１は退避領域１４からテスト領域１３にデータをコピーして、診断以外の処理を行う。ＣＰＵ１１がメモリ診断を再開する場合は、テスト領域１３を退避領域１４にコピーして、記録しておいた完了ワードの次のワードから被試験ワードとしてテスト再開する。ワード間テストの完了したワードを記録するのではなく、部分配列間テストが完了した部分配列アドレスを記録しても良い。このような処理によれば、メモリ診断を時分割で実施できるため、アプリケーション処理の合間にメモリ診断を実施することができ、アプリケーション処理を滞らすことがない。
【００４７】
また、最初にテスト領域１３を退避領域１４にコピーしたら、ＣＰＵ１１はアプリケーション処理には退避領域１４をアクセスして行い、メモリ診断にはテスト領域１３をアクセスする。メモリ診断が完了すれば、退避領域１４をテスト領域１３にコピーして、テスト領域１３と退避領域１４のアドレスを切り替える。このようにすれば、上述したメモリ診断を時分割で行う際のテスト領域１３−退避領域１４間のコピーが不要となるため、上記よりもさらに高速化することができる。
【００４８】
このように実施の形態２によれば、また、メモリカップリング診断をワード内テスト、ワード間テスト、部分配列間テストと階層的に実施するようにしたので、故障発生箇所の特定が部分配列単位になるかわりに（すなわち、本方式では異なる部分配列に跨ったカップリングフォールトの位置までは検出できないが）、従来方式に比べメモリアクセス回数を減らし診断時間を短縮できる。したがって、メモリ診断が組込みシステムのアプリケーションの合間に実行可能となる。また、診断を一時中断する際にワード間テストが完了したワードアドレスや部分配列間テストが完了したアドレスを記録しておき、診断再開時にはそれらのアドレスから再実施することで、メモリ診断を時分割で行うことができる。
【産業上の利用可能性】
【００４９】
以上のように、本発明にかかるメモリ診断装置は、高信頼性が要求される組込みシステム、例えば最低でも一日に一回のメモリ診断を行う非常停止シーケンス制御装置のメモリ診断に有用である。
【図面の簡単な説明】
【００５０】
【図１】図１は、本発明にかかるメモリ診断装置の実施の形態を示すブロック図である。
【図２】図２は、実施の形態１のメモリ診断手順を概念的に示す工程図である。
【図３】図３は、実施の形態１のメモリ診断のワード内テスト手順を示すフローチャートである。
【図４】図４は、実施の形態１のメモリ診断のワード間テスト手順を示すフローチャートである。
【図５】図５は、実施の形態１のメモリ診断の概念図である。
【図６】図６は、実施の形態２のメモリ診断手順を概念的に示す工程図である。
【図７】図７は、実施の形態２のメモリ診断の部分配列間テスト手順を示すフローチャートである。
【図８】図８は、実施の形態２のメモリ診断の概念図である。
【符号の説明】
【００５１】
１１  ＣＰＵ
１２  バス
１３  ランダムアクセスメモリテスト領域
１４  ランダムアクセスメモリ退避領域
１５  不揮発性メモリ
１６  レジスタ
【国際調査報告】
2007055068.tif 000011
2007055068.tif 000012
2007055068.tif 000013
2007055068.tif 000014