(57)【要約】      （修正有）【課題】複数のスレッドが動作するプログラムの実行において、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制する。【解決手段】プロセッサは、第１アドレス値を保持する第１保持部と、プログラムカウンタの値が第１アドレス値と一致したときに、命令の実行を停止するか否かを判定する制御部とを有し、命令の待ち合わせの解除を指示する信号を受ける前に、プログラムカウンタの値が第１アドレス値と一致したときには、第１信号を受けるまで命令の実行を停止させ、第１信号を受けた後に、プログラムカウンタの値が第１アドレス値と一致したときには命令の実行を継続する。【選択図】図２
2014182545.tif 000002
【特許請求の範囲】
【請求項１】
第１アドレス値を保持する第１保持部と、
プログラムカウンタの値が前記第１アドレス値と一致したときに、命令の実行を停止するか否かを判定する制御部と
を備えていることを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサにおいて、
前記制御部は、前記命令の待ち合わせの解除を指示する第１信号を受ける前に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記第１信号を受けるまで前記命令の実行を停止させ、前記第１信号を受けた後に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記命令の実行を継続させること
を特徴とするプロセッサ。
【請求項３】
請求項１または請求項２に記載のプロセッサにおいて、
第２アドレス値を保持する第２保持部と、
前記プログラムカウンタの値が前記第２アドレス値と一致したとき、命令の待ち合わせの解除を指示する第２信号を外部に出力する信号生成部と
を備えていることを特徴とするプロセッサ。
【請求項４】
所定のアドレス値を保持する保持部と、
プログラムカウンタの値が前記所定のアドレス値と一致したとき、命令の待ち合わせの解除を指示する信号を外部に出力する信号生成部と
を備えていることを特徴とするプロセッサ。
【請求項５】
第１アドレス値を設定し、
プログラムカウンタの値が前記第１アドレス値と一致したときに、命令の実行を停止するか否かを判定すること
を特徴とするプロセッサの動作方法。
【請求項６】
所定のアドレス値を設定し、
プログラムカウンタの値が前記所定のアドレス値と一致したとき、命令の待ち合わせの解除を指示する信号を外部に出力すること
を特徴とするプロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサおよびプロセッサの動作方法に関する。
【背景技術】
【０００２】
近年、マルチスレッドに対応したプロセッサが普及してきている。複数のスレッドが動作するプログラムでは、全体を正しく動作させるための同期処理が実行される。例えば、２つのスレッドのうち、他のスレッドの処理結果を使用する命令を含むスレッドは、他のスレッドの処理結果が確定するまで、他のスレッドの処理結果を使用する命令の実行を停止（待ち合わせ）する。すなわち、待ち合わせ対象の命令を含むプログラムでは、プロセッサは、待ち合わせの解除条件を満たすまで、待ち合わせ対象の命令の実行を停止する。
【０００３】
同期処理の実現方法として、同期が必要な命令の前に同期用の専用命令を挿入する方法が提案されている（例えば、特許文献１、２、３参照）。例えば、プロセッサは、同期用の専用命令を実行したとき、同期が必要な命令の実行を、同期のための条件が成立するまで待機する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−７７０３０号公報
【特許文献２】特開２０１０−２０３６３号公報
【特許文献３】特開平７−２００４８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
同期が必要な命令の前に、同期用の専用命令が挿入される方法では、専用命令の実行サイクル数分だけ、プログラムの実行サイクル数が増加するおそれがある。
【０００６】
１つの側面では、本件開示のプロセッサおよびプロセッサの動作方法は、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
一観点によれば、プロセッサは、第１アドレス値を保持する第１保持部と、プログラムカウンタの値が第１アドレス値と一致したときに、命令の実行を停止するか否かを判定する制御部とを有している。
【０００８】
別の観点によれば、プロセッサの動作方法は、第１アドレス値を設定し、プログラムカウンタの値が第１アドレス値と一致したときに、命令の実行を停止するか否かを判定する。
【発明の効果】
【０００９】
本件開示のプロセッサおよびプロセッサの動作方法は、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制できる。
【図面の簡単な説明】
【００１０】
【図１】プロセッサの一実施形態を示す図である。
【図２】図１に示したプロセッサの一例を示す図である。
【図３】図２に示したプロセッサの状態遷移の一例を示す図である。
【図４】図２に示したプロセッサの動作の一例を示す図である。
【図５】図２に示した命令メモリに格納されている命令の一例を示す図である。
【図６】図５に示した命令を実行したときのプロセッサの動作の一例を示す図である。
【図７】図５に示した命令を実行したときのプロセッサの動作の別の例を示す図である。
【図８】図７に示した動作の比較例を示す図である。
【図９】プロセッサの別の実施形態を示す図である。
【図１０】図９に示したプロセッサの一例を示す図である。
【図１１】図１０に示したプロセッサが搭載されるシステムの一例を示す図である。
【図１２】図１１に示した命令メモリに格納されている命令の一例を示す図である。
【図１３】図１２に示した命令を実行したときのプロセッサの動作の一例を示す図である。
【図１４】プロセッサの別の実施形態を示す図である。
【発明を実施するための形態】
【００１１】
以下、実施形態を図面を用いて説明する。
【００１２】
図１は、プロセッサの一実施形態を示している。図１の破線の矢印は、信号の流れを示している。この実施形態のプロセッサＰＵは、例えば、他のプロセッサで実行されるスレッドに同期させて、命令メモリＩＭＥＭに記憶されている命令を実行できる。例えば、プロセッサＰＵは、プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ、制御部ＣＮＴを有している。また、プロセッサＰＵは、命令メモリＩＭＥＭに接続されている。
【００１３】
プログラムカウンタＰＣは、例えば、プロセッサＰＵが実行する命令のアドレスを示す値（以下、ＰＣ値とも称する）を、命令メモリＩＭＥＭおよび制御部ＣＮＴに出力する。例えば、プログラムカウンタＰＣの値（ＰＣ値）は、プロセッサＰＵが命令を実行する度に、増加する。あるいは、ＰＣ値は、分岐命令等が実行されたとき、分岐先アドレスに設定される。例えば、プログラムカウンタＰＣからＰＣ値を受けた命令メモリＩＭＥＭは、ＰＣ値が示すアドレスの命令を、プロセッサＰＵに出力する。
【００１４】
アドレスレジスタＡＲＥＧは、第１アドレス値を保持する第１保持部の一例である。例えば、アドレスレジスタＡＲＥＧは、待ち合わせ対象の命令のアドレスを保持する。待ち合わせ対象の命令は、例えば、プロセッサＰＵとは別のプロセッサで実行されるスレッドの処理結果を使用する命令である。なお、プロセッサＰＵには、例えば、アドレスレジスタＡＲＥＧに値を設定する命令が用意されている。
【００１５】
制御部ＣＮＴは、例えば、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときに、命令の実行を停止するか否かを判定する。例えば、制御部ＣＮＴは、アドレスレジスタＡＲＥＧの値と、ＰＣ値と、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣとを受ける。そして、制御部ＣＮＴは、例えば、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したとき、命令の待ち合わせの解除指示（信号ＥＳＹＮＣ）を既に受けているか否かに基づいて、命令の実行を停止するか否かを判定する。信号ＥＳＹＮＣは、例えば、命令の待ち合わせの解除を指示するときに、アサートされる。
【００１６】
例えば、制御部ＣＮＴは、信号ＥＳＹＮＣがアサートされる前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したとき、信号ＥＳＹＮＣがアサートされるまで命令の実行を停止させる。すなわち、制御部ＣＮＴは、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受ける前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときには、信号ＥＳＹＮＣを受けるまで命令の実行を停止させる。
【００１７】
このように、制御部ＣＮＴは、命令の待ち合わせの解除が指示される前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したとき、命令の実行を停止させる。そして、制御部ＣＮＴは、命令の待ち合わせの解除が指示されたとき、命令の実行を再開させる。
【００１８】
なお、制御部ＣＮＴは、例えば、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けた後に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときには、命令の実行を継続させる。
【００１９】
ここで、例えば、ループ内部で同期をとる場合、同期用の専用命令がループ内部に挿入される方法では、専用命令の実行サイクル数分だけ、ループ内部の実行サイクル数が増加するおそれがある。これに対し、プロセッサＰＵは、同期用の専用命令（例えば、他のプロセッサの処理の完了を待つ命令）を使用する代わりに、ＰＣ値がアドレスレジスタＡＲＥＧの値に到達したか否かの判定結果を使用して、命令の実行を停止するか否かを判定する。
【００２０】
このため、プロセッサＰＵは、同期用の専用命令をループ内で実行することなく、同期処理を実行できる。したがって、プロセッサＰＵでは、同期用の専用命令の実行に起因する実行サイクル数の増加を抑制できる。実行サイクル数の削減効果は、例えば、ループの回数が増加するほど大きくなる。
【００２１】
図２は、図１に示したプロセッサＰＵの一例を示している。図２の破線の矢印は、信号の流れを示している。なお、図１で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサＰＵは、プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ、制御部ＣＮＴ、命令レジスタＩＲＥＧ、デコード部ＤＥＣ、レジスタファイルＲＥＧ、実行部ＥＸＥＣおよびパイプラインレジスタＰＲＥＧを有している。
【００２２】
命令レジスタＩＲＥＧは、命令メモリＩＭＥＭから取得した命令を保持する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに保持されている命令を取得し、取得した命令を解読する。例えば、デコード部ＤＥＣは、命令の種類を判別する。そして、デコード部ＤＥＣは、レジスタファイルＲＥＧに対してレジスタの内容の転送を指示する。また、デコード部ＤＥＣは、実行部ＥＸＥＣに動作内容を指示する。
【００２３】
レジスタファイルＲＥＧは、例えば、複数のレジスタを有している。例えば、レジスタファイルＲＥＧは、デコード部ＤＥＣにより指定されたレジスタの内容を、読み出しポートを介して実行部ＥＸＥＣに転送する。また、レジスタファイルＲＥＧは、例えば、実行部ＥＸＥＣの実行結果を格納する。例えば、レジスタファイルＲＥＧは、実行部ＥＸＥＣの実行結果をパイプラインレジスタＰＲＥＧから取得する。これにより、実行部ＥＸＥＣの実行結果がレジスタファイルＲＥＧに格納される。
【００２４】
実行部ＥＸＥＣは、デコード部ＤＥＣにより指示された演算等を実行する。すなわち、実行部ＥＸＥＣは、デコード部ＤＥＣで解読された命令を実行する。例えば、実行部ＥＸＥＣは、レジスタファイルＲＥＧから受けたレジスタの内容を用いて、デコード部ＤＥＣにより指定された演算を実行する。そして、実行部ＥＸＥＣは、実行結果をパイプラインレジスタＰＲＥＧに格納する。また、例えば、アドレスレジスタＡＲＥＧに値を設定する命令では、実行部ＥＸＥＣは、命令で指定されたアドレス値をアドレスレジスタＡＲＥＧに設定する。
【００２５】
制御部ＣＮＴは、待機レジスタＷＲＥＧ、信号状態レジスタＳＲＥＧ、一致検出回路ＣＭＰおよび待機制御部ＷＣＮＴを有している。なお、図２に示した制御部ＣＮＴは、図１に示した制御部ＣＮＴの一例である。
【００２６】
待機レジスタＷＲＥＧは、例えば、命令の実行を停止するか否かを示す情報を保持する。例えば、待機レジスタＷＲＥＧの内容が“１”の場合、待機レジスタＷＲＥＧは、命令の実行を停止することを示している。例えば、待機レジスタＷＲＥＧの内容が“１”の期間では、プログラムカウンタＰＣは、ＰＣ値を更新しない。また、例えば、待機レジスタＷＲＥＧの内容が“１”の期間では、実行部ＥＸＥＣは、命令を実行しない。なお、待機レジスタＷＲＥＧの内容が“０”の場合、待機レジスタＷＲＥＧは、命令の実行を停止しないことを示している。
【００２７】
信号状態レジスタＳＲＥＧは、例えば、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受け付けたか否かを示す情報を保持する。例えば、信号状態レジスタＳＲＥＧの内容が“１”の場合、信号状態レジスタＳＲＥＧは、命令の待ち合わせの解除指示（信号ＥＳＹＮＣ）を受け付けたことを示している。また、信号状態レジスタＳＲＥＧの内容が“０”の場合、信号状態レジスタＳＲＥＧは、命令の待ち合わせの解除指示（信号ＥＳＹＮＣ）を受けていないことを示している。
【００２８】
以下、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧの内容が両方とも“０”の状態を、通常状態とも称する。また、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧのそれぞれの内容が“１”および“０”の状態を、待機状態とも称する。そして、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧのそれぞれの内容が“０”および“１”の状態を、受け付け状態とも称する。
【００２９】
一致検出回路ＣＭＰは、アドレスレジスタＡＲＥＧの値およびＰＣ値を、アドレスレジスタＡＲＥＧおよびプログラムカウンタＰＣからそれぞれ受ける。そして、一致検出回路ＣＭＰは、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したか否かを判定し、判定結果を待機制御部ＷＣＮＴに出力する。
【００３０】
待機制御部ＷＣＮＴは、信号ＥＳＹＮＣと、一致検出回路ＣＭＰの判定結果と、待機レジスタＷＲＥＧの内容と、信号状態レジスタＳＲＥＧの内容とを受ける。そして、待機制御部ＷＣＮＴは、信号ＥＳＹＮＣと、一致検出回路ＣＭＰの判定結果と、待機レジスタＷＲＥＧの内容と、信号状態レジスタＳＲＥＧの内容とに基づいて、命令の実行を停止するか否かを判定する。
【００３１】
例えば、待機制御部ＷＣＮＴは、通常状態のときに、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致した場合、待機レジスタＷＲＥＧの内容を“１”に設定し、信号状態レジスタＳＲＥＧの内容を“０”に維持する。これにより、プロセッサＰＵの動作状態は、通常状態から待機状態に遷移する。この結果、命令の実行は停止する。なお、命令の実行を再開する場合、待機制御部ＷＣＮＴは、待機レジスタＷＲＥＧの内容を“０”に設定する。
【００３２】
すなわち、待機制御部ＷＣＮＴは、待機状態のときに、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けた場合、待機レジスタＷＲＥＧの内容を“０”に設定し、信号状態レジスタＳＲＥＧの内容を“０”に維持する。これにより、プロセッサＰＵの動作状態は、待機状態から通常状態に遷移する。
【００３３】
また、待機制御部ＷＣＮＴは、通常状態のときに、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けた場合、信号状態レジスタＳＲＥＧの内容を“１”に設定し、待機レジスタＷＲＥＧの内容を“０”に維持する。これにより、プロセッサＰＵの動作状態は、通常状態から受け付け状態に遷移する。
【００３４】
なお、待機制御部ＷＣＮＴは、受け付け状態のときに、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致した場合、信号状態レジスタＳＲＥＧの内容を“０”に設定し、待機レジスタＷＲＥＧの内容を“０”に維持する。これにより、プロセッサＰＵの動作状態は、受け付け状態から通常状態に遷移する。
【００３５】
なお、プロセッサＰＵの構成は、この例に限定されない。例えば、デコード部ＤＥＣと実行部ＥＸＥＣとの間にパイプラインレジスタが配置されてもよい。また、プロセッサＰＵは、複数のプロセッサコアを有するマルチコアプロセッサでもよい。この場合、マルチコアプロセッサ内の各プロセッサコアの構成は、例えば、図２に示したプロセッサＰＵと同様である。また、待ち合わせ対象の命令は、プロセッサＰＵとは別のプロセッサで実行されるスレッドの処理結果を使用する命令に限定されない。
【００３６】
図３は、図２に示したプロセッサＰＵの状態遷移の一例を示している。なお、図３は、同期用の専用命令（例えば、図８に示すＷａｉｔ命令）を使用しないときのプロセッサＰＵの状態遷移の一例を示している。また、図３以降では、命令の待ち合わせの解除を指示するときに、信号ＥＳＹＮＣが“１”にアサートされるものとして説明する。
【００３７】
先ず、現在のプロセッサＰＵの動作状態が通常状態のときの状態遷移について説明する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致せず、信号ＥＳＹＮＣが“０”の場合、プロセッサＰＵの動作状態は、通常状態に維持される。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“０”の場合、プロセッサＰＵの動作状態は、通常状態から待機状態に遷移する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致せず、信号ＥＳＹＮＣが“１”の場合、プロセッサＰＵの動作状態は、通常状態から受け付け状態に遷移する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“１”の場合、プロセッサＰＵの動作状態は、通常状態に維持される。
【００３８】
次に、現在のプロセッサＰＵの動作状態が待機状態のときの状態遷移について説明する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“０”の場合、プロセッサＰＵの動作状態は、待機状態に維持される。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“１”の場合、プロセッサＰＵの動作状態は、待機状態から通常状態に遷移する。
【００３９】
なお、待機状態では、ＰＣ値が更新されないため、ＰＣ値はアドレスレジスタＡＲＥＧの値と一致している。したがって、プロセッサＰＵが正常に動作している場合、待機状態では、アドレスレジスタＡＲＥＧの値に一致しているＰＣ値がアドレスレジスタＡＲＥＧの値と不一致になるイベントは、発生しない。
【００４０】
次に、現在のプロセッサＰＵの動作状態が受け付け状態のときの状態遷移について説明する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致せず、信号ＥＳＹＮＣが“０”の場合、プロセッサＰＵの動作状態は、受け付け状態に維持される。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“０”の場合、プロセッサＰＵの動作状態は、受け付け状態から通常状態に遷移する。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致せず、信号ＥＳＹＮＣが“１”の場合、プロセッサＰＵの動作状態は、受け付け状態に維持される。ＰＣ値がアドレスレジスタＡＲＥＧの値と一致し、信号ＥＳＹＮＣが“１”の場合、プロセッサＰＵの動作状態は、受け付け状態に維持される。
【００４１】
なお、プロセッサＰＵが正常に動作している場合、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧの内容が両方とも“１”になる状態への遷移は、発生しない。
【００４２】
図４は、図２に示したプロセッサＰＵの動作の一例を示している。図４に示した動作は、プロセッサの動作方法の一実施形態である。なお、図４は、着目する１つの命令が実行されるまでの処理の一例を示している。
【００４３】
ステップＳ１００では、プログラムカウンタＰＣは、ＰＣ値を更新する。ステップＳ１１０では、一致検出回路ＣＭＰは、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致しているか否かを判定する。
【００４４】
ＰＣ値がアドレスレジスタＡＲＥＧの値と一致しているとき（ステップＳ１１０のＹｅｓ）、プロセッサＰＵの動作は、ステップＳ２００に移る。一方、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致していないとき（ステップＳ１１０のＮｏ）、プロセッサＰＵの動作は、ステップＳ１２０に移る。
【００４５】
ステップＳ１２０では、待機制御部ＷＣＮＴは、信号ＥＳＹＮＣが“１”であるか否かを判定する。すなわち、待機制御部ＷＣＮＴは、命令の待ち合わせの解除が指示されているか否かを判定する。信号ＥＳＹＮＣが“１”であるとき（ステップＳ１２０のＹｅｓ）、プロセッサＰＵの動作は、ステップＳ１３０に移る。
【００４６】
一方、信号ＥＳＹＮＣが“１”でないとき（ステップＳ１２０のＮｏ）、プロセッサＰＵの動作は、ステップＳ１４０に移る。このように、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致せず、かつ、信号ＥＳＹＮＣが“１”でない場合、プロセッサＰＵの動作状態は、現在の状態を維持する。
【００４７】
ステップＳ１３０では、待機制御部ＷＣＮＴは、信号状態レジスタＳＲＥＧの内容を“１”に設定する。これにより、プロセッサＰＵは、受け付け状態で動作する。
【００４８】
ステップＳ１４０では、プロセッサＰＵは、ＰＣ値が示すアドレスの命令を命令メモリＩＭＥＭから読み込む。これにより、ＰＣ値が示すアドレスの命令が命令レジスタＩＲＥＧに格納される。
【００４９】
ステップＳ１５０では、プロセッサＰＵは、命令レジスタＩＲＥＧに格納されている命令を実行する。これにより、ステップＳ１００で更新したＰＣ値に対応する命令が実行される。次の命令を実行する場合、プロセッサＰＵの動作は、ステップＳ１００に戻る。
【００５０】
次に、上述したステップＳ１１０において、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致していると判定されたときのプロセッサＰＵの動作を説明する。
【００５１】
ステップＳ２００では、待機制御部ＷＣＮＴは、信号状態レジスタＳＲＥＧの内容が“１”であるか否かを判定する。信号状態レジスタＳＲＥＧの内容が“１”であるとき（ステップＳ２００のＹｅｓ）、プロセッサＰＵの動作は、ステップＳ２１０に移る。一方、信号状態レジスタＳＲＥＧの内容が“１”でないとき（ステップＳ２００のＮｏ）、プロセッサＰＵの動作は、ステップＳ３００に移る。
【００５２】
ステップＳ２１０では、待機制御部ＷＣＮＴは、信号状態レジスタＳＲＥＧの内容を“０”に設定する。これにより、プロセッサＰＵは、通常状態で動作する。信号状態レジスタＳＲＥＧの内容が“０”に設定された後、プロセッサＰＵの動作は、ステップＳ１４０に移る。このように、プロセッサＰＵは、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けた後に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときには、命令を継続して実行する。
【００５３】
ステップＳ３００では、待機制御部ＷＣＮＴは、待機レジスタＷＲＥＧの内容を“１”に設定する。これにより、プロセッサＰＵは、待機状態で動作する。
【００５４】
ステップＳ３１０では、待機制御部ＷＣＮＴは、信号ＥＳＹＮＣが“１”であるか否かを判定する。すなわち、待機制御部ＷＣＮＴは、待機状態（命令の待ち合わせ）の解除が指示されているか否かを判定する。信号ＥＳＹＮＣが“１”であるとき（ステップＳ３１０のＹｅｓ）、プロセッサＰＵの動作は、ステップＳ３２０に移る。一方、信号ＥＳＹＮＣが“１”でないとき（ステップＳ３１０のＮｏ）、プロセッサＰＵの動作は、ステップＳ３３０に移る。
【００５５】
ステップＳ３２０では、待機制御部ＷＣＮＴは、待機レジスタＷＲＥＧの内容を“０”に設定する。これにより、プロセッサＰＵは、通常状態で動作する。待機レジスタＷＲＥＧの内容が“０”に設定された後、プロセッサＰＵの動作は、ステップＳ１４０に移る。
【００５６】
ステップＳ３３０では、プロセッサＰＵは、１サイクル待機する。１サイクル待機した後、プロセッサＰＵの動作は、ステップＳ３１０に戻る。すなわち、プロセッサＰＵの動作状態は、信号ＥＳＹＮＣが“１”になるまで、待機状態に維持される。
【００５７】
このように、プロセッサＰＵは、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受ける前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したとき、信号ＥＳＹＮＣを受けるまで命令の実行を停止する。なお、アドレスレジスタＡＲＥＧには、例えば、命令の実行を停止するか否かが判定される前に、待ち合わせ対象の命令のアドレスが格納されている。例えば、プロセッサＰＵは、命令の実行を停止するか否かの判定をする前に、待ち合わせ対象の命令のアドレスをアドレスレジスタＡＲＥＧに設定する。
【００５８】
ここで、アドレスレジスタＡＲＥＧの値を設定する命令（以下、セット命令とも称する）を使用する場合、セット命令が実行される前のアドレスレジスタＡＲＥＧの値（初期値）は、例えば、セット命令のアドレスとは異なる値に設定されている。あるいは、セット命令が実行される前のアドレスレジスタＡＲＥＧの値がセット命令のアドレスと一致している場合、例えば、セット命令が実行される前の信号状態レジスタＳＲＥＧの内容は、“１”に設定されていてもよい。あるいは、プロセッサＰＵは、セット命令が実行されるまで、ＰＣ値とアドレスレジスタＡＲＥＧの値との比較結果を実際の比較結果に拘わらず不一致として処理してもよい。
【００５９】
なお、プロセッサＰＵの動作は、この例に限定されない。例えば、プロセッサＰＵは、命令の実行を停止するか否かの判定に、同期用の専用命令（例えば、図８に示すＷａｉｔ命令）を使用してもよい。この場合、例えば、プロセッサＰＵは、ＰＣ値がアドレスレジスタＡＲＥＧの値に到達する前に、同期用の専用命令を実行したときにも、後続の命令の実行を停止してもよい。また、例えば、プロセッサＰＵは、同期用の専用命令を実行する前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときにも、命令の実行を停止してもよい。
【００６０】
図５は、図２に示した命令メモリＩＭＥＭに格納されている命令の一例を示している。すなわち、図５は、図２に示したプロセッサＰＵで実行されるプログラムの一例を示している。なお、図５の星印は、待ち合わせ対象の命令を示している。すなわち、図５の例では、アドレスレジスタＡＲＥＧの値は、“２”に設定されている。また、レジスタｒ０−ｒ１１は、例えば、図２に示したレジスタファイルＲＥＧ内のレジスタを示している。
【００６１】
アドレス０のＡｄｄ１命令では、レジスタｒ０の内容とレジスタｒ１の内容との加算結果がレジスタｒ８に格納される。アドレス１のＳｕｂ１命令では、レジスタｒ２の内容からレジスタｒ３の内容を引いた結果がレジスタｒ９に格納される。アドレス２のＡｄｄ２命令では、レジスタｒ４の内容とレジスタｒ５の内容との加算結果がレジスタｒ１０に格納される。アドレス３のＳｕｂ２命令では、レジスタｒ６の内容からレジスタｒ７の内容を引いた結果がレジスタｒ１１に格納される。
【００６２】
プロセッサＰＵは、例えば、命令メモリＩＭＥＭに格納されている命令（Ａｄｄ１命令、Ｓｕｂ１命令、Ａｄｄ２命令、Ｓｕｂ２命令）をアドレス０の命令（Ａｄｄ１命令）から順に読み込み、読み込んだ命令を順次実行する。なお、アドレス２のＡｄｄ２命令は、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣがプロセッサＰＵに到達した後に実行される。
【００６３】
図６は、図５に示した命令を実行したときのプロセッサＰＵの動作の一例を示している。なお、図６は、プロセッサＰＵの動作状態が待機状態のときに、信号ＥＳＹＮＣが“１”になる場合のプロセッサＰＵの動作の一例を示している。図６の実行部ＥＸＥＣ（ＩＮ１）、ＥＸＥＣ（ＩＮ２）の欄は、レジスタファイルＲＥＧから実行部ＥＸＥＣに転送されたレジスタの内容を示している。また、図６のレジスタファイルＲＥＧ（ＷＢ）の欄は、パイプラインレジスタＰＲＥＧからレジスタファイルＲＥＧにライトバックされた実行結果を示している。アドレスレジスタＡＲＥＧは、待ち合わせ対象の命令（Ａｄｄ２命令）のアドレスを示すアドレス値“２”を予め保持している。
【００６４】
サイクル１では、信号ＥＳＹＮＣは、“０”である。また、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧの内容は、両方とも“０”である。したがって、サイクル１では、プロセッサＰＵは、通常状態で動作する。例えば、プロセッサＰＵは、ＰＣ値“０”に対応するアドレス０のＡｄｄ１命令を命令メモリＩＭＥＭから読み込む。これにより、次のサイクル（サイクル２）では、Ａｄｄ１命令が命令レジスタＩＲＥＧに格納されている。また、プログラムカウンタＰＣは、次のサイクル（サイクル２）で読み込む命令のアドレス値“１”にＰＣ値を更新する。
【００６５】
サイクル２では、デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＡｄｄ１命令を解読する。これにより、例えば、次のサイクル（サイクル３）までに、レジスタｒ０、ｒ１の内容がレジスタファイルＲＥＧから実行部ＥＸＥＣに転送される。また、プロセッサＰＵは、ＰＣ値“１”に対応するアドレス１のＳｕｂ１命令を命令メモリＩＭＥＭから読み込む。これにより、次のサイクル（サイクル３）では、Ｓｕｂ１命令が命令レジスタＩＲＥＧに格納されている。プログラムカウンタＰＣは、次のサイクル（サイクル３）で読み込む命令のアドレス値“２”にＰＣ値を更新する。
【００６６】
サイクル３では、実行部ＥＸＥＣは、前のサイクルで転送されたレジスタｒ０、ｒ１の内容を用いた演算（Ａｄｄ１命令）を実行する。これにより、次のサイクル（サイクル４）では、演算結果（Ａｄｄ１命令の実行結果：ｒ０＋ｒ１）がパイプラインレジスタＰＲＥＧに格納されている。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＳｕｂ１命令を解読する。これにより、例えば、次のサイクル（サイクル４）までに、レジスタｒ２、ｒ３の内容がレジスタファイルＲＥＧから実行部ＥＸＥＣに転送される。また、プロセッサＰＵは、ＰＣ値“２”に対応するアドレス２のＡｄｄ２命令を命令メモリＩＭＥＭから読み込む。これにより、次のサイクル（サイクル４）では、Ａｄｄ２命令が命令レジスタＩＲＥＧに格納されている。
【００６７】
なお、制御部ＣＮＴは、ＰＣ値がアドレスレジスタＡＲＥＧの値に一致し、かつ、信号状態レジスタＳＲＥＧの内容が“０”であるため、次のサイクル（サイクル４）の待機レジスタＷＲＥＧの内容を“１”に設定する。これにより、次のサイクル（サイクル４）では、プロセッサＰＵの動作状態は、待機状態に遷移する。さらに、制御部ＣＮＴは、プログラムカウンタＰＣの更新を停止させる。このため、次のサイクル（サイクル４）では、ＰＣ値は、“２”に維持されている。
【００６８】
サイクル４では、待機レジスタＷＲＥＧの内容は、“１”である。このため、プログラムカウンタＰＣの更新は、停止している。また、待機レジスタＷＲＥＧの内容が“１”である期間（待機状態の期間）では、デコード部ＤＥＣ等は、動作を停止する。したがって、サイクル４では、命令レジスタＩＲＥＧに格納されているＡｄｄ２命令の解読は、実行されない。
【００６９】
なお、図５の例では、レジスタｒ２、ｒ３の内容が実行部ＥＸＥＣに既に転送されているため、実行部ＥＸＥＣは、レジスタｒ２、ｒ３の内容を用いた演算（Ｓｕｂ１命令）を実行した後、動作を停止する。このため、次のサイクル（サイクル５）では、演算結果（Ｓｕｂ１命令の実行結果：ｒ２−ｒ３）がパイプラインレジスタＰＲＥＧに格納されている。また、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ１命令の実行結果：ｒ０＋ｒ１）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル５）では、Ａｄｄ１命令の実行結果（ｒ０＋ｒ１）がレジスタファイルＲＥＧに格納されている。
【００７０】
サイクル５では、待機レジスタＷＲＥＧの内容が“１”に維持されているため、デコード部ＤＥＣ、実行部ＥＸＥＣ等の動作は、停止している。したがって、サイクル５でも、アドレス２のＡｄｄ２命令は、解読されない。なお、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ１命令の実行結果：ｒ２−ｒ３）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル６）では、Ｓｕｂ１命令の実行結果（ｒ２−ｒ３）がレジスタファイルＲＥＧに格納されている。
【００７１】
また、サイクル５では、信号ＥＳＹＮＣが“１”であり、かつ、待機レジスタＷＲＥＧの内容が“１”であるため、ＰＣ値、待機レジスタＷＲＥＧが更新される。例えば、制御部ＣＮＴは、次のサイクル（サイクル６）の待機レジスタＷＲＥＧの内容を“０”に設定する。これにより、次のサイクル（サイクル６）では、プロセッサＰＵの動作状態は、通常状態に遷移する。また、プログラムカウンタＰＣは、次のサイクル（サイクル６）で読み込む命令のアドレス値“３”にＰＣ値を更新する。
【００７２】
サイクル６では、待機レジスタＷＲＥＧの内容が“０”であるため、プロセッサＰＵは、動作を再開する。例えば、デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＡｄｄ２命令を解読する。これにより、例えば、次のサイクル（サイクル７）までに、レジスタｒ４、ｒ５の内容がレジスタファイルＲＥＧから実行部ＥＸＥＣに転送される。したがって、実行部ＥＸＥＣは、次のサイクル（サイクル７）で演算を再開する。
【００７３】
また、例えば、プロセッサＰＵは、ＰＣ値“３”に対応するアドレス３のＳｕｂ２命令を命令メモリＩＭＥＭから読み込む。これにより、次のサイクル（サイクル７）では、Ｓｕｂ２命令が命令レジスタＩＲＥＧに格納されている。
【００７４】
サイクル７では、実行部ＥＸＥＣは、前のサイクルで転送されたレジスタｒ４、ｒ５の内容を用いた演算（Ａｄｄ２命令）を実行する。これにより、次のサイクル（サイクル８）では、演算結果（Ａｄｄ２命令の実行結果：ｒ４＋ｒ５）がパイプラインレジスタＰＲＥＧに格納されている。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＳｕｂ２命令を解読する。これにより、例えば、次のサイクル（サイクル８）までに、レジスタｒ６、ｒ７の内容がレジスタファイルＲＥＧから実行部ＥＸＥＣに転送される。
【００７５】
サイクル８では、実行部ＥＸＥＣは、前のサイクルで転送されたレジスタｒ６、ｒ７の内容を用いた演算（Ｓｕｂ２命令）を実行する。これにより、次のサイクル（サイクル９）では、演算結果（Ｓｕｂ２命令の実行結果：ｒ６−ｒ７）がパイプラインレジスタＰＲＥＧに格納されている。また、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ２命令の実行結果：ｒ４＋ｒ５）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル９）では、Ａｄｄ２命令の実行結果（ｒ４＋ｒ５）がレジスタファイルＲＥＧに格納されている。
【００７６】
サイクル９では、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ２命令の実行結果：ｒ６−ｒ７）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル１０）では、Ｓｕｂ２命令の実行結果（ｒ６−ｒ７）がレジスタファイルＲＥＧに格納されている。
【００７７】
このように、プロセッサＰＵは、待ち合わせ対象の命令（Ａｄｄ２命令）の実行を、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けるまで待機する。これにより、プロセッサＰＵは、他のプロセッサ等の動作に同期させて、プログラムを実行できる。
【００７８】
なお、プロセッサＰＵの動作は、この例に限定されない。例えば、実行部ＥＸＥＣがデコード部ＤＥＣからの動作指示やレジスタファイルＲＥＧから転送されたレジスタの内容を保持する記憶部等を有している場合、Ｓｕｂ１命令をサイクル６で実行してもよい。
【００７９】
図７は、図５に示した命令を実行したときのプロセッサＰＵの動作の別の例を示している。なお、図７は、プロセッサＰＵの動作状態が通常状態のときに、信号ＥＳＹＮＣが“１”になる場合のプロセッサＰＵの動作の一例を示している。すなわち、図７の例では、ＰＣ値が“２”になる前に、信号ＥＳＹＮＣが“１”になる。図６で説明した動作と同様の動作については、詳細な説明を省略する。アドレスレジスタＡＲＥＧは、待ち合わせ対象の命令（Ａｄｄ２命令）のアドレスを示すアドレス値“２”を予め保持している。
【００８０】
サイクル１では、待機レジスタＷＲＥＧおよび信号状態レジスタＳＲＥＧの内容は、両方とも“０”である。したがって、サイクル１では、プロセッサＰＵは、通常状態で動作する。例えば、プロセッサＰＵは、ＰＣ値“０”に対応するアドレス０のＡｄｄ１命令を命令メモリＩＭＥＭから読み込む。そして、プログラムカウンタＰＣは、ＰＣ値を更新する。
【００８１】
また、サイクル１では、信号ＥＳＹＮＣが“１”であり、かつ、待機レジスタＷＲＥＧの内容が“０”であるため、制御部ＣＮＴは、次のサイクル（サイクル２）の信号状態レジスタＳＲＥＧの内容を“１”に設定する。これにより、次のサイクル（サイクル２）では、プロセッサＰＵの動作状態は、受け付け状態に遷移する。
【００８２】
サイクル２では、デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＡｄｄ１命令を解読する。また、プロセッサＰＵは、ＰＣ値“１”に対応するアドレス１のＳｕｂ１命令を命令メモリＩＭＥＭから読み込む。そして、プログラムカウンタＰＣは、ＰＣ値を更新する。
【００８３】
サイクル３では、実行部ＥＸＥＣは、レジスタｒ０、ｒ１の内容を用いた演算（Ａｄｄ１命令）を実行する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＳｕｂ１命令を解読する。また、プロセッサＰＵは、ＰＣ値“２”に対応するアドレス２のＡｄｄ２命令を命令メモリＩＭＥＭから読み込む。
【００８４】
なお、制御部ＣＮＴは、ＰＣ値がアドレスレジスタＡＲＥＧの値に一致し、かつ、信号状態レジスタＳＲＥＧの内容が“１”であるため、次のサイクル（サイクル４）の信号状態レジスタＳＲＥＧの内容を“０”に設定する。なお、待機レジスタＷＲＥＧの内容は、“０”に維持される。これにより、次のサイクル（サイクル４）では、プロセッサＰＵの動作状態は、通常状態に遷移する。
【００８５】
すなわち、ＰＣ値がアドレスレジスタＡＲＥＧの値“２”と一致する前に、信号ＥＳＹＮＣが“１”になる場合、プロセッサＰＵの動作は、停止しない。例えば、プログラムカウンタＰＣは、次のサイクル（サイクル４）で読み込む命令のアドレス値“３”にＰＣ値を更新する。
【００８６】
サイクル４では、実行部ＥＸＥＣは、レジスタｒ２、ｒ３の内容を用いた演算（Ｓｕｂ１命令）を実行する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＡｄｄ２命令を解読する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ１命令の実行結果：ｒ０＋ｒ１）をレジスタファイルＲＥＧにライトバックする。また、プロセッサＰＵは、ＰＣ値“３”に対応するアドレス３のＳｕｂ２命令を命令メモリＩＭＥＭから読み込む。
【００８７】
サイクル５では、実行部ＥＸＥＣは、レジスタｒ４、ｒ５の内容を用いた演算（Ａｄｄ２命令）を実行する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＳｕｂ２命令を解読する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ１命令の実行結果：ｒ２−ｒ３）をレジスタファイルＲＥＧにライトバックする。
【００８８】
サイクル６では、実行部ＥＸＥＣは、レジスタｒ６、ｒ７の内容を用いた演算（Ｓｕｂ２命令）を実行する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ２命令の実行結果：ｒ４＋ｒ５）をレジスタファイルＲＥＧにライトバックする。
【００８９】
サイクル７では、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ２命令の実行結果：ｒ６−ｒ７）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル８）では、Ｓｕｂ２命令の実行結果（ｒ６−ｒ７）がレジスタファイルＲＥＧに格納されている。
【００９０】
このように、制御部ＣＮＴは、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受けた後に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときには、命令の実行を継続させる。すなわち、プロセッサＰＵは、ＰＣ値がアドレスレジスタＡＲＥＧの値“２”と一致する前に、信号ＥＳＹＮＣが“１”になる場合、待ち合わせ対象の命令（Ａｄｄ２命令）の実行を、停止させずに実行できる。この場合、プロセッサＰＵは、同期用の専用命令（例えば、図８に示すＷａｉｔ命令）を使用する方法に比べて、プログラムの実行サイクル数を削減できる。
【００９１】
図８は、図７に示した動作の比較例を示している。なお、図８は、図８の備考に示した命令を実行したときのプロセッサの動作の一例を示している。すなわち、図８は、命令の実行の停止にＷａｉｔ命令を使用したときのプロセッサの動作の一例を示している。Ｗａｉｔ命令は、例えば、後続の命令を停止させるときに用いられる命令である。したがって、図８の例では、ＰＣ値が待ち合わせ対象の命令（Ａｄｄ２命令）のアドレスと一致したか否かの判定は、実行されない。
【００９２】
図８の備考に示すように、Ｗａｉｔ命令は、待ち合わせ対象の命令（Ａｄｄ２命令）の前に挿入されている。図８の例では、ＰＣ値がＷａｉｔ命令のアドレスを示す値“２”になる前に、信号ＥＳＹＮＣが“１”になる。図６および図７で説明した動作と同様の動作については、詳細な説明を省略する。なお、図２に示したプロセッサＰＵはＷａｉｔ命令を実装していてもよいため、図８の動作を図２に示したプロセッサＰＵの符号を用いて説明する。
【００９３】
サイクル１およびサイクル２の動作は、図７に示したサイクル１およびサイクル２の動作と同様である。例えば、サイクル１では、プロセッサＰＵは、通常状態で動作する。そして、サイクル２では、プロセッサＰＵは、受け付け状態で動作する。
【００９４】
サイクル３の動作は、信号状態レジスタＳＲＥＧの制御を除いて、図７に示したサイクル３の動作と同様である。例えば、プロセッサＰＵは、ＰＣ値“２”に対応するアドレス２のＷａｉｔ命令を命令メモリＩＭＥＭから読み込む。なお、サイクル３では、信号状態レジスタＳＲＥＧの更新は、実行されない。したがって、次のサイクル（サイクル４）でも、信号状態レジスタＳＲＥＧの内容は、“１”に維持される。すなわち、サイクル３およびサイクル４では、プロセッサＰＵは、受け付け状態で動作する。
【００９５】
サイクル４では、実行部ＥＸＥＣは、レジスタｒ２、ｒ３の内容を用いた演算（Ｓｕｂ１命令）を実行する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＷａｉｔ命令を解読する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ１命令の実行結果：ｒ０＋ｒ１）をレジスタファイルＲＥＧにライトバックする。また、プロセッサＰＵは、ＰＣ値“３”に対応するアドレス３のＡｄｄ２命令を命令メモリＩＭＥＭから読み込む。
【００９６】
また、制御部ＣＮＴは、解読された命令がＷａｉｔ命令であるため、次のサイクル（サイクル５）の信号状態レジスタＳＲＥＧの内容を“０”に設定する。なお、待機レジスタＷＲＥＧの内容は、“０”に維持される。これにより、次のサイクル（サイクル５）では、プロセッサＰＵの動作状態は、通常状態に遷移する。
【００９７】
サイクル５では、実行部ＥＸＥＣは、演算対象が存在しないため、演算を実行しない。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＡｄｄ２命令を解読する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ１命令の実行結果：ｒ２−ｒ３）をレジスタファイルＲＥＧにライトバックする。また、プロセッサＰＵは、ＰＣ値“４”に対応するアドレス４のＳｕｂ２命令を命令メモリＩＭＥＭから読み込む。
【００９８】
サイクル６では、実行部ＥＸＥＣは、レジスタｒ４、ｒ５の内容を用いた演算（Ａｄｄ２命令）を実行する。デコード部ＤＥＣは、命令レジスタＩＲＥＧに格納されているＳｕｂ２命令を解読する。パイプラインレジスタＰＲＥＧは、前のサイクル（サイクル５）の演算結果を実行部ＥＸＥＣから受けていないため、ライトバックを実行しない。
【００９９】
サイクル７では、実行部ＥＸＥＣは、レジスタｒ６、ｒ７の内容を用いた演算（Ｓｕｂ２命令）を実行する。パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ａｄｄ２命令の実行結果：ｒ４＋ｒ５）をレジスタファイルＲＥＧにライトバックする。
【０１００】
サイクル８では、パイプラインレジスタＰＲＥＧは、既に保持している演算結果（Ｓｕｂ２命令の実行結果：ｒ６−ｒ７）をレジスタファイルＲＥＧにライトバックする。これにより、次のサイクル（サイクル９）では、Ｓｕｂ２命令の実行結果（ｒ６−ｒ７）がレジスタファイルＲＥＧに格納されている。
【０１０１】
このように、命令の実行の停止にＷａｉｔ命令を使用した図８の動作では、図７の動作に比べて、Ｗａｉｔ命令の実行サイクル数（図８では、１サイクル）分だけ、プログラムの実行サイクル数が増加する。換言すれば、図１から図７に示した実施形態では、命令の実行の停止にＷａｉｔ命令を使用する方法に比べて、プログラムの実行サイクル数を削減できる。
【０１０２】
以上、図１から図７に示した実施形態では、プロセッサＰＵは、待ち合わせ対象の命令のアドレスを保持するアドレスレジスタＡＲＥＧと、制御部ＣＮＴとを有している。制御部ＣＮＴは、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときに、命令の実行を停止するか否かを判定する。例えば、制御部ＣＮＴは、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣを受ける前に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したとき、信号ＥＳＹＮＣを受けるまで命令の実行を停止させる。また、制御部ＣＮＴは、信号ＥＳＹＮＣを受けた後に、ＰＣ値がアドレスレジスタＡＲＥＧの値と一致したときには、命令の実行を継続させる。
【０１０３】
このように、この実施形態のプロセッサＰＵおよびプロセッサＰＵの動作方法では、同期用の専用命令（例えば、図８に示したＷａｉｔ命令）を使用せずに、命令の実行を停止するか否かを判定できる。このため、この実施形態では、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制できる。例えば、この実施形態では、待ち合わせの解除条件を満たしている場合、Ｗａｉｔ命令を実行することによる実行サイクル数の増加が発生しないため、実行サイクル数の増加を抑制できる。
【０１０４】
図９は、プロセッサの別の実施形態を示している。図９の破線の矢印は、信号の流れを示している。この実施形態のプロセッサＰＵ２では、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮが図１に示したプロセッサＰＵに追加されている。図９に示したプロセッサＰＵ２のその他の構成は、図１に示したプロセッサＰＵと同様である。図１から図７で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１０５】
プロセッサＰＵ２は、プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ、制御部ＣＮＴ、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮを有している。プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧおよび制御部ＣＮＴは、図１に示したプログラムカウンタＰＣ、アドレスレジスタＡＲＥＧおよび制御部ＣＮＴと同様である。なお、信号ＥＳＹＮＣ１は、図１に示した信号ＥＳＹＮＣに対応している。
【０１０６】
アドレスレジスタＡＲＥＧ２は、第２アドレス値を保持する第２保持部の一例である。例えば、アドレスレジスタＡＲＥＧ２に保持されているアドレスに対応する命令が実行されたとき、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ２が外部に出力される。アドレスレジスタＡＲＥＧ２に保持されているアドレスに対応する命令の実行結果は、例えば、プロセッサＰＵ２とは別のプロセッサで実行されるスレッドで使用される。なお、プロセッサＰＵ２には、例えば、アドレスレジスタＡＲＥＧ２に値を設定する命令が用意されている。
【０１０７】
信号生成部ＳＧＥＮは、例えば、アドレスレジスタＡＲＥＧ２の値およびＰＣ値をアドレスレジスタＡＲＥＧ２およびプログラムカウンタＰＣからそれぞれ受ける。そして、信号生成部ＳＧＥＮは、ＰＣ値がアドレスレジスタＡＲＥＧ２の値と一致したとき、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ２を外部に出力する。例えば、信号生成部ＳＧＥＮは、ＰＣ値がアドレスレジスタＡＲＥＧ２の値と一致したとき、信号ＥＳＹＮＣ２をアサートする。これにより、プロセッサＰＵ２は、プロセッサＰＵ２とは別のプロセッサに、命令の待ち合わせの解除を指示できる。
【０１０８】
図１０は、図９に示したプロセッサＰＵ２の一例を示している。図１０の破線の矢印は、信号の流れを示している。図１０に示したプロセッサＰＵ２では、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮが図２に示したプロセッサＰＵに追加されている。図１０に示したプロセッサＰＵ２のその他の構成は、図２に示したプロセッサＰＵと同様である。図１から図９で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１０９】
例えば、プロセッサＰＵ２は、プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ、ＡＲＥＧ２、制御部ＣＮＴ、信号生成部ＳＧＥＮ、命令レジスタＩＲＥＧ、デコード部ＤＥＣ、レジスタファイルＲＥＧ、実行部ＥＸＥＣおよびパイプラインレジスタＰＲＥＧを有している。
【０１１０】
アドレスレジスタＡＲＥＧ、ＡＲＥＧ２の値は、例えば、実行部ＥＸＥＣにより設定される。例えば、アドレスレジスタＡＲＥＧに値を設定する命令では、実行部ＥＸＥＣは、命令で指定されたアドレス値をアドレスレジスタＡＲＥＧに設定する。また、アドレスレジスタＡＲＥＧ２に値を設定する命令では、実行部ＥＸＥＣは、命令で指定されたアドレス値をアドレスレジスタＡＲＥＧ２に設定する。
【０１１１】
なお、プロセッサＰＵ２の構成は、この例に限定されない。例えば、デコード部ＤＥＣと実行部ＥＸＥＣとの間にパイプラインレジスタが配置されてもよい。また、プロセッサＰＵ２は、複数のプロセッサコアを有するマルチコアプロセッサでもよい。この場合、マルチコアプロセッサ内の各プロセッサコアの構成は、例えば、図１０に示したプロセッサＰＵ２と同様である。
【０１１２】
図１１は、図１０に示したプロセッサＰＵ２が搭載されるシステムの一例を示している。図１１の破線の矢印は、信号の流れを示している。システムは、２つのプロセッサＰＵ２（ＰＵ２ａ、ＰＵ２ｂ）と、２つのプロセッサＰＵ２にそれぞれ接続されている命令メモリＩＭＥＭ（ＩＭＥＭａ、ＩＭＥＭｂ）とを有している。例えば、プロセッサＰＵ２ａ、ＰＵ２ｂは、互いに同期して動作する。例えば、信号ＥＳＹＮＣａは、プロセッサＰＵ２ａからプロセッサＰＵ２ｂへの同期信号である。また、信号ＥＳＹＮＣｂは、プロセッサＰＵ２ｂからプロセッサＰＵ２ａへの同期信号である。
【０１１３】
プロセッサＰＵ２ａに着目した場合、信号ＥＳＹＮＣａ、ＥＳＹＮＣｂは、図１０に示した信号ＥＳＹＮＣ２、ＥＳＹＮＣ１にそれぞれ対応している。また、プロセッサＰＵ２ｂに着目した場合、信号ＥＳＹＮＣａ、ＥＳＹＮＣｂは、図１０に示した信号ＥＳＹＮＣ１、ＥＳＹＮＣ２にそれぞれ対応している。
【０１１４】
図１２は、図１１に示した命令メモリＩＭＥＭａ、ＩＭＥＭｂに格納されている命令の一例を示している。すなわち、図１２は、図１１に示したプロセッサＰＵ２ａ、ＰＵ２ｂで実行されるプログラムの一例を示している。なお、図１２の星印は、待ち合わせ対象の命令を示している。すなわち、図１２の星印は、各プロセッサＰＵ２ａ、ＰＵ２ｂのアドレスレジスタＡＲＥＧに設定されるアドレスに対応する命令を示している。また、図１２の丸印は、各プロセッサＰＵ２ａ、ＰＵ２ｂのアドレスレジスタＡＲＥＧ２に設定されるアドレスに対応する命令を示している。
【０１１５】
先ず、命令メモリＩＭＥＭａに格納されている命令について説明する。
【０１１６】
アドレス０のＳＥＴ＿ＳＹＮＣ命令は、アドレスレジスタＡＲＥＧの値を“４”に設定し、信号状態レジスタＳＲＥＧの初期値を“０”に設定する。これにより、アドレス４のＥｘｅｃ１命令が待ち合わせ対象の命令として設定される。アドレス１のＳＥＴ＿ＳＩＧＮＡＬ命令は、アドレスレジスタＡＲＥＧ２の値を“６”に設定する。これにより、プロセッサＰＵ２ａは、例えば、アドレス６のＥｘｅｃ３命令の実行時に、信号ＥＳＹＮＣａをプロセッサＰＵ２ｂに出力する。
【０１１７】
アドレス２のＦＯＲＫ＿ＴＨＲＥＡＤ命令は、プロセッサＰＵ２ｂで実行するスレッドを作成する。アドレス３のＬｏｏｐ命令は、ループの開始地点を表している。アドレス４からアドレス６までのＥｘｅｃ１命令、Ｅｘｅｃ２命令、Ｅｘｅｃ３命令は、所定のデータを使用する処理を表している。例えば、Ｅｘｅｃ１命令、Ｅｘｅｃ２命令、Ｅｘｅｃ３命令で使用されるデータは、プロセッサＰＵ２ｂが読み込んだデータである。アドレス７のＮｅｘｔ＿Ｌｏｏｐ命令は、ループの終端を表している。
【０１１８】
次に、命令メモリＩＭＥＭｂに格納されている命令について説明する。
【０１１９】
アドレス０のＳＥＴ＿ＳＹＮＣ命令は、アドレスレジスタＡＲＥＧの値を“４”に設定し、信号状態レジスタＳＲＥＧの初期値を“１”に設定する。これにより、アドレス４のＲｅａｄ１命令が待ち合わせ対象の命令として設定される。また、信号状態レジスタＳＲＥＧの初期値が“１”に設定されるため、Ｒｅａｄ１命令が最初に実行されるときは、Ｒｅａｄ１命令は、待ち合わせずに実行される。
【０１２０】
アドレス１のＳＥＴ＿ＳＩＧＮＡＬ命令は、アドレスレジスタＡＲＥＧ２の値を“６”に設定する。これにより、プロセッサＰＵ２ｂは、例えば、アドレス６のＲｅａｄ３命令の実行時に、信号ＥＳＹＮＣｂをプロセッサＰＵ２ａに出力する。アドレス２のＬｏｏｐ命令は、ループの開始地点を表している。
【０１２１】
アドレス３のＭａｋｅ＿ａｄｄｒ命令は、読み込みを行うアドレスを計算する。アドレス４からアドレス６までのＲｅａｄ１命令、Ｒｅａｄ２命令、Ｒｅａｄ３命令は、Ｍａｋｅ＿ａｄｄｒ命令で計算したアドレスに基づいてメモリからデータを読み込む。アドレス７のＮｅｘｔ＿Ｌｏｏｐ命令は、ループの終端を表している。
【０１２２】
なお、ＳＥＴ＿ＳＹＮＣ命令が実行される前のアドレスレジスタＡＲＥＧの値（初期値）は、例えば、ＳＥＴ＿ＳＹＮＣ命令のアドレスとは異なる値に設定されている。あるいは、ＳＥＴ＿ＳＹＮＣ命令が実行される前のアドレスレジスタＡＲＥＧの値がＳＥＴ＿ＳＹＮＣ命令のアドレスと一致している場合、例えば、ＳＥＴ＿ＳＹＮＣ命令が実行される前の信号状態レジスタＳＲＥＧの内容は、“１”に設定されていてもよい。あるいは、プロセッサＰＵ２は、ＳＥＴ＿ＳＹＮＣ命令が実行されるまで、ＰＣ値とアドレスレジスタＡＲＥＧの値との比較結果を実際の比較結果に拘わらず不一致として処理してもよい。
【０１２３】
図１３は、図１２に示した命令を実行したときのプロセッサＰＵ２ａ、ＰＵ２ｂの動作の一例を示している。図１１の破線の矢印は、信号の流れを示している。例えば、符号ｆｏｒｋは、プロセッサＰＵ２ａがプロセッサＰＵ２ｂのスレッドを起動することを示している。
【０１２４】
サイクル１およびサイクル２では、プロセッサＰＵ２ａのみが動作する。例えば、サイクル１では、プロセッサＰＵ２ａは、ＳＥＴ＿ＳＹＮＣ命令を実行する。これにより、プロセッサＰＵ２ａのアドレス４のＥｘｅｃ１命令が待ち合わせ対象の命令として設定される。また、サイクル２では、プロセッサＰＵ２ａは、ＳＥＴ＿ＳＩＧＮＡＬ命令を実行する。
【０１２５】
サイクル３では、プロセッサＰＵ２ａのアドレス２のＦＯＲＫ＿ＴＨＲＥＡＤ命令により、プロセッサＰＵ２ｂのスレッドが起動する。例えば、プロセッサＰＵ２ｂは、ＳＥＴ＿ＳＹＮＣ命令を実行する。これにより、プロセッサＰＵ２ｂのアドレス４のＲｅａｄ１命令が待ち合わせ対象の命令として設定される。サイクル４では、プロセッサＰＵ２ａは、ループの開始処理を実行する。また、プロセッサＰＵ２ｂは、ＳＥＴ＿ＳＩＧＮＡＬ命令を実行する。
【０１２６】
サイクル５では、プロセッサＰＵ２ａは、信号状態レジスタＳＲＥＧの内容が“０”であるため、Ｅｘｅｃ１命令（待ち合わせ対象の命令）の実行を待機する。すなわち、プロセッサＰＵ２ａの動作状態は、実行対象が待ち合わせ対象の命令（アドレス４のＥｘｅｃ１命令）に到達すると、信号状態レジスタＳＲＥＧの内容が“０”であるため、待機状態に遷移する。プロセッサＰＵ２ａの待機状態は、例えば、プロセッサＰＵ２ｂがアドレス６のＲｅａｄ３命令を実行するまで続く。また、サイクル５では、プロセッサＰＵ２ｂは、ループの開始処理を実行する。サイクル６では、プロセッサＰＵ２ｂは、Ｍａｋｅ＿ａｄｄｒ命令を実行する。
【０１２７】
サイクル７では、プロセッサＰＵ２ｂは、信号状態レジスタＳＲＥＧの内容が“１”であるため、Ｒｅａｄ１命令（待ち合わせ対象の命令）を実行する。すなわち、プロセッサＰＵ２ｂは、実行対象が待ち合わせ対象の命令（アドレス４のＲｅａｄ１命令）に到達したとき、信号状態レジスタＳＲＥＧの内容が“１”であるため、Ｒｅａｄ１命令を待機せずに実行する。なお、信号状態レジスタＳＲＥＧの内容は、次のサイクル（サイクル８）までに、“０”に設定される。
【０１２８】
サイクル８では、プロセッサＰＵ２ｂは、Ｒｅａｄ２命令を実行する。サイクル９では、プロセッサＰＵ２ｂは、Ｒｅａｄ３命令を実行する。また、プロセッサＰＵ２ｂは、アドレスレジスタＡＲＥＧ２の値が“６”に設定されているため、アドレス６のＲｅａｄ３命令の実行時に、信号ＥＳＹＮＣｂをプロセッサＰＵ２ａに出力する。これにより、プロセッサＰＵ２ａの動作状態は、次のサイクル（サイクル１０）で通常状態に遷移する。このように、プロセッサＰＵ２ｂは、同期用の信号ＥＳＹＮＣｂを、専用命令を使用せずにプロセッサＰＵ２ａに出力できる。すなわち、プロセッサＰＵ２ｂは、実行サイクル数の増加を抑制しつつ、同期用の信号ＥＳＹＮＣｂをプロセッサＰＵ２ａに出力できる。
【０１２９】
サイクル１０では、プロセッサＰＵ２ａは、Ｅｘｅｃ１命令の待ち合わせを解除し、Ｅｘｅｃ１命令を実行する。プロセッサＰＵ２ｂは、ループの終端処理を実行する。サイクル１１では、プロセッサＰＵ２ａは、Ｅｘｅｃ２命令を実行する。プロセッサＰＵ２ｂは、Ｍａｋｅ＿ａｄｄｒ命令を実行する。
【０１３０】
サイクル１２では、プロセッサＰＵ２ｂは、信号状態レジスタＳＲＥＧの内容が“０”であるため、Ｒｅａｄ１命令（待ち合わせ対象の命令）の実行を待機する。すなわち、プロセッサＰＵ２ｂの動作状態は、実行対象が待ち合わせ対象の命令（アドレス４のＲｅａｄ１命令）に到達すると、信号状態レジスタＳＲＥＧの内容が“０”であるため、待機状態に遷移する。
【０１３１】
プロセッサＰＵ２ａは、Ｅｘｅｃ３命令を実行する。また、プロセッサＰＵ２ａは、アドレスレジスタＡＲＥＧ２の値が“６”に設定されているため、アドレス６のＥｘｅｃ３命令の実行時に、信号ＥＳＹＮＣａをプロセッサＰＵ２ｂに出力する。これにより、プロセッサＰＵ２ｂの動作状態は、次のサイクル（サイクル１３）で通常状態に遷移する。このように、プロセッサＰＵ２ａは、同期用の信号ＥＳＹＮＣａを、専用命令を使用せずにプロセッサＰＵ２ｂに出力できる。すなわち、プロセッサＰＵ２ａは、実行サイクル数の増加を抑制しつつ、同期用の信号ＥＳＹＮＣａをプロセッサＰＵ２ｂに出力できる。
【０１３２】
サイクル１３では、プロセッサＰＵ２ａは、ループの終端処理を実行する。プロセッサＰＵ２ｂは、Ｒｅａｄ１命令の待ち合わせを解除し、Ｒｅａｄ１命令を実行する。以降、このような動作が繰り返して実行される。このように、プロセッサＰＵ２ａ、ＰＵ２ｂは、２つのスレッドを同期させながら全体の処理を実行する。
【０１３３】
以上、図９から図１３で説明した実施形態においても、図１から図８で説明した実施形態と同様の効果を得ることができる。例えば、この実施形態では、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制できる。さらに、この実施形態では、プロセッサＰＵ２は、信号ＥＳＹＮＣ２の出力タイミングを示す情報（アドレス値）を保持するアドレスレジスタＡＲＥＧ２と、信号生成部ＳＧＥＮとを有している。これにより、プロセッサＰＵ２は、実行サイクル数の増加を抑制しつつ、他のプロセッサＰＵ２等に、命令の待ち合わせの解除を指示できる。
【０１３４】
例えば、プロセッサＰＵ２の信号生成部ＳＧＥＮは、ＰＣ値がアドレスレジスタＡＲＥＧ２の値と一致したとき、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ２を他のプロセッサＰＵ２に出力する。すなわち、プロセッサＰＵ２は、同期用の信号ＥＳＹＮＣ２を、他のプロセッサＰＵ２に専用命令を使用せずに出力できる。この結果、複数のプロセッサＰＵ２は、実行サイクル数の増加を抑制しつつ、それぞれのスレッドを同期させながら全体の処理を実行できる。
【０１３５】
図１４は、プロセッサの別の実施形態を示している。図１４の破線の矢印は、信号の流れを示している。図１から図１３で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。
【０１３６】
プロセッサＰＵ３は、プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮを有している。プログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮは、例えば、図９に示したプログラムカウンタＰＣ、アドレスレジスタＡＲＥＧ２および信号生成部ＳＧＥＮと同様である。
【０１３７】
また、プロセッサＰＵ３は、例えば、後続の命令を停止させるときに用いられるＷａｉｔ命令を実装している。例えば、プロセッサＰＵ３は、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ１を受ける前に、Ｗａｉｔ命令を実行した場合、Ｗａｉｔ命令の後続の命令の実行を停止する。そして、プロセッサＰＵ３は、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ１を受けたとき、命令の実行を再開する。なお、Ｗａｉｔ命令を実行する前に信号ＥＳＹＮＣ１を受けたときのプロセッサＰＵ３の動作は、図８に示した動作と同様である。
【０１３８】
以上、図９から図１３で説明した実施形態においても、待ち合わせ対象の命令を含むプログラムの実行サイクル数の増加を抑制できる。例えば、この実施形態では、プロセッサＰＵ２は、信号ＥＳＹＮＣ２の出力タイミングを示す情報（アドレス値）を保持するアドレスレジスタＡＲＥＧ２と、信号生成部ＳＧＥＮとを有している。信号生成部ＳＧＥＮは、例えば、ＰＣ値がアドレスレジスタＡＲＥＧ２の値と一致したとき、命令の待ち合わせの解除を指示する信号ＥＳＹＮＣ２を他のプロセッサＰＵ２に出力する。これにより、プロセッサＰＵ２は、実行サイクル数の増加を抑制しつつ、他のプロセッサＰＵ２等に、命令の待ち合わせの解除を指示できる。この結果、複数のプロセッサＰＵ２は、実行サイクル数の増加を抑制しつつ、それぞれのスレッドを同期させながら全体の処理を実行できる。
【０１３９】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
第１アドレス値を保持する第１保持部と、
プログラムカウンタの値が前記第１アドレス値と一致したときに、命令の実行を停止するか否かを判定する制御部と
を備えていることを特徴とするプロセッサ。
（付記２）
付記１記載のプロセッサにおいて、
前記制御部は、前記命令の待ち合わせの解除を指示する第１信号を受ける前に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記第１信号を受けるまで前記命令の実行を停止させ、前記第１信号を受けた後に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記命令の実行を継続させること
を特徴とするプロセッサ。
（付記３）
付記１または付記２に記載のプロセッサにおいて、
第２アドレス値を保持する第２保持部と、
前記プログラムカウンタの値が前記第２アドレス値と一致したとき、命令の待ち合わせの解除を指示する第２信号を外部に出力する信号生成部と
を備えていることを特徴とするプロセッサ。
（付記４）
所定のアドレス値を保持する保持部と、
プログラムカウンタの値が前記所定のアドレス値と一致したとき、命令の待ち合わせの解除を指示する信号を外部に出力する信号生成部と
を備えていることを特徴とするプロセッサ。
（付記５）
第１アドレス値を設定し、
プログラムカウンタの値が前記第１アドレス値と一致したときに、命令の実行を停止するか否かを判定すること
を特徴とするプロセッサの動作方法。
（付記６）
付記５記載のプロセッサの動作方法において、
前記命令の待ち合わせの解除を指示する第１信号を受ける前に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記第１信号を受けるまで前記命令の実行を停止し、前記第１信号を受けた後に、前記プログラムカウンタの値が前記第１アドレス値と一致したときには、前記命令の実行を継続すること
を特徴とするプロセッサの動作方法。
（付記７）
付記５または付記６に記載のプロセッサの動作方法において、
第２アドレス値を設定し、
前記プログラムカウンタの値が前記第２アドレス値と一致したとき、命令の待ち合わせの解除を指示する第２信号を外部に出力すること
を特徴とするプロセッサの動作方法。
（付記８）
所定のアドレス値を設定し、
プログラムカウンタの値が前記所定のアドレス値と一致したとき、命令の待ち合わせの解除を指示する信号を外部に出力すること
を特徴とするプロセッサの動作方法。
【０１４０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１４１】
ＡＲＥＧ、ＡＲＥＧ２‥アドレスレジスタ；ＣＭＰ‥一致検出回路；ＣＮＴ‥制御部；ＤＥＣ‥デコード部；ＥＸＥＣ‥実行部；ＩＭＥＭ、ＩＭＥＭａ、ＩＭＥＭｂ‥命令メモリ；ＩＲＥＧ‥命令レジスタ；ＰＣ‥プログラムカウンタ；ＰＲＥＧ‥パイプラインレジスタ；ＰＵ、ＰＵ２、ＰＵ２ａ、ＰＵ２ｂ、ＰＵ３‥プロセッサ；ＲＥＧ‥レジスタファイル；ＳＧＥＮ‥信号生成部；ＳＲＥＧ‥信号状態レジスタ；ＷＣＮＴ‥待機制御部；ＷＲＥＧ‥待機レジスタ
【図１】
2014182545.tif 000003
【図２】
2014182545.tif 000004
【図３】
2014182545.tif 000005
【図４】
2014182545.tif 000006
【図５】
2014182545.tif 000007
【図６】
2014182545.tif 000008
【図７】
2014182545.tif 000009
【図８】
2014182545.tif 000010
【図９】
2014182545.tif 000011
【図１０】
2014182545.tif 000012
【図１１】
2014182545.tif 000013
【図１２】
2014182545.tif 000014
【図１３】
2014182545.tif 000015
【図１４】
2014182545.tif 000016