(57)【要約】【課題】信号線の異常状態を検出する。【解決手段】ＣＭ２は、他のＣＭ３と相互に通信する際に用いられる信号線１１、１２を用いて出力された信号をフィードバックするバッファ２５と、フィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、信号線１１、１２を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する第１の検出部２３２、第２の検出部２３３とを有する。【選択図】図１
2015018315.tif 000002
【特許請求の範囲】
【請求項１】
他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて出力された信号をフィードバックするフィードバック部と、
前記フィードバック部によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する検出部と
を有することを特徴とするストレージ制御装置。
【請求項２】
前記フィードバック部は、所定のタイミングを示すタイミング信号の発行前後のタイミングで出力された信号をフィードバックし、
前記検出部は、
前記フィードバック部によってフィードバックされた信号のレベルが、前記タイミング信号の発行前後に応じて予め定められた期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する第１の検出部を有する
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記フィードバック部は、前記通信線を用いて出力されたクロック信号をフィードバックし、
前記検出部は、
前記フィードバック部によってフィードバックされたクロック信号のレベルが、第１のレベルを検出してからクロックの１／２周期分の一定期間内、前記期待レベルとして前記第１のレベルと一致しない場合、または、前記第１のレベルを検出してから前記一定期間経過後から前記一定期間内、前記期待レベルとして前記第１のレベルと異なる第２のレベルと一致しない場合、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する第２の検出部を有する
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項４】
前記第２の検出部は、前記クロック信号のレベルが、ローレベルを検出してから前記一定期間経過後から、前記期待レベルとしてハイレベルと一致しない場合に、ローレベルが継続する期間をカウントし、カウントした期間が規定期間を超える場合、前記信号線を用いて出力された信号のレベルがローレベルから変化しない異常であることを検出し、カウントした期間が規定時間を超えない場合、前記他のストレージ制御装置におけるクロックストレッチであることを検出する第３の検出部を有する
ことを特徴とする請求項３に記載のストレージ制御装置。
【請求項５】
他の制御装置と相互に通信する際に用いられる通信線を用いて出力された信号をフィードバックするフィードバック部と、
前記フィードバック部によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する検出部と
を有することを特徴とする制御装置。
【請求項６】
コンピュータに、
他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて信号を出力し、
前記通信線によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置などに関する。
【背景技術】
【０００２】
ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）システムでは、制御装置であるコントローラモジュール（以下、「ＣＭ」）が、ＣＭ内の各種状態を、冗長化された他系のＣＭへとＣＭ間通信を利用し、相互に通知する。ＣＭ間通信には、例えば、Ｉ２Ｃバスが用いられる。
【０００３】
図６は、Ｉ２Ｃバスを用いたＣＭ間通信を示す図である。図６に示すように、ＣＭは、ＦＰＧＡ（Field  Programmable  Gate  Array）を備える。ＦＰＧＡには、マスターポートとスレーブポートとを備える。ＣＭは、冗長化されており、一方の系のマスターポートと他方の系のスレーブポート間でＩ２Ｃバスを用いたＣＭ間通信を行う。
【０００４】
Ｉ２Ｃバスは、一方の系のマスターポートから出力されるクロックを用いて、データを送受信する。したがって、何らかのデバイスの故障や、信号線の異常によりクロックの信号レベルが特定のレベルに張り付くスタック故障が発生した場合に、以降のデータの送受信を含めた通信が不可能となる。このように、通信が不可能となることを、「デッドロック」という。
【０００５】
図７は、デッドロックとなる一例を示す図である。図７に示すように、クロック信号がスタック故障になると、クロック信号の信号レベルが変化しないので、以降のデータの送受信が不可能となる。
【０００６】
また、データの信号線を示すＳＤＡ（Serial  Data  Access）がローレベルの一定値に張り付いてしまう異常状態になると、入出力データが一定値のまま変化しなくなった状態が検出される。入出力データが一定値のまま変化しなくなった状態が一定期間継続した場合に、Ｉ２Ｃバスが異常状態になっていると判断されるという技術が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−１９７７５２号公報
【特許文献２】特開２００２−６３０８０号公報
【特許文献３】特表２００９−５３５６７７号公報
【特許文献４】特表平１１−５０２６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、Ｉ２Ｃバスを用いたＣＭ間通信では、Ｉ２Ｃバスの異常状態を検出することができないという問題がある。一例として、ＣＭ間通信では、Ｉ２Ｃバスが特定のレベルに張り付くという異常状態を検出することができない。
【０００９】
なお、上記課題は、ＲＡＩＤシステムに限らず、信号を用いて通信される部品同士、例えばＣＰＵ（Central  Processing  Unit）とメモリであれば、同様に生じる課題である。
【００１０】
１つの側面では、本発明は、信号線の異常状態を検出することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するストレージ制御装置は、１つの態様において、他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて出力された信号をフィードバックするフィードバック部と、前記フィードバック部によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する検出部とを有する。
【発明の効果】
【００１２】
本願の開示するシステムの１つの態様によれば、信号線の異常状態を検出できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るＲＡＩＤシステムのハードウェア構成を示す図である。
【図２Ａ】図２Ａは、実施例１に係る故障検出処理のフローチャートを示す図である。
【図２Ｂ】図２Ｂは、クロック線のハイ／ロースタック発生判定処理のフローチャートを示す図である。
【図３】図３は、リードシーケンスを示す図である。
【図４】図４は、実施例２に係るＲＡＩＤシステムのハードウェア構成を示す図である。
【図５】図５は、実施例２に係る故障検出処理のフローチャートを示す図である。
【図６】図６は、Ｉ２Ｃバスを用いたＣＭ間通信を示す図である。
【図７】図７は、デッドロックとなる一例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するストレージ制御装置、制御装置および制御プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。以下では、ＲＡＩＤシステムに本発明を適用した場合について説明する。
【実施例１】
【００１５】
［ＲＡＩＤシステムの構成］
図１は、実施例１に係るＲＡＩＤシステムのハードウェア構成を示す図である。図１に示すように、ＲＡＩＤシステム９は、データ信号を伝送するデータ線１１と、クロック信号を伝送するクロック線１２と、複数のコントローラモジュール（ＣＭ）２、３と、ディスク４とを有する。ＣＭ２、３は、冗長化されている。ここでは０系のＣＭ２と１系のＣＭ３とが、データ線１１およびクロック線１２を介してＣＭ間通信を行う。データ線１１およびクロック線１２には、例えば、Ｉ２Ｃバスが用いられる。
【００１６】
データ線１１およびクロック線１２は、後述するＣＭ２のマスターポート２２およびＣＭ３のスレーブポート３１間で接続される。マスターポート２２では、データ線１１を用いて出力されるデータ信号をフィードバックさせるために、データ線１１には、出力（「ＯＵＴ」）用のバッファ２４の他に入力（「ＩＮ」）用のバッファ２５が実装される。また、マスターポート２２では、クロック線１２を用いて出力されるクロック信号をフィードバックさせるために、クロック線１２には、出力（「ＯＵＴ」）用のバッファ２６の他に入力（「ＩＮ」）用のバッファ２７が実装される。これにより、データ線１１およびクロック線１２は、マスターポート２２から出力される信号をフィードバックさせて、マスターポート２２に再び入力させることができる。そして、マスターポート２２では、フィードバックされた信号を入力し、入力された信号のレベルが、信号が入力または出力されたタイミングに応じた期待レベルと一致しない場合に、信号のレベルが特定のレベルに張り付く異常状態を検出する。なお、バッファ２５、２７が、「フィードバック部」の一例である。
【００１７】
ＣＭ２、３は、ディスク４などのストレージと接続し、ディスク４を制御する。ディスク４には、データを記憶する記憶デバイス４１を含む。なお、ＣＭ２が、「ストレージ制御装置」の一例である。ＣＭ３が、「他のストレージ制御装置」の一例である。
【００１８】
ＣＭ２は、ＦＰＧＡ２１を有する。ＦＰＧＡ２１は、ＣＭ２の制御を補助する集積回路である。ＦＰＧＡ２１は、マスターポート２２を有する。なお、ＦＰＧＡ２１は、マスターポート２２の他に、スレーブポートを有するが、図１では省略する。マスターポート２２は、ステート処理ブロック２３を有する。ステート処理ブロック２３は、ステート処理ロジック２３１と、第１の検出部２３２と、第２の検出部２３３とを有する。
【００１９】
ＣＭ３は、ＦＰＧＡ３１を有する。ＦＰＧＡ３１は、ＣＭ３の制御を補助する集積回路である。ＦＰＧＡ３１は、スレーブポート３２を有する。なお、ＦＰＧＡ３１は、スレーブポート３２の他に、マスターポートを有するが、図１では省略する。ＦＰＧＡ３１内のマスターポートは、ＦＰＧＡ２１内のマスターポート２２と同様の構成である。
【００２０】
ステート処理ロジック２３１は、ＣＭ間におけるＩ２Ｃ通信のアクセス処理を実行する。例えば、ステート処理ロジック２３１は、Ｉ２Ｃ通信のアクセス処理を実行する待機状態からアクセス開始を示すタイミングパルスを発行する。そして、ステート処理ロジック２３１は、クロック信号の出力を開始し、データ処理を開始する。その後、ステート処理ロジック２３１は、アクセス完了を示すタイミングパルスを発行し、待機状態へ移行する。アクセス開始を示すタイミングパルスは、「Start  Condition」という。アクセス完了を示すタイミングパルスは、「Stop  Condition」という。なお、ステート処理ロジック２３１は、Ｉ２Ｃ通信の規約に準じて実行する。
【００２１】
ここで、Ｉ２Ｃ通信の規約の一例について説明する。Ｉ２Ｃ通信では、START  Conditionが発行される前、信号のレベルがハイレベルであれば正常状態である。一方、信号のレベルがローレベルであればローレベルに張り付く（スタックした）ことを示す異常状態（「ロースタック故障」という）である。START  Conditionが発行された後、クロック信号の出力開始のタイミングで、データ信号のレベルがローレベルであれば正常状態である。一方、データ信号のレベルがハイレベルであればハイレベルに張り付く（スタックした）ことを示す異常状態（「ハイスタック故障」という）である。STOP  Conditionが発行される前、データ信号のレベルがローレベルであれば正常状態である。一方、データ信号のレベルがハイレベルであればハイレベルに張り付く（スタックした）ことを示す異常状態（「ハイスタック故障」という）である。STOP  Conditionが発行された後、信号のレベルがハイレベルであれば正常状態である。一方、信号のレベルがローレベルであればローレベルに張り付く（スタックした）ことを示す異常状態（「ロースタック故障」という）である。
【００２２】
第１の検出部２３２は、フィードバックされたデータ信号を入力し、入力したデータ信号のレベルが、所定のタイミングパルスの入力前後に応じて予め定められた期待レベルと一致するか否かを判定する。第１の検出部２３２は、フィードバックされたデータ信号のレベルが期待レベルと一致しない場合に、特定のレベルに張り付く異常であることを検出する。
【００２３】
例えば、ステート処理ロジック２３１から発行されるSTART  Conditionの入力前、第１の検出部２３２は、フィードバックされたデータ信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く異常であることを検出する。すなわち、第１の検出部２３２は、「ロースタック故障」であることを検出する。
【００２４】
また、ステート処理ロジック２３１から発行されるSTART  Conditionの入力後、第１の検出部２３２は、クロック信号の出力開始のタイミングで、フィードバックされたデータ信号のレベルが期待レベルであるローレベルと一致しない場合に、ハイレベルに張り付く異常であることを検出する。すなわち、第１の検出部２３２は、「ハイスタック故障」であることを検出する。
【００２５】
また、ステート処理ロジック２３１から発行されるSTOP  Conditionの入力前、第１の検出部２３２は、フィードバックされたデータ信号のレベルが期待レベルであるローレベルと一致しない場合に、ハイレベルに張り付く異常であることを検出する。すなわち、第１の検出部２３２は、「ハイスタック故障」であることを検出する。
【００２６】
また、ステート処理ロジック２３１から発行されるSTOP  Conditionの入力後、第１の検出部２３２は、待機状態に戻るタイミングで、フィードバックされたデータ信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く異常であることを検出する。すなわち、第１の検出部２３２は、「ロースタック故障」であることを検出する。
【００２７】
第２の検出部２３３は、カウンタ２３４を備える。カウンタ２３４は、クロックの周期をカウントする。
【００２８】
第２の検出部２３３は、フィードバックされたクロック信号を入力し、入力したクロック信号のレベルが、所定のレベルを検出してからクロックの１／２周期分の一定期間内、期待レベルとして所定のレベルと一致するか否かを判定する。また、第２の検出部２３３は、所定のレベルを検出してから一定期間経過後から１／２周期分の一定期間内、期待レベルとして所定のレベルと異なるレベルと一致するか否かを判定する。第２の検出部２３３は、フィードバックされたクロック信号のレベルが期待レベルと一致しない場合、信号のレベルが特定のレベルから変化しない異常であることを検出する。
【００２９】
例えば、第２の検出部２３３は、クロック１周期をＮカウントとした場合、０〜Ｎ／２カウントの一定期間内、期待レベルをローレベルとし、Ｎ／２カウント経過後からＮ／２〜Ｎカウントの一定期間内、期待レベルをハイレベルとする。そして、第２の検出部２３３は、ローレベルを検出してから、カウンタ２３４に０からカウントさせる。
【００３０】
そして、第２の検出部２３３は、カウンタ２３４のカウント値が０〜Ｎ／２であるとき、フィードバックされたクロック信号のレベルが期待レベルであるローレベルと一致しない場合に、ハイレベルに張り付く異常であることを検出する。すなわち、第２の検出部２３３は、「ハイスタック故障」であることを検出する。
【００３１】
そして、第２の検出部２３３は、カウンタ２３４のカウント値がＮ／２〜Ｎであるとき、フィードバックされたクロック信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く異常であることを検出する。すなわち、第２の検出部２３３は、「ロースタック故障」であることを検出する。
【００３２】
また、第２の検出部２３３は、フィードバックされたクロック信号を入力し、入力したクロック信号のレベルが、所定のタイミングパルスの入力前後に応じて予め定められた期待レベルと一致するか否かを判定する。第２の検出部２３３は、フィードバックされたクロック信号のレベルが期待レベルと一致しない場合に、特定のレベルに張り付く異常であることを検出する。
【００３３】
例えば、ステート処理ロジック２３１から発行されるSTART  Conditionの入力前、第２の検出部２３３は、フィードバックされたクロック信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く異常であることを検出する。すなわち、第２の検出部２３３は、「ロースタック故障」であることを検出する。
【００３４】
また、ステート処理ロジック２３１から発行されるSTOP  Conditionの入力後、第２の検出部２３３は、待機状態に戻るタイミングで、フィードバックされたクロック信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く異常であることを検出する。すなわち、第２の検出部２３３は、「ロースタック故障」であることを検出する。
【００３５】
［故障検出処理のフローチャート］
次に、実施例１に係る故障検出処理を、図２Ａを参照して説明する。図２Ａは、実施例１に係る故障検出処理のフローチャートを示す図である。図２Ａに示すように、マスターポート２２のステート処理ロジック２３１は、待機状態であるとする。
【００３６】
図２Ａに示すように、マスターポート２２のステート処理ロジック２３１は、待機状態である（ステップＳ１１）。そして、待機状態であるステート処理ロジック２３１は、第１の検出部２３２および第２の検出部２３３に対して、タイミングパルスを発行する（ステップＳ１２）。
【００３７】
すると、第１の検出部２３２は、データ線１１においてフィードバックされた信号レベルがハイレベルであるか否かを判定する。第２の検出部２３３は、クロック線１２においてフィードバックされた信号レベルがハイレベルであるか否かを判定する（ステップＳ１３）。データ線１１の信号レベルがハイレベルでないと判定した場合（ステップＳ１３；Ｎｏ）、第１の検出部２３２は、データ線１１が「ロースタック故障」であることをステート処理ロジック２３１に通知する。クロック線１２の信号レベルがハイレベルでないと判定した場合（ステップＳ１３；Ｎｏ）、第２の検出部２３３は、クロック線１２が「ロースタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００３８】
一方、データ線１１およびクロック線１２の信号レベルがともにハイレベルであると判定した場合（ステップＳ１３；Ｙｅｓ）、ステート処理ロジック２３１は、Start  Condition発行前の信号レベルが期待レベル（ハイレベル）と一致すると判断する。そして、ステート処理ロジック２３１は、第１の検出部２３２および第２の検出部２３３に対して、Start  Conditionを発行する（ステップＳ１４）。これにより、Ｉ２Ｃ通信のアクセス処理が開始される。
【００３９】
続いて、第１の検出部２３２は、データ線１１においてフィードバックされた信号の信号レベルがハイレベルであるか否かを判定する（ステップＳ１５）。データ線１１の信号レベルがハイレベルであると判定した場合（ステップＳ１５；Ｙｅｓ）、第１の検出部２３２は、データ線１１が「ハイスタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００４０】
一方、データ線１１の信号レベルがハイレベルでないと判定した場合（ステップＳ１５；Ｎｏ）、ステート処理ロジック２３１は、Start  Condition発行後のデータ線１１の信号レベルが期待レベル（ローレベル）と一致すると判断する。そして、ステート処理ロジック２３１は、クロック信号の出力を開始するとともに、データ処理を開始する（ステップＳ１６）。
【００４１】
続いて、第２の検出部２３３は、クロック線１２のハイスタックまたはロースタックが発生したか否かを判定する（ステップＳ１７）。ハイスタックとは、信号レベルがハイレベルに張り付く（スタックした）ことをいう。ロースタックとは、信号レベルがローレベルに張り付く（スタックした）ことをいう。クロック線１２のハイスタックが発生したと判定した場合（ステップＳ１７；Ｙｅｓ）、第２の検出部２３３は、クロック線１２が「ハイスタック故障」であることをステート処理ロジック２３１に通知する。クロック線１２のロースタックが発生したと判定した場合（ステップＳ１７；Ｙｅｓ）、第２の検出部２３３は、クロック線１２が「ロースタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００４２】
一方、クロック線１２のハイスタックまたはロースタックが発生しなかったと判定した場合（ステップＳ１７；Ｎｏ）、ステート処理ロジック２３１は、処理を続行する（ステップＳ１８）。
【００４３】
続いて、第１の検出部２３２は、データ線１１におけるフィードバックされた信号の信号レベルがハイレベルであるか否かを判定する（ステップＳ１９）。データ線１１の信号レベルがハイレベルであると判定した場合（ステップＳ１９；Ｙｅｓ）、第１の検出部２３２は、データ線１１が「ハイスタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００４４】
一方、データ線１１の信号レベルがハイレベルでないと判定した場合（ステップＳ１９；Ｎｏ）、ステート処理ロジック２３１は、Stop  Condition発行前のデータ線１１の信号レベルが期待レベル（ローレベル）と一致すると判断する。そして、ステート処理ロジック２３１は、第１の検出部２３２および第２の検出部２３３に対して、Stop  Conditionを発行する（ステップＳ２０）。これにより、Ｉ２Ｃ通信のアクセスが完了される。
【００４５】
続いて、第１の検出部２３２は、データ線１１におけるフィードバックされた信号の信号レベルがハイレベルであるか否かを判定する。第２の検出部２３３は、クロック線１２におけるフィードバックされた信号レベルがハイレベルであるか否かを判定する（ステップＳ２１）。データ線１１の信号レベルがハイレベルでないと判定した場合（ステップＳ２１；Ｎｏ）、第１の検出部２３２は、データ線１１が「ロースタック故障」であることをステート処理ロジック２３１に通知する。クロック線１２の信号レベルがハイレベルでないと判定した場合（ステップＳ２１；Ｎｏ）、第２の検出部２３３は、クロック線１２が「ロースタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００４６】
一方、データ線１１およびクロック線１２の信号レベルがともにハイレベルであると判定した場合（ステップＳ２１；Ｙｅｓ）、ステート処理ロジック２３１は、Stop  Condition発行後の信号レベルが期待レベル（ハイレベル）と一致すると判断する。そして、ステート処理ロジック２３１は、正常に待機状態へ移行するとともに、送受信データが有効となる（ステップＳ２２）。これにより、故障検出処理が終了する。
【００４７】
［クロック線のハイ／ロースタック発生判定処理のフローチャート］
次に、実施例１に係るクロック線のハイ／ロースタック発生判定処理を、図２Ｂを参照して説明する。図２Ｂは、実施例１に係るクロック線のハイ／ロースタック発生判定処理のフローチャートを示す図である。
【００４８】
図２Ｂに示すように、第２の検出部２３３は、フィードバックされたクロック信号のローレベルを検出したか否かを判定する（ステップＳ３１）。フィードバックされたクロック信号のローレベルを検出していないと判定した場合（ステップＳ３１；Ｎｏ）、第２の検出部２３３は、ローレベルを検出するまで、判定処理を繰り返す。
【００４９】
一方、フィードバックされたクロック信号のローレベルを検出したと判定した場合（ステップＳ３１；Ｙｅｓ）、第２の検出部２３３は、カウンタ２３４のカウント値を０からカウントする（ステップＳ３２）。
【００５０】
そして、第２の検出部２３３は、カウント値がＮ／２であるか否かを判定する（ステップＳ３３）。カウント値がＮ／２でないと判定した場合（ステップＳ３３；Ｎｏ）、第２の検出部２３３は、カウント値がＮ／２になるまで、繰り返し判定処理を繰り返す。一方、カウント値がＮ／２であると判定した場合（ステップＳ３３；Ｙｅｓ）、第２の検出部２３３は、フィードバックされたクロック信号の信号レベルがローレベルであるか否かを判定する（ステップＳ３４）。フィードバックされたクロック信号の信号レベルがローレベルであると判定した場合（ステップＳ３４；Ｙｅｓ）、第２の検出部２３３は、信号レベルが期待レベル（ローレベル）と一致すると判断し、ステップＳ３５に移行する。
【００５１】
一方、フィードバックされたクロック信号の信号レベルがローレベルでないと判定した場合（ステップＳ３４；Ｎｏ）、第２の検出部２３３は、ハイレベルに張り付くハイスタックが発生したことを返却する。
【００５２】
ステップＳ３５では、第２の検出部２３３は、カウント値がＮであるか否かを判定する（ステップＳ３５）。カウント値がＮでないと判定した場合（ステップＳ３５；Ｎｏ）、第２の検出部２３３は、カウント値がＮになるまで、繰り返し判定処理を繰り返す。一方、カウント値がＮであると判定した場合（ステップＳ３５；Ｙｅｓ）、第２の検出部２３３は、フィードバックされたクロック信号の信号レベルがハイレベルであるか否かを判定する（ステップＳ３６）。
【００５３】
フィードバックされたクロック信号の信号レベルがハイレベルであると判定した場合（ステップＳ３６；Ｙｅｓ）、第２の検出部２３３は、信号レベルが期待レベル（ハイレベル）と一致すると判断する。そして、第２の検出部２３３は、カウンタ２３４のカウント値を０にクリアする（ステップＳ３７）。そして、第２の検出部２３３は、クロック信号の信号レベルが正常であることを返却する。
【００５４】
一方、フィードバックされたクロック信号の信号レベルがハイレベルでないと判定した場合（ステップＳ３６；Ｎｏ）、第２の検出部２３３は、ローレベルに張り付くロースタックが発生したことを返却する。
【００５５】
［実施例１の効果］
上記実施例１によれば、バッファ２５、２７は、データ線１１、クロック線１２を用いて出力された信号をフィードバックする。そして、第１の検出部２３２および第２の検出部２３３は、フィードバックされた信号を入力する。そして、第１の検出部２３２および第２の検出部２３３は、入力した信号のレベルが、信号が出力または入力されたタイミングに応じた期待レベルと一致しない場合に、信号のレベルが特定のレベルから変化しない異常であることを検出する。かかる構成によれば、第１の検出部２３２および第２の検出部２３３は、フィードバックされた信号の信号レベルとの比較に信号が入出力されたタイミングに応じた期待レベルを用いることにより、信号レベルが特定のレベルに張り付く伝送異常の要因を検出できる。
【００５６】
また、上記実施例１によれば、バッファ２５、２７は、所定のタイミングを示すタイミング信号の入力前後のタイミングで出力された信号をフィードバックする。そして、第１の検出部２３２および第２の検出部２３３は、フィードバックされた信号を入力する。そして、第１の検出部２３２および第２の検出部２３３は、入力した信号のレベルが、タイミング信号の入力前後に応じて予め定められた期待レベルと一致しない場合に、信号のレベルが特定のレベルから変化しない異常であることを検出する。かかる構成によれば、第１の検出部２３２および第２の検出部２３３は、フィードバックされた信号の信号レベルとの比較に、タイミング信号の入力前後に応じて予め定められた期待レベルを用いる。これにより、信号レベルが特定のレベルに張り付く伝送異常の要因を検出できる。
【００５７】
また、上記実施例１によれば、バッファ２５、２７は、クロック線１２を用いて出力されたクロック信号をフィードバックする。そして、第２の検出部２３３は、フィードバックされたクロック信号を入力する。そして、第２の検出部２３３は、入力したクロック信号のレベルが、ローレベルを検出してからクロックの１／２周期分の一定期間内、期待レベルとしてローレベルと一致しない場合、クロック信号のレベルがハイレベルから変化しない異常であることを検出する。そして、第２の検出部２３３は、入力したクロック信号のレベルが、ローレベルを検出してから一定期間経過後から一定期間内、期待レベルとしてハイレベルと異なるレベルと一致しない場合、クロック信号のレベルがローレベルから変化しない異常であることを検出する。かかる構成によれば、第２の検出部２３３は、クロックの前の１／２周期分をローレベル、後の１／２周期分をハイレベルとする期待レベルを用いて、フィードバックされた信号の信号レベルと比較する。これにより、信号レベルがローレベルまたはハイレベルに張り付く伝送異常の要因を検出できる。
【実施例２】
【００５８】
ところで、実施例１に係る第２の検出部２３３は、カウント値がＮ／２〜Ｎであるとき、フィードバックされたクロック信号のレベルがハイレベルと一致しない場合に、ローレベルに張り付くロースタック故障であることを検出すると説明した。しかしながら、スレーブポート３２が、強制的にクロック信号のレベルをローレベルに引き込む場合がある。この場合、第２の検出部２３３は、ロースタック故障を誤って検出してしまう。
【００５９】
ここで、第２の検出部２３３が、ロースタック故障を誤って検出してしまうことについて説明する。スレーブポート３２が、クロック信号のレベルをローレベルに引き込む場合について説明する。スレーブポート３２は、ＦＰＧＡ３３外部の記憶デバイス４１から情報を読み出し（リードし）、読み出した情報をマスターポート２２に送信することがある。この際、スレーブポート３２では、読み出しデータを準備処理中、クロックをローレベルに引き込み、一定期間、マスターポート２２の処理を待機させる。このように、スレーブポート３２がクロックのローレベルを引き込むことを、「クロックストレッチ」という。クロックストレッチは、Ｉ２Ｃバスに用意されている機能である。
【００６０】
クロックストレッチでは、スレーブポート３２が強制的にクロックをローレベルに引き込む。したがって、第２の検出部２３３は、クロック信号のローレベルが続くため、正常な処理にも関わらず、クロック信号のロースタック故障を検出してしまう。そして、第２の検出部２３３からロースタック故障通知を受け取ったステート処理ロジック２３１は、強制終了してしまう。すなわち、クロックストレッチの場合、第２の検出部２３３は、ロースタック故障を誤って検出してしまう。
【００６１】
クロックストレッチが発生する場面について、図３を参照して説明する。図３は、リードシーケンスを示す図である。図３に示すように、マスターポート２２によってアクセス開始を示すStart  Conditionが発行され、マスターポート２２からスレーブポート３２に対してデータが送信される。そして、スレーブポート３２では、リードデータの準備処理が開始されると、この準備処理期間、強制的にクロック信号をローレベルに引き込む。すなわち、クロックストレッチが発生する。その後、リードデータの準備処理が終了すると、スレーブポート３２からマスターポート２２に対してリードデータが送信される。そして、リードデータの送信が終了すると、マスターポート２２によってStop  Conditionが発行され、アクセスが完了する。
【００６２】
そこで、実施例２では、マスターポート２２では、クロックストレッチであるか否かを判定したうえで、ロースタック故障を検出する場合について説明する。
【００６３】
［実施例２に係るＲＡＩＤシステムの構成］
図４は、実施例２に係るＲＡＩＤシステムのハードウェア構成を示す図である。なお、図１に示すＲＡＩＤシステム９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、マスターポート２２に第３の検出部２４１を追加した点にある。
【００６４】
第２の検出部２３３は、クロック１周期をＮカウントとした場合、０〜Ｎ／２カウントの一定期間内、期待レベルをローレベルとし、Ｎ／２カウント経過後からＮ／２〜Ｎカウントの一定期間内、期待レベルをハイレベルとすることとする。すると、第２の検出部２３３は、カウンタ２３４のカウント値が、例えばＮ／２〜Ｎであるとき、フィードバックされたクロック信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付くロースタックが発生していることを検出する。この場合、第２の検出部２３３は、ロースタックが発生していることを第３の検出部２４１に通知する。
【００６５】
第３の検出部２４１は、カウンタ２４２を備える。カウンタ２４２は、クロックの周期をカウントする。
【００６６】
第３の検出部２４１は、第２の検出部２３３からロースタックが発生していることが通知されると、クロック信号がクロックストレッチであるかロースタック故障であるかを判定する。例えば、第３の検出部２４１は、ローレベルが継続する期間を、カウンタ２４２に０からカウントさせる。そして、第３の検出部２４１は、カウンタ２４２のカウント値が最大クロックストレッチ時間を超えるか否かを判定する。最大クロックストレッチ時間とは、クロックストレッチであると判定できる最大時間である。そして、第３の検出部２４１は、カウンタ２４２のカウント値が最大クロックストレッチ時間を超える場合、ローレベルに張り付く異常であることを検出する。すなわち、第２の検出部２３３は、「ロースタック故障」であることを検出する。そして、第３の検出部２４１は、カウンタ２４２のカウント値が最大クロックストレッチ時間を超えない場合、スレーブポート３２におけるクロックストレッチであることを検出する。
【００６７】
［故障検出処理のフローチャート］
次に、実施例２に係る故障検出処理を、図５を参照して説明する。図５は、実施例２に係る故障検出処理のフローチャートを示す図である。なお、図２Ａに示す故障検出処理と同一の処理については同一符号を示すことで、その重複する処理の説明については略記する。
【００６８】
図５に示すように、マスターポート２２のステート処理ロジック２３１は、待機状態である（ステップＳ１１）。そして、ステート処理ロジック２３１が、第１の検出部２３２および第２の検出部２３３に対して、タイミングパルスを発行し、Start  Conditionを発行し、クロック信号の出力を開始するとともに、データ処理を開始する（ステップＳ１２〜Ｓ１６）。
【００６９】
続いて、第２の検出部２３３は、クロック線１２のハイスタックまたはロースタックが発生したか否かを判定する（ステップＳ１７Ａ）。ハイスタックとは、信号レベルがハイレベルに張り付く（スタックした）ことをいう。ロースタックとは、信号レベルがローレベルに張り付く（スタックした）ことをいう。クロック線１２のハイスタックが発生したと判定した場合（ステップＳ１７Ａ；Ｙｅｓ）、第２の検出部２３３は、クロック線１２が「ハイスタック故障」であることをステート処理ロジック２３１に通知する。
【００７０】
クロック線１２のロースタックが発生したと判定した場合（ステップＳ１７Ａ；Ｙｅｓ）、第２の検出部２３３は、クロック線１２が「ロースタック故障」であることを第３の検出部２４１に通知する。そして、第３の検出部２４１は、規定時間内にクロックが立ち上がるか否かを判定する（ステップＳ１７Ｂ）。規定時間とは、ここでは、最大クロックストレッチ時間を意味する。規定時間内にクロックが立ち上がると判定した場合（ステップＳ１７Ｂ；Ｙｅｓ）、第３の検出部２４１は、クロックストレッチであると判断し、データ処理に移行すべく、ステップＳ１６に移行する。
【００７１】
一方、規定時間内にクロックが立ち上がらないと判定した場合（ステップＳ１７Ｂ；Ｎｏ）、第３の検出部２４１は、クロックストレッチでないと判断し、クロック線１２が「ロースタック故障」であることをステート処理ロジック２３１に通知する。そして、ステート処理ロジック２３１は、待機状態に戻るべく、ステップＳ１１に移行する。
【００７２】
一方、クロック線１２のハイスタックまたはロースタックが発生しなかったと判定した場合（ステップＳ１７Ａ；Ｎｏ）、ステート処理ロジック２３１は、処理を続行する（ステップＳ１８）。そして、ステート処理ロジック２３１が、第１の検出部２３２および第２の検出部２３３に対して、Stop  Conditionを発行し、正常であれば待機状態へ移行する（ステップＳ１９〜Ｓ２２）。
【００７３】
［実施例２の効果］
上記実施例２によれば、第２の検出部２３３は、クロック信号のレベルが、ローレベルを検出してから一定期間経過後から、期待レベルとしてハイレベルと一致しない場合に、ロースタックが発生していることを第３の検出部２４１に通知する。そして、第３の検出部２４１は、ローレベルが継続する期間をカウントする。そして、第３の検出部２４１は、カウントした期間が規定期間を超える場合、信号のレベルがローレベルから変化しない異常であることを検出する。そして、第３の検出部２４１は、カウントした期間が規定時間を超えない場合、スレーブポート３２におけるクロックストレッチであることを検出する。かかる構成によれば、第３の検出部２４１は、ロースタックが発生している場合に、クロックストレッチであるのかを検出できるので、ロースタック故障を正確に検出できる。
【００７４】
［その他］
なお、実施例１、２では、ＲＡＩＤシステム９が、データ線１１、クロック線１２を対象に、特定の信号レベルに張り付くスタック故障を検出した。しかしながら、かかるシステムは、ＲＡＩＤシステムに限定されず、信号を用いて通信される部品同士が搭載されたシステムであれば良い。信号を用いて通信される部品同士とは、例えば、ＣＰＵとメモリである。なお、ＣＰＵ、メモリは、それぞれ「制御装置」の一例である。
【００７５】
また、実施例１、２では、第２の検出部２３３は、クロック１周期をＮカウントとした場合、０〜Ｎ／２カウントの一定期間内、期待レベルをローレベルとし、Ｎ／２カウント経過後からＮ／２〜Ｎカウントの一定期間内、期待レベルをハイレベルとする。そして、第２の検出部２３３は、ローレベルを検出してから、カウンタ２３４に０からカウントさせると説明した。しかしながら、第２の検出部２３３は、０〜Ｎ／２カウントの一定期間内、期待レベルをハイレベルとし、Ｎ／２カウント経過後からＮ／２〜Ｎカウントの一定期間内、期待レベルをローレベルとしても良い。かかる場合、第２の検出部２３３は、ハイレベルを検出してから、カウンタ２３４に０からカウントさせるようにすれば良い。そして、第２の検出部２３３は、カウンタ２３４のカウント値が０〜Ｎ／２であるとき、フィードバックされたクロック信号のレベルが期待レベルであるハイレベルと一致しない場合に、ローレベルに張り付く「ロースタック故障」であることを検出する。そして、第２の検出部２３３は、カウンタ２３４のカウント値がＮ／２〜Ｎであるとき、フィードバックされたクロック信号のレベルが期待レベルであるローレベルと一致しない場合に、ハイレベルに張り付く「ハイスタック故障」異常であることを検出する。これにより、第２の検出部２３３は、故障を特定の信号レベルに張り付く異常状態を検出できる。
【００７６】
以上説明した実施形態及びその変形例に関し、更に以下の付記を開示する。
【００７７】
（付記１）他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて出力された信号をフィードバックするフィードバック部と、
前記フィードバック部によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する検出部と
を有することを特徴とするストレージ制御装置。
【００７８】
（付記２）前記フィードバック部は、所定のタイミングを示すタイミング信号の発行前後のタイミングで出力された信号をフィードバックし、
前記検出部は、
前記フィードバック部によってフィードバックされた信号のレベルが、前記タイミング信号の発行前後に応じて予め定められた期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する第１の検出部を有する
ことを特徴とする付記１に記載のストレージ制御装置。
【００７９】
（付記３）前記フィードバック部は、前記通信線を用いて出力されたクロック信号をフィードバックし、
前記検出部は、
前記フィードバック部によってフィードバックされたクロック信号のレベルが、第１のレベルを検出してからクロックの１／２周期分の一定期間内、前記期待レベルとして前記第１のレベルと一致しない場合、または、前記第１のレベルを検出してから前記一定期間経過後から前記一定期間内、前記期待レベルとして前記第１のレベルと異なる第２のレベルと一致しない場合、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する第２の検出部を有する
ことを特徴とする付記１に記載のストレージ制御装置。
【００８０】
（付記４）前記第２の検出部は、前記クロック信号のレベルが、ローレベルを検出してから前記一定期間経過後から、前記期待レベルとしてハイレベルと一致しない場合に、ローレベルが継続する期間をカウントし、カウントした期間が規定期間を超える場合、前記信号線を用いて出力された信号のレベルがローレベルから変化しない異常であることを検出し、カウントした期間が規定時間を超えない場合、前記他のストレージ制御装置におけるクロックストレッチであることを検出する第３の検出部を有する
ことを特徴とする付記３に記載のストレージ制御装置。
【００８１】
（付記５）他の制御装置と相互に通信する際に用いられる通信線を用いて出力された信号をフィードバックするフィードバック部と、
前記フィードバック部によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する検出部と
を有することを特徴とする制御装置。
【００８２】
（付記６）コンピュータに、
他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて信号を出力し、
前記通信線によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する
処理を実行させることを特徴とする制御プログラム。
【００８３】
（付記７）ストレージ制御装置が、
他のストレージ制御装置と相互に通信する際に用いられる通信線を用いて信号を出力し、
前記通信線によってフィードバックされた信号のレベルが、所定のタイミングに応じて予め定められたレベルである期待レベルと一致しない場合に、前記信号線を用いて出力された信号のレベルが特定のレベルから変化しない異常であることを検出する
処理を実行することを特徴とする制御方法。
【符号の説明】
【００８４】
１１  データ線
１２  クロック線
２、３  ＣＭ
２１、３１  ＦＰＧＡ
２２  マスターポート
２３  ステート処理ブロック
２３１  ステート処理ロジック
２３２  第１の検出部
２３３  第２の検出部
２３４  カウンタ
２４１  第３の検出部
２４２  カウンタ
２４〜２７  バッファ
３２  スレーブポート
４  ディスク
４１  記憶デバイス
【図１】
2015018315.tif 000003
【図２Ａ】
2015018315.tif 000004
【図２Ｂ】
2015018315.tif 000005
【図３】
2015018315.tif 000006
【図４】
2015018315.tif 000007
【図５】
2015018315.tif 000008
【図６】
2015018315.tif 000009
【図７】
2015018315.tif 000010