(57)【要約】  入力されるテストパターンの内容に依存せずに高い診断率の故障診断を行うことができるようにする。  書き込みアドレスカウンタ（２）は書き込みアドレスを記憶部（１）に対して出力する。入力データ反転部（３）は、記憶部（１）への入力データ（８）を反転して、反転入力データを出力する。入力データ選択部（４）は、書き込みアドレスに含まれるビットに基づいて、入力データ又は反転入力データを選択し、記憶部（１）に選択したデータの書き込みを行う。読み出しアドレスカウンタ（５）は、読み出しアドレスを記憶部（１）に対して出力する。出力データ反転部（６）は、記憶部（１）からの出力データを反転して、反転出力データを出力する。出力データ選択部（７）は、読み出しアドレスに含まれるビットに基づいて、読み出しアドレスに含まれるビットに基づいて、出力データ又は反転出力データを選択して読み出しデータ（９）として出力する。
2010064312.tif 000002
【特許請求の範囲】
【請求項１】
書き込まれたデータを保持するとともに、前記保持したデータの読み出しを行う記憶装置において、
複数のエントリ領域を有し、前記複数のエントリ領域のうち、書き込みを行うエントリ領域を指定する書き込みアドレスに含まれるビットに基づいてデータを書き込むとともに、読み出しを行うエントリ領域を指定する読み出しアドレスに含まれるビットに基づいてデータを読み出す記憶部と、
前記書き込みアドレスを、前記記憶部に対して出力する書き込みアドレスカウンタと、
前記記憶部への入力データを反転して、反転入力データを出力する入力データ反転部と、
前記書き込みアドレスに含まれるビットに基づいて、前記入力データ又は前記反転入力データを選択し、前記書き込みアドレスに含まれるビットに基づいて、前記記憶部に前記選択したデータの書き込みを行う入力データ選択部と、
前記読み出しアドレスを、前記記憶部に対して出力する読み出しアドレスカウンタと、
前記記憶部からの出力データを反転して、反転出力データを出力する出力データ反転部と、
前記読み出しアドレスに含まれるビットに基づいて、前記記憶部から前記出力データの読み出しを行うとともに、前記読み出しアドレスに含まれるビットに基づいて、前記出力データ又は前記反転出力データを選択して出力する出力データ選択部と、
を有することを特徴とする記憶装置。
【請求項２】
前記記憶装置はさらに、
前記入力データに基づいて、入力データエラー訂正符号を生成し、前記入力データに付加するエラー訂正符号生成回路と、
前記出力データに含まれる出力データエラー訂正符号に基づいて、前記出力データのエラー検出又はエラー訂正を行うエラー訂正回路と、
を有することを特徴とする請求の範囲第１項記載の記憶装置。
【請求項３】
前記記憶装置はさらに、
反転抑止フラグを保持する反転抑止フラグ保持部を有し、
前記入力データ選択部は、前記反転抑止フラグに基づいて、前記反転入力データの選択を抑止し、
前記出力データ選択部は、前記反転抑止フラグに基づいて、前記反転出力データの選択を抑止することを特徴とする請求の範囲第１項記載の記憶装置。
【請求項４】
前記記憶装置は、先入れ先出しバッファを構成し、
前記入力データ選択部は、前記書き込みアドレスのうちの上位２ビットと最下位ビットに基づいて、前記入力データ又は前記反転入力データを選択し、
前記出力データ選択部は、前記読み出しアドレスを構成するビットのうちの上位２ビットと最下位ビットに基づいて、前記出力データ又は前記反転出力データを選択することを特徴とする請求の範囲第１項記載の記憶装置。
【請求項５】
前記入力データ選択部は、前記書き込みアドレスの上位２ビットの値が０、０の場合には前記入力データを選択し、前記書き込みアドレスの上位２ビットの値が０、１の場合には前記反転入力データを選択し、前記書き込みアドレスの上位２ビットの値が１、０、最下位ビットの値が０であれば前記入力データを選択し、前記書き込みアドレスの上位２ビットの値が１、０、最下位ビットの値が１の場合には前記反転入力データを選択し、前記書き込みアドレスの上位２ビットの値が１、１、最下位ビットの値が０の場合には前記反転入力データを選択し、前記書き込みアドレスの上位２ビットの値が１、１、最下位ビットの値が１の場合には前記入力データを選択し、
前記出力データ選択部は、前記読み出しアドレスを構成するビットの上位２ビットの値が０、０の場合には前記出力データを選択し、前記読み出しアドレスを構成するビットの上位２ビットの値が０、１の場合には前記反転出力データを選択し、前記読み出しアドレスを構成するビットの上位２ビットの値が１、０、最下位ビットの値が０であれば前記出力データを選択し、前記読み出しアドレスを構成するビットの上位２ビットの値が１、０、最下位ビットの値が１の場合には前記反転出力データを選択し、前記読み出しアドレスを構成するビットの上位２ビットの値が１、１、最下位ビットの値が０の場合には前記反転出力データを選択し、前記読み出しアドレスを構成するビットの上位２ビットの値が１、１、最下位ビットの値が１の場合には前記出力データを選択することを特徴とする請求の範囲第４項記載の記憶装置。
【請求項６】
前記書き込みアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数よりも２ビット多いビットを有しており、上位２ビット以外の他のビット列を前記書き込みアドレスとして前記記憶部に対して出力し、
前記読み出しアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数よりも２ビット多いビットを有しており、上位２ビット以外の他のビット列を前記読み出しアドレスとして前記記憶部に対して出力することを特徴とする請求の範囲第４項記載の記憶装置。
【請求項７】
書き込まれたデータを保持するとともに、前記保持したデータの読み出しを行う記憶装置において、
複数のエントリ領域を有し、前記複数のエントリ領域のうち、書き込み又は読み出しを行うエントリ領域を指定する制御アドレスに基づいてデータの書き込み又はデータの読み出しを行う記憶部と、
前記制御アドレスを、前記記憶部に対して出力する制御アドレスカウンタと、
前記制御アドレスカウンタが出力する前記制御アドレスが、０から負の値になる場合に計数を行うとともに、前記計数した反転制御カウンタ値を出力する反転制御カウンタと、
前記記憶部への入力データを反転して、反転入力データを出力する入力データ反転部と、
前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記入力データ又は前記反転入力データを選択し、前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記記憶部に前記選択したデータの書き込みを行う入力データ選択部と、
前記記憶部からの出力データを反転して、反転出力データを出力する出力データ反転部と、
前記制御アドレスに基づいて、前記記憶部から出力データの読み出しを行うとともに、前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記出力データ又は前記反転出力データを選択して出力する出力データ選択部を有することを特徴とする記憶装置。
【請求項８】
前記記憶装置はさらに、
前記入力データに基づいて、入力データエラー訂正符号を生成し、前記入力データに付加するエラー訂正符号生成回路と、
前記出力データに含まれる出力データエラー訂正符号に基づいて、前記出力データのエラー検出又はエラー訂正を行うエラー訂正回路を有することを特徴とする請求の範囲第７項記載の記憶装置。
【請求項９】
前記記憶装置はさらに、
反転抑止フラグを保持する反転抑止フラグ保持部を有し、
前記入力データ選択部は、前記反転抑止フラグに基づいて、前記反転入力データの選択を抑止するとともに、
前記出力データ選択部は、前記反転抑止フラグに基づいて、前記反転出力データの選択を抑止することを特徴とする請求の範囲第７項記載の記憶装置。
【請求項１０】
前記記憶装置は、後入れ先出しバッファを構成し、
前記入力データ選択部は、前記制御アドレスの最下位ビットと前記反転制御カウンタ値に基づいて、前記入力データ又は前記反転入力データを選択し、
前記出力データ選択部は、前記制御アドレスの最下位ビットと前記反転制御カウンタ値に基づいて、前記出力データ又は前記反転出力データを選択することを特徴とする請求の範囲第７項記載の記憶装置。
【請求項１１】
前記入力データ選択部は、前記反転制御カウンタの下位２ビットの値が０、０の場合には前記入力データを選択し、前記反転制御カウンタの下位２ビットの値が０、１の場合には前記反転入力データを選択し、前記反転制御カウンタの下位２ビットの値が１、０、前記制御アドレスの最下位ビットの値が０であれば前記入力データを選択し、前記反転制御カウンタの下位２ビットの値が１、０、前記制御アドレスの最下位ビットの値が１の場合には前記反転入力データを選択し、前記反転制御カウンタの下位２ビットの値が１、１、前記制御アドレスの最下位ビットの値が０の場合には前記反転入力データを選択し、前記反転制御カウンタの下位２ビットの値が１、１、前記制御アドレスの最下位ビットの値が１の場合には前記入力データを選択することを特徴とする請求の範囲第１０項記載の記憶装置。
【請求項１２】
複数のエントリ領域を有する記憶装置の故障診断方法において、
書き込みアドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データの反転の要否を判断し、
前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、
前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、
読み出しアドレスカウンタで示される読み出しアドレスに含まれるビットに基づいて、出力データの反転の要否を判断し、
前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、
前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する、
ことを特徴とする故障診断方法。
【請求項１３】
前記書き込みアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数の書き込みアドレスビットと、前記書き込みアドレスビットの上位に設けられた１つの制御ビットとを有しており、前記制御ビットに基づいて前記入力データの反転の要否を判断し、
前記読み出しアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数の読み出しアドレスビットと、前記読み出しアドレスビットの上位に設けられた１つの制御ビットとを有しており、前記制御ビットに基づいて前記出力データの反転の要否を判断することを特徴とする請求の範囲第１２項記載の故障診断方法。
【請求項１４】
前記書き込みアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数の書き込みアドレスビットと、前記書き込みアドレスビットの上位に設けられた２つの制御ビットとを有しており、前記制御ビットと前記書き込みアドレスビットの最下位ビットとに基づいて前記入力データの反転の要否を判断し、
前記読み出しアドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数の読み出しアドレスビットと、前記読み出しアドレスビットの上位に設けられた２つの制御ビットとを有しており、前記制御ビットと前記読み出しアドレスビットの最下位ビットとに基づいて前記出力データの反転の要否を判断することを特徴とする請求の範囲第１２項記載の故障診断方法。
【請求項１５】
複数のエントリ領域を有する記憶装置の故障診断方法において、
制御アドレスカウンタが出力する制御アドレスが０から負に遷移した回数を計数した反転制御カウンタ値と、前記制御アドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データおよび出力データの反転の要否を判断し、
前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、
前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、
前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、
前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する、
ことを特徴とする故障診断方法。
【請求項１６】
前記制御アドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数のアドレスビットと、前記複数エントリ領域が空であることを示す制御ビットとを有しており、前記反転制御カウンタが保持する値に基づいて前記入力データおよび前記出力データの反転の要否を判断することを特徴とする請求の範囲第１５項記載の故障診断方法。
【請求項１７】
前記制御アドレスカウンタは、前記複数のエントリ領域すべてのアドレスを指定するのに必要なビット数のアドレスビットと、前記複数エントリ領域が空であることを示す制御ビットとを有しており、前記反転制御カウンタが保持する値と前記アドレスビットの最下位ビットとに基づいて前記入力データおよび前記出力データの反転の要否を判断することを特徴とする請求の範囲第１５項記載の故障診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は記憶装置および故障診断方法に関し、特に所定の順番でのデータの書き込みおよび読み出しが行われる記憶装置およびそのような記憶装置の故障診断方法に関する。
【背景技術】
【０００２】
ＬＳＩ（Large Scale Integration）を設計、製造する場合、製品化されるまでに各種の試験が行われる。例えば、ＬＳＩをコンピュータなどの装置に搭載して行う試験として、量産試験とＰＯＳＴ（Power On Self Test）試験がある。これらの試験はＬＳＩを搭載した試験装置でテストプログラムを実行することによって、正常動作しているかどうかが診断される。【０００３】
ところで、多くのＬＳＩはＦＩＦＯ（First-In First-Out）方式の記憶装置を有している。ＦＩＦＯ方式の記憶装置では、先に入力されたデータが先に出力される。以下、このような先入れ先出しにより入出力制御を行うバッファ回路を「ＦＩＦＯ」と呼ぶ。【０００４】
ＦＩＦＯはハードウェアで生成するエラー訂正符号（ＥＣＣ：Error Correcting Code）を付与することで、アドレス毎のデータが保護されている。ＦＩＦＯはフリップフロップもしくはＲＡＭ（Random Access Memory）を用いて作られている。ＦＩＦＯはパケットの送信キューや受信キューに使用されたり、制御情報の一時的な記録に使用されたりするなど、ＬＳＩ内部の様々な部分で使用される。【０００５】
このようなＦＩＦＯを有するＬＳＩの試験では、ＦＩＦＯの動作試験も行われる。例えば、量産試験やＰＯＳＴ試験のテストプログラムに従ってＬＳＩに所定のデータを入力することにより、ＦＩＦＯの故障診断が行われる。ＦＩＦＯ故障検出方法は「テストプログラムの期待値不一致」と「ＥＣＣエラー検出」の両方によって行われる。【０００６】
ＦＩＦＯに対する試験の実行によって検出される故障には、「固定故障」と「遅延（Delay）故障」とがある。固定故障とはＦＩＦＯのあるビット値が、配線のショートなどの原因で「０」もくしは「１」の固定値になっている状態を指す。例えば、「０」値に固定故障しているビットに対して「１」を書き込んだとしても、そのビット値は「０」のままである。「０」と「１」の両方の固定故障を検出するためには、テストプログラム内にそのビットに対して「０」と「１」をそれぞれ書き込むテストパターンが含まれている必要がある。遅延故障とはＦＩＦＯからの読み出し遅延がＬＳＩの動作周波数内に収まっていないため、読み出しに失敗することである。例えば、遅延故障を検出するためには、前のアドレスのデータ値と次のアドレスのデータ値が異なっており、値が「０」から「１」のように変化するテストパターンがテストプログラムに含まれている必要がある。
【特許文献１】特開平１−３０９１５４号公報
【特許文献２】特開平５−１６５７３４号公報
【特許文献３】特開２００６−２０８０７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、任意のテストパターンをＦＩＦＯに書き込むのが困難な場合がある。例えば、ＦＩＦＯにパケットのヘッダとデータとの両方を書き込む場合、データ部分についてはテストプログラムで任意の値を書き込むことが可能である。他方、ヘッダ部分についてはＦＩＦＯに書き込むヘッダフォーマット上、ヘッダフォーマットを構成する各フィールドには、アドレス、タイプなどの意味がある。そこで、アドレス、タイプなどのフィールドがどのようにＦＩＦＯに書き込まれるかを認識してテストプログラムを作成する必要がある。また、ＥＣＣ部分については、ＥＣＣ生成式を知ってテストプログラムを作成する必要がある。つまり、診断率を向上させるには、複雑なハードウェア論理回路を熟知した上で、所望のテストパターンとなるようにテストプログラムを作成する必要がある。【０００８】
なお、ハードウェア論理回路の理解をしないで、ランダムな長いパターンのテストプログラムを作成することでできるだけ診断率を向上させることもできる。ただし、量産段階の各ＬＳＩに対して長いパターンのテストプログラムを実行させることは、ＬＳＩの生産効率の低下を招き、現実的ではない。そのため、複雑なハードウェア論理回路を理解した上でのＦＩＦＯ用のテストパターンの生成が困難な場合や、ランダムな長いパターンによるＦＩＦＯの診断が困難な場合、高い診断率を得ることを諦めるしかなかった。【０００９】
このように、「固定故障」や「遅延故障」を検出するためのＦＩＦＯ診断率はテストプログラムで生成するテストパターンに依存するにも拘わらず、テストプログラムによってＦＩＦＯにライトするデータを直接作成できない場合が存在する。その結果、高い診断率を得るのが困難となっていた。【００１０】
なお、所定の順番でのデータの書き込みおよび読み出しを行うデータ記録方式には、ＦＩＦＯ方式以外にＬＩＦＯ（Last In, First Out）方式がある。ＬＩＦＯ方式は、新しく格納したデータから順に読み出す入出力方式（後入れ先出し方式）である。以下、ＬＩＦＯ方式でデータの入出力を行うバッファ回路（いわゆるスタック）をＬＩＦＯと呼ぶ。ＬＩＦＯにおいてもＦＩＦＯと同様に、任意のテストパターンを書き込むのが困難なことにより、高い診断率を得ることができないという問題がある。【００１１】
本発明はこのような点に鑑みてなされたものであり、入力されるテストパターンの内容に依存せずに高い診断率の故障診断を行うことができる記憶装置および故障診断方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、以下のような記憶装置が提供される。
提供される記憶装置は、書き込まれたデータを保持するとともに、保持したデータの読み出しを行うものである。この記憶装置は、記憶部、書き込みアドレスカウンタ、入力データ反転部、入力データ選択部、読み出しアドレスカウンタ、出力データ反転部、および出力データ選択部を有する。【００１３】
記憶部は、複数のエントリ領域を有し、複数のエントリ領域のうち、書き込みを行うエントリ領域を指定する書き込みアドレスに含まれるビットに基づいてデータを書き込むとともに、読み出しを行うエントリ領域を指定する読み出しアドレスに含まれるビットに基づいてデータを読み出す。書き込みアドレスカウンタは、書き込みアドレスを、記憶部に対して出力する。入力データ反転部は、記憶部への入力データを反転して、反転入力データを出力する。入力データ選択部は、書き込みアドレスに含まれるビットに基づいて、入力データ又は反転入力データを選択し、書き込みアドレスに含まれるビットに基づいて、記憶部に選択したデータの書き込みを行う。読み出しアドレスカウンタは、読み出しアドレスを、記憶部に対して出力する。出力データ反転部は、記憶部からの出力データを反転して、反転出力データを出力する。出力データ選択部は、読み出しアドレスに含まれるビットに基づいて、記憶部から出力データの読み出しを行うとともに、読み出しアドレスに含まれるビットに基づいて、出力データ又は反転出力データを選択して出力する。【００１４】
また、上記課題を解決するために、以下のような記憶装置が提供される。
提供される記憶装置は、書き込まれたデータを保持するとともに、保持したデータの読み出しを行うものである。この記憶装置は、記憶部、制御アドレスカウンタ、反転制御カウンタ、入力データ反転部、入力データ選択部、出力データ反転部、および出力データ選択部を有する。【００１５】
記憶部は、複数のエントリ領域を有し、複数のエントリ領域のうち、書き込み又は読み出しを行うエントリ領域を指定する制御アドレスに基づいてデータの書き込み又はデータの読み出しを行う。制御アドレスカウンタは、制御アドレスを、記憶部に対して出力する。反転制御カウンタは、制御アドレスカウンタが出力する制御アドレスが、０から負の値になる場合に計数を行うとともに、計数した反転制御カウンタ値を出力する。入力データ反転部は、記憶部への入力データを反転して、反転入力データを出力する。入力データ選択部は、制御アドレスに含まれるビットと反転制御カウンタ値に基づいて、入力データ又は反転入力データを選択し、制御アドレスに含まれるビットと反転制御カウンタ値に基づいて、記憶部に選択したデータの書き込みを行う。出力データ反転部は、記憶部からの出力データを反転して、反転出力データを出力する。出力データ選択部は、制御アドレスに基づいて、記憶部から出力データの読み出しを行うとともに、制御アドレスに含まれるビットと反転制御カウンタ値に基づいて、出力データ又は反転出力データを選択して出力する。【００１６】
また、上記課題を解決するために、以下のような複数のエントリ領域を有する記憶装置の故障診断方法が提供される。
提供される故障診断方法では、書き込みアドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データの反転の要否を判断し、前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、読み出しアドレスカウンタで示される読み出しアドレスに含まれるビットに基づいて、出力データの反転の要否を判断し、前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する。【００１７】
また、上記課題を解決するために、以下のような複数のエントリ領域を有する記憶装置の故障診断方法が提供される。
提供される故障診断方法では、制御アドレスカウンタが出力する制御アドレスが０から負に遷移した回数を計数した反転制御カウンタ値と、前記制御アドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データおよび出力データの反転の要否を判断し、前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する。
【発明の効果】
【００１８】
上記の記憶装置および故障診断方法により、入力データの内容に依存せずに高い診断率の故障診断を行うことができ、テストプログラムの作成が容易となる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１９】
【図１】実施の形態に適用する技術の概要を示す図である。
【図２】本実施の形態に係るサーバの構成図である。
【図３】システムボードの構成を示す図である。
【図４】ＩＯボードの構成を示す図である。
【図５】サービスプロセッサボードの構成を示す図である。
【図６】ＩＯコントローラの内部構成を示す図である。
【図７】ＦＩＦＯへの入出力回路を示す図である。
【図８】反転制御回路の入出力を示す図である。
【図９】ＦＩＦＯ診断用テストパターンの例を示す図である。
【図１０】テストプログラムに基づくパケット送信処理の手順を示すフローチャートである。
【図１１】固定故障、遅延故障の診断例を示す図である。
【図１２】ＬＩＦＯの入出力回路を示す図である。
【図１３】第２の実施の形態における反転制御回路の入出力を示す図である。
【発明を実施するための最良の形態】
【００２０】
以下、本実施の形態を図面を参照して説明する。
図１は、実施の形態に適用する技術の概要を示す図である。図１には、記憶装置に対するデータ入出力回路を示している。この記憶装置は、記憶部１、書き込みアドレスカウンタ２、入力データ反転部３、入力データ選択部４、読み出しアドレスカウンタ５、出力データ反転部６、および出力データ選択部７を有する。【００２１】
記憶部１は、複数のエントリ領域１ａ，１ｂをする。図１の例では、処理を分かりやすくするために、記憶部１には２つのエントリ領域１ａ，１ｂのみがあるものとしている。各エントリ領域１ａ，１ｂには、アドレスが割り振られている。なお、図１の例ではエントリ領域１ａのアドレスが「０」、エントリ領域１ｂのアドレスが「１」である。記憶部１は、複数のエントリ領域１ａ，１ｂのうち、書き込みを行うエントリ領域を指定する書き込みアドレスに含まれるビットに基づいてデータを書き込む。また、記憶部１は、読み出しを行うエントリ領域を指定する読み出しアドレスに含まれるビットに基づいてデータを読み出す。【００２２】
書き込みアドレスカウンタ２は書き込みアドレスを記憶部１に対して出力する。図１の例では、書き込みアドレスカウンタ２の最下位ビットの値のみが記憶部１に対して出力される。すなわち、書き込みアドレスカウンタ２は、記憶部１内の複数のエントリ領域１ａ，１ｂすべてのアドレスを指定するのに必要なビット数（図１の例では１ビット）よりも２ビット多いビットを有している。この余分な２ビットは、入力データ８の反転制御を行うための制御ビットである。【００２３】
入力データ反転部３は、記憶部１への入力データ８を反転して、反転入力データを出力する。入力データ８を反転するとは、入力データ８を構成する各ビットの値を逆の値に変更することである。すなわち、値が「０」のビットは値が「１」に変更され、値が「１」のビットは値が「０」に変更される。【００２４】
入力データ選択部４は、書き込みアドレスに含まれるビットに基づいて、入力データ又は反転入力データを選択する。そして、入力データ選択部４は、書き込みアドレスに含まれるビットに基づいて、記憶部１に選択したデータの書き込みを行う。【００２５】
読み出しアドレスカウンタ５は、読み出しアドレスを記憶部１に対して出力する。図１の例では、読み出しアドレスカウンタ５の最下位ビットの値のみが記憶部１に対して出力される。すなわち、読み出しアドレスカウンタ５は、記憶部１内の複数のエントリ領域１ａ，１ｂすべてのアドレスを指定するのに必要なビット数（図１の例では１ビット）よりも２ビット多いビットを有している。この余分な２ビットは、出力データの反転制御を行うための制御ビットである。【００２６】
出力データ反転部６は、記憶部１からの出力データを反転して、反転出力データを出力する。
出力データ選択部７は、読み出しアドレスに含まれるビットに基づいて、記憶部１から出力データの読み出しを行うとともに、読み出しアドレスに含まれるビットに基づいて、出力データ又は反転出力データを選択して読み出しデータ９として出力する。【００２７】
このような入出力回路を有する記憶装置において、記憶部１内のエントリ領域１ａ，１ｂの故障診断を行う場合、予め用意したテストパターン８ａのデータ入力が４回繰り返される。テストパターン８ａは、記憶部１の記憶容量に相当するデータ量である。【００２８】
テストパターン８ａは、エントリ領域１ａ，１ｂそれぞれの記憶容量に応じたデータ長のデータごとに入力される。図１の例ではエントリ領域１ａ，１ｂの記憶容量は８ビット（１バイト）である。従って、２バイトのテストパターン８ａが１バイトずつ入力データ８として入力される。【００２９】
書き込みアドレスカウンタ２の初期値は「０００」である。入力データ８が記憶部１に書き込まれると、その都度、書き込みアドレスカウンタ２の値がカウントアップされる。書き込みアドレスカウンタ２がカウントアップされると、最下位ビットの値は「０」と「１」とを交互に繰り返す。この書き込みアドレスカウンタ２の最下位ビットは、データ書き込み対象となるエントリ領域のアドレスを示している。従って、アドレス「０」のエントリ領域１ａとアドレス「１」のエントリ領域１ｂとが交互にデータ書き込みの対象となる。【００３０】
データ書き込みの対象となるエントリ領域に書き込むデータは、入力データ選択部４で選択される。入力データ選択部４は、書き込みアドレスカウンタ２の上位２ビットによって、テストパターン８ａの何巡目の入力なのかを認識できる。すなわち、上位２ビットが「００」であれば１巡目。「０１」であれば２巡目、「１０」であれば３巡目、「１１」であれば４巡目である。そこで、入力データ選択部４は、読み出し順が連続する２つのエントリ領域の組みについて、１巡目から４巡目まで間に選択するデータの非反転、反転の組み合わせが４通り生成されるようにする。【００３１】
図１では、反転入力データを選択するものと判断される書き込みアドレス値と、反転入力データとを太枠で示している。
エントリ領域１ａとエントリ領域１ｂとに書き込むデータの選択において、１巡目では、入力データ選択部４は共に非反転の入力データを選択する。２巡目では、入力データ選択部４は共に反転入力データを選択する。３巡目では、入力データ選択部４は、エントリ領域１ａには非反転の入力データを選択し、エントリ領域１ｂには反転入力データを選択する。４巡目では、入力データ選択部４は、エントリ領域１ａには反転入力データを選択し、エントリ領域１ｂには非反転の入力データを選択する。【００３２】
テストパターン８ａが入力されるのと並行して、記憶部１内のエントリ領域１ａ，１ｂからは、書き込まれたデータの読み出しが順次行われる。読み出し対象のエントリ領域は、読み出しアドレスカウンタ５の出力するビットで指定される。【００３３】
読み出しアドレスカウンタ５の初期値は「０００」であり、記憶部１からデータが読み出されると、その都度カウントアップされる。読み出しアドレスカウンタ５がカウントアップされると、最下位ビットの値は「０」と「１」とを交互に繰り返す。この読み出しアドレスカウンタ５の最下位ビットは、データ読み出し対象となるエントリ領域のアドレスを示している。従って、アドレス「０」のエントリ領域１ａとアドレス「１」のエントリ領域１ｂとが交互にデータ読み出し対象となる。【００３４】
読み出し対象とされたエントリ領域からの出力データは、そのまま出力データ選択部７に入力されると共に、出力データ反転部６で反転されたデータが出力データ選択部７に入力される。そして、読み出しデータ９として出力すべきデータが出力データ選択部７で選択される。【００３５】
出力データ選択部７は、読み出しアドレスカウンタ５の上位２ビットによって、テストパターン８ａの何巡目に書き込まれたデータなのかを認識できる。すなわち、上位２ビットが、「００」であれば１巡目、「０１」であれば２巡目、「１０」であれば３巡目、「１１」であれば４巡目である。そこで、出力データ選択部７は、読み出し順が連続する２つのエントリ領域の組みについて、１巡目から４巡目まで間の選択するデータの非反転、反転の組み合わせが、入力データ選択部４と同じになるように出力データ又は反転出力データを選択する。すなわち、出力データが非反転で書き込まれた入力データであれば、出力データ選択部７は、非反転の出力データを選択する。また、出力データが反転入力データであれば、出力データ選択部７は、反転出力データを選択する。【００３６】
これにより、出力データ選択部７から出力される読み出しデータ９は、記憶部１に固定故障や遅延故障がなければ、入力されたテストパターン８ａと同じ内容となる。換言すると、４巡分の読み出しデータにおいてテストパターン８ａと異なる値が含まれていれば、固定故障又は遅延故障が発生していることが分かる。【００３７】
固定故障を検出するために、各エントリ領域１ａ，１ｂ内のすべてのビットに、「０」と「１」とのそれぞれが書き込まれる。図１の例では、２巡目では、１巡目と同一テストパターン８ａを反転させたデータをエントリ領域１ａ，１ｂに書き込んでいる。従って、１巡目と２巡目とのデータの書き込み、および読み出しによって、記憶部１内のすべてのビットの固定故障を検出可能である。【００３８】
遅延故障を検出するために、連続して読み出される２つのエントリ領域１ａ，１ｂの対応する位置のビット（例えば、各エントリ領域の第０ビット）を並べたとき、「０」から「１」への遷移と、「１」から「０」への遷移とを発生させている。該当ビットの値が遷移するとき、遅延故障があれば後から読み出されるデータで誤りが検出される。【００３９】
図１の例では、１巡目から４巡目において、連続して読み出されるエントリ領域の非反転、反転の組み合わせパターンが４通り生成される。すると、エントリ領域１ａ，１ｂのデータ読み出し時には、すべてのビットについて、「０から０で値が変化しない」、「１から１で値が変化しない」、「０から１に値が変化する」と「１から０に値が変化する」の４種類の読み出しが存在する。このようなパターンが発生することは、テストパターン８ａの内容には関係がない。その結果、４巡のうちに必ず１回ずつ、「０」から「１」への遷移と「１」から「０」への遷移とが発生する。従って、記憶部１内のすべてのビットについて遅延故障の検出が可能である。【００４０】
ところで、記憶部１の固定故障の検出のみが目的の場合、テストパターン８ａの入力は、２巡目まででよい。このとき、テストパターン８ａの入力を２巡させる間、書き込みアドレスカウンタ２の最上位ビットは「０」のままである。すると、固定故障の検出のみを行う場合、書き込みアドレスカウンタ２は、記憶部１内のエントリ領域１ａ，１ｂのアドレスを表現するのに必要なビット幅（図１の例では１ビット）よりも１ビットだけ余分なビット（制御ビット）を有していればよい。すなわち、図１に示した書き込みアドレスカウンタ２の最上位ビットは不要となる。【００４１】
この場合、入力データ選択部４は、書き込みアドレスカウンタ２の制御ビットにより、エントリ領域１ａ，１ｂに書き込むデータ値を反転して書き込むか反転しないで書き込むかを決定する。読み出しアドレスカウンタ５も同様に、記憶部１内のエントリ領域１ａ，１ｂのアドレスを表現するのに必要なビット幅（図１の例では１ビット）よりも１ビットだけ余分なビット（制御ビット）を有する。そして、出力データ選択部７は、読み出しアドレスカウンタ５の制御ビットにより、エントリ領域１ａ，１ｂから読み出すデータを反転して読み出すか反転しないで読み出すかを決定する。【００４２】
１ビットの構成の制御ビットで記憶部１の固定故障を検出する場合、テストパターン８ａの入力が２回繰り返される。これにより、記憶部１内のすべてのビットに対して、必ず「０」と「１」との１回ずつの書き込みと読み出しが行われる。つまり、１回目に「０」が書き込まれたビットには、２回目には「１」が書き込まれる。同様に１回目に「１」が書き込まれたビットには、２回目には「０」が書き込まれる。それにより、「０」に固定された固定故障と「１」に固定された固定故障との両方を検出することが可能となる。テストパターン８ａは、記憶部１の記憶容量と等しいデータ量であればよく、内容は任意の値でよい。【００４３】
また、図１に示した記憶装置の回路は、比較的簡単な論理回路で組むことができる。そのため、量産段階のＬＳＩに対して図１に示す回路構成の記憶装置を組み込んだとしても、ＬＳＩのダイサイズが大型化してしまう心配はない。そこで、図１に示した記憶装置を、サーバに実装されたＬＳＩに搭載した場合を例に採り、実施の形態を詳細に説明する。【００４４】
［第１の実施の形態］
第１の実施の形態は、図１に示した構成を有する記憶装置を、キュー制御用のバッファに使用するものである。キュー制御を行う回路には、ＥＣＣで保護されたデータを格納し、先に格納したデータから順に読み出しを行うＦＩＦＯがある。このようなＥＣＣで保護されたデータをＦＩＦＯに格納すれば、読み出し時のＥＣＣチェックによって固定故障又は遅延故障の有無を検出できる。そこで、第１の実施の形態では、サーバに実装されたＬＳＩにＥＣＣチェックによる診断回路を有するＦＩＦＯが組み込まれており、そのＦＩＦＯの故障診断を行うものとする。【００４５】
図２は、本実施の形態に係るサーバの構成図である。サーバ１００は高い信頼性が要求される。サーバ１００の信頼性を高めるには、システム動作中の故障によりシステムダウンが発生する確率を低くすることが重要である。そのため、サーバ１００運用前のＰＯＳＴなどの診断により、確実に故障部品を除いてシステムを起動させることが望まれる。【００４６】
サーバ１００は複数のシステムボード（ＳＢ）１１０，・・・，１１０ｎ、複数のＩＯボード（ＩＯＢ）１２０，・・・，１２０ｎ、１つのサービスプロセッサボード（ＳＶＰＢ）１３０、および１つのバックプレーンボード（ＢＰ）１４０を有している。各システムボード１１０，・・・，１１０ｎ、および各ＩＯボード１２０，・・・，１２０ｎは、システムバス（system bus）とメンテナンスバス（M-bus）とによってバックプレーンボード１４０に接続されている。サービスプロセッサボード１３０は、メンテナンスバスによってバックプレーンボード１４０に接続されている。【００４７】
バックプレーンボード１４０内でシステムバス間が接続されていると共に、メンテナンスバス間が接続されている。これにより、システムバスによってシステムボード間、ＩＯボード間が接続される。また、メンテナンスバスによって、各システムボード１１０，・・・，１１０ｎ、および各ＩＯボード１２０，・・・，１２０ｎが、サービスプロセッサボード１３０に接続される。【００４８】
システムボード１１０，・・・，１１０ｎは、サーバ１００で提供すべきサービスに係る演算処理を行う。１つのシステムボード上のＣＰＵ（Central Processing Unit）が他のシステムボードのＤＲＡＭ（Dynamic Random Access Memory）にアクセスする場合は、アクセスする側のシステムボードからシステムバス上にパケットが送信される。送信されたパケットはバックプレーンボード１４０経由で、アクセスされる側のシステムボードに入力される。【００４９】
ＩＯボード１２０，・・・，１２０ｎは、他のサーバなどとの高速通信を行う。１つのＩＯボード上のＬＡＮコントローラがいずれかのシステムボード上のＤＲＡＭにアクセスする場合は、アクセスする側のＩＯボードからシステムバス上にパケットが送信される。送信されたパケットはバックプレーンボード１４０経由で、アクセスされる側のシステムボードに入力される。【００５０】
メンテナンスバスは、サービスプロセッサボード１３０上のサービスプロセッサと、他のボード上の各ＬＳＩとを接続している。サービスプロセッサはメンテナンスバス経由でＬＳＩの初期設定や状態監視を行う。また、サービスプロセッサは、サーバの状態を管理用ＬＡＮ（Local Area Network）経由でサーバ管理用端末２００に通知する。【００５１】
量産試験におけるＦＩＦＯ診断のためのテストプログラムは、例えば、サーバ管理用端末２００から管理用ＬＡＮ経由でサーバ１００に転送される。そして、サービスプロセッサによるＬＳＩなどの初期化後にテストプログラムがシステムボード上のＤＲＡＭに格納される。そして、システムボード上のＣＰＵによってテストプログラムが実行される。【００５２】
次に、システムボード１１０の内部構成について説明する。
図３は、システムボードの構成を示す図である。システムボード１１０は、複数のＣＰＵ１１１，１１２、複数のＤＲＡＭ１１３，１１４、１個のメモリコントローラ（ＭＣ）１１５、および１個のＲＯＭ（Read Only Memory）１１６を有している。複数のＣＰＵ１１１，１１２と複数のＤＲＡＭ１１３，１１４とＲＯＭ１１６とは、メモリコントローラ１１５に接続されている。【００５３】
ＣＰＵ１１１，１１２は、プログラムに記述された命令に従ってデータ処理を実行する。ＤＲＡＭ１１３，１１４は、ＣＰＵ１１１，１１２に実行させるプログラム、実行に必要なデータ、実行結果などを一時的に格納する。【００５４】
メモリコントローラ１１５は、システムバスを介して他のシステムボード、およびＩＯボードに接続されている。メモリコントローラ１１５は、ＣＰＵ１１１，１１２から送信されるパケットに基づいて、アクセス制御を行う。例えば、メモリコントローラ１１５は、ＣＰＵ１１１，１１２から送信されるパケットに基づいて、システムボード１１０内のＤＲＡＭ１１３，１１４、他のシステムボード内のＤＲＡＭ、ＩＯボード内のＬＡＮコントローラやストレージインタフェースのいずれかにアクセスする。また、メモリコントローラ１１５は、メンテナンスバスを介してサービスプロセッサボード１３０に接続されている。例えば、ＲＯＭ１１６にはＰＯＳＴに必要なテストプログラムや装置初期化処理に必要なプログラムが格納されている。ＣＰＵ１１１，１１２はメモリコントローラ１１５を経由してＲＯＭ１１６に格納されているプログラムを読み出し、テストプログラムを実行する。【００５５】
次に、ＩＯボードの内部構成について説明する。
図４は、ＩＯボードの構成を示す図である。ＩＯボード１２０は、１個のＩＯコントローラ（ＩＯＣ）１２１、ＬＡＮコントローラ１２２、およびストレージインタフェース１２３を有する。ＩＯコントローラ１２１は、ＬＡＮコントローラ１２２、ストレージインタフェース１２３それぞれと、個別のＩＯバスで接続されている。また、ＩＯコントローラ１２１は、システムバスで他のシステムボード、ＩＯボードに接続される。さらに、ＩＯコントローラ１２１は、メンテナンスバスでサービスプロセッサボード１３０に接続される。【００５６】
ＬＡＮコントローラ１２２は、ギガビットオーダの転送速度を有するコンピュータネットワーク用のコントローラである。例えば、ＬＡＮコントローラ１２２は、ギガビットイーサネット（登録商標）と呼ばれる規格に準じた通信を行う。ＬＡＮコントローラ１２２は、ＬＡＮポート１２５を有している。他の装置に接続されたＬＡＮケーブルをＬＡＮポート１２５に接続することで、接続先の装置とサーバ１００との間のデータ通信が可能となる。【００５７】
ストレージインタフェース１２３には、ＨＤＤ１２４が接続されている。ストレージインタフェース１２３は、ＨＤＤ１２４との間の通信インタフェースである。例えば、ストレージインタフェース１２３は、ＳＡＳ（シリアル・アタッチ・ＳＣＳＩ（Small Computer System Interface））の規格に沿った通信を行う。【００５８】
次に、サービスプロセッサボード１３０の内部構成について説明する。
図５は、サービスプロセッサボードの構成を示す図である。サービスプロセッサボード１３０は、１個のサービスプロセッサ（ＳＶＰ）１３１と１個のＤＲＡＭ１３２を有している。サービスプロセッサボード１３０のサービスプロセッサ１３１は、サーバ１００の管理用に設けられたＣＰＵである。サービスプロセッサ１３１はメンテナンスバスでシステムボードのメモリコントローラやＩＯボードのＩＯコントローラに接続される。また、サービスプロセッサ１３１は、管理用ＬＡＮポート１３３に接続されている。管理用ＬＡＮポート１３３には、サーバ管理用端末２００に繋がったＬＡＮケーブルが接続される。そして、サーバ管理用端末２００から入力されるパケットが、管理用ＬＡＮポート１３３を介してサービスプロセッサ１３１に入力される。また、サービスプロセッサ１３１で生成したパケットが管理用ＬＡＮポート１３３を介してサーバ管理用端末２００に送信される。【００５９】
図３〜図５に示した各ボード内のＣＰＵやコントローラといった機能を有するチップには、ＦＩＦＯが含まれている。例えばＩＯコントローラ１２１には、システムバスやＩＯバスとの入出力部にＦＩＦＯが設けられている。【００６０】
図６は、ＩＯコントローラの内部構成を示す図である。ＩＯコントローラ１２１はＩＯボード１２０に搭載されるＬＳＩである。ＩＯコントローラ１２１は、プロトコル変換を主な機能とする。【００６１】
ＩＯコントローラ１２１は、１つのシステムバスインタフェース（Ｉ／Ｆ）１２１ａ、２つのＩＯバスインタフェース（Ｉ／Ｆ）１２１ｂ，１２１ｃ、および１つのメンテナンスバスインタフェース（Ｉ／Ｆ）１２１ｄを有する。【００６２】
システムバスインタフェース１２１ａは、バックプレーンボード１４０を経由してシステムボード上のメモリコントローラや、他のＩＯボード上のＩＯコントローラに接続される。ＩＯバスインタフェース１２１ｂは、ストレージインタフェース１２３に接続されている。また、ＩＯバスインタフェース１２１ｃは、ＬＡＮコントローラ１２２に接続されている。メンテナンスバスインタフェース１２１ｄは、バックプレーンボード１４０を経由してサービスプロセッサボード１３０上のサービスプロセッサ１３１に接続される。【００６３】
システムバスインタフェース１２１ａには、送信ＦＩＦＯ１２１ｅが接続されている。送信ＦＩＦＯ１２１ｅは、システムバスインタフェース１２１ａを介して送信するデータの送信バッファとして使用される。また、システムバスインタフェース１２１ａには、受信ＦＩＦＯ１２１ｆが接続されている。受信ＦＩＦＯ１２１ｆは、システムバスインタフェース１２１ａを介して受信するデータの受信バッファとして使用される。【００６４】
ＩＯバスインタフェース１２１ｂには送信ＦＩＦＯ１２１ｇが接続されている。送信ＦＩＦＯ１２１ｇは、ＩＯバスインタフェース１２１ｂを介して送信するデータの送信バッファとして使用される。また、ＩＯバスインタフェース１２１ｂには、受信ＦＩＦＯ１２１ｈが接続されている。受信ＦＩＦＯ１２１ｈは、ＩＯバスインタフェース１２１ｂを介して受信するデータの受信バッファとして使用される。【００６５】
ＩＯバスインタフェース１２１ｃには送信ＦＩＦＯ１２１ｉが接続されている。送信ＦＩＦＯ１２１ｉは、ＩＯバスインタフェース１２１ｃを介して送信するデータの送信バッファとして使用される。また、ＩＯバスインタフェース１２１ｃには、受信ＦＩＦＯ１２１ｊが接続されている。受信ＦＩＦＯ１２１ｊは、ＩＯバスインタフェース１２１ｃを介して受信するデータの受信バッファとして使用される。【００６６】
プロトコル変換部１２１ｋは、システムバスインタフェース１２１ａから入力されたパケットのフォーマットを、ＩＯバス用のパケットのフォーマットへ、それぞれのプロトコルに従って変換する。同様に、プロトコル変換部１２１ｋは、ＩＯバスインタフェース１２１ｂ，１２１ｃから入力されたパケットのフォーマットを、システムバス用のフォーマットへ、それぞれのプロトコルに従って変換する。【００６７】
ルーティング制御部１２１ｍは、システムバス又はＩＯバスから送信されたパケットのルーティングを行う。
また、３つの送信ＦＩＦＯ１２１ｅ，１２１ｇ，１２１ｉは、メンテナンスバスＩ／Ｆが接続されている。サービスプロセッサボード１３０に搭載されているサービスプロセッサ１３１はメンテナンスバス経由で送信ＦＩＦＯ１２１ｅ，１２１ｇ，１２１ｉにアクセスし、反転制御フラグなどの初期設定を行う。また、サービスプロセッサ１３１は、メンテナンスバス経由でＩＯコントローラ１２１内の送信ＦＩＦＯ１２１ｅ，１２１ｇ，１２１ｉのＥＣＣや、アドレスカウンタのカウントアップを指示する信号（ＵＥ／ＣＥ）の検出などの状態監視を行う。ＩＯコントローラ１２１は故障検出時にメンテナンスバス経由でサービスプロセッサ１３１にエラー発生を通知する。サービスプロセッサ１３１は、エラー内容に応じてエラー処理を行い、エラー発生を管理用ＬＡＮ経由でサーバ管理用端末２００に通知する。【００６８】
次に、ＦＩＦＯの入出力について詳細に説明する。
図７は、ＦＩＦＯへの入出力回路を示す図である。図７の例は、ＩＯボード１２０に搭載されたＩＯコントローラ１２１として機能するＬＳＩ内のＦＩＦＯのうち、ＬＡＮコントローラ１２２に接続されるＩＯバスインタフェース１２１ｃへの送信ＦＩＦＯ１２１ｉを診断するための入出力である。【００６９】
送信ＦＩＦＯ１２１ｉの１つの単位格納領域のビット幅は７２ビットである。送信ＦＩＦＯ１２１ｉ内の１つの単位格納領域は、６４ビットのデータと８ビットのＥＣＣを有する。送信ＦＩＦＯ１２１ｉの深さは２５６である。ここで、送信ＦＩＦＯ１２１ｉの深さとは、送信ＦＩＦＯ１２１ｉに含まれるエントリ領域（データを格納するための単位記憶領域）の数である。すなわち、送信ＦＩＦＯ１２１ｉは、２５６個のＥＣＣ付きデータを格納できる。２５６個分のアドレスは、８ビットで表現可能である。【００７０】
ライトアドレスカウンタ１２１ｎとリードアドレスカウンタ１２１ｏとは、１０ビットで構成される。すなわち、送信ＦＩＦＯ１２１ｉのアドレスは８ビットで表現できるが、ライトアドレスカウンタ１２１ｎとリードアドレスカウンタ１２１ｏとは、それよりも２ビット多いビット数を有している。【００７１】
なお、従来、アドレスカウンタはＦＩＦＯのアドレスサイズよりも１ビット多いビットで構成されていた。そして、アドレスカウンタのＭＳＢ（Most Significant Bit）は、オーバフロー、アンダーフロー検出のために使用されていた。本実施の形態では、ライトアドレスカウンタ１２１ｎとリードアドレスカウンタ１２１ｏとを構成するビットのうち、第０ビットが従来から使用されているアドレスカウンタのＬＳＢ（Least Significant Bit）に対応する。また、第８ビットが、従来からオーバフロー、アンダーフロー検出に使用されているビット（従来のアドレスカウンタのＭＳＢ）に相当する。【００７２】
ライトアドレスカウンタ１２１ｎとリードアドレスカウンタ１２１ｏとを構成するビットのうち、第９ビットは、反転制御フラグとして特別に追加されたビットである。反転制御フラグは初期値が「０」の１ビットフラグである。反転制御フラグは、アドレスカウンタの第８ビットから第０ビットの値がすべて「１」になった後のカウントアップ時に値が反転される。つまり、従来からオーバフローやアンダーフローの検出のためのビットが用意されたアドレスカウンタと比べると、さらに１ビット反転制御フラグが追加されただけとなる。【００７３】
また、ライトアドレスカウンタ１２１ｎとリードアドレスカウンタ１２１ｏとを構成するビットのうち、第０ビットから第７ビットまでの８ビット分の値は、送信ＦＩＦＯ１２１ｉのアドレスを示している。【００７４】
ライトアドレスカウンタ１２１ｎの値は、送信ＦＩＦＯ１２１ｉにデータを格納する際に出力される。ライトアドレスカウンタ１２１ｎを構成するビットのうち第０ビットから第７ビットまでの値が、送信ＦＩＦＯ１２１ｉに対してライトアドレスとして入力される。また、ライトアドレスカウンタ１２１ｎを構成するビットのうち、第０ビット、第８ビット、および第９ビットの値が、反転制御回路１２１ｑに入力される。【００７５】
ライトアドレスカウンタ１２１ｎは、送信ＦＩＦＯ１２１ｉにデータが格納されると、１０ビットで示される数値を１だけカウントアップする。これにより、次のデータを格納すべき送信ＦＩＦＯ１２１ｉのエントリ領域を示すアドレスがライトアドレスカウンタ１２１ｎに設定される。【００７６】
反転制御回路１２１ｑは、ライトアドレスカウンタ１２１ｎから入力された３つのビット値に応じて、ＥＣＣ付きデータの反転の要否を示す反転指示信号をセレクタ１２１ｓに対して出力する。なお、反転制御回路１２１ｑには、反転抑止フラグ保持回路１２１ｘから反転抑止フラグが入力されている。反転抑止フラグ保持回路１２１ｘには、サービスプロセッサ１３１によって１ビットの反転抑止フラグが設定される。反転抑止フラグは、ＥＣＣ付きデータの反転を強制的に抑止することを意味する情報である。反転抑止フラグに有効な値（例えば「１」）が設定されていた場合、反転制御回路１２１ｑは、ライトアドレスカウンタ１２１ｎから入力されたビット値とは無関係に、反転不要を示す反転指示信号をセレクタ１２１ｓに出力する。反転制御回路１２１ｑにおける入力と出力との関係の詳細は後述する（図８参照）。【００７７】
リードアドレスカウンタ１２１ｏの値は、送信ＦＩＦＯ１２１ｉからデータを読み出す際に出力される。リードアドレスカウンタ１２１ｏを構成するビットのうち第０ビットから第７ビットまでの値が、送信ＦＩＦＯ１２１ｉに対してリードアドレスとして入力される。また、リードアドレスカウンタ１２１ｏを構成するビットのうち、第０ビット、第８ビット、および第９ビットの値が、反転制御回路１２１ｒに入力される。【００７８】
リードアドレスカウンタ１２１ｏは、送信ＦＩＦＯ１２１ｉからデータが読み出されると、１０ビットで示される数値を１だけカウントアップする。これにより、次にデータを読み出すべき送信ＦＩＦＯ１２１ｉのエントリ領域を示すアドレスがリードアドレスカウンタ１２１ｏに設定される。【００７９】
反転制御回路１２１ｒは、リードアドレスカウンタ１２１ｏから入力された３つのビット値に応じて、ＥＣＣ付きデータの反転の要否を示す反転指示信号をセレクタ１２１ｕに対して出力する。なお、反転制御回路１２１ｒには、反転抑止フラグ保持回路１２１ｘから反転抑止フラグが入力されている（図７中、反転抑止フラグ保持回路１２１ｘと反転制御回路１２１ｒとの接続線は省略している）。反転抑止フラグは、ＥＣＣ付きデータの反転を強制的に抑止することを意味する情報である。反転抑止フラグに有効な値（例えば「１」）が設定されていた場合、反転制御回路１２１ｒは、リードアドレスカウンタ１２１ｏから入力されたビット値とは無関係に、反転不要を示す反転指示信号をセレクタ１２１ｕに出力する。反転制御回路１２１ｒにおける入力と出力との関係の詳細は後述する（図８参照）。【００８０】
送信ＦＩＦＯ１２１ｉに書き込むべき６４ビットのライトデータ（write＿data[63:0]）は、ＥＣＣ生成回路１２１ｐに入力される。ＥＣＣ生成回路１２１ｐは、入力されたライトデータのＥＣＣを生成する。この例では、６４ビットのライトデータが入力され、８ビットのＥＣＣが生成されている。ＥＣＣ生成回路１２１ｐからは、ライトデータと、そのライトデータのＥＣＣとで構成されるＥＣＣ付きデータ（write＿data[63:0] + write＿ecc[7:0]）が出力される。【００８１】
ＥＣＣ生成回路１２１ｐから出力されたＥＣＣ付きデータは、セレクタ１２１ｓと反転制御回路１２１ｔとに入力される。反転制御回路１２１ｔは、入力されたＥＣＣ付きデータを構成するすべてのビットの値を反転する。すなわち、反転制御回路１２１ｔは、値が「０」のビットを「１」に変更し、値が「１」のビットを「０」に変更する。反転制御回路１２１ｔでビットの値が反転されたＥＣＣ付きデータ（反転済ＥＣＣ付きデータ）は、セレクタ１２１ｓに入力される。【００８２】
セレクタ１２１ｓは、反転制御回路１２１ｑから入力された反転指示信号に基づいて、ＥＣＣ付きデータと反転済ＥＣＣ付きデータとのいずれか一方を選択し、送信ＦＩＦＯ１２１ｉに出力する。具体的には、反転指示信号が反転不要を示していれば、セレクタ１２１ｓは反転されていないＥＣＣ付きデータを送信ＦＩＦＯ１２１ｉに出力する。また、反転指示信号が反転要を示していれば、セレクタ１２１ｓは反転済ＥＣＣ付きデータを送信ＦＩＦＯ１２１ｉに出力する。【００８３】
送信ＦＩＦＯ１２１ｉは、ライトアドレスカウンタ１２１ｎから入力された８ビットのアドレス値で示されるエントリ領域に、セレクタ１２１ｓから入力されたデータを格納する。また、送信ＦＩＦＯ１２１ｉは、リードアドレスカウンタ１２１ｏから入力された８ビットのアドレス値で示されるエントリ領域のデータ（出力データ）を出力する。【００８４】
送信ＦＩＦＯ１２１ｉから出力された出力データは、セレクタ１２１ｕと反転制御回路１２１ｖとに入力される。反転制御回路１２１ｖは、入力された出力データを構成するすべてのビットの値を反転する。すなわち、反転制御回路１２１ｖは、値が「０」のビットを「１」に変更し、値が「１」のビットを「０」に変更する。これにより、出力データが反転済ＥＣＣ付きデータであった場合、反転される前のＥＣＣ付きデータに戻される。反転制御回路１２１ｖでビットの値が反転されたデータ（反転済出力データ）は、セレクタ１２１ｕに入力される。【００８５】
セレクタ１２１ｕは、反転制御回路１２１ｖから入力された反転指示信号に基づいて、出力データと反転済出力データとのいずれか一方を選択し、ＥＣＣチェック／訂正回路１２１ｗに出力する。具体的には、反転指示信号が反転不要を示していれば、セレクタ１２１ｕは反転されていない出力データをＥＣＣチェック／訂正回路１２１ｗに出力する。また、反転指示信号が反転要を示していれば、セレクタ１２１ｕは反転済出力データをＥＣＣチェック／訂正回路１２１ｗに出力する。【００８６】
セレクタ１２１ｕから出力される出力データ、又は反転済出力データは、７２ビットのデータ（read＿data[63:0] + read＿ecc[7:0]）である。先頭の６４ビットがリードデータであり、続く８ビットがリードデータのＥＣＣである。【００８７】
ＥＣＣチェック／訂正回路１２１ｗは、ＥＣＣを用いてセレクタ１２１ｕから入力されたリードデータのＥＣＣチェックを行う。ＥＣＣチェックでエラーが検出されれば、ＥＣＣチェック／訂正回路１２１ｗは、ＥＣＣエラー通知又はエラー訂正を行う。具体的には、まずＥＣＣチェック／訂正回路１２１ｗはリードデータのＥＣＣを生成する。そして、ＥＣＣチェック／訂正回路１２１ｗは、生成しＥＣＣと、セレクタ１２１ｕから受信したＥＣＣとを照合する。ＥＣＣチェック／訂正回路１２１ｗは、ＥＣＣが一致すればエラー無しと判断し、入力されたリードデータ（read＿data[63:0]）を出力する。また、ＥＣＣチェック／訂正回路１２１ｗは、ＥＣＣが不一致の場合、検出したＥＣＣエラーがＣＥ（Correctable Error）の場合、リードデータを訂正し出力する。検出したＥＣＣエラーがＵＥ（Uncorrectable Error）の場合、ＥＣＣチェック／訂正回路１２１ｗはＥＣＣエラーを出力する。ＥＣＣチェック／訂正回路１２１ｗから出力されるＥＣＣエラーは、メンテナンスバスを介してサービスプロセッサボード１３０のサービスプロセッサ１３１に通知される。【００８８】
次に、反転制御回路１２１ｑ，１２１ｒにおける入力と出力との関係について説明する。
図８は、反転制御回路の入出力を示す図である。反転制御回路１２１ｑ，１２１ｒには、反転抑止フラグ、アドレスの第９ビット、第８ビット、および第０ビットそれぞれの値が入力される。そして入力された値に応じて、反転制御回路１２１ｑ，１２１ｒから反転要否を示す反転指示信号が出力される。【００８９】
反転抑止フラグの値が「１」であれば、常に非反転を示す反転要否信号が出力される。反転抑止フラグの値が「０」であれば、アドレスの第９ビット、第８ビット、および第０ビットそれぞれの値に応じて反転、非反転が決定される。【００９０】
第９ビットが「０」、第８ビットが「０」であれば、反転制御回路１２１ｑ，１２１ｒからは、第０ビットの値とは無関係に非反転を示す反転要否信号が出力される。第９ビットが「０」、第８ビットが「１」であれば、反転制御回路１２１ｑ，１２１ｒからは、第０ビットの値とは無関係に反転を示す反転要否信号が出力される。【００９１】
第９ビットが「１」、第８ビットが「０」、第０ビットが「０」であれば、反転制御回路１２１ｑ，１２１ｒからは、非反転を示す反転要否信号が出力される。第９ビットが「１」、第８ビットが「０」、第０ビットが「１」であれば、反転制御回路１２１ｑ，１２１ｒからは、反転を示す反転要否信号が出力される。第９ビットが「１」、第８ビットが「１」、第０ビットが「０」であれば、反転制御回路１２１ｑ，１２１ｒからは、反転を示す反転要否信号が出力される。第９ビットが「１」、第８ビットが「１」、第０ビットが「１」であれば、反転制御回路１２１ｑ，１２１ｒからは、非反転を示す反転要否信号が出力される。【００９２】
以上のような構成のＦＩＦＯおよびその入出力回路により、固定故障および遅延故障の検出が可能となる。その場合、ＦＩＦＯに書き込むデータパターンについてはテストプログラムによって生成されるが、そのデータパターンの内容はランダムな値でもよい。ただし、データパターンは、ＦＩＦＯの全データ量に相当するデータパターンを、同一内容のまま４回繰り返しＦＩＦＯへ入力する。【００９３】
サーバ１００においてテストプログラムが実行されると、システムボード１１０，・・・，１１０ｎ内のＣＰＵがテストプログラムに沿った処理を実行する。その処理の過程で、システムボード１１０，・・・，１１０ｎからＩＯボード１２０，・・・，１２０ｎに対して所定の内容のパケットが出力される。【００９４】
図９は、ＦＩＦＯ診断用テストパターンの例を示す図である。図９には、図７に示した送信ＦＩＦＯ１２１ｉの故障検出を行う場合のテストパターンが示されている。図９中の「Packet0」から「Packet127」までがテストパターンである。【００９５】
この例では、テストプログラムにおいて、送信ＦＩＦＯ１２１ｉを経由して送信するパケットの送信命令単位のテストデータが定義されているものとする。テストプログラムに基づいてテストデータを送信するための送信パケットが出力されることで、図９に示したテストパターンが送信ＦＩＦＯ１２１ｉを経由して送信される。【００９６】
テストプログラムはシステムボード１１０上のＣＰＵ１１１で実行される。また、このテストプログラムは、ＩＯボード１２０上のＩＯコントローラ１２１として機能するＬＳＩ内の送信ＦＩＦＯ１２１ｉを診断対象とする。そのため、テストプログラムに記述されているパケット送信命令は、ＣＰＵ１１１からＬＡＮコントローラ１２２へのアクセス命令の一種である。【００９７】
送信ＦＩＦＯ１２１ｉには、テストプログラムの内容に依存する８バイトのライトデータ（write＿data[63:0]）の書き込みが行われる。送信ＦＩＦＯ１２１ｉが故障していなければ、書き込んだ値がリードデータ（read＿data[63:0]）として読み出される。【００９８】
送信ＦＩＦＯ１２１ｉへの書き込み、読み出し時の値の反転制御はaddress[9]、address[8]とaddress[0]によって制御される。制御方法は、図８に示したとおりである。なお、データ書き込み時とデータ読み出し時との反転制御は同じである。【００９９】
テストプログラムでは、ＦＩＦＯの深さである２５６となるテストパターンを４回繰り返すように記述されている。繰り返すテストパターンは、診断率を高くするために４回とも同じ内容のものが利用される。また、テストパターンのデータ量は送信ＦＩＦＯ１２１ｉの深さ（送信ＦＩＦＯ１２１ｉの記憶容量）と一致する。【０１００】
送信ＦＩＦＯ１２１ｉの深さ（エントリ数）は２５６である。また、図９の例では、送信ＦＩＦＯ１２１ｉには１個のパケット送信命令から生成されるパケットのヘッダ部分とデータ部分とのを両方が格納される。この例では、１つのパケットのヘッダ部分とデータ部分との合計容量は１６バイトであるものとする。この場合、１つのパケットの書き込みに使用される送信ＦＩＦＯ１２１ｉの記憶容量は、エントリ２つ分（深さ２）である。そのため、１２８個のパケットを送信することで、送信ＦＩＦＯ１２１ｉの全ての領域にデータ書き込みを行うことができる。【０１０１】
テストプログラムには、ＩＯコントローラ１２１からＬＡＮコントローラ１２２へ送信する１２８個のパケットを、４回繰り返して送信する送信命令が含まれる。従って、システムボードのＣＰＵがテストプログラムを実行することで、ＩＯコントローラ１２１では、全体で１２８×４回のパケット送信が行われることとなる。【０１０２】
１巡目のパケット送信では、先頭のパケット送信命令におけるパケットを送信ＦＩＦＯ１２１ｉに書き込むためのライトアドレスは「０００ｈ」（１６進数表記）である。その後、順次パケットの前半部分、後半部分それぞれが書き込まれるごとに、ライトアドレスカウンタ１２１ｎがカウントアップされる。１２８個目のパケットの最後のデータが書き込まれたエントリ領域のライトアドレスは「０ＦＦｈ」である。ここまでのパケット送信処理が、テストパターン書き込みの１巡目の処理である。【０１０３】
１巡目のテストパターン書き込みでは、ライトアドレスは「０００ｈ」〜「０ＦＦｈ」である。この間のライトアドレスの第９ビットと第８ビットとは、常に「０」である。そのため、１巡目のテストパターン書き込みでは、すべてのライトデータが非反転で送信ＦＩＦＯ１２１ｉに書き込まれる。そして、送信ＦＩＦＯ１２１ｉに書き込まれた出力データは、非反転で読み出され、リードデータとして出力される。１巡目のテストパターンの書き込み、読み出しにより、テストパターンの内容に依存した固定故障と遅延故障とが検出される。【０１０４】
例えば「１」に固定された固定故障を有するビットに「０」の書き込み行われていれば、そのビットの固定故障が検出できる。ただし、該当ビットに「１」の書き込みが行われた場合、１巡目においては固定故障の検出はできない。【０１０５】
また、例えばテストパターンにおける先頭のパケットの前半部分の先頭ビットが「０」であり、先頭のパケットの後半部分の先頭ビットが「１」であったとき、読み出し時に、該当パケットの後半部分の先頭ビットが「０」で読み出されると、該当ビットの遅延故障であると判断できる。ただし、テストパターンにおける先頭のパケットの前半部分の先頭ビットと後半部分の先頭ビットとが共に「０」であると、遅延故障は検出できない。【０１０６】
２巡目のパケット送信では、先頭のパケット送信命令におけるパケットを送信ＦＩＦＯ１２１ｉに書き込むためのライトアドレスは「１００ｈ」である。その後、順次パケットの前半部分、後半部分それぞれが書き込まれるごとに、ライトアドレスカウンタ１２１ｎがカウントアップされる。１２８個目のパケットの最後のデータが書き込まれたエントリ領域のライトアドレスは「１ＦＦｈ」である。この間のパケット送信処理が、テストパターン書き込みの２巡目の処理である。【０１０７】
２巡目のテストパターン書き込みでは、ライトアドレスは「１００ｈ」〜「１ＦＦｈ」である。この間のライトアドレスの第９ビットは常に「０」であり、第８ビットは常に「１」である。そのため、２巡目のテストパターン書き込みでは、すべてのライトデータの値が反転して送信ＦＩＦＯ１２１ｉに書き込まれる。そして、送信ＦＩＦＯ１２１ｉに書き込まれた出力データは、読み出されたデータの値が反転され、リードデータとして出力される。【０１０８】
２巡目のテストパターンの書き込み、読み出しにより、１巡目で検出できなかった極性の固定故障が検出できる。例えば、「１」に固定された固定故障を有するビットに１巡目に「１」の書き込みが行われていれば、そのビットに対して２巡目には「０」が書き込まれる。そうすると、該当ビットの固定故障は、１巡目には検出できないが２巡目には検出できる。その結果、１巡目と２巡目とのテストパターンの書き込みにより、送信ＦＩＦＯ１２１ｉのすべてのビットに対する両極性（「０」固定と「１」固定）での固定故障の診断が完了する。【０１０９】
また、２巡目のテストパターンの書き込み、読み出しにより、１巡目とは異なるビット配列による遅延故障が検出できる。例えばテストパターンにおける先頭のパケットの前半部分の先頭ビットが「０」であり、後半部分の先頭ビットが「１」であったとき、１巡目にはそのままの値が書き込まれるが、２巡目には値が反転される。すると、先頭のパケットの前半部分の先頭ビットには「１」が書き込まれ、後半部分の先頭ビットには「０」が書き込まれる。その結果、読み出し時に、後半部分の先頭ビットが「１」で読み出されると、該当ビットの遅延故障であると判断できる。【０１１０】
３巡目のパケット送信では、先頭のパケット送信命令におけるパケットを送信ＦＩＦＯ１２１ｉに書き込むためのライトアドレスは「２００ｈ」である。その後、順次パケットの前半部分、後半部分それぞれが書き込まれるごとに、ライトアドレスカウンタ１２１ｎがカウントアップされる。１２８個目のパケットの最後のデータが書き込まれたエントリ領域のライトアドレスは「２ＦＦｈ」である。この間のパケット送信処理が、テストパターン書き込みの３巡目の処理である。【０１１１】
３巡目のテストパターン書き込みでは、ライトアドレスは「２００ｈ」〜「２ＦＦｈ」である。この間のライトアドレスの第９ビットは常に「１」であり、第８ビットは常に「０」である。そのため、３巡目のテストパターン書き込みでは、第０ビット（ＬＳＢ）の値が「０」であれば非反転で送信ＦＩＦＯ１２１ｉに書き込まれる。また、第０ビット（ＬＳＢ）の値が「１」であれば反転して送信ＦＩＦＯ１２１ｉに書き込まれる。送信ＦＩＦＯ１２１ｉに書き込まれた出力データは、第０ビット（ＬＳＢ）の値が「０」であれば送信ＦＩＦＯ１２１ｉから読み出された出力データが非反転のままリードデータとなる。また、第０ビット（ＬＳＢ）の値が「１」であれば、送信ＦＩＦＯ１２１ｉから読み出された出力データの値が反転され、リードデータとして出力される。【０１１２】
３巡目のテストパターンの書き込み、読み出しにより、１巡目、２巡目とは異なるビット配列による遅延故障が検出できる。例えばテストパターンにおける先頭のパケット（ライトアドレス「０００ｈ」）の前半部分の先頭ビットが「０」であり、後半部分（ライトアドレス「００１ｈ」）の先頭ビットが「０」であった場合を想定する。この場合、１巡目では、それぞれのデータ格納領域の先頭ビットには共に「０」が書き込まれる。１巡目では、それぞれのデータ格納領域の先頭ビットには共に「１」が書き込まれる。このように、遅延故障の判断対象となるビット列に同じ値が書き込まれていると、遅延故障を検出できない。一方、３巡目には、先頭のパケットの前半部分の先頭ビットはそのまま「０」の値が書き込まれるが、後半部分の先頭ビットには「１」の値が書き込まれる。その結果、読み出し時に、後半部分の先頭のビットが「０」で読み出されると、該当ビットの遅延故障であると判断できる。【０１１３】
４巡目のパケット送信では、先頭のパケット送信命令におけるパケットを送信ＦＩＦＯ１２１ｉに書き込むためのライトアドレスは「３００ｈ」である。その後、順次パケットの前半部分、後半部分それぞれが書き込まれるごとに、ライトアドレスカウンタ１２１ｎがカウントアップされる。１２８個目のパケットの最後のデータが書き込まれたエントリ領域のライトアドレスは「３ＦＦｈ」である。この間のパケット送信処理が、テストパターン書き込みの４巡目の処理である。【０１１４】
４巡目のテストパターン書き込みでは、ライトアドレスは「３００ｈ」〜「３ＦＦｈ」である。この間のライトアドレスの第９ビットは常に「１」であり、第８ビットは常に「１」である。そのため、４巡目のテストパターン書き込みでは、第０ビット（ＬＳＢ）の値が「０」であれば反転して送信ＦＩＦＯ１２１ｉに書き込まれる。また、第０ビット（ＬＳＢ）の値が「１」であれば非反転で送信ＦＩＦＯ１２１ｉに書き込まれる。送信ＦＩＦＯ１２１ｉに書き込まれた出力データは、第０ビット（ＬＳＢ）の値が「０」であれば送信ＦＩＦＯ１２１ｉから読み出された出力データが反転され、リードデータとして出力される。また、第０ビット（ＬＳＢ）の値が「１」であれば、送信ＦＩＦＯ１２１ｉから読み出された出力データの値がそのままリードデータとして出力される。【０１１５】
４巡目のテストパターンの書き込み、読み出しにより、１巡目〜３巡目とは異なるビット配列による遅延故障が検出できる。例えばテストパターンにおける先頭パケット（ライトアドレス「０００ｈ」）の前半部分の先頭ビットが「０」であり、後半部分（ライトアドレス「００１ｈ」）の先頭ビットが「０」であった場合を想定する。この場合、３巡目には、先頭パケットの前半部分の先頭ビットはそのまま「０」の値が書き込まれ、後半部分の先頭ビットには「１」の値が書き込まれる。同様の場合、４巡目には、先頭パケットの前半部分の先頭ビットは「１」の値が書き込まれ、後半部分の先頭ビットにはそのまま「０」の値が書き込まれる。その結果、読み出し時に、後半部分の先頭ビットが「１」で読み出されると、該当ビットの遅延故障であると判断できる。【０１１６】
このように、送信ＦＩＦＯ１２１ｉの深さに応じたデータ量のテストパターンを４回繰り返して送信ＦＩＦＯ１２１ｉを介して送信することで、送信ＦＩＦＯ１２１ｉの固定故障および遅延故障の有無が診断できる。この際、診断率は、テストパターン内の１２８個のパケット送信命令の内容（データパターン）に依存しない。もし、テストパターン中に固定故障や遅延故障が検出された場合は、ＥＣＣチェック／訂正回路１２１ｗよりＥＣＣエラーが通知されることとなる。【０１１７】
次に、図９に示したようなテストパターンとなるパケットの送信処理を行うテストプログラムで示される処理手順について説明する。
図１０は、テストプログラムに基づくパケット送信処理の手順を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。なお、以下の説明では、システムボード１１０のＣＰＵ１１１が送信ＦＩＦＯ１２１ｉを検査するためのテストプログラムを実行するものとする。【０１１８】
［ステップＳ１１］ＣＰＵ１１１は、変数ｉに初期値「４」を設定する。変数ｉは、ＦＩＦＯの深さ分のテストパターンの残りの繰り返し回数を示している。
［ステップＳ１２］ＣＰＵ１１１は、変数ｊに、送信ＦＩＦＯ１２１ｉの深さ分のパケットの送信回数を示す値を設定する。具体的には、テストプログラム内で送信ＦＩＦＯ１２１ｉの深さ（fifo＿length）とパケットで使用する送信ＦＩＦＯ１２１ｉのエントリ領域の数（request＿length）とが定数として与えられている。ＣＰＵ１１１では、送信ＦＩＦＯ１２１ｉの深さをパケットが使用するエントリ領域の数で除算し、その商を変数ｊの初期値として設定する（j = fifo＿length / request＿length）。【０１１９】
本実施の形態では、送信ＦＩＦＯ１２１ｉの深さは２５６である（エントリ領域が２５６個存在する）。また、１つのパケットを格納するのに、エントリ領域を２つ分使用する。すると、従って、変数ｊには、初期値として「１２８（＝２５６／２）」が設定される。【０１２０】
［ステップＳ１３］ＣＰＵ１１１は、１個のパケット送信命令を実行する。具体的には、ＣＰＵ１１１は、ＩＯボード１２０のＬＡＮポート１２５に接続されたネットワーク上のネットワーク機器を宛先としたパケットを生成する。そして、ＣＰＵ１１１は、そのパケットの送信命令を実行する。すると、そのパケットは、システムバスを介して、システムボード１１０からＩＯボード１２０に転送される。【０１２１】
ＩＯコントローラ１２１では、システムバスインタフェース１２１ａを介して、送信パケットが入力され、受信ＦＩＦＯ１２１ｆに格納される。その後、送信パケットはプロトコル変換部１２１ｋによってＩＯバスの通信プロトコルに合うようにデータフォーマットが変換される。データフォーマットが変換された送信パケットは、ルーティング制御部１２１ｍによって転送先が判断され、送信ＦＩＦＯ１２１ｉに格納される。送信ＦＩＦＯ１２１ｉに格納された送信パケットは、ＩＯバスインタフェース１２１ｃを介してＬＡＮコントローラ１２２に出力される。【０１２２】
このような手順でパケットがＩＯコントローラ１２１からLANコントローラ１２２に送信されることにより、送信ＦＩＦＯ１２１ｉに対してパケットのデータ長分のデータの書き込み、および読み出しが行われる。【０１２３】
［ステップＳ１４］ＣＰＵ１１１は、変数ｊをデクリメント（１を減じる処理）する。
［ステップＳ１５］ＣＰＵ１１１は、変数ｊが０か否かを判断する。変数ｊが１以上であれば、処理がステップＳ１３に進められ、パケットの送信が継続される。変数ｊが０であれば、予め用意されたテストパターンでの１回分のパケット送信処理が終了し、処理がステップＳ１６に進められる。【０１２４】
［ステップＳ１６］ＣＰＵ１１１は、変数ｉをデクリメントする。
［ステップＳ１７］ＣＰＵ１１１は、変数ｉが０か否かを判断する。変数ｉが１以上であれば、処理がステップＳ１２に進められ、予め用意されたテストパターンでのパケットの送信が再開される。変数ｉが０であれば、テストパターンを４回分送信完了しているためパケット送信処理が終了し、処理がステップＳ１８に進められる。【０１２５】
［ステップＳ１８］ＣＰＵ１１１は、すべてのパケットが正常に送信されたことをチェックする。具体的には、ＣＰＵ１１１は、ステップＳ１２〜Ｓ１７の処理の実行過程においてＥＣＣチェック／訂正回路１２１ｗからＥＣＣエラー通知が出力されなければ、すべてのパケットが正常に送信されたと判断できる。もしＥＣＣエラー通知が出力された場合、送信ＦＩＦＯ１２１ｉに固定故障又は遅延故障の可能性があることが認識できる。【０１２６】
次に、固定故障と遅延故障との診断例について説明する。
図１１は、固定故障、遅延故障の診断例を示す図である。図１１では、ＦＩＦＯのアドレス「ｎ」（ｎは自然数）のエントリ領域におけるｍ番目（ｍは自然数）のビット（診断対象ビット１２）についての診断方法を示す。アドレス「ｎ」のエントリ領域の診断対象ビット１２の遅延故障を検出するには、アドレス「ｎ−１」のエントリ領域のｍ番目のビット（直前ビット１１）にも着目する。なお、アドレス「ｎ−１」のＬＳＢ（第０ビット）は「０」であるものとする。【０１２７】
テストパターンの１巡目では、直前ビット１１に「０」、診断対象ビット１２に「０」が書き込まれる。１巡目で診断対象ビット１２、直前ビット１１それぞれに書き込まれる値は、テストパターンに定義された値（非反転の値）である。１巡目では、診断対象ビット１２が「１」に固定される固定故障が検出できる。すなわち、診断対象ビット１２に対して「０」を書き込んだにも拘わらず「１」で読み出されることでＥＣＣエラーが発生する。【０１２８】
テストパターンの２巡目では、直前ビット１１に「１」、診断対象ビット１２に「１」が書き込まれる。２巡目で診断対象ビット１２、直前ビット１１それぞれに書き込まれる値は、テストパターンに定義された値を反転させた値である。２巡目では、診断対象ビット１２が「０」に固定される固定故障が検出できる。すなわち、診断対象ビット１２に対して「１」を書き込んだにも拘わらず「０」で読み出されることでＥＣＣエラーが発生する。【０１２９】
テストパターンの３巡目では、直前ビット１１に「０」、診断対象ビット１２に「１」が書き込まれる。直前ビット１１が属するエントリ領域のアドレス「ｎ−１」のＬＳＢは「０」である。すると、３巡目で直前ビット１１に書き込まれる値は、テストパターンに定義された値（非反転の値）である。一方、診断対象ビット１２が属するエントリ領域のアドレス「ｎ」のＬＳＢは「１」である。すると、３巡目で診断対象ビット１２に書き込まれる値は、テストパターンに定義された値を反転させた値である。３巡目では、診断対象ビット１２の「０→１」の遅延故障が検出できる。すなわち、直前ビット１１が「０」であるとき診断対象ビット１２の遅延故障があると、診断対象ビット１２に「１」を書き込んだにも拘わらず「０」で読み出され、ＥＣＣエラーが発生する。【０１３０】
テストパターンの４巡目では、直前ビット１１に「１」、診断対象ビット１２に「０」が書き込まれる。３巡目で直前ビット１１に書き込まれる値は、テストパターンに定義された値を反転させた値である。一方、診断対象ビット１２が属するエントリ領域のアドレス「ｎ」のＬＳＢは「１」である。すると、４巡目で診断対象ビット１２に書き込まれる値は、テストパターンに定義された値（非反転の値）である。４巡目では、診断対象ビット１２の「１→０」の遅延故障が検出できる。すなわち、直前ビット１１が「０」であるとき診断対象ビット１２の遅延故障があると、診断対象ビット１２に「１」を書き込んだにも拘わらず「０」で読み出され、ＥＣＣエラーが発生する。【０１３１】
なお、図１１に示した例では、テストパターンにおいて直前ビット１１と診断対象ビット１２との値が同一であるため、３巡目と４巡目とで遅延故障が検出できる。テストパターンにおいて直前ビット１１と診断対象ビット１２との値とが異なる値の場合、１巡目と２巡目とで遅延故障が検出できる。従って、テストパターンにおいて直前ビット１１と診断対象ビット１２とに設定する値がどのような値であっても、少なくともテストパターンの書き込み、読み出しを４巡させることで、確実に診断対象ビット１２の遅延故障が検出可能となる。【０１３２】
また、図１１では、診断対象ビット１２に着目して故障診断処理を説明しているが、実際には、ＦＩＦＯ内のすべてのビットに対して同様の診断が行われる。
ＩＯコントローラ１２１は送信ＦＩＦＯ１２１ｉでＥＣＣエラーを検出した場合は、メンテナンスバスを経由してサービスプロセッサ１３１に通知する。サービスプロセッサ１３１はエラー内容や検出タイミングに応じてエラー処理を行う。例えば、システム起動時に実行されるＰＯＳＴ中にＥＣＣのＵＥを検出した場合、サービスプロセッサ１３１は故障ＬＳＩを除いてシステム起動を行う。【０１３３】
さらに、本実施の形態では、ＦＩＦＯ診断機能を無効にするために反転抑止フラグを有している。反転抑止フラグはサービスプロセッサ１３１からメンテナンスバス経由で制御さる。反転抑止フラグ＝１の場合は反転制御機能が無効となる。サービスプロセッサ１３１はＦＩＦＯ診断テストプログラムが実行される前に、反転抑止フラグ＝０に設定する。ＦＩＦＯにパケットが蓄えられている状態で反転抑止フラグの設定を変更すると、同じＦＩＦＯアドレスのライト／リード反転制御が異なってしまい、ＥＣＣエラーを誤検出する。そのため、サービスプロセッサ１３１は反転抑止フラグ設定を、ＩＯボード１２０の電源投入後、ＦＩＦＯにパケットが格納される前に行う。【０１３４】
［第２の実施の形態］
第２の実施の形態は、ＦＩＦＯの故障診断技術をＬＩＦＯに応用したものである。ＬＩＦＯは、ＥＣＣで保護された後に格納したデータから順に読み出しを行う記憶回路である。このような後入れ先出しバッファは、スタック制御に利用される。【０１３５】
なお、第２の実施の形態では、図２に示したサーバ１００のシステムボード１１０，・・・，１１０ｎやＩＯボード１２０，・・・，１２０ｎに実装されたＬＳＩ内のＬＩＦＯの故障診断を行うものとする。【０１３６】
図１２は、ＬＩＦＯの入出力回路を示す図である。図１２の例では、ＬＩＦＯ２１のデータ幅は７２ビットである。ＬＩＦＯ２１には、６４ビットのデータと８ビットのＥＣＣが格納される。ＬＩＦＯ２１の深さは２５６である。従って、ＬＩＦＯ２１のアドレス空間は、８ビットのアドレスで表現可能である。【０１３７】
アドレスカウンタ２２は、ライト／リード共通で使用される。アドレスカウンタ２２は、９ビットで構成される。アドレスカウンタ２２の第７ビット〜第０ビットの値でＬＩＦＯ２１のアドレスが指定される。アドレスカウンタ２２の値が「１ＦＦｈ」（１６進数表記）の場合はＬＩＦＯ２１が空であることを示す。また、アドレスカウンタ２２の値が「０ＦＦｈ」の場合は、ＬＩＦＯ２１がフルであることを示す。【０１３８】
アドレスカウンタ２２の初期値は「１ＦＦｈ」である。これはＬＩＦＯ２１が空であることを示している。ＬＩＦＯ２１内のすべての記憶領域にデータが格納されているとき（フルの状態）、アドレスカウンタ２２の値は「０ＦＦｈ」である。【０１３９】
アドレスカウンタ２２は書き込み直前に「＋１」インクリメントされ、インクリメント後のＬＩＦＯ２１のアドレスにデータが書き込まれる。また、アドレスカウンタ２２は、読み出し時に「−１」デクリメントされる。アドレスカウンタ２２の値は、第７ビットから第０ビットの値がＬＩＦＯ２１のライト／リード用アドレスとして入力される。また、アドレスカウンタ２２の第０ビットの値が反転制御回路２４に入力される。さらに、アドレスカウンタ２２の値が「０００ｈ」からデクリメントされ「１ＦＦｈ」に変化した場合、その変化のタイミングが反転制御カウンタ２３に通知される。このアドレスの変化は、ＬＩＦＯ２１が空になったタイミングを示している。【０１４０】
反転制御カウンタ２３は、２ビットで構成される。反転制御カウンタ２３はＬＩＦＯ２１が空になるタイミングで「＋１」インクリメントされる。つまり、アドレスカウンタ２２から「０００ｈ」から「１ＦＦｈ」に変化した旨の信号が入力されると、反転制御カウンタ２３のインクリメントが行われる。アドレスカウンタ２２から「０００ｈ」から「１ＦＦｈ」に変化するタイミングとは、アドレスが「０」から負に遷移するタイミングである。反転制御カウンタ２３の値は、反転制御回路２４に入力される。【０１４１】
反転制御回路２４は、アドレスカウンタ２２から入力された第０ビットの値と、反転制御カウンタ２３の値に応じて、ＥＣＣ付きデータの反転の要否を示す反転指示信号をセレクタ２７に対して出力する。なお、反転制御回路２４には、反転抑止フラグ保持回路３１から反転抑止フラグが入力されている。反転抑止フラグ保持回路３１には、サービスプロセッサ１３１によって１ビットの反転抑止フラグが設定される。反転抑止フラグは、ＥＣＣ付きデータの反転を強制的に抑止することを意味する情報である。反転抑止フラグに有効な値（例えば「１」）が設定されていた場合、反転制御回路２４は、アドレスカウンタ２２や反転制御カウンタ２３から入力された値とは無関係に、反転不要を示す反転指示信号をセレクタ２７に出力する。反転制御回路２４における入力と出力との関係の詳細は後述する（図１３参照）。【０１４２】
ＬＩＦＯ２１に書き込むべき６４ビットのライトデータ（write＿data[63:0]）は、ＥＣＣ生成回路２５に入力される。ＥＣＣ生成回路２５は、入力されたライトデータのＥＣＣを生成する。この例では、６４ビットのライトデータが入力され、８ビットのＥＣＣが生成されている。ＥＣＣ生成回路２５からは、ライトデータと、そのライトデータのＥＣＣとで構成されるＥＣＣ付きデータ（write＿data[63:0] + write＿ecc[7:0]）が出力される。【０１４３】
ＥＣＣ生成回路２５から出力されたＥＣＣ付きデータは、セレクタ２７と反転制御回路２６とに入力される。反転制御回路２６は、入力されたＥＣＣ付きデータを構成するすべてのビットの値を反転する。すなわち、反転制御回路２６は、値が「０」のビットを「１」に変更し、値が「１」のビットを「０」に変更する。反転制御回路２６でビットの値が反転されたＥＣＣ付きデータ（反転済ＥＣＣ付きデータ）は、セレクタ２７に入力される。【０１４４】
セレクタ２７は、反転制御回路２４から入力された反転指示信号に基づいて、ＥＣＣ付きデータと反転済ＥＣＣ付きデータとのいずれか一方を選択し、ＬＩＦＯ２１に出力する。具体的には、反転指示信号が反転不要を示していれば、セレクタ２７は反転されていないＥＣＣ付きデータをＬＩＦＯ２１に出力する。また、反転指示信号が反転要を示していれば、セレクタ２７は反転済ＥＣＣ付きデータをＬＩＦＯ２１に出力する。【０１４５】
ＬＩＦＯ２１は、アドレスカウンタ２２から入力された８ビットのアドレス値で示されるエントリ領域に、セレクタ２７から入力されたデータを格納する。また、ＬＩＦＯ２１は、アドレスカウンタ２２から入力された８ビットのアドレス値で示されるエントリ領域のデータ（出力データ）を出力する。【０１４６】
ＬＩＦＯ２１から出力された出力データは、セレクタ２９と反転制御回路２８とに入力される。反転制御回路２８は、入力された出力データを構成するすべてのビットの値を反転する。すなわち、反転制御回路２８は、値が「０」のビットを「１」に変更し、値が「１」のビットを「０」に変更する。これにより、出力データが反転済ＥＣＣ付きデータであった場合、反転される前のＥＣＣ付きデータに戻される。反転制御回路２８でビットの値が反転されたデータ（反転済出力データ）は、セレクタ２９に入力される。【０１４７】
セレクタ２９は、反転制御回路２４から入力された反転指示信号に基づいて、出力データと反転済出力データとのいずれか一方を選択し、ＥＣＣチェック／訂正回路３０に出力する。具体的には、反転指示信号が反転不要を示していれば、セレクタ２９は反転されていない出力データをＥＣＣチェック／訂正回路３０に出力する。また、反転指示信号が反転要を示していれば、セレクタ２９は反転済出力データをＥＣＣチェック／訂正回路３０に出力する。【０１４８】
セレクタ２９から出力される出力データ又は反転済出力データは、７２ビットのデータ（read＿data[63:0] + read＿ecc[7:0]）である。先頭の６４ビットがリードデータであり、続く８ビットがリードデータのＥＣＣである。【０１４９】
ＥＣＣチェック／訂正回路３０は、セレクタ２９から入力されたリードデータのＥＣＣチェックを行う。ＥＣＣチェックでエラーが検出されれば、ＥＣＣチェック／訂正回路３０は、ＥＣＣエラー通知又はエラー訂正を行う。具体的には、まずＥＣＣチェック／訂正回路３０はリードデータのＥＣＣを生成する。そして、ＥＣＣチェック／訂正回路３０は、生成したＥＣＣと、セレクタ２９から受信したＥＣＣとを照合する。ＥＣＣチェック／訂正回路３０は、ＥＣＣが一致すればエラーなしと判断し、入力されたリードデータ（read＿data[63:0]）を出力する。また、ＥＣＣチェック／訂正回路３０は、ＥＣＣが不一致の場合、検出したＥＣＣエラーがＣＥ（Correctable Error）の場合、リードデータを訂正し出力する。検出したＥＣＣエラーがＵＥ（Uncorrectable Error）の場合、ＥＣＣチェック／訂正回路３０はＥＣＣエラーを出力する。ＥＣＣチェック／訂正回路３０から出力されるＥＣＣエラーは、メンテナンスバスを介してサービスプロセッサボード１３０のサービスプロセッサ１３１に通知される。【０１５０】
次に、反転制御回路２４における入力と出力との関係について説明する。
図１３は、第２の実施の形態における反転制御回路の入出力を示す図である。なお、ＬＩＦＯ２１の書き込み、読み出し時のデータ反転制御は、反転制御カウンタ２３の値に基づいて制御されており、ライト時とリード時との反転制御は同じである。【０１５１】
反転制御回路２４には、反転抑止フラグ、反転制御カウンタ、アドレスの第０ビット（ＬＳＢ）の値が入力される。そして入力された値に応じて、反転制御回路２４から反転要否を示す反転指示信号が出力される。【０１５２】
反転抑止フラグの値が「１」であれば、常に非反転を示す反転要否信号が出力される。反転抑止フラグの値が「０」であれば、反転制御カウンタ、および第０ビットそれぞれの値に応じて反転、非反転が決定される。【０１５３】
反転制御カウンタ２３の値が「００ｂ」（２進数表記）であれば、反転制御回路２４からは、第０ビットの値とは無関係に非反転を示す反転要否信号が出力される。反転制御カウンタ２３の値が「０１ｂ」であれば、反転制御回路２４からは、第０ビットの値とは無関係に反転を示す反転要否信号が出力される。【０１５４】
反転制御カウンタ２３の値が「１０ｂ」、第０ビットが「０」であれば、反転制御回路２４からは、非反転を示す反転要否信号が出力される。反転制御カウンタ２３の値が「１０ｂ」、第０ビットが「１」であれば、反転制御回路２４からは、反転を示す反転要否信号が出力される。反転制御カウンタ２３の値が「１１ｂ」、第０ビットが「０」であれば、反転制御回路２４からは、反転を示す反転要否信号が出力される。反転制御カウンタ２３の値が「１１ｂ」、第０ビットが「１」であれば、反転制御回路２４からは、非反転を示す反転要否信号が出力される。【０１５５】
以上のような構成のＬＩＦＯ２１およびその入出力回路により、固定故障および遅延故障の検出が可能となる。その場合、ＬＩＦＯ２１に書き込むデータパターンについてはテストプログラムによって生成されるが、そのデータパターンの内容はランダムな値でよい。ただし、データパターンは、ＬＩＦＯ２１の全データ量に相当するデータパターンのＬＩＦＯ２１への書き込みおよび読み出しを、４回繰り返し行う。【０１５６】
ＬＩＦＯ２１にはテストプログラムの内容に依存するライトデータ[63:0]が書き込まれる。ＬＩＦＯ２１が故障していなければ、その値がリードデータ[63:0]として読み出される。【０１５７】
テストプログラムはＬＩＦＯ２１の深さ２５６に相当するデータ量のテストパターンを書き込みと読み出しとを４回繰り返す。診断率を高くするために、４回とも同じテストパターンが利用される。【０１５８】
例えば、システムボード１１０のＣＰＵ１１１がＬＩＦＯの故障診断用のテストプログラムを実行している場合、まず、ＣＰＵ１１１からの制御により、深さ２５６分のデータの書き込みがＬＩＦＯ２１に対して行われる。次に、ＣＰＵ１１１からの制御により、ＬＩＦＯ２１から書き込んだデータがすべて読み出される。すべてのデータが読み出された時点で、テストパターンの１周期分の入出力が終了する。【０１５９】
すべてのデータが読み出されると、ＬＩＦＯ２１が空となり、反転制御カウンタ２３の値がカウントアップされる。その結果、次のテストパターンの入出力では、前回とは異なる反転制御カウンタ値の下でＬＩＦＯ２１へのデータ入出力が行われることとなる。そして、深さ２５６分のデータの書き込みと読み出しを４回繰り返すと、ＬＩＦＯ２１に対する固定故障と遅延故障との故障診断が完了する。テストパターンの入出力中に固定故障や遅延故障が検出された場合は、ＥＣＣチェック／訂正回路３０によりＥＣＣエラーがサービスプロセッサボード１３０内のサービスプロセッサ１３１に通知される。【０１６０】
また、ＬＩＦＯ２１の診断機能においても、診断機能を無効にするために反転抑止フラグが設けられている。反転抑止フラグはサービスプロセッサ１３１からメンテナンスバス経由で制御さる。反転抑止フラグ＝１の場合は反転制御機能が無効となる。サービスプロセッサ１３１はＬＩＦＯ診断テストプログラムが実行される前に、反転抑止フラグ＝０に設定する。ＬＩＦＯ２１にデータが蓄えられている状態で反転抑止フラグの設定を変更すると、同じＬＩＦＯ２１アドレスのライト／リード反転制御が異なってしまい、ＥＣＣエラーを誤検出する。そのため、サービスプロセッサ１３１は反転抑止フラグ設定を、ＬＩＦＯ２１が実装されたボードの電源投入後、ＬＩＦＯ２１にデータが格納される前に行う。【０１６１】
このように、所定の順番でデータの入出力が行われる記憶装置であれば、キュー制御に用いられるＦＩＦＯに限らず、スタック制御に用いられるＬＩＦＯの高い診断率の故障診断も可能となる。【０１６２】
なお、ＬＩＦＯの故障診断において、固定故障のみを検出するのであれば、反転制御カウンタ２３は、１ビットのみでよい。この場合、テストパターンの書き込みおよび読み出しは２回繰り返せばよい。【０１６３】
以上、第１、第２の実施の形態で示したように、ＬＳＩ内部に図７又は図１２に示した回路を実装することにより、テストパターンの内容に依存せずに、高い検出率の故障診断が可能となる。テストパターンの内容を気にする必要がないことから、テストプログラムの作成が容易となる。また、予め用意したテストパターンの入出力を繰り返すだけなので、テストプログラムの内容も単純で済む。すなわち、テストプログラムを少ない工数で作成することができる。また、診断率を向上させることで、装置運用前にＦＩＦＯやＬＩＦＯの故障を検出できる。また、診断率を向上させるためにＬＳＩ内部に実装するＦＩＦＯやＬＩＦＯの補助論理回路が小さくて済む。【０１６４】
なお、上記のテストプログラムに基づく処理機能は、コンピュータによって実現することができる。その場合、記憶装置の故障検出時に実行すべき処理内容を記述したテストプログラムが提供される。そのテストプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したテストプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。【０１６５】
テストプログラムを流通させる場合には、例えば、そのテストプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、テストプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのテストプログラムを転送することもできる。【０１６６】
テストプログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたテストプログラムもしくはサーバコンピュータから転送されたテストプログラムを、自己の記憶装置に格納する。そして、テストコンピュータは、自己の記憶装置からテストプログラムを読み取り、テストプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接テストプログラムを読み取り、そのテストプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからテストプログラムが転送されるごとに、逐次、受け取ったテストプログラムに従った処理を実行することもできる。【０１６７】
なお、開示の記憶装置および故障診断方法は、上述の実施の形態にのみ限定されるものではなく、開示の記憶装置および故障診断方法の要旨を逸脱しない範囲内において種々の変更を加えることができる。【０１６８】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１６９】
１  記憶部
１ａ，１ｂ  エントリ領域
２  書き込みアドレスカウンタ
３  入力データ反転部
４  入力データ選択部
５  読み出しアドレスカウンタ
６  出力データ反転部
７  出力データ選択部
８  入力データ
８ａ  テストパターン
９  読み出しデータ
【図１】
2010064312.tif 000003
【図２】
2010064312.tif 000004
【図３】
2010064312.tif 000005
【図４】
2010064312.tif 000006
【図５】
2010064312.tif 000007
【図６】
2010064312.tif 000008
【図７】
2010064312.tif 000009
【図８】
2010064312.tif 000010
【図９】
2010064312.tif 000011
【図１０】
2010064312.tif 000012
【図１１】
2010064312.tif 000013
【図１２】
2010064312.tif 000014
【図１３】
2010064312.tif 000015
【手続補正書】
【提出日】平成23年3月4日(2011.3.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
書き込まれたデータを保持するとともに、前記保持したデータの読み出しを行う記憶装置において、
複数のエントリ領域を有し、前記複数のエントリ領域のうち、書き込みを行うエントリ領域を指定する書き込みアドレスに含まれるビットに基づいてデータを書き込むとともに、読み出しを行うエントリ領域を指定する読み出しアドレスに含まれるビットに基づいてデータを読み出す記憶部と、
前記書き込みアドレスを、前記記憶部に対して出力する書き込みアドレスカウンタと、
前記記憶部への入力データを反転して、反転入力データを出力する入力データ反転部と、
前記書き込みアドレスに含まれるビットに基づいて、前記入力データ又は前記反転入力データを選択し、前記書き込みアドレスに含まれるビットに基づいて、前記記憶部に前記選択したデータの書き込みを行う入力データ選択部と、
前記読み出しアドレスを、前記記憶部に対して出力する読み出しアドレスカウンタと、
前記記憶部からの出力データを反転して、反転出力データを出力する出力データ反転部と、
前記読み出しアドレスに含まれるビットに基づいて、前記記憶部から前記出力データの読み出しを行うとともに、前記読み出しアドレスに含まれるビットに基づいて、前記出力データ又は前記反転出力データを選択して出力する出力データ選択部と、
を有することを特徴とする記憶装置。
【請求項２】
前記記憶装置はさらに、
前記入力データに基づいて、入力データエラー訂正符号を生成し、前記入力データに付加するエラー訂正符号生成回路と、
前記出力データに含まれる出力データエラー訂正符号に基づいて、前記出力データのエラー検出又はエラー訂正を行うエラー訂正回路と、
を有することを特徴とする請求項１記載の記憶装置。
【請求項３】
前記記憶装置はさらに、
反転抑止フラグを保持する反転抑止フラグ保持部を有し、
前記入力データ選択部は、前記反転抑止フラグに基づいて、前記反転入力データの選択を抑止し、
前記出力データ選択部は、前記反転抑止フラグに基づいて、前記反転出力データの選択を抑止することを特徴とする請求項１記載の記憶装置。
【請求項４】
前記記憶装置は、先入れ先出しバッファを構成し、
前記入力データ選択部は、前記書き込みアドレスのうちの上位２ビットと最下位ビットに基づいて、前記入力データ又は前記反転入力データを選択し、
前記出力データ選択部は、前記読み出しアドレスを構成するビットのうちの上位２ビットと最下位ビットに基づいて、前記出力データ又は前記反転出力データを選択することを特徴とする請求項１記載の記憶装置。
【請求項５】
書き込まれたデータを保持するとともに、前記保持したデータの読み出しを行う記憶装置において、
複数のエントリ領域を有し、前記複数のエントリ領域のうち、書き込み又は読み出しを行うエントリ領域を指定する制御アドレスに基づいてデータの書き込み又はデータの読み出しを行う記憶部と、
前記制御アドレスを、前記記憶部に対して出力する制御アドレスカウンタと、
前記制御アドレスカウンタが出力する前記制御アドレスが、０から負の値になる場合に計数を行うとともに、前記計数した反転制御カウンタ値を出力する反転制御カウンタと、
前記記憶部への入力データを反転して、反転入力データを出力する入力データ反転部と、
前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記入力データ又は前記反転入力データを選択し、前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記記憶部に前記選択したデータの書き込みを行う入力データ選択部と、
前記記憶部からの出力データを反転して、反転出力データを出力する出力データ反転部と、
前記制御アドレスに基づいて、前記記憶部から出力データの読み出しを行うとともに、前記制御アドレスに含まれるビットと前記反転制御カウンタ値に基づいて、前記出力データ又は前記反転出力データを選択して出力する出力データ選択部を有することを特徴とする記憶装置。
【請求項６】
前記記憶装置はさらに、
前記入力データに基づいて、入力データエラー訂正符号を生成し、前記入力データに付加するエラー訂正符号生成回路と、
前記出力データに含まれる出力データエラー訂正符号に基づいて、前記出力データのエラー検出又はエラー訂正を行うエラー訂正回路を有することを特徴とする請求項５記載の記憶装置。
【請求項７】
前記記憶装置はさらに、
反転抑止フラグを保持する反転抑止フラグ保持部を有し、
前記入力データ選択部は、前記反転抑止フラグに基づいて、前記反転入力データの選択を抑止するとともに、
前記出力データ選択部は、前記反転抑止フラグに基づいて、前記反転出力データの選択を抑止することを特徴とする請求項５記載の記憶装置。
【請求項８】
前記記憶装置は、後入れ先出しバッファを構成し、
前記入力データ選択部は、前記制御アドレスの最下位ビットと前記反転制御カウンタ値に基づいて、前記入力データ又は前記反転入力データを選択し、
前記出力データ選択部は、前記制御アドレスの最下位ビットと前記反転制御カウンタ値に基づいて、前記出力データ又は前記反転出力データを選択することを特徴とする請求項５記載の記憶装置。
【請求項９】
複数のエントリ領域を有する記憶装置の故障診断方法において、
書き込みアドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データの反転の要否を判断し、
前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、
前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、
読み出しアドレスカウンタで示される読み出しアドレスに含まれるビットに基づいて、出力データの反転の要否を判断し、
前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、
前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する、
ことを特徴とする故障診断方法。
【請求項１０】
複数のエントリ領域を有する記憶装置の故障診断方法において、
制御アドレスカウンタが出力する制御アドレスが０から負に遷移した回数を計数した反転制御カウンタ値と、前記制御アドレスカウンタで示される書き込みアドレスに含まれるビットに基づいて、入力データおよび出力データの反転の要否を判断し、
前記入力データの反転が不要であれば、前記入力データを前記書き込みアドレスで示されるエントリ領域に書き込み、
前記入力データの反転が必要であれば、前記入力データを反転した反転入力データを、前記書き込みアドレスで示されるエントリ領域に書き込み、
前記出力データの反転が不要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出して出力し、
前記出力データの反転が必要であれば、前記読み出しアドレスで示されるエントリ領域の出力データを読み出し、読み出した出力データを反転した反転出力データを出力する、
ことを特徴とする故障診断方法。
【国際調査報告】
2010064312.tif 000016
2010064312.tif 000017