(57)【要約】【課題】誤り検出機能の診断を効率化すること。【解決手段】ＤＭＡ（Direct Memory Access）コントローラ１０は、制御回路１１と誤り検出回路１２と診断回路１３とを有する。制御回路１１は、データのＤＭＡ転送を制御する。誤り検出回路１２は、データに付加されたコードに基づくデータの誤り検出を行い誤り検出の結果を制御回路１１に出力する。診断回路１３は、制御回路１１と誤り検出回路１２との接続を遮断して誤り検出回路１２の動作を診断する。上位コントローラ２０は、診断回路１３による診断結果に応じて異常時処理を実行する。【選択図】図１
2020021313.tif 000002
【特許請求の範囲】
【請求項１】
データのＤＭＡ（Direct Memory Access）転送を制御する制御回路と、前記データに付加されたコードに基づく前記データの誤り検出を行い前記誤り検出の結果を前記制御回路に出力する誤り検出回路と、前記制御回路と前記誤り検出回路との接続を遮断して前記誤り検出回路の動作を診断する診断回路と、を備えるＤＭＡコントローラと、
前記診断回路による診断結果に応じて異常時処理を実行する上位コントローラと、
を有するデータ処理装置。
【請求項２】
前記診断回路は、診断用のデータと前記コードとを前記誤り検出回路に入力し、前記誤り検出回路による前記診断用のデータに対する誤り検出結果が適切であるか否かを判定し、適切でない場合に異常を示す前記診断結果を前記上位コントローラに通知する、
請求項１記載のデータ処理装置。
【請求項３】
前記診断回路は、前記診断結果に時刻を示す時刻情報を付加して前記上位コントローラに通知し、
前記上位コントローラは、前記時刻情報に基づいて、前記誤り検出回路の異常を検出する、
請求項１記載のデータ処理装置。
【請求項４】
前記診断回路は、前記誤り検出回路が正常である場合に誤り無しと判定される第１データと誤り有りと判定される第２データとを交互に前記誤り検出回路に入力し、前記誤り検出回路から順次応答される誤り検出結果を含む前記診断結果を前記上位コントローラに通知し、
前記上位コントローラは、前記誤り検出結果により示される誤り無し、および、誤り有りの応答の順序性に基づいて、前記誤り検出回路の異常を検出する、
請求項３記載のデータ処理装置。
【請求項５】
前記診断回路は、前記誤り検出回路の動作の診断を完了すると、前記制御回路と前記誤り検出回路とを再接続する、
請求項１記載のデータ処理装置。
【請求項６】
前記コードは、ＢＣＣ（Block Check Character）である、
請求項１記載のデータ処理装置。
【請求項７】
データのＤＭＡ転送を制御する制御回路と前記データに付加されたコードに基づく前記データの誤り検出を行い前記誤り検出の結果を前記制御回路に出力する誤り検出回路とを有するＤＭＡコントローラの診断回路が、前記制御回路と前記誤り検出回路との接続を遮断して前記誤り検出回路の動作を診断し、
上位コントローラが、前記診断回路による診断結果に応じて異常時処理を実行する、
診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置および診断方法に関する。
【背景技術】
【０００２】
コンピュータなどのデータ処理装置は、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）および入出力デバイスなどの周辺機器といった種々のデバイスを有する。データ処理装置では、ＲＡＭと周辺機器との間でのデータ転送を高速に行うため、ダイレクトメモリアクセス（ＤＭＡ：Direct Memory Access）が用いられる。ＤＭＡは、ＣＰＵを介さずに、ＲＡＭと周辺機器との間（あるいはＲＡＭ上のある記憶領域から他の記憶領域へ）のデータ転送を行う技術である。
【０００３】
例えば、フレームを送信する場合にＤＭＡ回路を起動してブロックデータを共有メモリからバッファメモリへＤＭＡ転送するデータ通信装置の提案がある。提案のデータ通信装置は、送信フレーム内の各ブロックに伝送誤りを検出するエラーチェックコードを付加することにより、ブロック単位での伝送誤りの検出を可能にする。
【０００４】
また、同期して動作する２つの２重系処理装置のバス上のデータの不一致を検出するバス照合型処理装置において、通信制御におけるデータ転送をＤＭＡコントローラ（ＤＭＡＣ：DMA Controller）により高速に実行する提案もある。提案のバス照合型処理装置では、バス照合論理回路へ診断のためのテストパターンデータを送り出すためにＤＭＡＣを用いる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−１６１９５４号公報
【特許文献２】特開平７−３０２２０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＤＭＡ転送では、データの伝送誤りを検出するためにデータに誤り検出用のコード（例えば、ＢＣＣ（Block Check Character））が付加される。そこで、データ転送の信頼性向上のため、ＣＰＵなどの上位コントローラにより、正常データと当該コードとの組および異常データと当該コードとの組をＤＭＡコントローラに入力して、データの誤り検出が適切に行われているか否かを診断することが考えられる。しかし、上位コントローラにより診断を行うと、上位コントローラに対してＤＭＡコントローラの起動やデータ転送指示のための負荷をかけることになり、通常運用時のデータ処理装置の性能が低下する可能性がある。
【０００７】
１つの側面では、本発明は、誤り検出機能の診断を効率化するデータ処理装置および診断方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、データ処理装置が提供される。データ処理装置は、ＤＭＡコントローラと上位コントローラとを有する。ＤＭＡコントローラは、データのＤＭＡ転送を制御する制御回路と、データに付加されたコードに基づくデータの誤り検出を行い誤り検出の結果を制御回路に出力する誤り検出回路と、制御回路と誤り検出回路との接続を遮断して誤り検出回路の動作を診断する診断回路と、を備える。上位コントローラは、診断回路による診断結果に応じて異常時処理を実行する。
【０００９】
また、１つの態様では、診断方法が提供される。
【発明の効果】
【００１０】
１つの側面では、誤り検出機能の診断を効率化できる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のデータ処理装置を示す図である。
【図２】第２の実施の形態のストレージ装置のハードウェア例を示す図である。
【図３】ＤＭＡＣのハードウェア例を示す図である。
【図４】診断用データの例を示す図である。
【図５】パトロールブロックによる診断例を示す図である。
【図６】ファームウェアの処理例を示すフローチャートである。
【図７】ＤＭＡＣの処理例を示すフローチャートである。
【図８】ファームウェアの他の処理例を示すフローチャートである。
【図９】ＤＭＡＣの他の処理例を示すフローチャートである。
【図１０】ＢＣＣチェック回路の診断の比較例を示す図である。
【図１１】ＢＣＣエラー検出時動作の比較例を示す図である。
【図１２】ＢＣＣエラー検出時動作の例を示す図である。
【図１３】ファームウェアの処理の比較例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１３】
図１は、第１の実施の形態のデータ処理装置を示す図である。
データ処理装置１は、ＤＭＡコントローラ１０、上位コントローラ２０およびメモリ３０を有する。ＤＭＡコントローラ１０、上位コントローラ２０およびメモリ３０は、データ処理装置１のバスに接続されている。
【００１４】
ＤＭＡコントローラ１０は、データ処理装置１が備える周辺機器などのデバイス（図示を省略している）とメモリ３０との間のＤＭＡによるデータ転送（ＤＭＡ転送）を行う。ＤＭＡコントローラ１０は、メモリ３０におけるある記憶領域から別の記憶領域へのデータ転送を行うこともある。
【００１５】
上位コントローラ２０は、ＤＭＡコントローラ１０の上位のコントローラであり、例えばＣＰＵである。上位コントローラ２０はファームウェアのプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】
メモリ３０は、データ処理装置１の主記憶装置（メインメモリ）である。メモリ３０は、例えば、ＲＡＭである。
ＤＭＡコントローラ１０は、制御回路１１、誤り検出回路１２および診断回路１３を有する。
【００１７】
制御回路１１は、データのＤＭＡ転送を制御する。制御回路１１は、あるデータのＤＭＡ転送を行う際に、誤り検出回路１２による当該データの誤り検出結果を取得し、誤りが検出されなければ、当該データのＤＭＡ転送を継続する。一方、制御回路１１は、誤り検出回路１２により誤りが検出されると、ＤＭＡ転送を中断して、上位コントローラ２０に誤りが検出された旨を通知する。そして、制御回路１１は、上位コントローラ２０による誤り検出後の後処理（例えば、制御回路１１のリセットや再転送指示など）を待つことになる。制御回路１１は、上位コントローラ２０の再転送指示に応じて、誤りが検出されたデータの再転送を行う。
【００１８】
誤り検出回路１２は、転送対象のデータに対する誤り検出を行う。転送対象のデータには、誤り検出用のコードが付加されている。誤り検出回路１２は、転送対象のデータと誤り検出用のコードとに基づく所定の演算により、転送対象のデータの誤りを検出する。誤り検出回路１２は、誤り検出の結果を制御回路１１に出力する。
【００１９】
誤り検出用のコードとしては、例えば、ＢＣＣが挙げられる。ＢＣＣとは、論理的なデータブロックの正当性の確認に用いられる情報である。ＢＣＣは、データの異常を検出するための冗長コード（ＣＲＣ：Cyclic Redundancy Check）と、データブロックの論理的なデータ位置をチェックするための位置情報（ＢＩＤ：Block IDentifier）とを含む。ただし、誤り検出回路１２は他の種類の冗長コード（冗長ビットあるいは冗長ビット列）を用いて誤り検出を行ってもよい。
【００２０】
診断回路１３は、誤り検出回路１２による誤り検出の動作を診断する。具体的には、診断回路１３は、内部に記憶部（図示を省略している）を有する。診断回路１３の内部の記憶部は、診断用データを記憶する。診断用データは、誤り検出回路１２の誤り検出の動作の診断に用いられるデータである。例えば、診断用データは、診断回路１３の記憶部に予め記憶される。診断用データは、第１診断用データと第２診断用データとを含む。
【００２１】
第１診断用データは、第１データと当該第１データに対して生成されたＢＣＣとの組である。第２診断用データは、例えば、第２データと第２データ以外のデータ（第１データまたは第３データ）に対して生成されたＢＣＣとの第２の組である。第１診断用データにおける第１データは、誤り検出回路１２が適切に（正常に）動作していれば誤り無しと判定されるので、正常データと呼べる。第２診断用データにおける第２データは、誤り検出回路１２が適切に（正常に）動作していれば誤り有りと判定されるので、異常データと呼べる。
【００２２】
診断回路１３は、制御回路１１と誤り検出回路１２との接続を遮断して誤り検出回路１２の動作を診断する。例えば、診断回路１３は、ＤＭＡコントローラ１０がアイドル（ＩＤＬＥ）状態の場合に、制御回路１１と誤り検出回路１２との接続を遮断する。アイドル状態とは、ＤＭＡコントローラ１０が通常運用におけるＤＭＡ転送に用いられていない状態である。そして、診断回路１３は、第１診断用データまたは第２診断用データを誤り検出回路１２に入力し、誤り検出回路１２の応答を得ることで、誤り検出回路１２の診断を行う。
【００２３】
診断回路１３は、第１診断用データまたは第２診断用データに対する応答を得ると、制御回路１１と誤り検出回路１２とを再接続する（接続が遮断された状態を解除する）。すると、制御回路１１は、誤り検出回路１２を用いて、再び、通常のＤＭＡ転送を行えるようになる。
【００２４】
上位コントローラ２０は、診断回路１３による診断結果に応じて異常時処理を実行する。具体的には、上位コントローラ２０は、誤り検出回路１２が適切に動作していないと判断すると、ＤＭＡコントローラ１０に対する所定のＦＡＴＡＬ処理（例えば、ＤＭＡコントローラ１０の再起動など）を行う。一方、上位コントローラ２０は、誤り検出回路１２が適切に動作していると判断すると、ＤＭＡコントローラ１０による運用を継続する。上位コントローラ２０による誤り検出回路１２の動作が適切であるか否かの判断には次の方法が考えられる。
【００２５】
第１の例として、上位コントローラ２０は、診断回路１３により、正常データ、異常データ、正常データ、・・・と交互に、順番に、誤り検出回路１２に入力した場合の誤り検出回路１２の応答を、診断回路１３から取得してもよい。この場合、上位コントローラ２０は、当該応答が、誤り無し応答、誤り有り応答、誤り無し応答、・・・と順番に正しく得られている場合、誤り検出回路１２が適切に動作しており、そうでない場合に、誤り検出回路１２が適切に動作していないと判断する。
【００２６】
第２の例として、第１の例の方法に加えて、応答の時系列を適切に確認可能にするために、診断回路１３により、誤り検出回路１２の応答に、応答時刻を示す時刻情報を付加し、当該応答と応答時刻とを上位コントローラ２０により取得してもよい。上位コントローラ２０は、誤り無し応答、誤り有り応答、誤り無し応答、・・・と順番に得られていることを確認する際に、時刻情報を考慮して、時系列の順序性を確認してもよい。
【００２７】
第３の例として、第１の例の方法によって、診断回路１３により、誤り検出回路１２が適切に動作しているか否かを判定し、上位コントローラ２０により、当該診断回路１３による判定結果を取得してもよい。上位コントローラ２０は、誤り検出回路１２が適切に動作していない旨の通知を診断回路１３から受けた場合に、ＤＭＡコントローラ１０に対する異常時処理を実行する。一方、上位コントローラ２０は、誤り検出回路１２が適切に動作している旨の通知を診断回路１３から受けた場合に、ＤＭＡコントローラ１０による運用を継続する。
【００２８】
データ処理装置１によれば、診断回路１３により、制御回路１１と誤り検出回路１２との接続が遮断される。そして、診断回路１３により、誤り検出回路１２の動作が診断される。上位コントローラ２０により、診断回路１３による診断結果に応じて、異常時処理が実行される。
【００２９】
これにより、誤り検出機能の診断を効率化できる。
具体的には、ＤＭＡコントローラ１０の診断回路１３により誤り検出回路１２の診断を行うことで、上位コントローラ２０に診断による負荷をかけずに済み、通常運用時のシステム性能の低下を抑えられる。また、上位コントローラ２０主体で診断を行う場合、メモリ３０に診断用データを配置することになるが、診断回路１３内に診断用データを格納することで、メモリ３０の記憶領域を節約できる。
【００３０】
特に、診断回路１３は、診断時に、制御回路１１と誤り検出回路１２との接続を遮断することで、誤り検出回路１２による誤り検出の結果が、制御回路１１に出力されることを阻止できる。
【００３１】
ここで、制御回路１１と誤り検出回路１２との接続を遮断しない場合、異常データに対する誤り検出回路１２の応答（誤り有り応答）が制御回路１１に出力されることになる。すると、制御回路１１は、通常のＤＭＡ転送時と同様に、ＤＭＡ転送の動作を中断して上位コントローラ２０に誤り有りを通知し、上位コントローラ２０によるリセットおよび再転送指示を待つことになる。この一連の処理には時間を要し、システム性能の低下の要因になる。
【００３２】
そこで、診断回路１３は、上記のように、誤り検出回路１２による誤り検出の結果が、制御回路１１に出力されることを阻止することで、制御回路１１から上位コントローラ２０へ余計な通知が行われることを防げる。その結果、上位コントローラ２０による誤り有りの場合の後処理を誘発させずに済む。よって、システム性能の低下を一層抑えられる。
【００３３】
このように、データ処理装置１によれば、誤り検出機能の診断を効率化できる。また、制御回路１１の既存の機能への影響を抑えて（例えば、制御回路１１を変更せずに）、診断機能をＤＭＡコントローラ１０に組み込めるという利点もある。
【００３４】
データ処理装置１は、種々の装置に適用され得る。例えば、データ処理装置１は、コンピュータ、スマートフォンやタブレットなどの端末装置およびストレージ装置などを含む各種の情報処理装置および電子装置でもよい。以下では、データ処理装置１の一例として、ストレージ装置を示して、誤り検出の診断機能を更に詳細に説明する。
【００３５】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態のストレージ装置のハードウェア例を示す図である。
【００３６】
ストレージ装置５０は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記憶装置を複数収納し、大容量の記憶領域をサーバ９０に提供する。ストレージ装置５０は、コントローラモジュール（ＣＭ：Controller Module）１００を有する。ＣＭ１００は、ストレージ装置５０に収納された記憶装置に対するサーバ９０のアクセスを制御する。ＣＭ１００は、ストレージ制御装置と呼ばれることもある。
【００３７】
ＣＭ１００は、ＣＰＵ１１０、ＲＡＭ１２０、フラッシュメモリ１３０、ＤＩ１４０、ＤＭＡコントローラ１５０、ＣＡ（Channel Adapter）１６０、ＮＡ（Network Adapter）１７０および媒体リーダ１８０を有する。これらのハードウェアは、ＣＭ１００内のバスに接続されている。
【００３８】
なお、ＣＰＵ１１０は、第１の実施の形態の上位コントローラ２０の一例である。ＲＡＭ１２０は、第１の実施の形態のメモリ３０の一例である。ＤＭＡコントローラ１５０は、第１の実施の形態のＤＭＡコントローラ１０に対応する。
【００３９】
ＣＰＵ１１０は、プログラムの命令を実行するプロセッサである。ＣＰＵ１１０は、フラッシュメモリ１３０に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１２０にロードし、プログラムを実行する。なお、ＣＰＵ１１０は複数のプロセッサコアを含んでもよい。また、ＣＭ１００は複数のプロセッサを有してもよい。以下で説明するＣＰＵ１１０の処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００４０】
ＲＡＭ１２０は、ＣＰＵ１１０が実行するファームウェアのプログラムやＣＰＵ１１０が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ＣＭ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４１】
フラッシュメモリ１３０は、ファームウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、ＣＭ１００は、複数の不揮発性の記憶装置を備えてもよい。
【００４２】
ＤＩ１４０は、ドライブ部１９０と通信するためのインタフェースである。例えば、ＤＩ１４０として、ＳＡＳ（Serial Attached SCSI）（SCSIは、Small Computer System Interfaceの略）などのインタフェースを用いることができる。ここで、ドライブ部１９０は、ストレージ装置５０に内蔵されており、ＨＤＤ１９１，１９２，・・・を収納する。ドライブ部１９０は、ＨＤＤに代えて、または、ＨＤＤと併せて、ＳＳＤなどの他の種類の記憶デバイスを収納することもできる。
【００４３】
ＤＭＡコントローラ１５０は、ＲＡＭ１２０と他のデバイス（ＤＩ１４０、ＣＡ１６０、ＮＡ１７０および媒体リーダ１８０など）との間や、ＲＡＭ１２０のある領域から別の領域へのデータのＤＭＡ転送を制御する。ＤＭＡコントローラ１５０は、データ転送の際に、データに付与されたＢＣＣによる誤り検出を行う。ここで、ＤＭＡコントローラ１５０を「ＤＭＡＣ」と略記することがある。ＤＭＡコントローラ１５０は、例えば、ＦＰＧＡ（Field-Programmable Gate Array）により実現される。
【００４４】
ＣＡ１６０は、ＳＡＮ（Storage Area Network）６０に接続される通信インタフェースである。ＣＡ１６０は、ＳＡＮ６０を介して、ＳＡＮ６０に接続されているサーバ９０と通信する。ＣＡ１６０として、例えばＦＣ（Fibre Channel）のインタフェースを用いることができる。
【００４５】
ＮＡ１７０は、ＬＡＮ（Local Area Network）７０を介して他のコンピュータと通信する通信インタフェースである。ＮＡ１７０として、例えばイーサネット（登録商標）のインタフェースを用いることができる。
【００４６】
媒体リーダ１８０は、記録媒体８０に記憶されたプログラムやデータを読み取る装置である。記録媒体８０として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することができる。媒体リーダ１８０は、例えば、ＣＰＵ１１０からの命令に従って、記録媒体８０から読み取ったプログラムやデータを、ＲＡＭ１２０やフラッシュメモリ１３０に格納する。
【００４７】
ストレージ装置５０は、複数のＣＭを有してもよい。例えば、ストレージ装置５０は、ＣＭを冗長構成としてデータアクセスを分散して実行することで、データアクセスの高速化を図り、また、一方の障害時には他方でデータアクセスを引き継ぐことで、高信頼化を図ることができる。
【００４８】
図３は、ＤＭＡＣのハードウェア例を示す図である。
ＤＭＡコントローラ１５０は、制御部１５１、ＢＣＣチェック回路１５２およびパトロールブロック１５３を有する。ここで、制御部１５１は、第１の実施の形態の制御回路１１に対応する。ＢＣＣチェック回路１５２は、第１の実施の形態の誤り検出回路１２に対応する。パトロールブロック１５３は、第１の実施の形態の診断回路１３に対応する。
【００４９】
制御部１５１は、データのＤＭＡ転送を制御する回路である。制御部１５１は、データのＤＭＡ転送を行う際に、ＢＣＣチェック回路１５２による当該データの誤り検出結果を取得し、誤りが検出されなければ、当該データのＤＭＡ転送を継続する。一方、制御部１５１は、ＢＣＣチェック回路１５２により誤りが検出されると、ＤＭＡ転送を中断して、ＣＰＵ１１０に誤りが検出された旨を通知する。そして、制御部１５１は、ＣＰＵ１１０による誤り検出後の後処理（例えば、制御部１５１のリセット処理（制御部１５１の所定のレジスタのリセット）や再転送指示など）を待つことになる。制御部１５１は、ＣＰＵ１１０の再転送指示に応じて、誤りが検出されたデータの再転送を行うことがある。
【００５０】
ＢＣＣチェック回路１５２は、転送対象のデータに対する誤り検出を行う回路である。具体的には、転送対象のデータには、ＢＣＣが付加されている。ＢＣＣは、データの異常を検出するための冗長コード（ＣＲＣ）と、データブロックの論理的なデータ位置をチェックするための位置情報（ＢＩＤ）とを含み得る。ＢＣＣチェック回路１５２は、ＢＣＣに基づく所定の演算により転送対象のデータの誤りを検出する。ＢＣＣチェック回路１５２による誤り検出は、例えば、ＢＣＣに含まれるＣＲＣに基づいて行われてもよい。ＢＣＣチェック回路１５２は、誤り検出の結果を制御部１５１に出力する。
【００５１】
パトロールブロック１５３は、ＢＣＣチェック回路１５２による誤り検出の動作を診断する回路である。具体的には、パトロールブロック１５３は、内部に記憶部（図示を省略している）を有する。パトロールブロック１５３の内部の記憶部は、診断用データを記憶する。診断用データは、ＢＣＣチェック回路１５２の誤り検出の動作の診断に用いられるデータである。例えば、診断用データは、パトロールブロック１５３の記憶部に予め記憶される。診断用データは、第１診断用データと第２診断用データとを含む。
【００５２】
第１診断用データは、第１データと当該第１データに対して生成されたＢＣＣとの組である。第２診断用データは、例えば、第２データと第２データ以外のデータ（第１データまたは第３データ）に対して生成されたＢＣＣとの第２の組である。第１診断用データにおける第１データは、ＢＣＣチェック回路１５２が適切に動作していれば誤り無し（エラー無し）と判定されるので、正常データと呼べる。第２診断用データにおける第２データは、ＢＣＣチェック回路１５２が適切に動作していれば誤り有り（エラー有り）と判定されるので、異常データと呼べる。
【００５３】
パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断してＢＣＣチェック回路１５２の動作を診断する。例えば、パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態の場合に、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する。アイドル状態とは、ＤＭＡコントローラ１５０が通常運用におけるＤＭＡ転送に用いられていない状態である。そして、パトロールブロック１５３は、第１診断用データまたは第２診断用データをＢＣＣチェック回路１５２に入力し、ＢＣＣチェック回路１５２によるＢＣＣチェック結果の応答を得ることで、ＢＣＣチェック回路１５２の診断を行う。
【００５４】
パトロールブロック１５３は、第１診断用データまたは第２診断用データに対する応答を得ると、制御部１５１とＢＣＣチェック回路１５２とを再接続する（接続が遮断された状態を解除する）。すると、制御部１５１は、ＢＣＣチェック回路１５２を用いて、再び、通常のＤＭＡ転送を行えるようになる。
【００５５】
ＣＰＵ１１０は、パトロールブロック１５３による診断結果に応じて異常時処理を実行する。具体的には、ＣＰＵ１１０は、ＢＣＣチェック回路１５２が適切に動作していないと判断すると、ＤＭＡコントローラ１５０に対する所定のＦＡＴＡＬ処理（例えば、ＤＭＡコントローラ１５０の再起動など）を行う。一方、ＣＰＵ１１０は、ＢＣＣチェック回路１５２が適切に動作していると判断すると、ＤＭＡコントローラ１５０による運用を継続する。ＣＰＵ１１０の機能は、ＲＡＭ１２０に記憶されたファームウェアのプログラムをＣＰＵ１１０が実行することで実現される。
【００５６】
図４は、診断用データの例を示す図である。
記憶部１５３ａは、パトロールブロック１５３に内蔵される。記憶部１５３ａは、診断用データを記憶する。１つの診断用データのサイズは５２０バイト（Bytes）である。診断用データは、第１診断用データと第２診断用データとを含む。第１診断用データは、正常データ３０１とＢＣＣ３０２との組である。第２診断用データは、異常データ３０３とＢＣＣ３０４との組である。正常データ３０１のサイズは５１２バイトである。ＢＣＣ３０２のサイズは８バイトである。異常データ３０３のサイズは５１２バイトである。ＢＣＣ３０４のサイズは８バイトである。
【００５７】
例えば、ＢＣＣ３０２は、正常データ３０１に対する所定の演算により生成される。また、例えば、異常データ３０３は、正常データ３０１の少なくとも一部を改変することで生成される。ＢＣＣ３０４は、例えば、ＢＣＣ３０２と同一とする。
【００５８】
図５は、パトロールブロックによる診断例を示す図である。
パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態であることを検出する。すると、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する（ステップＳ１）。
【００５９】
パトロールブロック１５３は、記憶部１５３ａに格納された診断用データをＢＣＣチェック回路１５２に転送し、ＢＣＣチェック回路１５２により診断用データに基づく誤り検出を実行させる（ステップＳ２）。
【００６０】
パトロールブロック１５３は、診断用データに基づくＢＣＣチェック結果（エラー有り、または、エラー無し）の応答をＢＣＣチェック回路１５２から取得する（ステップＳ３）。ここで、ＢＣＣチェック回路１５２により誤りが検出される場合、「エラー有り」であり、ＢＣＣチェック回路１５２により誤りが検出されない場合、「エラー無し」である。
【００６１】
パトロールブロック１５３は、ＢＣＣチェック結果（エラー有り、または、エラー無し）に時刻情報を付加した診断情報を生成し、ＣＰＵ１１０に割り込み通知する（ステップＳ４）。時刻情報は、タイムスタンプでもよいし、昇順または降順のカウント値などでもよい。
【００６２】
ＣＰＵ１１０は、ＢＣＣチェック結果が交互に「エラー無し」、「エラー有り」となる場合に、ＢＣＣチェック回路１５２による誤り検出機能が正常であり、そうでない場合に、ＢＣＣチェック回路１５２による誤り検出機能が異常であると判断する。例えば、パトロールブロック１５３が、第１診断用データ、第２診断用データの順に、ＢＣＣチェック回路１５２に入力する場合、正常時、最初に「エラー無し」となり、次に、「エラー有り」となり、以降、「エラー無し」、「エラー有り」が交互に繰り返される。
【００６３】
このとき、ＣＰＵ１１０は、パトロールブロック１５３によりＢＣＣチェック結果とともに通知された時刻情報を確認する。ＣＰＵ１１０は、今回の時刻情報が前回通知時よりも進んでいることにより、誤り検出機能（あるいは診断機能）が正常であると判断し、そうでない場合に、誤り検出機能（あるいは診断機能）が異常であると判断する。
【００６４】
ＣＰＵ１１０は、パトロールブロック１５３から取得した診断情報に基づいて異常を検出した場合には、ＤＭＡコントローラ１５０に対するＦＡＴＡＬ処理を実行する。
なお、パトロールブロック１５３は、診断用データに基づくＢＣＣチェック結果をＢＣＣチェック回路１５２から所定時間内に得られない場合もある。この場合、パトロールブロック１５３は、ＢＣＣチェック結果を含まない割り込み通知のみをＣＰＵ１１０に出力する。ＣＰＵ１１０は、当該割り込み通知について、「ＢＣＣチェック結果無し」と判断する。
【００６５】
次に、ＣＰＵ１１０およびＤＭＡコントローラ１５０の処理手順を説明する。前述のように、ＣＰＵ１１０の機能は、ＣＰＵ１１０により実行されるファームウェアにより実現される。なお、パトロールブロック１５３は、診断時、第１診断用データ、第２診断用データを、この順に、ＢＣＣチェック回路１５２に入力するものとする。
【００６６】
図６は、ファームウェアの処理例を示すフローチャートである。
（Ｓ１０）ＣＰＵ１１０は、ＤＭＡコントローラ１５０からの割り込みを受け付ける。ＣＰＵ１１０は、ＤＭＡコントローラ１５０から診断情報を取得する。診断情報は、前述のように、ＢＣＣチェック結果および時刻情報を含む。
【００６７】
（Ｓ１１）ＣＰＵ１１０は、ＢＣＣチェック結果が「エラー無し」を示すか否かを判定する。「エラー無し」を示す場合、ステップＳ１２に処理が進む。「エラー無し」ではない場合（すなわち、「エラー有り」または「ＢＣＣチェック結果無し」の場合）、ステップＳ１６に処理が進む。
【００６８】
（Ｓ１２）ＣＰＵ１１０は、診断情報に含まれる時刻情報に基づいて、前回の診断情報の取得時の時刻から今回の時刻情報（ステップＳ１０で取得した時刻情報）で示される時刻が進んでいるか否かを判定する。進んでいる場合、ステップＳ１３に処理が進む。進んでいない場合、ステップＳ１６に処理が進む。
【００６９】
（Ｓ１３）ＣＰＵ１１０は、ＤＭＡコントローラ１５０からの割り込みを受け付ける。ＣＰＵ１１０は、ＤＭＡコントローラ１５０から診断情報を取得する。診断情報は、ＢＣＣチェック結果および時刻情報を含む。
【００７０】
（Ｓ１４）ＣＰＵ１１０は、ＢＣＣチェック結果が「エラー有り」を示すか否かを判定する。「エラー有り」を示す場合、ステップＳ１５に処理が進む。「エラー有り」ではない場合（すなわち、「エラー無し」または「ＢＣＣチェック結果無し」の場合）、ステップＳ１６に処理が進む。
【００７１】
（Ｓ１５）ＣＰＵ１１０は、診断情報に含まれる時刻情報に基づいて、前回の診断情報の取得時の時刻から今回の時刻情報（ステップＳ１３で取得した時刻情報）で示される時刻が進んでいるか否かを判定する。進んでいる場合、ステップＳ１０に処理が進む。進んでいない場合、ステップＳ１６に処理が進む。
【００７２】
（Ｓ１６）ＣＰＵ１１０は、ＤＭＡコントローラ１５０における誤り検出機能に異常があるとみなして、ＤＭＡコントローラ１５０に対するＦＡＴＡＬ処理を実行する。そして、ＣＰＵ１１０により実行されるファームウェアの処理が終了する。
【００７３】
図７は、ＤＭＡＣの処理例を示すフローチャートである。
（Ｓ２０）パトロールブロック１５３は、診断用データ（正常／異常）を用意する。
（Ｓ２１）パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル（ＩＤＬＥ）状態であるか否かを判定する。アイドル状態の場合、ステップＳ２２に処理が進む。アイドル状態でない場合、ステップＳ２１に進み、パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態となるまで待機する。
【００７４】
（Ｓ２２）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを切り離す。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する。
【００７５】
（Ｓ２３）パトロールブロック１５３は、ＢＣＣチェック回路１５２に正常データ３０１およびＢＣＣ３０２を含む第１診断用データを転送する。
（Ｓ２４）パトロールブロック１５３は、ＢＣＣチェック回路１５２からＢＣＣチェック結果を受信する。
【００７６】
（Ｓ２５）パトロールブロック１５３は、今回のＢＣＣチェック結果に時刻情報を付加した診断情報を生成し、ＣＰＵ１０１へ診断情報を割り込み通知する。
（Ｓ２６）パトロールブロック１５３は、所定時間（例えば、３秒間）待機する。
【００７７】
（Ｓ２７）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを接続する。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続が遮断された状態を解除し、制御部１５１が再びＢＣＣチェック回路１５２を利用してＤＭＡ転送を実行可能にする。
【００７８】
（Ｓ２８）パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル（ＩＤＬＥ）状態であるか否かを判定する。アイドル状態の場合、ステップＳ２９に処理が進む。アイドル状態でない場合、ステップＳ２８に進み、パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態となるまで待機する。
【００７９】
（Ｓ２９）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを切り離す。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する。
【００８０】
（Ｓ３０）パトロールブロック１５３は、ＢＣＣチェック回路１５２に異常データ３０３およびＢＣＣ３０４を含む第２診断用データを転送する。
（Ｓ３１）パトロールブロック１５３は、ＢＣＣチェック回路１５２からＢＣＣチェック結果を受信する。
【００８１】
（Ｓ３２）パトロールブロック１５３は、今回のＢＣＣチェック結果に時刻情報を付加した診断情報を生成し、ＣＰＵ１０１へ診断情報を割り込み通知する。
（Ｓ３３）パトロールブロック１５３は、所定時間（例えば、３秒間）待機する。
【００８２】
（Ｓ３４）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを接続する。具体的には、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続が遮断された状態を解除し、制御部１５１が再びＢＣＣチェック回路１５２を利用してＤＭＡ転送を実行可能にする。そして、ステップＳ２１に処理が進む。
【００８３】
上記のように、パトロールブロック１５３は、診断結果に時刻を示す時刻情報を付加してＣＰＵ１１０に通知する。ＣＰＵ１１０は、時刻情報に基づいて、ＢＣＣチェック回路１５２の異常を検出する。
【００８４】
より具体的には、パトロールブロック１５３は、ＢＣＣチェック回路１５２が正常である場合に誤り無しと判定される第１データと誤り有りと判定される第２データとを交互にＢＣＣチェック回路１５２に入力する。そして、パトロールブロック１５３は、ＢＣＣチェック回路１５２から順次応答される誤り検出結果を含む診断結果をＣＰＵ１１０に通知する。ＣＰＵ１１０は、誤り検出結果により示される誤り無し、および、誤り有りの応答の順序性に基づいて、ＢＣＣチェック回路１５２の異常を検出する。すなわち、ＣＰＵ１１０は、誤り無し、誤り有りというように、ＢＣＣチェック回路１５２が期待される動作をしている場合に異常なし、期待される動作をしていない場合に異常ありと判断する。
【００８５】
このように、ＤＭＡコントローラ１５０のパトロールブロック１５３によりＢＣＣチェック回路１５２の診断を行うことで、ＣＰＵ１１０に診断による負荷をかけずに済み、通常運用時のシステム性能の低下を抑えられる。また、パトロールブロック１５３内に診断用データを格納することで、ＣＰＵ１１０主体で診断を行う場合のようにＲＡＭ１２０に診断用データを配置しなくてよく、ＲＡＭ１２０の記憶領域を節約できる。
【００８６】
特に、パトロールブロック１５３は、診断時に、制御部１５１とＢＣＣチェック回路１５２との接続を遮断することで、ＢＣＣチェック回路１５２による誤り検出の結果が、制御部１５１に出力されることを阻止できる。
【００８７】
ここで、制御部１５１とＢＣＣチェック回路１５２との接続を遮断しない場合、異常データ３０３に対するＢＣＣチェック回路１５２の応答（エラー有り応答）が制御部１５１に出力されることになる。すると、制御部１５１は、通常のＤＭＡ転送時と同様に、ＤＭＡ転送の動作を中断してＣＰＵ１１０に誤り有りを通知し、ＣＰＵ１１０によるリセットおよび再転送指示を待つことになる。この一連の処理には時間を要し、システム性能の低下の要因になる。
【００８８】
そこで、パトロールブロック１５３は、上記のように、ＢＣＣチェック回路１５２による誤り検出の結果が、制御部１５１に出力されることを阻止することで、制御部１５１からＣＰＵ１１０へ余計な通知が行われることを防げる。その結果、ＣＰＵ１１０による誤りエラー有りの場合の後処理を誘発させずに済む。よって、システム性能の低下を一層抑えられる。
【００８９】
また、ＣＰＵ１１０により、診断情報に含まれる時刻情報に基づいて、「エラー無し」、「エラー有り」の応答が時系列に繰り返されることを確認することで、パトロールブロック１５３により正常に診断が行われていることを適切に判断することができる。特に、ＢＣＣチェック回路１５２またはパトロールブロック１５３が適切に動作していない場合、診断情報の通知があるものの、診断情報に含まれる時刻情報が更新されずに、ＣＰＵ１１０に通知されることもある。ＣＰＵ１１０は、時刻情報を確認することで、ＢＣＣチェック回路１５２やパトロールブロック１５３のこうした異常を適切に検出できる。
【００９０】
このように、ＤＭＡコントローラ１５０によれば、誤り検出機能の診断を効率化できる。また、制御部１５１の既存の機能への影響を抑えて（例えば、制御部１５１を変更せずに）、診断機能をＤＭＡコントローラ１５０に組み込めるという利点もある。
【００９１】
更に、パトロールブロック１５３は、ＢＣＣチェック回路１５２の動作の診断を完了すると、制御部１５１とＢＣＣチェック回路１５２とを再接続することで、診断後には、通常のＤＭＡ転送を適切に行えるようにする。
【００９２】
なお、上記の例では、ＣＰＵ１１０が診断情報に基づいて、ＤＭＡコントローラ１５０における誤り検出機能に異常があるか否かを判定することとしたが、当該判定をパトロールブロック１５３により実行してもよい。そこで、以下では、パトロールブロック１５３により誤り検出機能に異常があるか否かを判定する例を説明する。
【００９３】
図８は、ファームウェアの他の処理例を示すフローチャートである。
（Ｓ４０）ＣＰＵ１１０は、ＤＭＡコントローラ１５０からＦＡＴＡＬ通知があるか否かを判定する。ＦＡＴＡＬ通知がある場合、ステップＳ４１に処理が進む。ＦＡＴＡＬ通知がない場合、ステップＳ４０に進む。ここで、ＦＡＴＡＬ通知は、パトロールブロック１５３において、ＢＣＣチェック回路１５２の誤り検出機能に異常が検出された場合に、パトロールブロック１５３からＣＰＵ１１０に出力される通知である。
【００９４】
（Ｓ４１）ＣＰＵ１１０は、ＤＭＡコントローラ１５０に対するＦＡＴＡＬ処理を実行する。そして、ＣＰＵ１１０により実行されるファームウェアの処理が終了する。
図９は、ＤＭＡＣの他の処理例を示すフローチャートである。
【００９５】
（Ｓ５０）パトロールブロック１５３は、診断用データ（正常／異常）を用意する。
（Ｓ５１）パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル（ＩＤＬＥ）状態であるか否かを判定する。アイドル状態の場合、ステップＳ５２に処理が進む。アイドル状態でない場合、ステップＳ５１に進み、パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態となるまで待機する。
【００９６】
（Ｓ５２）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを切り離す。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する。
【００９７】
（Ｓ５３）パトロールブロック１５３は、ＢＣＣチェック回路１５２に正常データ３０１およびＢＣＣ３０２を含む第１診断用データを転送する。
（Ｓ５４）パトロールブロック１５３は、ＢＣＣチェック回路１５２からＢＣＣチェック結果を受信する。
【００９８】
（Ｓ５５）パトロールブロック１５３は、ＢＣＣチェック結果が「エラー無し」を示すか否かを判定する。「エラー無し」を示す場合、ステップＳ５６に処理が進む。「エラー無し」でない場合（すなわち、「エラー有り」または「ＢＣＣチェック結果無し」の場合）、ステップＳ６５に処理が進む。ここで、「エラー無し」が応答される場合、第１診断用データを入力したときのＢＣＣチェック回路１５２に期待される動作が行われていることになる。「エラー無し」が応答されない場合、第１診断用データを入力したときのＢＣＣチェック回路１５２に期待される動作が行われていないことになる。
【００９９】
（Ｓ５６）パトロールブロック１５３は、所定時間（例えば、３秒間）待機する。
（Ｓ５７）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを接続する。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続が遮断された状態を解除し、制御部１５１が再びＢＣＣチェック回路１５２を利用してＤＭＡ転送を実行可能にする。
【０１００】
（Ｓ５８）パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル（ＩＤＬＥ）状態であるか否かを判定する。アイドル状態の場合、ステップＳ５９に処理が進む。アイドル状態でない場合、ステップＳ５８に処理が進み、パトロールブロック１５３は、ＤＭＡコントローラ１５０がアイドル状態となるまで待機する。
【０１０１】
（Ｓ５９）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを切り離す。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続を遮断する。
【０１０２】
（Ｓ６０）パトロールブロック１５３は、ＢＣＣチェック回路１５２に異常データ３０３およびＢＣＣ３０４を含む第２診断用データを転送する。
（Ｓ６１）パトロールブロック１５３は、ＢＣＣチェック回路１５２からＢＣＣチェック結果を受信する。
【０１０３】
（Ｓ６２）パトロールブロック１５３は、ＢＣＣチェック結果が「エラー有り」を示すか否かを判定する。「エラー有り」を示す場合、ステップＳ６３に処理が進む。「エラー有り」でない場合（すなわち、「エラー無し」または「ＢＣＣチェック結果無し」の場合）、ステップＳ６５に処理が進む。ここで、「エラー有り」が応答される場合、第２診断用データを入力したときのＢＣＣチェック回路１５２に期待される動作が行われていることになる。「エラー有り」が応答されない場合、第２診断用データを入力したときのＢＣＣチェック回路１５２に期待される動作が行われていないことになる。
【０１０４】
（Ｓ６３）パトロールブロック１５３は、所定時間（例えば、３秒間）待機する。
（Ｓ６４）パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２とを接続する。すなわち、パトロールブロック１５３は、制御部１５１とＢＣＣチェック回路１５２との接続が遮断された状態を解除し、制御部１５１が再びＢＣＣチェック回路１５２を利用してＤＭＡ転送を実行可能にする。そして、ステップＳ５１に処理が進む。
【０１０５】
（Ｓ６５）パトロールブロック１５３は、ＣＰＵ１１０へＦＡＴＡＬ通知を出力する。そして、ＤＭＡコントローラ１５０の処理が終了する。
すなわち、パトロールブロック１５３は、正常データまたは異常データとＢＣＣとをＢＣＣチェック回路１５２に入力し、ＢＣＣチェック回路１５２による入力データに対する誤り検出結果が適切であるか否かを判定する。パトロールブロック１５３は、適切でない場合に異常を示す診断結果をＣＰＵ１１０に通知する。
【０１０６】
このように、パトロールブロック１５３が、ＢＣＣチェック結果により、ＢＣＣチェック回路１５２による誤り検出機能の異常を判定してもよい。このようにすると、ＣＰＵ１１０による判定処理を一部省略できるので、ＢＣＣチェック回路１５２の診断に伴うＣＰＵ１１０の負荷を一層低減し、システム性能の低下を抑えることができる。
【０１０７】
なお、ステップＳ５５，Ｓ６２では、パトロールブロック１５３は、診断用データに基づくＢＣＣチェック結果をＢＣＣチェック回路１５２から所定時間内に得られない場合にも、ステップＳ６５に処理を進めてもよい。
【０１０８】
次に、パトロールブロック１５３を備えていないＤＭＡコントローラにおけるＢＣＣチェック回路の診断の例（比較例）を説明する。
図１０は、ＢＣＣチェック回路の診断の比較例を示す図である。
【０１０９】
ＤＭＡコントローラ２５０は、制御部２５１およびＢＣＣチェック回路２５２を有する。ＤＭＡコントローラ２５０は、パトロールブロック１５３を有していないことがＤＭＡコントローラ１５０と異なる。制御部２５１は、制御部１５１と同様の機能を有する。ＢＣＣチェック回路２５２は、ＢＣＣチェック回路１５２と同様の機能を有する。
【０１１０】
比較例では、ＣＰＵ１１０が実行するファームウェアの機能によりＢＣＣチェック回路２５２の診断を行う。例えば、ＣＰＵ１１０は、次の手順により、ＢＣＣチェック回路２５２の診断を行う。
【０１１１】
まず、ＣＰＵ１１０は、診断用データをＲＡＭ１２０に用意する（ステップＳＴ１）。診断用データは、フラッシュメモリ１３０に予め格納されてもよいし、ＣＰＵ１１０により既存データから作成されてもよい。診断用データは、第１診断用データと第２診断用データとを含む。第１診断用データは、正常データ４０１とＢＣＣ４０２との組である。第２診断用データは、異常データ４０３とＢＣＣ４０４との組である。正常データ４０１および異常データ４０３それぞれのサイズは、５１２バイト（Bytes）である。ＢＣＣ４０２，４０４それぞれのサイズは、８バイトである。
【０１１２】
例えば、ＢＣＣ４０２は、正常データ４０１に対する所定の演算により生成される。また、例えば、異常データ４０３は、正常データ４０１の少なくとも一部を改変することで生成される。ＢＣＣ４０４は、例えば、ＢＣＣ４０２と同一とする。
【０１１３】
次に、ＣＰＵ１１０は、ＤＭＡコントローラ２５０を起動し、ＤＭＡコントローラ２５０に診断用データを入力する（ステップＳＴ２）。ＢＣＣチェック回路２５２は、診断用データに対するＢＣＣチェック処理を行う（ステップＳＴ３）。制御部２５１は、通常のＤＭＡ転送を実行するときと同様に、ＢＣＣチェック回路２５２から、ＢＣＣチェック処理に応じたＢＣＣチェック結果を取得し、ＢＣＣチェック結果をＣＰＵ１１０に通知する（ステップＳＴ４）。そして、ＣＰＵ１１０は、ＢＣＣチェック結果に基づいて、ＤＭＡコントローラ２５０の誤り検出機能が適切に動作しているか否かを判定する。
【０１１４】
ステップＳＴ４では、正常データ４０１を含む第１診断用データのＢＣＣチェック結果は、「エラー無し」であるため、制御部２５１は、正常データ４０１のＤＭＡ転送（例えば、ＲＡＭ１２０のある領域から別領域へのＤＭＡ転送）を実行する。ここで、ＤＭＡ転送された正常データ４０１は、診断用のデータであるため、その後は破棄されてもよい。
【０１１５】
また、ステップＳＴ４では、異常データ４０３を含む第２診断用データのＢＣＣチェック結果が「エラー有り」を示すことになる。このため、制御部２５１は、ＤＭＡ転送を中断する。ＣＰＵ１１０は、異常データ４０３に対するＢＣＣチェック結果が「エラー有り」であることを確認すると、ＤＭＡコントローラ２５０に対するエラー時の後処理（エラー復旧処理）を行うことになる。具体的には次の通りである。
【０１１６】
図１１は、ＢＣＣエラー検出時動作の比較例を示す図である。
ＣＰＵ１１０は、異常データ４０３およびＢＣＣ４０４を含む第２診断用データをＲＡＭ１２０からＤＭＡコントローラ２５０に転送する（ステップＳＴ１１）。ＢＣＣチェック回路２５２は、異常データ４０３およびＢＣＣ４０４に基づいて、ＢＣＣエラーを検出し、制御部２５１にエラー通知を行う（ステップＳＴ１２）。この場合、制御部２５１は、ＤＭＡ転送を中断し、異常データ４０３のＤＭＡ転送を行わずに、ＣＰＵ１１０にエラー通知を行う。ＣＰＵ１１０は、ＤＭＡ転送を中断した状態となっている制御部２５１のエラー復旧処理（例えば、制御部２５１における所定のレジスタのクリアなどのエラー刈り取り）を実行する（ステップＳＴ１３）。
【０１１７】
図１２は、ＢＣＣエラー検出時動作の例を示す図である。
制御部２５１とＢＣＣチェック回路２５２との通常のＤＭＡ転送の例を説明する。なお、制御部２５１とＢＣＣチェック回路２５２について説明するが、制御部１５１およびＢＣＣチェック回路１５２との接続が遮断されていない場合（制御部１５１により通常のＤＭＡ転送を行う場合）にも、同様の挙動となる。
【０１１８】
ＲＡＭ１２０は、転送元メモリ領域１２１および転送先メモリ領域１２２を有する。転送元メモリ領域１２１は、ＲＡＭ１２０のＤＭＡ転送元の記憶領域である。転送先メモリ領域１２２は、ＲＡＭ１２０のＤＭＡ転送先の記憶領域である。
【０１１９】
例えば、転送元メモリ領域１２１には、データブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６が格納されている。データブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６それぞれは、ＢＣＣが付加されている（図示を省略している）。ＤＭＡコントローラ２５０は、転送元メモリ領域１２１から転送先メモリ領域１２２へのデータブロックＢ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５，Ｂ６のＤＭＡ転送を行う。
【０１２０】
まず、データブロックＢ１は正常であり、ＢＣＣチェック回路２５２によるＢＣＣチェック結果が「エラー無し」（ＯＫ）であるとする。すると、ＤＭＡコントローラ２５０は、データブロックＢ１を、転送元メモリ領域１２１から転送先メモリ領域１２２へＤＭＡ転送する。
【０１２１】
次に、データブロックＢ２は、正常であり、ＢＣＣチェック回路２５２によるＢＣＣチェック結果が「エラー無し」（ＯＫ）であるとする。すると、ＤＭＡコントローラ２５０は、データブロックＢ２を転送元メモリ領域１２１から転送先メモリ領域１２２へＤＭＡ転送する。
【０１２２】
次に、データブロックＢ３は、正常であり、ＢＣＣチェック回路２５２によるＢＣＣチェック結果が「エラー無し」（ＯＫ）であるとする。すると、ＤＭＡコントローラ２５０は、データブロックＢ３を転送元メモリ領域１２１から転送先メモリ領域１２２へＤＭＡ転送する。
【０１２３】
そして、データブロックＢ４は、異常であり、ＢＣＣチェック回路２５２によるＢＣＣチェック結果が「エラー有り」（ＮＧ）であるとする。すると、ＤＭＡコントローラ２５０は、データブロックＢ４およびそれ以降のデータブロックを転送せずに、ＤＭＡ転送を中止し、ＣＰＵ１１０にＢＣＣエラー有りを通知する。
【０１２４】
ＣＰＵ１１０のファームウェアは、制御部１１０のリセットと再転送指示とをＤＭＡコントローラ１５０に対して行う。これにより、ＤＭＡコントローラ１５０は、再びＤＭＡ転送を行えるようになる。次に、このようなファームウェアの比較例の処理手順を説明する。ＣＰＵ１１０は、比較例のファームウェアを実行することで、下記の手順を実行し得る。
【０１２５】
図１３は、ファームウェアの処理の比較例を示すフローチャートである。
（Ｓ７０）ＣＰＵ１１０は、診断用データ（正常／異常）をＲＡＭ１２０に用意する。
（Ｓ７１）ＣＰＵ１１０は、ＤＭＡコントローラ２５０を起動し、第１診断用データ（正常データ４０１およびＢＣＣ４０２）をＲＡＭ１２０からＤＭＡコントローラ２５０に転送する。
【０１２６】
（Ｓ７２）ＣＰＵ１１０は、ＢＣＣチェック回路２５２による正常データ４０１に対するＢＣＣチェック結果を制御部２５１から取得する。ＣＰＵ１１０は、ＢＣＣチェック結果が「エラー無し」を示すか否かを判定する。「エラー無し」を示す場合、ステップＳ７３に処理が進む。「エラー有り」を示す場合、ステップＳ７８に処理が進む。
【０１２７】
（Ｓ７３）ＣＰＵ１１０は、所定時間（例えば、３秒間）待機する。
（Ｓ７４）ＣＰＵ１１０は、ＤＭＡコントローラ２５０を起動し、第２診断用データ（異常データ４０３およびＢＣＣ４０４）をＲＡＭ１２０からＤＭＡコントローラ２５０に転送する。
【０１２８】
（Ｓ７５）ＣＰＵ１１０は、ＢＣＣチェック回路２５２による異常データ４０３に対するＢＣＣチェック結果を制御部２５１から取得する。ＣＰＵ１１０は、ＢＣＣチェック結果が「エラー有り」を示すか否かを判定する。「エラー有り」を示す場合、ステップＳ７６に処理が進む。「エラー無し」を示す場合、ステップＳ７８に処理が進む。
【０１２９】
（Ｓ７６）ＣＰＵ１１０は、ＤＭＡコントローラ２５０に対するＤＭＡエラー復旧処理を実行する。ＤＭＡエラー復旧処理は、前述のように、制御部２５１の所定のレジスタにアクセスして、エラー状態を解除する処理（リセット）や、ＤＭＡコントローラ２５０に対する再転送指示などを含む。
【０１３０】
（Ｓ７７）ＣＰＵ１１０は、所定時間（例えば、３秒間）待機する。そして、ステップＳ７１に処理が進む。
（Ｓ７８）ＣＰＵ１１０は、ＤＭＡコントローラ２５０における誤り検出機能に異常があるとみなして、ＤＭＡコントローラ２５０に対するＦＡＴＡＬ処理を実行する。そして、ＣＰＵ１１０により実行される比較例のファームウェアの処理が終了する。
【０１３１】
ここで、ステップＳ７１の所要時間は、例えば、４μｓ（micro seconds）程度である。ステップＳ７４の所要時間は、例えば、４μｓ程度である。ステップＳ７６の所要時間は、例えば、５０μｓ程度である。ＤＭＡコントローラ２５０（およびＤＭＡコントローラ１５０）は、ＢＣＣエラー発生時に、ＢＣＣチェックで「エラー無し」のデータブロックのみを転送し、「エラー有り」のデータブロックを転送しない仕組みをもつ。これは、異常データをＲＡＭ１２０へ書き込まないようにするためである。その際、ＤＭＡコントローラ２５０（およびＤＭＡコントローラ１５０）は、ＢＣＣエラー検出状態（停止状態）となり、ステップＳ７６のように復旧処理（約５０μｓ程度）を行うことになり、その間、通常運用におけるＤＭＡ転送処理を行えない。
【０１３２】
これに対して、ＤＭＡコントローラ１５０は、ＤＭＡコントローラ１５０内部でパトロールブロック１５３によりＢＣＣチェック回路１５２の診断を自己パトロールにより行う。このため、ＤＭＡコントローラ２５０のように、自己パトロール機能をもたずに、ＣＰＵ１１０のファームウェアで診断を行うよりも、ＣＰＵ１１０の負荷を軽減することができる。また、図１３で例示したステップＳ７１，Ｓ７４，Ｓ７６のような遅延が発生しないので、通常運用のシステム性能の低下を抑えられる。更に、図１０のようにＲＡＭ１２０に診断用データを配置しなくてもよく、ＲＡＭ１２０の記憶領域を節約できる利点もある。
【０１３３】
以上の第１，第２の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  データのＤＭＡ転送を制御する制御回路と、前記データに付加されたコードに基づく前記データの誤り検出を行い前記誤り検出の結果を前記制御回路に出力する誤り検出回路と、前記制御回路と前記誤り検出回路との接続を遮断して前記誤り検出回路の動作を診断する診断回路と、を備えるＤＭＡコントローラと、
前記診断回路による診断結果に応じて異常時処理を実行する上位コントローラと、
を有するデータ処理装置。
【０１３４】
（付記２）  前記診断回路は、診断用のデータと前記コードとを前記誤り検出回路に入力し、前記誤り検出回路による前記診断用のデータに対する誤り検出結果が適切であるか否かを判定し、適切でない場合に異常を示す前記診断結果を前記上位コントローラに通知する、
付記１記載のデータ処理装置。
【０１３５】
（付記３）  前記診断回路は、前記診断結果に時刻を示す時刻情報を付加して前記上位コントローラに通知し、
前記上位コントローラは、前記時刻情報に基づいて、前記誤り検出回路の異常を検出する、
付記１記載のデータ処理装置。
【０１３６】
（付記４）  前記診断回路は、前記誤り検出回路が正常である場合に誤り無しと判定される第１データと誤り有りと判定される第２データとを交互に前記誤り検出回路に入力し、前記誤り検出回路から順次応答される誤り検出結果を含む前記診断結果を前記上位コントローラに通知し、
前記上位コントローラは、前記誤り検出結果により示される誤り無し、および、誤り有りの応答の順序性に基づいて、前記誤り検出回路の異常を検出する、
付記３記載のデータ処理装置。
【０１３７】
（付記５）  前記診断回路は、前記誤り検出回路の動作の診断を完了すると、前記制御回路と前記誤り検出回路とを再接続する、
付記１記載のデータ処理装置。
【０１３８】
（付記６）  前記コードは、ＢＣＣである、
付記１記載のデータ処理装置。
（付記７）  データのＤＭＡ転送を制御する制御回路と前記データに付加されたコードに基づく前記データの誤り検出を行い前記誤り検出の結果を前記制御回路に出力する誤り検出回路とを有するＤＭＡコントローラの診断回路が、前記制御回路と前記誤り検出回路との接続を遮断して前記誤り検出回路の動作を診断し、
上位コントローラが、前記診断回路による診断結果に応じて異常時処理を実行する、
診断方法。
【０１３９】
（付記８）  前記診断回路は、診断用のデータと前記コードとを前記誤り検出回路に入力し、前記誤り検出回路による前記診断用のデータに対する誤り検出結果が適切であるか否かを判定し、適切でない場合に異常を示す前記診断結果を前記上位コントローラに通知する、
付記７記載の診断方法。
【０１４０】
（付記９）  前記診断回路は、前記診断結果に時刻を示す時刻情報を付加して前記上位コントローラに通知し、
前記上位コントローラは、前記時刻情報に基づいて、前記誤り検出回路の異常を検出する、
付記７記載の診断方法。
【０１４１】
（付記１０）  前記診断回路は、前記誤り検出回路が正常である場合に誤り無しと判定される第１データと誤り有りと判定される第２データとを交互に前記誤り検出回路に入力し、前記誤り検出回路から順次応答される誤り検出結果を含む前記診断結果を前記上位コントローラに通知し、
前記上位コントローラは、前記誤り検出結果により示される誤り無し、および、誤り有りの応答の順序性に基づいて、前記誤り検出回路の異常を検出する、
付記９記載の診断方法。
【０１４２】
（付記１１）  前記診断回路は、前記誤り検出回路の動作の診断を完了すると、前記制御回路と前記誤り検出回路とを再接続する、
付記７記載の診断方法。
【０１４３】
（付記１２）  前記コードは、ＢＣＣである、
付記７記載の診断方法。
【符号の説明】
【０１４４】
１  データ処理装置
１０  ＤＭＡコントローラ
１１  制御回路
１２  誤り検出回路
１３  診断回路
２０  上位コントローラ
３０  メモリ
【図１】
2020021313.tif 000003
【図２】
2020021313.tif 000004
【図３】
2020021313.tif 000005
【図４】
2020021313.tif 000006
【図５】
2020021313.tif 000007
【図６】
2020021313.tif 000008
【図７】
2020021313.tif 000009
【図８】
2020021313.tif 000010
【図９】
2020021313.tif 000011
【図１０】
2020021313.tif 000012
【図１１】
2020021313.tif 000013
【図１２】
2020021313.tif 000014
【図１３】
2020021313.tif 000015