(57)【要約】  本願の開示するＣＰＵ（１００）は、命令制御部（１２１）とＩ２Ｃコマンド制御部（１１２）とＩ２Ｃコマンド実行部（１２２）とを有する。命令制御部（１２１）は、プログラムに含まれる、制御命令を生成するための制御命令生成命令をデコードする。Ｉ２Ｃコマンド制御部（１１２）は、命令制御部（１２１）がデコードした制御命令生成命令が、故障フラグラッチ（１２３）からの状態情報を読み出す状態情報読出命令を生成する制御命令生成命令である場合に、状態情報読出命令を生成する。Ｉ２Ｃコマンド実行部（１２２）は、Ｉ２Ｃコマンド制御部（１１２）が生成した状態情報読出命令に基づき、故障フラグラッチ（１２３）から状態情報を読出して、プログラムから読出し可能なＩ２Ｃレシーブレジスタ（１１５）に格納する。
2012172682.tif 000002
【特許請求の範囲】
【請求項１】
回路部を有する演算処理装置において、
前記回路部の状態を示す状態情報を保持する状態情報保持部と、
プログラムに含まれる、制御命令を生成するための制御命令生成命令をデコードする命令制御部と、
前記命令制御部がデコードした制御命令生成命令が、前記状態情報保持部からの状態情報を読み出す状態情報読出命令を生成する制御命令生成命令である場合に、状態情報読出命令を生成する命令生成部と、
前記命令生成部が生成した状態情報読出命令に基づき、前記状態情報保持部から状態情報を読出して、プログラムから読出し可能なレジスタ部に格納する命令実行部と
を有することを特徴とする演算処理装置。
【請求項２】
前記命令生成部は、前記命令制御部がデコードした制御命令生成命令が、前記状態情報保持部が保持する状態情報を指定された情報に書き換える状態情報書換命令を生成する制御命令生成命令である場合に、前記状態情報書換命令を生成し、
前記命令実行部は、前記命令生成部が生成した状態情報書換命令に基づき、前記状態情報保持部が保持する状態情報を、指定された情報に書き換えることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置はさらに、
前記状態情報保持部が保持する状態情報の更新を抑止するロック情報を保持するロック情報保持部を有し、
前記状態情報保持部は、前記ロック情報保持部がロック情報を保持している間は、保持する状態情報を更新せずに保持し続けることを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記演算処理装置が、
命令を読み出して実行するコア部、Ｌ２キャッシュの制御を実行するＬ２キャッシュ制御部、自装置と接続される入出力装置との情報の入出力を制御する入出力制御部、メモリの制御を実行するメモリ制御部及び、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部それぞれに接続される共通部を前記回路部として有し、
前記コア部は、前記命令制御部と前記レジスタ部とを有し、
前記共通部は、前記命令生成部を有し、
前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部それぞれは、前記命令実行部と前記状態情報保持部とを有する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記命令生成部は、前記状態情報読出命令を生成するとともに、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部のいずれの命令実行部に前記状態情報読出命令を送信するかを決定し、決定した命令実行部に前記生成した状態情報読出命令を送信することを特徴とする請求項４に記載の演算処理装置。
【請求項６】
回路部を有する演算処理装置の制御方法において、
前記演算処理装置が有する命令制御部が、プログラムに含まれ、前記回路部の状態を示す状態情報を読み出す制御命令を生成する制御命令生成命令をデコードし、
前記演算処理装置が有する命令生成部が、前記命令制御部がデコードした制御命令生成命令に基づき、状態情報読出命令を生成し、
前記演算処理装置が有する命令実行部が、前記命令生成部が生成した状態情報読出命令に基づき、前記回路部の状態を示す状態情報を保持する状態情報保持部から状態情報を読出して、プログラムから読出し可能なレジスタ部に格納する
ことを特徴とする演算処理装置の制御方法。
【請求項７】
前記演算処理装置の制御方法はさらに、
前記命令生成部が、前記命令制御部がデコードした制御命令生成命令に基づき、前記状態情報保持部が保持する情報を、指定された情報に書き換える状態情報書換命令を生成し、
前記命令実行部が、前記命令生成部が生成した状態情報書換命令に基づき、前記前記状態情報保持部が保持する情報を、指定された情報に書き換える
ことを特徴とする請求項６記載の演算処理装置の制御方法。
【請求項８】
前記演算処理装置の制御方法において、
前記演算処理装置はさらに、
前記状態情報保持部が保持する状態情報の更新を抑止するロック情報を保持するロック情報保持部を有し、
前記状態情報保持部は、前記ロック情報保持部がロック情報を保持している間は、保持する状態情報を更新せずに保持し続ける
ことを特徴とする請求項６記載の演算処理装置の制御方法。
【請求項９】
前記演算処理装置の制御方法において、
前記演算処理装置はさらに、
命令を読み出して実行するコア部、Ｌ２キャッシュの制御を実行するＬ２キャッシュ制御部、自装置と接続される入出力装置との情報の入出力を制御する入出力制御部、メモリの制御を実行するメモリ制御部及び、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部それぞれに接続される共通部を前記回路部として有し、
前記コア部が有する前記命令制御部が、制御命令生成命令をデコードし、
前記共通部が有する前記命令生成部が、前記命令制御部がデコードした制御命令生成命令に基づき、状態情報読出命令を生成し、
前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部それぞれが有する命令実行部が、前記状態情報読出命令に基づき、自身を含む回路部が有する前記状態情報保持部から状態情報を読出して、前記コア部が有する前記レジスタ部に格納する
ことを特徴とする請求項６に記載の演算処理装置の制御方法。
【請求項１０】
前記演算処理装置の制御方法において、
前記命令生成部は、前記状態情報読出命令を生成するとともに、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部のいずれの命令実行部に前記状態情報読出命令を送信するかを決定し、決定した命令実行部に前記生成した状態情報読出命令を送信することを特徴とする請求項９に記載の演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
従来、演算処理装置であるＣＰＵ（Central  Processing  Unit）内部のハードウェア情報は、サービスプロセッサがＣＰＵにアクセスすることによって読み出される。図１０を用いて、従来技術に係るＣＰＵ内部のハードウェア情報の読み出し動作を説明する。【０００３】
図１０は、従来技術に係るＣＰＵ内部のハードウェア情報の読み出し動作を示す図である。図１０に示すように、ＣＰＵ９００は、コア部９０１、コア部９０２、共通部９０３、メモリ制御部９０４、テスト制御回路９０５を有する。また、ＣＰＵ９００は、サービスプロセッサ（Service  Processor）９１０とバス９２０を介して接続されている。【０００４】
コア部９０１は、内部に記憶回路であるＦＦ（Flip  Flop）９０１ａ、９０１ｂ、９０１ｃ、９０１ｄを有する。コア部９０２は、内部にＦＦ９０２ａ、９０２ｂ、９０２ｃ、９０２ｄを有する。共通部９０３は、内部にＦＦ９０３ａ、９０３ｂ、９０３ｃ、９０３ｄを有する。また、メモリ制御部９０４は、内部にＦＦ９０４ａ、９０４ｂ、９０４ｃ、９０４ｄを有する。これらのＦＦは、シリアルに接続されてスキャンチェーンを形成する。【０００５】
また、ＣＰＵ９００の内部に故障が発生した場合、ＦＦには故障箇所を示す故障フラグが格納される。そして、テスト制御回路９０５は、サービスプロセッサ９１０からアクセスされた場合、スキャンチェーンを使用して、ＦＦに格納される故障フラグを読み出し、読み出した故障フラグをサービスプロセッサ９１０に出力する。そして、サービスプロセッサ９１０は、読み出した故障フラグを用いて故障箇所の解析を実行する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−４４３６１号公報
【特許文献２】特開２００９−２３６８７９号公報
【特許文献３】特開平６−１３９１１２号公報
【特許文献４】特開２０１０−２１８３６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来の技術では、ＯＳ（Operating  System）などのプログラムからＣＰＵ内部のハードウェア情報にアクセスすることができないという課題があった。【０００８】
具体的には、ＣＰＵ内部のハードウェア情報は、サービスプロセッサを介して取得される。しかし、ＣＰＵのユーザは、サービスプロセッサへのアクセスを許可されていない。このため、ＯＳなどのソフトウェアは、ＣＰＵ内部のハードウェア情報にアクセスすることができない。【０００９】
１つの側面では、サービスプロセッサを用いずに、プログラムからＣＰＵ内部のハードウェア情報にアクセスすることができる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では回路部を有する演算処理装置である。演算処理装置は、回路部の状態を示す状態情報を保持する。また、演算処理装置は、プログラムに含まれる、制御命令を生成するための制御命令生成命令をデコードする。また、演算処理装置は、デコードした制御命令生成命令が、状態情報を読み出す状態情報読出命令を生成する制御命令生成命令である場合に、状態情報読出命令を生成する。そして、演算処理装置は、生成した状態情報読出命令に基づき、状態情報を読出して、プログラムから読出し可能なレジスタ部に格納する。
【発明の効果】
【００１１】
サービスプロセッサを用いずに、プログラムからＣＰＵ内部のハードウェア情報にアクセスすることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係るＣＰＵの構成を示すブロック図である。
【図２】図２は、Ｉ２Ｃコマンド実行部の構成を示すブロック図である。
【図３】図３は、故障フラグラッチの構成を示すブロック図である。
【図４Ａ】図４Ａは、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』のデータパターンを示す図である。
【図４Ｂ】図４Ｂは、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』のデータパターンを示す図である。
【図５】図５は、ＣＰＵにおける故障フラグの読み出し動作を示す図である。
【図６】図６は、故障フラグラッチにおける動作を説明する図である。
【図７】図７は、シフトレジスタの動作を説明する図である。
【図８】図８は、命令制御部によるＡＳＩコマンド発行処理の処理手順を示すフローチャートである。
【図９】図９は、Ｉ２Ｃコマンド実行部による故障フラグ読み出し処理の処理手順を示すフローチャートである。
【図１０】図１０は、従来技術に係るＣＰＵ内部のハードウェア情報の読み出し動作を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１４】
実施例１では、図１から図９を用いて、ＣＰＵの構成、処理動作、処理手順、効果などについて説明する。【００１５】
［ＣＰＵの構成］
図１を用いて、実施例１に係るＣＰＵの構成を説明する。図１は、実施例１に係るＣＰＵの構成を示すブロック図である。図１に示すように、ＣＰＵ１００は、サービスプロセッサ１０とＩ２Ｃ（Inter-Integrated  Circuit、登録商標、以下同様）１０１を介して接続されている。なお、ＣＰＵ１００とサービスプロセッサ１０との接続はＩ２Ｃに限定されるものではなく、ＳＰＩ（Serial  Peripheral  Interface、登録商標）、ＭｉｃｒｏＷｉｒｅ（登録商標）、ＩＥＥＥ１１４９．１で規定されるＪＴＡＧ（Joint  Test  Architecture  Group）などの他のバスであってもよい。【００１６】
サービスプロセッサ１０は、ＣＰＵ１００とは独立に動作し、ＣＰＵ１００の制御を行うシステム制御装置である。例えば、サービスプロセッサ１０は、ＣＰＵ１００内の動作状況を監視したり、ＣＰＵ１００内の動作履歴を取得したりして、ＣＰＵ１００の動作が正常であるか否かを診断する。【００１７】
ＣＰＵ１００は、共通部１１０と、コア部１２０と、Ｌ２キャッシュ制御部１３０と、入出力制御部１４０と、メモリ制御部１５０とを有する。また、以下の説明では、コア部１２０、Ｌ２キャッシュ制御部１３０、入出力制御部１４０、メモリ制御部１５０のそれぞれを一般化して称する場合には、機能ブロックと適宜記載する。また、共通部１１０、コア部１２０、Ｌ２キャッシュ制御部１３０、入出力制御部１４０、メモリ制御部１５０のそれぞれを一般化して称する場合には、回路と適宜記載する。なお、ＣＰＵ１００が有するコア部の数はこれに限定されるものではなく、任意に変更可能である。【００１８】
共通部１１０は、Ｉ２Ｃ１０１によって、サービスプロセッサ１０と接続されている。また、共通部１１０は、Ｉ２Ｃ１０２によって、コア部１２０、Ｌ２キャッシュ制御部１３０、入出力制御部１４０、メモリ制御部１５０と接続されている。すなわち、共通部１１０は、Ｉ２Ｃ１０１及びＩ２Ｃ１０２によってサービスプロセッサ１０と各機能ブロックとを接続する。【００１９】
そして、共通部１１０は、コア部１２０から受信した代替メモリ空間であるＡＳＩ（Address  Space  Identifier）空間をアクセスするメモリアクセス命令であるＡＳＩ（Address  Space  Identifier）コマンドを解釈し、制御コマンドを生成する。そして、共通部１１０は、生成した制御コマンドを用いて、共通部１１０や各機能ブロックが有するハードウェア情報にアクセスする。また、共通部１１０は、サービスプロセッサ１０からもアクセスを受付け、共通部１１０や各機能ブロックが有するハードウェア情報にアクセスする。なお、ＡＳＩコマンドについては後述する。【００２０】
次に、共通部１１０の構成について説明する。図１に示すように、共通部１１０は、Ｉ２Ｃコマンド解釈部１１１とＩ２Ｃコマンド制御部１１２とＩ２Ｃコマンド実行部１１３と故障フラグラッチ１１４とＩ２Ｃレシーブレジスタ１１５とフラグフリーズレジスタ１１６とを有する。【００２１】
Ｉ２Ｃコマンド解釈部１１１は、後述する命令制御部１２１から受信したＡＳＩコマンドを解釈し、アクセスする機能ブロックやアクセスするレジスタなどのデータを生成して、Ｉ２Ｃコマンド制御部１１２に送信する。【００２２】
例えば、Ｉ２Ｃコマンド解釈部１１１は、後述する故障フラグラッチ１１４が保持する状態情報を指定された情報に書き換えるＡＳＩコマンドを命令制御部１２１から受信した場合、以下の処理を実行する。すなわち、Ｉ２Ｃコマンド解釈部１１１は、故障フラグラッチ１１４が保持する状態情報を指定された情報に書き換えるデータを生成する。そして、Ｉ２Ｃコマンド解釈部１１１は、生成したデータをＩ２Ｃコマンド制御部１１２に送信する。【００２３】
また、Ｉ２Ｃコマンド解釈部１１１は、故障フラグラッチ１１４が保持する状態情報を読み出すＡＳＩコマンドを命令制御部１２１から受信した場合、故障フラグラッチ１１４から状態情報を読み出すデータを生成する。そして、Ｉ２Ｃコマンド解釈部１１１は、生成したデータをＩ２Ｃコマンド制御部１１２に送信する。【００２４】
Ｉ２Ｃコマンド制御部１１２は、Ｉ２Ｃコマンド解釈部１１１からデータを受信し、受信したデータに基づいて制御コマンドを生成する。そして、Ｉ２Ｃコマンド制御部１１２は、後述するＩ２Ｃコマンド実行部１１３や各機能ブロックのＩ２Ｃコマンド実行部のうち指定されたＩ２Ｃコマンド実行部に生成した制御コマンドを送信する。なお、以降の説明では、Ｉ２Ｃコマンド制御部１１２が生成する制御コマンドをＩ２Ｃコマンドと適宜記載する。なお、Ｉ２Ｃコマンドは、データバスを介して接続される回路に対して送信される制御命令の一例である。【００２５】
例えば、Ｉ２Ｃコマンド制御部１１２は、Ｉ２Ｃコマンドを発行し、各機能ブロックのＩ２Ｃコマンド実行部に送信して、それぞれの設定レジスタの値の書き換え及び読み出しを行う。一例を挙げると、Ｉ２Ｃコマンド制御部１１２は、Ｉ２Ｃコマンドを発行して、後述するシフトレングスレジスタ１１３ｂにシフト数を設定する。【００２６】
また、Ｉ２Ｃコマンド制御部１１２は、命令制御部１２１によって故障フラグを回収するＡＳＩコマンドが発行された場合、故障フラグを回収するＩ２Ｃコマンドを生成し、指定されたＩ２Ｃコマンド実行部に対して生成したＩ２Ｃコマンドを送信する。【００２７】
Ｉ２Ｃコマンド実行部１１３は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、受信したＩ２Ｃコマンドに基づいて動作を実行する。例えば、Ｉ２Ｃコマンド実行部１１３は、Ｉ２Ｃコマンド制御部１１２によって指示されたレジスタを読み出し、読み出した結果をＩ２Ｃコマンド制御部１１２に転送する。一例を挙げると、Ｉ２Ｃコマンド実行部１１３は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１１４から故障フラグを読み出す。そして、Ｉ２Ｃコマンド実行部１１３は、読み出した故障フラグを後述するＩ２Ｃレシーブレジスタ１１５に転送する。【００２８】
また、Ｉ２Ｃコマンド実行部１１３は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１１４が保持する情報を指定された情報に書き換える。【００２９】
図２を用いて、Ｉ２Ｃコマンド実行部１１３の構成を説明する。図２は、Ｉ２Ｃコマンド実行部の構成を示すブロック図である。図２に示すように、Ｉ２Ｃコマンド実行部１１３は、ｓｈｉｆｔ−ｅｎｂ１１３ａ、シフトレングスレジスタ１１３ｂ、シフトレジスタ１１３ｃを有する。【００３０】
ｓｈｉｆｔ−ｅｎｂ１１３ａは、シフトレジスタ１１３ｃに保持されるデータをシフトさせることを許可するＩ２Ｃコマンド「ＲＥＡＤ-ＳＨＩＦＴ−ＲＥＧ」をＩ２Ｃコマンド制御部１１２から受信する。そして、ｓｈｉｆｔ−ｅｎｂ１１３ａは、受信したＩ２Ｃコマンド「ＲＥＡＤ−ＳＨＩＦＴ−ＲＥＧ」をｓｈｉｆｔ−ｅｎｂ信号に変換してシフトレジスタ１１３ｃに出力する。この結果、シフトレジスタ１１３ｃは、保持するデータをシフトさせる。【００３１】
シフトレングスレジスタ１１３ｂは、シフトレジスタ１１３ｃによるスキャンシフトのシフト数を保持する。ここで、シフトレングスレジスタ１１３ｂが保持するシフト数は、Ｉ２Ｃコマンド制御部１１２により送信されるＩ２Ｃコマンドによって設定される。例えば、故障フラグラッチ１１４から故障フラグを読み出す場合、シフトレングスレジスタ１１３ｂに設定された値は、故障フラグを読み出す故障フラグラッチ１１４が有するビット数と同数に設定される。言い換えると、故障フラグラッチ１１４に６４ビットのデータが保持されている場合、シフトレングスレジスタ１１３ｂの値は６４ビットに設定される。そして、シフトレングスレジスタ１１３ｂに設定された値は、シフトレジスタ１１３ｃに故障フラグをスキャンシフトにより１ビット読み出すごとに１つずつ減算される。【００３２】
シフトレジスタ１１３ｃは、ビット０〜ビット６３の６４ビットの故障フラグ専用のシフトレジスタであり、ｓｈｉｆｔ−ｅｎｂ１１３ａ、シフトレングスレジスタ１１３ｂと接続されている。また、シフトレジスタ１１３ｃのビット０は、故障フラグラッチ１１４の出力端と接続され、シフトレジスタ１１３ｃのビット６３は、故障フラグラッチ１１４の入力端と接続されている。【００３３】
シフトレジスタ１１３ｃは、ｓｈｉｆｔ−ｅｎｂ１１３ａからデータをシフトさせることを許可する信号であるｓｈｉｆｔ−ｅｎｂ信号を受信した場合に、故障フラグラッチ１１４から故障フラグを読み出し、読み出した故障フラグを保持する。そして、シフトレジスタ１１３ｃに格納されたデータは、Ｉ２Ｃレシーブレジスタ１１５に転送される。【００３４】
また、シフトレジスタ１１３ｃには、サービスプロセッサ１０から指定された値を保持するようにしてもよい。【００３５】
図１に戻り、故障フラグラッチ１１４は、回路の状態を示す状態情報を保持する。例えば、故障フラグラッチ１１４は、共通部１１０の故障状態を示す故障フラグを保持する。図３を用いて故障フラグラッチの構成を説明する。図３は、故障フラグラッチの構成を示すブロック図である。【００３６】
例えば、図３に示すように、故障フラグラッチ１１４は、複数のＦＦ（Flip  Flop）から形成されるｌｏｏｐ、ＥＲＲ＿ＬＶ１＿ｌｏｏｐ１、ＥＲＲ＿ＬＶ２＿ｌｏｏｐ１、ＥＲＲ＿ＬＶ２＿ｌｏｏｐ２を有する。【００３７】
ここで、故障フラグラッチ１１４が有する各ｌｏｏｐは、障害の程度に応じて使い分けられる。例えば、ＥＲＲ＿ＬＶ１は、システムの動作に影響をきたす重大な障害を示す障害に用いられ、ＥＲＲ＿ＬＶ２は、システムの動作に影響をきたさないマイナーエラーに用いられる。また、各ＦＦは、障害の種類に対応付けて用いられる。なお、障害を記憶するＦＦの数に応じてｌｏｏｐの数は決定され、ここでは、ＥＲＲ＿ＬＶ２は、ＥＲＲ＿ＬＶ２＿ｌｏｏｐ１及びＥＲＲ＿ＬＶ２＿ｌｏｏｐ２の２つのｌｏｏｐを有するものとして説明する。【００３８】
例えば、ＥＲＲ＿ＬＶ１＿ｌｏｏｐ１は、ＦＦ１１４ａ‐１、ＦＦ１１４ａ‐２、ＦＦ１１４ａ‐３、・・・、ＦＦ１１４ａ‐ｎを有する。また、ＥＲＲ＿ＬＶ２＿ｌｏｏｐ１は、ＦＦ１１４ｂ‐１、ＦＦ１１４ｂ‐２、ＦＦ１１４ｂ‐３、・・・、ＦＦ１１４ｂ‐ｎを有し、ＥＲＲ＿ＬＶ２＿ｌｏｏｐ２は、ＦＦ１１４ｃ‐１、ＦＦ１１４ｃ‐２、ＦＦ１１４ｃ‐３、・・・、ＦＦ１１４ｃ‐ｎを有する。なお、ここで、ｎは、任意の自然数である。【００３９】
Ｉ２Ｃレシーブレジスタ１１５は、Ｉ２Ｃコマンド実行部１１３のスキャンシフト制御によって読み出された６４ビットのデータを保持するレジスタである。Ｉ２Ｃレシーブレジスタ１１５に保持されるデータは、後述する命令制御部１２１がＡＳＩコマンドを発行することによってＯＳ等のプログラムに読み出すことができる。すなわち、Ｉ２Ｃレシーブレジスタ１１５は、ソフトウェアからアクセス可能なレジスタである。【００４０】
フラグフリーズレジスタ１１６は、故障フラグラッチ１１４や各機能ブロックが有する故障フラグラッチに保持される値の変更を許可するか否かを示す情報を保持する。フラグフリーズレジスタ１１６には、故障フラグラッチ１１４に保持される故障フラグの値の更新を抑制することを示す「１」、故障フラグラッチに保持される故障フラグの値の更新を許可することを示す「０」が格納される。すなわち、故障フラグラッチ１１４や各機能ブロックが有する故障フラグラッチは、フラグフリーズレジスタ１１６に「１」が格納されている間は、保持する状態情報を更新せずに保持し続ける。【００４１】
図１に戻り、コア部１２０は、命令制御部１２１と、Ｉ２Ｃコマンド実行部１２２と、故障フラグラッチ１２３とを有し、例えば、図示しないＬ１キャッシュから命令を読み出して実行する。【００４２】
命令制御部１２１は、コア部１２０が有する図示しないＬ１キャッシュから読み出した実行中のプログラムの命令をデコードし、デコードした命令を実行する。ここで、命令制御部１２１は、読み出した命令がＩ２Ｃコマンドの発行を指示するものであった場合、ＡＳＩコマンドを発行する。【００４３】
ここでは、ＡＳＩコマンドについて説明する。なお、ＡＳＩコマンドの詳細は、特開２０１０−２１８３６７号公報に詳細に記載されているので、ここでは、ＡＳＩコマンドについて簡潔に説明する。【００４４】
ＡＳＩコマンドは、ＡＳＩ空間を識別する８ビットのＡＳＩ空間番号とよばれる識別子を指定するコマンドである。また、このＡＳＩ空間番号は、仮想アドレスを物理アドレスに変換する動作を指定したり、ＣＰＵ１００が有するレジスタの読み書きを指定したりすることができる。【００４５】
本実施例において、ＡＳＩ空間番号を一つ新たに定義し、この新たに定義したＡＳＩ空間番号に対して２つの仮想アドレスを割り当てる。ＡＳＩコマンドは、この新たに割り当てたＡＳＩ空間番号と仮想アドレスとを指定することで、共通部１１０がＩ２Ｃコマンドを、指定された仮想アドレスへのアクセスをとして実行する。【００４６】
本実施例において、ＡＳＩコマンドは、『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』の２つの仮想アドレスを有する。『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』は、Ｉ２Ｃコマンドを発行する命令であり、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』は、発行したＩ２Ｃコマンドによる結果を読み出す命令である。以下では、ＡＳＩコマンドのデータパターンについて説明する。【００４７】
（ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ）
図４Ａを用いて、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』のデータパターンについて説明する。図４Ａは、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』のデータパターンを示す図である。図４Ａに示すように、『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』は、６４ビットデータのデータパターンを有しており、Ｉ２Ｃコマンドを発行する。【００４８】
ビット６３は、ＬＯＣＫビットであり、Ｉ２Ｃコマンドが実行中であることを示す。すなわち、ビット６３は、Ｉ２Ｃコマンドの競合を回避するための排他制御の指定を示す。【００４９】
ビット６２からビット５６は、ＬＯＣＫ＿ＩＤを示す。ＬＯＣＫ＿ＩＤは、Ｉ２Ｃコマンドを実行している機能ブロックを示す情報であり、各機能ブロックにあらかじめ指定されている値が格納される。【００５０】
ビット５５からビット４９は、Ｉ２Ｃコマンドのコードを示す。ビット４８は、Ｒｅａｄ／Ｗｒｉｔｅであり、レジスタの読みまたはレジスタへの書き込みを指定する情報が格納される。ビット４７からビット３２は、本実施例では未使用であるものとする。ビット３１からビット０は、Ｉ２Ｃコマンドへの引数を示す。【００５１】
なお、以下の説明で、例えば、ビット６２からビット５６のデータを示す場合、ｄａｔａ[６２：５６]として適宜記載する。【００５２】
また、以下の説明では、『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』コマンドのデータパターンの一部をａｓｉ＿ｃｍｄ＿ａｃｃｅｓｓ＿ｒｅｇ．ＬＯＣＫ、ａｓｉ＿ｃｍｄ＿ａｃｃｅｓｓ＿ｒｅｇ．ＬＯＣＫ＿ＩＤのように適宜記載する。【００５３】
（ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ）
次に、図４Ｂを用いて、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』のデータパターンについて説明する。図４Ｂは、ＡＳＩコマンド『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』のデータパターンを示す図である。図４Ｂに示すように、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』は、Ｉ２Ｃコマンドによる結果を読み出すコマンドであり、読み出しに伴う６４ビットデータのデータパターンは次のように定義される。【００５４】
ビット６３は、ＬＯＣＫビットを示す。このＬＯＣＫビットには、排他制御の結果、Ｉ２Ｃコマンドの実行権を取得できたか否かを示す情報が格納される。【００５５】
ビット６２からビット５６は、ＬＯＣＫ＿ＩＤを示す。このＬＯＣＫ＿ＩＤフィールドには、どの機能ブロックにアクセス中であるかを示す情報が格納される。【００５６】
ビット５５からビット５４は、ＢＵＳＹ／ＮＡＣＫを示す。ＢＵＳＹは、Ｉ２Ｃコマンドが実行中であることを示す。また、ＮＡＣＫ（Negative  ACKnowledgement）は、Ｉ２Ｃコマンドが実行できなかったことを示す。また、ｄａｔａ［５５:５４］の値が「０１」の場合、ビット３１からビット２８には、ＡＳＩ＿ＣＭＤの実行でエラーが生じたことを示すエラーコードが設定される。【００５７】
ビット５３からビット３２は、本実施例では未使用であるものとする。ビット３１からビット０は、Ｉ２Ｃコマンドの返り値であり、読み出されたデータになる。【００５８】
なお、以下の説明では、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』コマンドのデータパターンの一部をａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＬＯＣＫ、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＬＯＣＫ＿ＩＤのように適宜記載する。【００５９】
このようなＡＳＩコマンドを発行することによって、命令制御部１２１は、以下に示す処理を実行する。すなわち、命令制御部１２１は、ＡＳＩコマンドを発行することによって、共通部１１０にＩ２Ｃコマンドを生成させ、生成されたＩ２ＣコマンドをＩ２Ｃコマンド実行部に実行させる。また、この場合、命令制御部１２１は、ＡＳＩデータ［６３：０］をＩ２Ｃコマンド解釈部１１１に転送する。【００６０】
また、命令制御部１２１は、予め特定のＡＳＩ空間番号を指定することによって、ＣＰＵ１００内のレジスタの読み書きを実行することができる。【００６１】
図１に戻り、例えば、Ｉ２Ｃコマンド実行部１２２は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１２３から故障フラグを読み出す。そして、Ｉ２Ｃコマンド実行部１２２は、読み出した故障フラグをＩ２Ｃレシーブレジスタ１１５に転送する。なお、Ｉ２Ｃコマンド実行部１２２の構成は、Ｉ２Ｃコマンド実行部１１３の構成と同様であるので、説明を省略する。また、故障フラグラッチ１２３の構成は、故障フラグラッチ１１４の構成と同様であるので、説明を省略する。【００６２】
Ｌ２キャッシュ制御部１３０は、図示しないＬ２キャッシュを有し、コア部１２０から要求されたデータや命令がＬ２キャッシュに存在するか否かを判定する。ここで、Ｌ２キャッシュ制御部１３０は、要求されたデータや命令がＬ２キャッシュに存在していると判定した場合、要求されたデータや命令をＬ２キャッシュから読み出して、Ｌ１キャッシュへ転送する。【００６３】
また、Ｌ２キャッシュ制御部１３０は、Ｉ２Ｃコマンド実行部１３１、故障フラグラッチ１３２を有する。例えば、Ｉ２Ｃコマンド実行部１３１は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１３２から故障フラグを読み出す。そして、Ｉ２Ｃコマンド実行部１３１は、読み出した故障フラグをＩ２Ｃレシーブレジスタ１１５に転送する。なお、Ｉ２Ｃコマンド実行部１３１の構成は、Ｉ２Ｃコマンド実行部１１３の構成と同様であるので、説明を省略する。また、故障フラグラッチ１３２の構成は、故障フラグラッチ１１４の構成と同様であるので、説明を省略する。【００６４】
入出力制御部１４０は、ＣＰＵと図示しない入出力装置とを接続するインターフェースを有し、ＣＰＵと入出力装置との間のデータのやり取りを制御する。また、入出力制御部１４０は、Ｉ２Ｃコマンド実行部１４１、故障フラグラッチ１４２を有する。例えば、Ｉ２Ｃコマンド実行部１４１は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１４２から故障フラグを読み出す。そして、Ｉ２Ｃコマンド実行部１４１は、読み出した故障フラグをＩ２Ｃレシーブレジスタ１１５に転送する。なお、Ｉ２Ｃコマンド実行部１４１の構成は、Ｉ２Ｃコマンド実行部１１３の構成と同様であるので、説明を省略する。また、故障フラグラッチ１４２の構成は、故障フラグラッチ１１４の構成と同様であるので、説明を省略する。【００６５】
メモリ制御部１５０は、図示しない主記憶装置との間のデータのやり取りを制御する。また、メモリ制御部１５０は、Ｉ２Ｃコマンド実行部１５１、故障フラグラッチ１５２を有する。例えば、Ｉ２Ｃコマンド実行部１５１は、Ｉ２Ｃコマンド制御部１１２からＩ２Ｃコマンドを受信し、故障フラグラッチ１５２から故障フラグを読み出す。そして、Ｉ２Ｃコマンド実行部１５１は、読み出した故障フラグをＩ２Ｃレシーブレジスタ１１５に転送する。なお、Ｉ２Ｃコマンド実行部１５１の構成は、Ｉ２Ｃコマンド実行部１１３の構成と同様であるので、説明を省略する。また、故障フラグラッチ１５２の構成は、故障フラグラッチ１１４の構成と同様であるので、説明を省略する。【００６６】
［処理動作］
次に、図５から図７を用いて、ＣＰＵにおける処理動作を説明する。【００６７】
（Ｉ２Ｃコマンドによる故障フラグの読み出し動作）
次に、図５を用いて、ＣＰＵ１００における故障フラグの読み出し動作を説明する。図５は、ＣＰＵにおける故障フラグの読み出し動作を示す図である。なお、図５では、コア部１２０の故障フラグの読み出し動作について説明するが、この動作は共通部１１０、Ｌ２キャッシュ制御部１３０、入出力制御部１４０、メモリ制御部１５０の故障フラグ読み出し動作でも同様である。【００６８】
図５に示すように、ＣＰＵ１００が有する命令制御部１２１は、故障フラグの読み出しを指示する『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』を発行し、ＡＳＩデータ［６３：０］をＩ２Ｃコマンド解釈部１１１に送信する（Ｓ１）。そして、Ｉ２Ｃコマンド解釈部１１１は、受け取ったＡＳＩデータをデコードし、アクセスをする機能ブロックやアクセスを行うレジスタなどのデータを生成し、Ｉ２Ｃコマンド制御部１１２に送信する（Ｓ２）。【００６９】
Ｉ２Ｃコマンド制御部１１２は、受信したデータをＩ２Ｃコマンドに変換して、Ｉ２Ｃコマンド実行部１２２に送信する（Ｓ３）。続いて、Ｉ２Ｃコマンド実行部１２２は、故障フラグラッチ１２３から指示された故障フラグの読み出しを開始し（Ｓ４）、故障フラグを取得する（Ｓ５）。そして、Ｉ２Ｃコマンド実行部１２２は、読み出した結果をＩ２Ｃレシーブレジスタ１１５に送信する（Ｓ６）。Ｉ２Ｃレシーブレジスタ１１５は、ｄａｔａ［６３：０］にＩ２Ｃコマンド実行部１２２から受信した故障フラグを保持する。【００７０】
その後、命令制御部１２１は、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』命令を発行することによって、Ｉ２Ｃレシーブレジスタ１１５のｄａｔａ［３１:０］を読み出して、Ｉ２Ｃレシーブレジスタ１１５の下位側の３２ビットに格納する。続いて、命令制御部１２１は、ＣＯＤＥ「０２」を指定して『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』を発行することで、Ｉ２Ｃレシーブレジスタ１１５のｄａｔａ［６３:３２］を読み出して、Ｉ２Ｃレシーブレジスタ１１５の上位側の３２ビットに格納する。すなわち、命令制御部１２１は、ＡＳＩコマンドを実行することにより、プログラムからアクセス可能なＩ２Ｃレシーブレジスタ１１５に故障フラグを格納する。このようにして、命令制御部１２１は、ＡＳＩコマンドの実行により取得した故障フラグをプログラムから利用可能なＩ２Ｃレシーブレジスタ１１５に保持する。【００７１】
（故障フラグラッチにおける処理動作）
次に、図６を用いて故障フラグラッチ１１４における動作を説明する。図６は、故障フラグラッチにおける動作を説明する図である。なお、ここでは、共通部１１０が有する故障フラグラッチ１１４のＥＲＲ＿ＬＶ１＿ｌｏｏｐ１を例にして説明するが、各機能ブロックが有する故障フラグラッチにおいても処理動作は同様である。【００７２】
図６に示すように、故障フラグラッチ１１４のＥＲＲ＿ＬＶ１＿ｌｏｏｐ１は、ＦＦ１１４ａ‐１、・・・ＦＦ１１４ａ‐ｎを有する。ＦＦ１１４ａ‐１は、ＡＮＤ回路（論理積回路）２０１‐１、ＡＮＤ回路２０２‐１、ＡＮＤ回路２０３‐１、ＯＲ回路（論理和回路）２０４‐１、ＦＦ２０５‐１を有する。【００７３】
ＡＮＤ回路２０１‐１は、反転させたフラグフリーズ信号と反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号とエラー信号とを受付けて、受付けた値の論理積をＯＲ回路２０４‐１に出力する。また、ＡＮＤ回路２０２‐１は、ｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号とシフトレジスタ１１３ｃからのデータとを受付け、受付けた値の論理積をＯＲ回路２０４‐１に出力する。また、ＡＮＤ回路２０３‐１は、反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号と反転させたクリアエラーフラグ信号とＦＦ２０５‐１からの出力とを受付け、受付けた値の論理積をＯＲ回路２０４‐１に出力する。【００７４】
ＯＲ回路２０４‐１は、ＡＮＤ回路２０１‐１、ＡＮＤ回路２０２‐１、ＡＮＤ回路２０３‐１のいずれか２つからの出力を受付け、受付けた値の論理和を出力する。そして、ＯＲ回路２０４‐１は、出力した論理和と、残るＡＮＤ回路からの出力とを受付け、受付けた値の論理和をＦＦ２０５‐１に出力する。ＦＦ２０５‐１は、受付けた値をＡＮＤ回路２０３‐１と隣接するＦＦのＡＮＤ回路２０２とに出力する。【００７５】
なお、ＦＦ１１４ａ‐ｎの構成は、ＦＦ１１４ａ‐１の構成と同様であるので、説明は省略する。【００７６】
このような、故障フラグラッチ１１４において、データをシフトさせることを許可する信号を受信していない場合の動作について説明する。なお、ここでは、ＦＦ２０５‐１には「１」、ＦＦ２０５‐ｎには「０」が格納されており、フラグフリーズ信号及びクリアエラーフラグ信号が故障フラグラッチ１１４には入力されていないとする。【００７７】
この場合、ＡＮＤ回路２０１‐１は、反転させたフラグフリーズ信号「１」、反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号「１」、エラー信号「１」を受付けて、ＯＲ回路２０４‐１に「１」を出力する。ＡＮＤ回路２０２‐１は、いずれの信号も受付けず、ＯＲ回路２０４‐１に「０」を出力する。また、ＡＮＤ回路２０３‐１は、反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ「１」、反転させたクリアエラーフラグ信号「１」、ＦＦ２０５‐１の出力「１」を受付け、ＯＲ回路２０４‐１に「１」を出力する。【００７８】
そして、ＯＲ回路２０４‐１は、ＡＮＤ回路２０１‐１から「１」、ＡＮＤ回路２０２‐１から「０」、ＡＮＤ回路２０３‐１から「１」を受付け、ＦＦ２０５‐１に「１」を出力する。なお、ＦＦ２０５‐１が受付けた「１」は、ＦＦ２０５‐１がＡＮＤ回路２０３‐１に「１」を出力することで維持される。【００７９】
このような状況の故障フラグラッチ１１４において、シフトレジスタ１１３ｃからデータをシフトさせることを許可する信号を受信した場合の動作について説明する。なお、ここでは、シフトレジスタ１１３ｃには「０」が格納されていると仮定する。【００８０】
この場合、ＡＮＤ回路２０１‐１は、反転させたフラグフリーズ信号「０」、反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号「０」、エラー信号「０」を受付けて、ＯＲ回路２０４‐１に「０」を出力する。ＡＮＤ回路２０２‐１は、ｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号「１」とシフトレジスタ１１３ｃに格納されていた「０」とを受付けて、ＯＲ回路２０４‐１に「０」を出力する。また、ＡＮＤ回路２０３‐１は、反転させたｌｏｏｐ＿０＿ｓｈｉｆｔ−ｅｎｂ信号「０」、反転させたクリアエラーフラグ信号「１」、ＦＦ２０５‐１の出力「１」を受付け、ＯＲ回路２０４‐１に「０」を出力する。【００８１】
そして、ＯＲ回路２０４‐１は、ＡＮＤ回路２０１‐１、ＡＮＤ回路２０２‐１、ＡＮＤ回路２０３‐１のすべてから「０」を受付け、ＦＦ２０５‐１に「０」を出力する。また、ＦＦ２０５‐１に格納されていた「１」は、隣接するＦＦ１１４ａ‐２が有するＡＮＤ回路２０２‐２に出力され、ＦＦ２０５‐２にシフトする。【００８２】
このように、故障フラグラッチ１１４は、シフトレジスタ１１３ｃからデータをシフトさせることを許可する信号を受信した場合、シフトレングスレジスタ１１３ｂに保持される数だけデータをシフトさせる。この結果、シフトレジスタ１１３ｃには、故障フラグラッチ１１４に保持されていたデータがシフトする。【００８３】
（シフトレジスタにおける処理動作）
次に、図７を用いてシフトレジスタ１１３ｃの動作を説明する。図７は、シフトレジスタの動作を説明する図である。なお、ここでは、共通部１１０が有するシフトレジスタ１１３ｃを例にして説明するが、各機能ブロックが有するシフトレジスタにおいても処理動作は同様である。【００８４】
図７に示すように、シフトレジスタ１１３ｃは、ＡＮＤ回路４０１‐１、ＡＮＤ回路４０２‐１、ＡＮＤ回路４０３‐１、ＯＲ回路４０４‐１、ＦＦ４０５‐１を有する。また、シフトレジスタ１１３ｃは、同様に、ＡＮＤ回路４０１‐ｎ、ＡＮＤ回路４０２‐ｎ、ＡＮＤ回路４０３‐ｎ、ＯＲ回路４０４‐ｎ、ＦＦ４０５‐ｎを有する。【００８５】
ＡＮＤ回路４０１‐１は、Ｉ２Ｃ＿ＷＲＩＴＥ＿ＶＡＬ信号とＩ２Ｃ＿ＷＲＩＴＥ＿ＤＡＴＡ［０］信号と反転させたｓｈｉｆｔ−ｅｎｂ信号とを受付けて、受付けた値の論理積をＯＲ回路４０４‐１に出力する。また、ＡＮＤ回路４０２‐１は、ｓｈｉｆｔ−ｅｎｂ信号と選択されたｌｏｏｐからのデータとを受付け、受付けた値の論理積をＯＲ回路４０４‐１に出力する。また、ＡＮＤ回路４０３‐１は、反転させたｓｈｉｆｔ−ｅｎｂ信号と反転させたＩ２Ｃ＿ＷＲＩＴＥ＿ＶＡＬ信号とＦＦ４０５‐１からの出力とを受付け、受付けた値の論理積をＯＲ回路４０４‐１に出力する。【００８６】
ＯＲ回路４０４‐１は、ＡＮＤ回路４０１‐１、ＡＮＤ回路４０２‐１、ＡＮＤ回路４０３‐１のいずれか２つからの出力を受付け、受付けた値の論理和を出力する。そして、ＯＲ回路４０４‐１は、出力した論理和と、残るＡＮＤ回路からの出力とを受付け、受付けた値の論理和をＦＦ４０５‐１に出力する。ＦＦ４０５‐１は、受付けた値をＡＮＤ回路４０３‐１と隣接するＡＮＤ回路４０２‐２に出力する。【００８７】
このような、シフトレジスタ１１３ｃにおいて、ｓｈｉｆｔ−ｅｎｂ１１３ａからデータをシフトさせることを許可する信号を受信していない場合の動作について説明する。なお、ここでは、ＦＦ４０５‐１には「０」が格納されており、Ｉ２Ｃ＿ＷＲＩＴＥ＿ＶＡＬ信号及びＩ２Ｃ＿ＷＲＩＴＥ＿ＤＡＴＡ［０］信号がシフトレジスタ１１３ｃには入力されていないとする。【００８８】
この場合、ＡＮＤ回路４０１‐１は、反転させたｓｈｉｆｔ−ｅｎｂ信号「１」を受付けて、ＯＲ回路４０４‐１に「０」を出力する。ＡＮＤ回路４０２‐１は、いずれの信号も受付けず、ＯＲ回路４０４‐１に「０」を出力する。また、ＡＮＤ回路４０３‐１は、反転させたｓｈｉｆｔ−ｅｎｂ信号「１」、反転させたＩ２Ｃ＿ＷＲＩＴＥ＿ＶＡＬ信号「１」、ＦＦ４０５‐１の出力「０」を受付け、ＯＲ回路４０４‐１に「０」を出力する。【００８９】
そして、ＯＲ回路４０４‐１は、ＡＮＤ回路４０１‐１、ＡＮＤ回路４０２‐１、ＡＮＤ回路４０３‐１のすべてから「０」を受付け、ＦＦ４０５‐１に「０」を出力する。なお、ＦＦ４０５‐１が受付けた「０」は、ＦＦ４０５‐１がＡＮＤ回路４０３‐１に「０」を出力することで維持される。【００９０】
このような状況のシフトレジスタ１１３ｃにおいて、ｓｈｉｆｔ−ｅｎｂ１１３ａからデータをシフトさせることを許可する信号を受信した場合の動作について説明する。なお、ここでは、故障フラグラッチが有するＦＦ１１４ａ-ｎに「１」が格納されていると仮定する。【００９１】
この場合、ＡＮＤ回路４０１‐１は、反転させたｓｈｉｆｔ−ｅｎｂ信号「０」を受付けて、ＯＲ回路４０４‐１に「０」を出力する。ＡＮＤ回路４０２‐１は、ｓｈｉｆｔ−ｅｎｂ信号「１」とＦＦ１１４ａ-ｎに格納されていた「１」とを受付けて、ＯＲ回路４０４‐１に「１」を出力する。また、ＡＮＤ回路４０３‐１は、反転させたｓｈｉｆｔ−ｅｎｂ信号「０」、反転させたＩ２Ｃ＿ＷＲＩＴＥ＿ＶＡＬ信号「１」、ＦＦ４０５‐１の出力「０」を受付け、ＯＲ回路４０４‐１に「０」を出力する。【００９２】
そして、ＯＲ回路４０４‐１は、ＡＮＤ回路４０１‐１から「０」、ＡＮＤ回路４０２‐１から「１」、ＡＮＤ回路４０３‐１から「０」を受付け、ＦＦ４０５‐１に「１」を出力する。また、ＦＦ４０５‐１に格納されていた「０」は、隣接するＡＮＤ回路４０２‐２に出力され、ＦＦ４０５‐２にシフトする。【００９３】
このように、シフトレジスタ１１３ｃは、ｓｈｉｆｔ−ｅｎｂ１１３ａからデータをシフトさせることを許可する信号を受信した場合、シフトレングスレジスタ１１３ｂに保持される数だけデータをシフトさせる。この結果、シフトレジスタ１１３ｃには、故障フラグラッチ１１４に保持されていたデータがシフトする。【００９４】
［故障フラグ取得処理の処理手順］
次に図８及び図９を用いて、実施例１に係るＣＰＵ１００における故障フラグ取得処理の処理手順を説明する。図８では、命令制御部によるＡＳＩコマンド発行処理の処理手順を説明し、図９では、Ｉ２Ｃコマンド実行部による故障フラグの読み出し処理の処理手順を説明する。【００９５】
（命令制御部によるＡＳＩコマンド発行処理）
図８は、命令制御部によるＡＳＩコマンド発行処理の処理手順を示すフローチャートである。図８に示すように、命令制御部１２１は、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』命令を発行する（ステップＳ１０１）。そして、命令制御部１２１は、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＬＯＣＫビットを読み出し、読み出した値が「０」であるか否かを判定する（ステップＳ１０２）。【００９６】
ここで、命令制御部１２１は、読み出した値が「０」でないと判定した場合（ステップＳ１０２、Ｎｏ）、ステップＳ１０１に移行する。すなわち、命令制御部１２１は、他のプロセッサ部、またはサービスプロセッサ１００がＩ２Ｃコマンドを実行中である。したがって、命令制御部１２１は、読み出した値が「０」でない場合には、他のプロセッサ部、またはサービスプロセッサ１００によるＩ２Ｃコマンドの完了を待つ。そして、命令制御部１２１は、他のプロセッサ部あるいはサービスプロセッサ１００によるＩ２Ｃコマンドの完了後に、Ｉ２Ｃコマンドを発行する。そのために、命令制御部１２１は、読み出した値が「０」になるまで所定の間隔を置いて、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』命令の発行を繰り返す。【００９７】
一方、命令制御部１２１は、読み出した値が「０」であると判定した場合（ステップＳ１０２、Ｙｅｓ）、ＡＳＩコマンド経由のＩ２Ｃコマンドの実行が可能であると判定し、以下の処理を実行する。すなわち、命令制御部１２１は、ＬＯＣＫ＝１、制御したい機能ブロックのＬＯＣＫ＿ＩＤ、実行コマンドを指定して、『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』命令を発行する（ステップＳ１０３）。【００９８】
続いて、命令制御部１２１は、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』命令を発行する（ステップＳ１０４）。そして、命令制御部１２１は、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＬＯＣＫビット及びＬＯＣＫ＿ＩＤを読み出し、読み出した値が「１」であり、かつ、指定したＬＯＣＫ＿ＩＤであるか否かを判定する（ステップＳ１０５）。【００９９】
ここで、命令制御部１２１は、読み出した値が「１」、指定したＬＯＣＫ＿ＩＤの２つの条件のいずれかが満たされていないと判定した場合（ステップＳ１０５、Ｎｏ）、ステップＳ１０１に移行する。この場合、ステップＳ１０３で発行した『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』の実行権の獲得が失敗し、命令が実行されなかったことを意味する。【０１００】
一方、命令制御部１２１は、２つの条件が満たされていると判定した場合（ステップＳ１０５、Ｙｅｓ）、『ＡＳＩ＿ＣＭＤ＿ＲＥＣＥＩＶＥ＿ＲＥＧ』命令を発行する（ステップＳ１０６）。【０１０１】
そして、命令制御部１２１は、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＢＵＳＹ＝「０」であるか否かを判定する（ステップＳ１０７）。ここで、命令制御部１２１は、ＢＵＳＹ＝「０」でないと判定した場合（ステップＳ１０７、Ｎｏ）、ステップＳ１０６に移行し、ＢＵＳＹ＝「０」になるまで処理を繰り返す。この場合、命令制御部１２１は、ステップＳ１０３で発行したＩ２ＣコマンドがＩ２Ｃコマンド実行部によって実行中であると判定する。【０１０２】
一方、命令制御部１２１は、ＢＵＳＹ＝「０」であると判定した場合（ステップＳ１０７、Ｙｅｓ）、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＮＡＣＫ＝「０」であるか否かを判定する（ステップＳ１０８）。ここで、命令制御部１２１は、ＮＡＣＫ＝「０」であると判定した場合（ステップＳ１０８、Ｙｅｓ）、ステップＳ１０３において発行したコマンドが機能ブロックの状態を読み出すＲｅａｄコマンドであるか否かを判定する（ステップＳ１０９）。【０１０３】
ここで、命令制御部１２１は、Ｒｅａｄコマンドであると判定した場合（ステップＳ１０９、Ｙｅｓ）、ｄａｔａ［３１：０］を読み出し（ステップＳ１１０）、ステップＳ１１１に移行する。一方、命令制御部１２１は、Ｒｅａｄコマンドでないと判定した場合（ステップＳ１０９、Ｎｏ）、ステップＳ１１１に移行する。【０１０４】
ステップＳ１１１において、命令制御部１２１は、連続して新たなコマンドを発行するか否かを判定する（ステップＳ１１１）。命令制御部１２１は、連続して新たなコマンドを発行しないと判定した場合（ステップＳ１１１、Ｎｏ）、ａｓｉ＿ｃｍｄ＿ａｃｃｅｓｓ＿ｒｅｇ．ＬＯＣＫ＝「０」で『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』命令を発行する（ステップＳ１１２）。この命令により、命令制御部１２１は、ＡＳＩコマンドによるＩ２Ｃコマンドの排他制御権を開放し、一連のＩ２Ｃコマンド処理を終了する。一方、命令制御部１２１は、連続して新たなコマンドを発行すると判定した場合（ステップＳ１１１、Ｙｅｓ）、ステップＳ１１４に移行する。【０１０５】
命令制御部１２１は、ステップＳ１０８において、ＮＡＣＫ＝「０」でないと判定した場合（ステップＳ１０８、Ｎｏ）、ａｓｉ＿ｃｍｄ＿ｒｅｃｅｉｖｅ＿ｒｅｇ．ＮＡＣＫ＝「１」であるか否かを判定する（ステップＳ１１３）。ここで、命令制御部１２１は、ＮＡＣＫ＝「１」でないと判定した場合（ステップＳ１１３、Ｎｏ）、ステップＳ１１４に移行する。【０１０６】
一方、命令制御部１２１は、ＮＡＣＫ＝「１」であると判定した場合（ステップＳ１１３、Ｙｅｓ）、ソフトエラーが生じていると判定し（ステップＳ１１５）、処理を終了する。なお、この場合、命令制御部１２１は、ソフトエラーが生じたことをサービスプロセッサ１０に通知する。【０１０７】
ステップＳ１１４において、命令制御部１２１は、ＬＯＣＫ＝１、ＬＯＣＫ＿ＩＤ＝７Ｆを指定して、『ＡＳＩ＿ＣＭＤ＿ＡＣＣＥＳＳ＿ＲＥＧ』命令を発行し（ステップＳ１１４）、ステップＳ１０６に移行する。【０１０８】
（Ｉ２Ｃコマンド実行部による故障フラグの読み出し処理）
図９は、Ｉ２Ｃコマンド実行部による故障フラグ読み出し処理の処理手順を示すフローチャートである。例えば、Ｉ２Ｃコマンド実行部は、Ｉ２Ｃコマンド制御部１１２からアクセスを受付けたことを契機に処理を実行する。【０１０９】
図９に示すように、故障フラグを読み出す機能ブロックのＩ２Ｃコマンド実行部は、フラグフリーズレジスタ１１６が「１」に設定される（ステップＳ２０１）。そして、Ｉ２Ｃコマンド実行部は、シフトレングスレジスタにシフト数を決定し（ステップＳ２０２）、ＳＨＩＦＴ＿ｅｎｂ信号を「１」にする（ステップＳ２０３）。【０１１０】
ここで、Ｉ２Ｃコマンド実行部において、ＳＨＩＦＴ＿ｅｎｂ信号が「１」になった場合、ＬＯＯＰ０に接続された故障フラグが選択されて、シフトレジスタに６４ビットのデータとして読み出される。また、６４ビットのデータをシフトレジスタに読み出した場合、ＳＨＩＦＴ＿ｅｎｂ信号が「０」になる。【０１１１】
続いて、Ｉ２Ｃコマンド実行部は、読み出したデータをＩ２Ｃコマンド制御部が有する、プログラムからアクセス可能なＩ２Ｃレシーブレジスタに転送する（ステップＳ２０４）。また、Ｉ２Ｃコマンド実行部は、さらに別のｌｏｏｐから故障フラグを読み出すアクセスを受付けたか否かを判定する（ステップＳ２０５）。ここで、Ｉ２Ｃコマンド実行部は、さらに別のｌｏｏｐから故障フラグを読み出すアクセスを受付けたと判定した場合（ステップＳ２０５、Ｙｅｓ）、ステップＳ２０２に移行し、故障フラグの読み出し処理を実行する。【０１１２】
一方、Ｉ２Ｃコマンド実行部は、別のｌｏｏｐから故障フラグを読み出すアクセスを受付けていないと判定した場合（ステップＳ２０５、Ｎｏ）、フラグフリーズレジスタ１１６が「０」に設定され（ステップＳ２０６）、処理を終了する。【０１１３】
［実施例１の効果］
上述してきたように、実施例１では、共通部１１０及び各機能ブロックがＩ２Ｃコマンド実行部を有する。そして、Ｉ２Ｃコマンド制御部１１２は、命令制御部１２１によって故障フラグを回収するＡＳＩコマンドが発行された場合、故障フラグを回収するＩ２Ｃコマンドを生成し、生成したＩ２Ｃコマンドを共通部１１０及び各機能ブロックに送信する。これによって、Ｉ２Ｃコマンド実行部は、故障フラグラッチに保持される故障フラグを読み出すことができる。すなわち、実施例１に係るＣＰＵ１００において、サービスプロセッサ１０からスキャンチェーンを用いて故障フラグをスキャンアウトしなくても、ＣＰＵ１００の故障フラグを読み出すことができる。【０１１４】
これまで記述してきたような回路を各機能ブロックにＩ２Ｃコマンド実行部を組み込むことで、１つの機能ブロックの故障フラグを読み出している間に、他の機能ブロックで起きたエラーを漏れることなく故障フラグラッチに取り込むことが可能となる。なお、各機能ブロックは、決定は、ａｓｉ＿ｃｍｄ＿ａｃｃｅｓｓ＿ｒｅｇ．ＬＯＣＫ＿ＩＤに各機能ブロックにあらかじめ指定されている値を書き込むことで制御可能である。【０１１５】
また、近年、ＳｏＣ（System  on  Chip）化によってＣＰＵが大規模になってきている。このため、ＣＰＵ全体のシミュレーションモデルを作成し、システム制御のテストベンチを走行するシミュレーションを行う場合、コンパイル時間、テストベンチの走行時間が長くなる。すなわち、ＣＰＵ全体でシミュレーションを実行することは、非常に困難になってきている。しかし、本発明によりエミュレータを使用したＣＰＵの検証を行う場合、ＡＳＩコマンドを使用したテストプログラムを作成することで、ＣＰＵ全体のモデルでのシステム制御レジスタの検証を行うことが可能になる。【０１１６】
ＣＰＵのシステム制御の検証においても、ＣＰＵ全体でエミュレートすることが可能となり、ＣＰＵの品質向上が可能となる。【０１１７】
本発明のＩ２Ｃコマンド制御部及びＩ２Ｃコマンド実行部を組み込むことでサービスプロセッサがなくても、ソフトウェアからＩ２Ｃ制御部を介してＩ２Ｃコマンド実行部にアクセスし、ハードウェア情報が読み出せる。このため、サービスプロセッサを用いず、ＣＰＵ１００単独でＣＰＵ１００の設定が可能となる。また、ＣＰＵの設定を変えることができるので、ソフトウェアにあったＣＰＵの構成に変更することができる。この結果、ＣＰＵの処理性能を向上させることができる。【０１１８】
また、ソフトウェアは、ＣＰＵのハードウェア情報が読み出せるために、得られた故障情報から致命的な故障を回避することが可能になる。【０１１９】
また、サービスプロセッサが必要なシステムであっても、ＣＰＵのハードウェアの設定を制御する機能を削減できるため、サービスプロセッサの簡易化によりコストの削減が可能である。
【実施例２】
【０１２０】
ところで、本発明は、上述した実施例以外にも、種々の異なる形態にて実施されてよい。そこで、実施例２では、本発明に含まれる他の実施例について説明する。【０１２１】
（エラー制御論理のデバッグ）
また本発明は、このエラー制御論理のデバッグにも用いることでこの回路の品質を保証することが可能である。【０１２２】
機能ブロックが有するシフトレジスタのｄａｔａ［６３:０］に、サービスプロセッサがある値、例えば、「０×１２３４５６７８９ａｂｃｄｅｆ」を書き込んでおく。また、Ｉ２Ｃコマンド実行部に接続されている故障フラグラッチのラッチ数をシフトレングスレジスタにも書き込む。【０１２３】
そして、Ｉ２Ｃコマンド制御部１１２は、フラグフリーズレジスタに「１」を設定し、故障フラグが更新されないようする。続いて、Ｉ２Ｃコマンド制御部１１２は、シフトレングスレジスタの値が「０」になるまで故障フラグラッチを読み出すコマンドを発行する。【０１２４】
ここで、シフトレジスタに書き込んだ値が故障フラグレジスタを伝播して再度シフトレジスタに格納される場合、故障フラグレジスタの制御回路が正常であると判定できる。一方、正しい値がシフトレジスタに戻ってこなければ、制御回路または故障フラグレジスタの接続を誤っていることが検出できる。【０１２５】
（擬似故障によるＣＰＵの動作シミュレーション）
また、このシフトレジスタへの書き込み方法を利用してシフトレジスタに接続されている故障フラグラッチを「１」にセットすることで、ＣＰＵに擬似故障を起こした場合の動作をシミュレーションすることも可能である。【０１２６】
例えば、サービスプロセッサがシフトレジスタのいずれかのビットに「１」を書き込んでおく。そして、Ｉ２Ｃコマンド制御部１１２は、故障フラグレジスタが更新されないようにフリーズ信号を「１」にする。続いて、故障フラグラッチの擬似故障を起こす対象となるＦＦに個別に割り振られている番号をシフトレングスレジスタに書き込み、読み出しコマンドを発行する。この結果、シフトレジスタに書き込んだ値は、故障フラグレジスタの擬似故障を起こす対象となるＦＦまでシフトされて、擬似故障を起こす対象となるＦＦの値が「１」に変化する。この方法によって、ＣＰＵの故障時の動作のシミュレーションをおこなうことが可能となる。【０１２７】
（システム構成等）
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。【０１２８】
また、図示した記憶部が格納する情報は一例に過ぎず、必ずしも図示のごとく情報が格納される必要はない。【０１２９】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更してもよい。【０１３０】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、共通部１１０において、Ｉ２Ｃコマンド解釈部１１１とＩ２Ｃコマンド制御部１１２とが統合されてもよい。
【符号の説明】
【０１３１】
１０  サービスプロセッサ
１００  ＣＰＵ
１１０  共通部
１１１  Ｉ２Ｃコマンド解釈部
１１２  Ｉ２Ｃコマンド制御部
１１３、１２２、１３１、１４１、１５１  Ｉ２Ｃコマンド実行部
１１３ａ  ｓｈｉｆｔ−ｅｎｂ
１１３ｂ  シフトレングスレジスタ
１１３ｃ  シフトレジスタ
１１４、１２３、１３２、１４２、１５２  故障フラグラッチ
１１５  Ｉ２Ｃレシーブレジスタ
１１６  フラグフリーズレジスタ
１２０  コア部
１２１  命令制御部
１３０  Ｌ２キャッシュ制御部
１４０  入出力制御部
１５０  メモリ制御部
【図１】
2012172682.tif 000003
【図２】
2012172682.tif 000004
【図３】
2012172682.tif 000005
【図４Ａ】
2012172682.tif 000006
【図４Ｂ】
2012172682.tif 000007
【図５】
2012172682.tif 000008
【図６】
2012172682.tif 000009
【図７】
2012172682.tif 000010
【図８】
2012172682.tif 000011
【図９】
2012172682.tif 000012
【図１０】
2012172682.tif 000013
【手続補正書】
【提出日】平成25年12月25日(2013.12.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
回路部を有する演算処理装置において、
前記回路部の状態を示す状態情報を保持する状態情報保持部と、
プログラムに含まれる、制御命令を生成するための制御命令生成命令をデコードする命令制御部と、
前記命令制御部がデコードした制御命令生成命令が、前記状態情報保持部からの状態情報を読み出す状態情報読出命令を生成する制御命令生成命令である場合に、状態情報読出命令を生成する命令生成部と、
前記命令生成部が生成した状態情報読出命令に基づき、前記状態情報保持部から状態情報を読出して、プログラムから読出し可能なレジスタ部に格納する命令実行部と
を有することを特徴とする演算処理装置。
【請求項２】
前記命令生成部は、前記命令制御部がデコードした制御命令生成命令が、前記状態情報保持部が保持する状態情報を指定された情報に書き換える状態情報書換命令を生成する制御命令生成命令である場合に、前記状態情報書換命令を生成し、
前記命令実行部は、前記命令生成部が生成した状態情報書換命令に基づき、前記状態情報保持部が保持する状態情報を、指定された情報に書き換えることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置はさらに、
前記状態情報保持部が保持する状態情報の更新を抑止するロック情報を保持するロック情報保持部を有し、
前記状態情報保持部は、前記ロック情報保持部がロック情報を保持している間は、保持する状態情報を更新せずに保持し続けることを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記演算処理装置が、
命令を読み出して実行するコア部、Ｌ２キャッシュの制御を実行するＬ２キャッシュ制御部、自装置と接続される入出力装置との情報の入出力を制御する入出力制御部、メモリの制御を実行するメモリ制御部及び、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部それぞれに接続される共通部を前記回路部として有し、
前記コア部は、前記命令制御部と前記レジスタ部とを有し、
前記共通部は、前記命令生成部を有し、
前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部それぞれは、前記命令実行部と前記状態情報保持部とを有する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記命令生成部は、前記状態情報読出命令を生成するとともに、前記コア部、前記Ｌ２キャッシュ制御部、前記入出力制御部、前記メモリ制御部、前記共通部のいずれの命令実行部に前記状態情報読出命令を送信するかを決定し、決定した命令実行部に前記生成した状態情報読出命令を送信することを特徴とする請求項４に記載の演算処理装置。
【請求項６】
回路部を有する演算処理装置の制御方法において、
前記演算処理装置が有する命令制御部が、プログラムに含まれ、前記回路部の状態を示す状態情報を読み出す制御命令を生成する制御命令生成命令をデコードし、
前記演算処理装置が有する命令生成部が、前記命令制御部がデコードした制御命令生成命令に基づき、状態情報読出命令を生成し、
前記演算処理装置が有する命令実行部が、前記命令生成部が生成した状態情報読出命令に基づき、前記回路部の状態を示す状態情報を保持する状態情報保持部から状態情報を読出して、プログラムから読出し可能なレジスタ部に格納する
ことを特徴とする演算処理装置の制御方法。
【請求項７】
前記演算処理装置の制御方法はさらに、
前記命令生成部が、前記命令制御部がデコードした制御命令生成命令に基づき、前記状態情報保持部が保持する情報を、指定された情報に書き換える状態情報書換命令を生成し、
前記命令実行部が、前記命令生成部が生成した状態情報書換命令に基づき、前記状態情報保持部が保持する情報を、指定された情報に書き換える
ことを特徴とする請求項６記載の演算処理装置の制御方法。
【請求項８】
前記演算処理装置の制御方法において、
前記演算処理装置はさらに、
前記状態情報保持部が保持する状態情報の更新を抑止するロック情報を保持するロック情報保持部を有し、
前記状態情報保持部は、前記ロック情報保持部がロック情報を保持している間は、保持する状態情報を更新せずに保持し続ける
ことを特徴とする請求項６記載の演算処理装置の制御方法。
【国際調査報告】
2012172682.tif 000014
2012172682.tif 000015