(57)【要約】【課題】  実行中の複数の命令が同じレジスタにアクセスするときにも、命令間のデータ依存を守る。【解決手段】  プロセッサは、データが格納されるレジスタと、実行中の複数の命令のそれぞれに割り当て可能な数のフラグを含むフラグ群を、レジスタ毎に有する少なくとも１つのフラグテーブルと、レジスタにアクセスする命令の発行に応じて、命令によりアクセスされるレジスタに対応するフラグ群のうちの命令に割り当てられるフラグを、セットするフラグセット部と、命令の発行に応じてセットされたフラグを、命令によるレジスタに対するアクセスの終了に応じてリセットするフラグリセット部と、アクセス対象のレジスタに対応するフラグ群の状態に基づいてレジスタにアクセスするか否かを判定する判定部とを有している。【選択図】  図１
2014041422.tif 000002
【特許請求の範囲】
【請求項１】
データが格納されるレジスタと、
実行中の複数の命令のそれぞれに割り当て可能な数のフラグを含むフラグ群を、前記レジスタ毎に有する少なくとも１つのフラグテーブルと、
前記レジスタにアクセスする命令の発行に応じて、前記命令によりアクセスされる前記レジスタに対応する前記フラグ群のうちの前記命令に割り当てられるフラグを、セットするフラグセット部と、
前記命令の発行に応じてセットされた前記フラグを、前記命令による前記レジスタに対するアクセスの終了に応じてリセットするフラグリセット部と、
アクセス対象の前記レジスタに対応する前記フラグ群の状態に基づいて前記レジスタにアクセスするか否かを判定する判定部と
を備えていることを特徴とするプロセッサ。
【請求項２】
前記フラグテーブルは、少なくとも２つであり、
前記フラグテーブルの１つの前記フラグテーブルの前記フラグは、前記レジスタに対する書き込みが終了したか否かを示し、
前記フラグテーブルの残りの１つの前記フラグテーブルの前記フラグは、前記レジスタに対する読み出しが終了したか否かを示すこと
を特徴とする請求項１記載のプロセッサ。
【請求項３】
前記フラグのセットと前記フラグのリセットとは、パイプライン処理の互いに異なるステージで実行されること
を特徴とする請求項１または請求項２に記載のプロセッサ。
【請求項４】
前記アクセス対象の前記レジスタに対応する前記フラグ群から、前記判定部の判定対象の前記命令に先行する命令に対応する前記フラグを選択し、選択した前記フラグの論理和結果を前記判定部に出力する論理和部を有し、
前記判定部は、前記論理和部から受ける前記論理和結果に基づいて、前記レジスタにアクセスするか否かを判定すること
を特徴とする請求項１ないし請求項３のいずれか１項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
プロセッサは、命令間の依存関係を守って、命令を実行する。命令間のデータ依存には、例えば、ＲＡＷ（Read After Write）依存、ＷＡＷ（Write After Write）依存、ＷＡＲ（Write After Read）依存等がある。ＲＡＷ依存では、第１命令に先行する命令がレジスタにデータを書き込むまで、第１命令は、レジスタからデータを読み出さない。ＷＡＷ依存では、第１命令に先行する命令がレジスタにデータを書き込むまで、第１命令は、レジスタにデータを書き込まない。ＷＡＲ依存では、第１命令に先行する命令がレジスタからデータを読み出すまで、第１命令は、レジスタにデータ書き込まない。
【０００３】
ＲＡＷ依存等を守る技術として、スコアボード制御が提案されている（例えば、特許文献１、２参照。）。例えば、ＲＡＷ依存に関するスコアボード制御では、プロセッサは、先ず、第１命令に先行する第２命令が発行される際に、第２命令がデータを書き込むレジスタ（以下、対象レジスタとも称する）に対応するフラグ（以下、対象フラグとも称する）をセットする。そして、プロセッサは、第２命令が対象レジスタにデータを書き込む際に、対象フラグをリセットする。
【０００４】
第１命令は、対象レジスタからデータを読み出す際に、対象フラグを参照する。対象フラグがリセットされているときには、プロセッサは、対象レジスタからデータを読み出す。対象フラグがセットされているときには、プロセッサは、対象フラグがリセットされるまで、第１命令を待機させる。これにより、ＲＡＷ依存が守られる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−２４８２号公報
【特許文献２】特開２００１−２０９５３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
実行中の複数の命令が同じレジスタにデータを書き込む場合、複数の命令のうちのどの命令の実行状態をフラグが示しているか分らない。このため、プロセッサは、フラグを参照しても、処理対象の命令に先行する命令によるレジスタへのデータの書き込みが終了したか否かを適切に判定できない。この場合、ＲＡＷ依存およびＷＡＷ依存を守ることは困難である。同様に、実行中の複数の命令が同じレジスタからデータを読み出す場合、ＷＡＲ依存を守ることは困難である。
【０００７】
１つの側面では、本発明の目的は、実行中の複数の命令が同じレジスタにアクセスするときにも、命令間のデータ依存を守ることである。
【課題を解決するための手段】
【０００８】
本発明の一形態では、プロセッサは、データが格納されるレジスタと、実行中の複数の命令のそれぞれに割り当て可能な数のフラグを含むフラグ群を、レジスタ毎に有する少なくとも１つのフラグテーブルと、レジスタにアクセスする命令の発行に応じて、命令によりアクセスされるレジスタに対応するフラグ群のうちの命令に割り当てられるフラグを、セットするフラグセット部と、命令の発行に応じてセットされたフラグを、命令によるレジスタに対するアクセスの終了に応じてリセットするフラグリセット部と、アクセス対象のレジスタに対応するフラグ群の状態に基づいてレジスタにアクセスするか否かを判定する判定部とを有している。
【発明の効果】
【０００９】
実行中の複数の命令が同じレジスタにアクセスするときにも、命令間のデータ依存を守ることができる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態におけるプロセッサの例を示している。
【図２】図１に示したフラグテーブルの一例を示している。
【図３】図２に示した論理和部の一例を示している。
【図４】図１に示したプロセッサの動作の一例を示している。
【図５】図１に示したプロセッサの動作の別の例を示している。
【図６】命令パターンとフラグテーブルに対するアクセスとの関係の一例を示している。
【図７】別の実施形態におけるプロセッサの一例を示している。
【発明を実施するための形態】
【００１１】
以下、実施形態を図面を用いて説明する。
【００１２】
図１は、一実施形態におけるプロセッサ１０の例を示している。プロセッサ１０は、複数の命令を並列に処理する。例えば、プロセッサ１０は、パイプライン処理を実行する。なお、プロセッサ１０は、複数の命令を複数の演算器等で並列に実行してもよい。さらに、プロセッサ１０は、複数のパイプライン処理を複数の演算器等で並列に実行してもよい。
【００１３】
プロセッサ１０は、例えば、レジスタファイル２０、フラグテーブル３０、フラグセット部４０、フラグリセット部５０および判定部６０を有している。レジスタファイル２０は、データが格納されるレジスタＲ（Ｒ０−Ｒ１５）を有している。レジスタＲのビット数は、例えば、３２ビット以上である。なお、レジスタＲのビット数は、３２ビットより少なくてもよい。また、レジスタＲの数は、１６個に限定されない。
【００１４】
フラグテーブル３０は、フラグ群ＦＧ（ＦＧ０−ＦＧ１５）をレジスタＲ毎に有している。フラグ群ＦＧの符号の末尾の数字は、レジスタＲの符号の末尾の数字に対応している。例えば、フラグ群ＦＧ０は、レジスタＲ０に対応している。各フラグ群ＦＧは、対応するレジスタＲの使用状態を示す複数（ｎ＋１個）のフラグＦを有している。
【００１５】
例えば、フラグ群ＦＧ０は、レジスタＲ０の使用状態を示すｎ＋１個のフラグＦ（Ｆ０００−Ｆ００ｎ）を有している。なお、フラグＦの符号の末尾の３桁のうちの左側の２桁の数字は、フラグ群ＦＧの符号の末尾の数字に対応している。各フラグ群ＦＧのフラグＦは、例えば、実行中の複数の命令のそれぞれに割り当て可能な数だけ用意される。例えば、同時実行可能な命令の最大数（インフライト命令の最大数）が８命令の場合、各フラグ群ＦＧは、８個のフラグＦを有する。
【００１６】
フラグセット部４０は、レジスタＲにアクセスする命令の発行に応じて、命令によりアクセスされるレジスタＲに対応するフラグ群ＦＧのうちの命令に割り当てられるフラグＦを、セットする。例えば、フラグセット部４０は、セット信号ＳＥＴＣを用いて、セット対象のフラグＦを“１”にセットする。なお、例えば、フラグセット部４０は、命令を解読するデコード部等に含まれてもよい。
【００１７】
フラグリセット部５０は、命令の発行に応じてセットされたフラグＦを、命令によるレジスタＲに対するアクセスの終了に応じてリセットする。例えば、フラグリセット部５０は、リセット信号ＲＳＴＣを用いて、リセット対象のフラグＦを“０”にリセットする。なお、例えば、フラグリセット部５０は、レジスタＲからデータを読み出すレジスタリード部、レジスタにデータを書き込むレジスタライト部等に含まれてもよい。
【００１８】
判定部６０は、アクセス対象のレジスタＲに対応するフラグ群ＦＧの状態に基づいて、レジスタＲにアクセスするか否かを判定する。例えば、判定部６０は、判定対象の命令が発行されたときのフラグテーブル３０内のテールポインタ（図２に示すテールポインタＴＰ）を示す信号ＣＨＫをフラグテーブル３０に出力する。そして、判定部６０は、判定対象の命令に先行する命令のレジスタＲの使用状態を示す信号ＲＥＰをフラグテーブル３０から受ける。判定部６０は、信号ＲＥＰに基づいて、レジスタＲにアクセスするか否かを判定する。
【００１９】
なお、例えば、判定部６０は、レジスタリード部、レジスタライト部等に含まれてもよい。判定部６０がレジスタリード部に含まれる場合、例えば、判定部６０は、読み出し対象のレジスタＲに対応するフラグ群ＦＧの状態に基づいて、レジスタＲからデータを読み出してよいか否かを判定する。これにより、プロセッサ１０は、ＲＡＷ（Read After Write）依存を守って、命令を実行できる。なお、ＲＡＷ依存では、第１命令に先行する命令（以下、先行命令とも称する）がレジスタにデータ書き込むまで、第１命令は、レジスタからデータを読み出さない。
【００２０】
また、判定部６０がレジスタライト部に含まれる場合、例えば、判定部６０は、書き込み対象のレジスタＲに対応するフラグ群ＦＧの状態に基づいて、レジスタＲにデータを書き込んでよいか否かを判定する。これにより、プロセッサ１０は、ＷＡＷ（Write After Write）依存、ＷＡＲ（Write After Read）依存等を守って、命令を実行できる。なお、ＷＡＷ依存では、第１命令に先行する命令がレジスタにデータを書き込むまで、第１命令は、レジスタにデータを書き込まない。また、ＷＡＲ依存では、第１命令に先行する命令がレジスタからデータを読み出すまで、第１命令は、レジスタにデータ書き込まない。
【００２１】
ここで、ＲＡＷ依存、ＷＡＷ依存およびＷＡＲ依存の全てに対応させる場合、プロセッサ１０は、ＲＡＷ／ＷＡＷ用フラグテーブル３０とＷＡＲ用フラグテーブル３０との２種類を有する。ＲＡＷ／ＷＡＷ用フラグテーブル３０は、レジスタＲに対する書き込みが終了したか否かを示すフラグＦを有する。ＷＡＲ用フラグテーブル３０は、レジスタＲに対する読み出しが終了したか否かを示すフラグＦを有する。
【００２２】
プロセッサ１０は、フラグテーブル３０を用いて確認する依存関係に応じて、ＲＡＷ／ＷＡＷ用フラグテーブル３０およびＷＡＲ用フラグテーブル３０のいずれか一方あるいは両方を有する。
【００２３】
図２は、図１に示したフラグテーブル３０の一例を示している。なお、図２は、各フラグ群ＦＧのフラグＦの数が８個のときのフラグテーブル３０の一例を示している。図２の網掛けは、ある時点での有効なフラグＦ（データ）の範囲を示している。例えば、フラグテーブル３０は、実行中の複数の命令が同じレジスタＲにアクセスするときにも、レジスタＲの使用状態を示す情報を命令毎に保持している。図２の列Ｑ（Ｑ０−Ｑ７）は、フラグ群ＦＧ内のフラグＦの位置を示している。例えば、同じ列ＱのフラグＦは、互いに同じ命令によるレジスタＲの使用状態を示している。
【００２４】
フラグテーブル３０は、フラグ群ＦＧ０−ＦＧ１５、ポインタ制御部ＰＣＮＴおよび論理和部ＯＲＵ（ＯＲＵ０−ＯＲＵ１５）を有している。フラグ群ＦＧのフラグＦは、例えば、命令の発行順にセットされる。フラグＦの符号の末尾の１桁の数字は、列Ｑの符号の末尾の数字に対応している。すなわち、フラグＦの符号の末尾の１桁の数字は、フラグ群ＦＧ内のフラグＦの位置を示している。したがって、例えば、フラグＦの符号の末尾の１桁の数字が互いに同じフラグＦは、互いに同じ命令によるレジスタＲの使用状態を示している。フラグ群ＦＧに対しては、例えば、ＦＩＦＯと同様の制御が実行される。
【００２５】
ヘッドポインタＨＰは、有効なフラグＦの先頭の位置（列Ｑ）を示すポインタである。テールポインタＴＰは、有効なフラグＦの最後の位置（列Ｑ）の次の位置（列Ｑ）を示すポインタである。すなわち、テールポインタＴＰは、新しい命令によりセットされるフラグＦの列Ｑを示すポインタである。したがって、有効なフラグＦの範囲（図２の網掛け部分）では、ヘッドポインタＨＰ側のフラグＦをセットした命令は、テールポインタＴＰ側のフラグＦをセットした命令に先行する命令である。
【００２６】
ポインタ制御部ＰＣＮＴは、ヘッドポインタＨＰおよびテールポインタＴＰを制御する。例えば、ポインタ制御部ＰＣＮＴは、ヘッドポインタＨＰで示される列ＱのフラグＦ（図２では、列Ｑ１のフラグＦ）が全てリセットされたとき、セットされたフラグＦが存在する列Ｑまで、ヘッドポインタＨＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。なお、ヘッドポインタＨＰが列Ｑ７を示している場合、ヘッドポインタＨＰは、例えば、列Ｑ０に移動する。
【００２７】
また、ポインタ制御部ＰＣＮＴは、例えば、レジスタＲにアクセスする命令が発行される度に、テールポインタＴＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。例えば、ＲＡＷ／ＷＡＷ用フラグテーブル３０では、ポインタ制御部ＰＣＮＴは、レジスタＲにデータを書き込む命令が発行される度に、テールポインタＴＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。あるいは、ＷＡＲ用フラグテーブル３０では、ポインタ制御部ＰＣＮＴは、レジスタＲからデータを読み出す命令が発行される度に、テールポインタＴＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。なお、テールポインタＴＰが列Ｑ７を示している場合、テールポインタＴＰは、例えば、列Ｑ０に移動する。
【００２８】
各論理和部ＯＲＵ（ＯＲＵ０−ＯＲＵ１５）は、各フラグ群ＦＧ（ＦＧ０−ＦＧ１５）のフラグＦの状態を示す信号、ヘッドポインタＨＰ、テールポインタＴＰおよび信号ＣＨＫを受け、対応するレジスタＲの使用状態を示す信号ＲＥＰ（ＲＥＰ０−ＲＥＰ１５）を出力する。論理和部ＯＲＵおよび信号ＲＥＰの符号の末尾の数字は、フラグ群ＦＧの符号の末尾の数字に対応している。すなわち、論理和部ＯＲＵおよび信号ＲＥＰの符号の末尾の数字は、レジスタＲの符号の末尾の数字に対応している。
【００２９】
信号ＣＨＫは、例えば、判定対象の命令が発行されたときのテールポインタＴＰを示す信号である。すなわち、信号ＣＨＫの示す位置よりヘッドポインタＨＰ側のフラグＦに割り当てられた命令は、判定対象の命令に先行する命令である。例えば、論理和部ＯＲＵは、有効なフラグＦの範囲のうち、信号ＣＨＫが示す位置よりヘッドポインタＨＰ側のフラグＦを、論理和の対象として選択する。そして、論理和部ＯＲＵは、選択したフラグＦの論理和結果を、レジスタＲの使用状態を示す信号ＲＥＰとして出力する。
【００３０】
すなわち、論理和部ＯＲＵは、アクセス対象のレジスタＲに対応するフラグ群ＦＧから、判定対象の命令に先行する命令に対応するフラグＦを選択する。そして、論理和部ＯＲＵは、選択したフラグＦの論理和結果ＲＥＰを判定部６０に出力する。これにより、判定部６０は、判定対象の命令に先行する命令によるレジスタＲの使用状態を、適切に判定できる。
【００３１】
図３は、図２に示した論理和部ＯＲＵの一例を示している。なお、図３は、フラグ群ＦＧ０に対応する論理和部ＯＲＵ０の一例を示している。図３では、フラグ群ＦＧ０の各フラグＦ（Ｆ０００−Ｆ００７）の状態を示す信号に、各フラグＦ（Ｆ０００−Ｆ００７）と同じ符号を使用する。論理和部ＯＲＵ０以外の論理和部ＯＲＵの構成は、論理和部ＯＲＵ０と同様である。例えば、論理和部ＯＲＵ１−ＯＲＵ１５の構成は、論理和部ＯＲＵ０と同じである。
【００３２】
論理和部ＯＲＵ０は、フラグ群ＦＧ０のフラグＦ（Ｆ０００−Ｆ００７）に対応する選択部ＳＥＬＵ（ＳＥＬＵ０−ＳＥＬＵ７）と、論理和回路ＯＲ１とを有している。選択部ＳＥＬＵの符号の末尾の数字は、フラグＦの符号の末尾の１桁の数字に対応している。例えば、選択部ＳＥＬＵ０は、フラグＦ０００に対応している。選択部ＳＥＬＵ０−ＳＥＬＵ７の構成は、互いに同様である。例えば、選択部ＳＥＬＵ１−ＳＥＬＵ７の構成は、選択部ＳＥＬＵ０と同じである。このため、図３では、選択部ＳＥＬＵ０について詳細に説明する。
【００３３】
選択部ＳＥＬＵ０は、信号ＣＨＫおよびヘッドポインタＨＰに基づいて、フラグＦ０００の値と論理値“０”の信号とのいずれかを論理和回路ＯＲ１に出力する。例えば、選択部ＳＥＬＵ０は、比較部ＣＯＭＰ１、ＣＯＭＰ２および論理積回路ＡＮＤ１、ＡＮＤ２を有している。
【００３４】
比較部ＣＯＭＰ１は、信号ＣＨＫの示す位置（値）とフラグＦ０００の位置“０”とを比較し、比較結果を論理積回路ＡＮＤ１に出力する。例えば、比較部ＣＯＭＰ１は、フラグＦ０００の位置“０”が信号ＣＨＫの示す位置（値）より小さいとき、論理値“１”の信号を論理積回路ＡＮＤ１に出力する。また、比較部ＣＯＭＰ１は、フラグＦ０００の位置“０”が信号ＣＨＫの示す位置（値）以上のとき、論理値“０”の信号を論理積回路ＡＮＤ１に出力する。
【００３５】
比較部ＣＯＭＰ２は、ヘッドポインタＨＰの示す位置（値）とフラグＦ０００の位置“０”とを比較し、比較結果を論理積回路ＡＮＤ１に出力する。例えば、比較部ＣＯＭＰ２は、フラグＦ０００の位置“０”がヘッドポインタＨＰの示す位置（値）以上のとき、論理値“１”の信号を論理積回路ＡＮＤ１に出力する。また、比較部ＣＯＭＰ１は、フラグＦ０００の位置“０”がヘッドポインタＨＰの示す位置（値）より小さいとき、論理値“０”の信号を論理積回路ＡＮＤ１に出力する。
【００３６】
論理積回路ＡＮＤ１は、比較部ＣＯＭＰ１から受ける比較結果と比較部ＣＯＭＰ２から受ける比較結果との論理積結果を、論理積回路ＡＮＤ２出力する。すなわち、比較部ＣＯＭＰ１、ＣＯＭＰ２および論理積回路ＡＮＤ１を含むブロックは、フラグＦ０００の位置“０”が、ヘッドポインタＨＰの示す位置（値）以上で、かつ、信号ＣＨＫの示す位置（値）より小さいとき、論理値“１”の信号を論理積回路ＡＮＤ２に出力する。
【００３７】
換言すれば、比較部ＣＯＭＰ１、ＣＯＭＰ２および論理積回路ＡＮＤ１を含むブロックは、フラグＦ０００の位置“０”が論理和の対象範囲のとき、論理値“１”の信号を論理積回路ＡＮＤ２に出力する。したがって、比較部ＣＯＭＰ１、ＣＯＭＰ２および論理積回路ＡＮＤ１を含むブロックは、フラグＦ０００の位置“０”が論理和の対象範囲外のとき、論理値“０”の信号を論理積回路ＡＮＤ２に出力する。
【００３８】
論理積回路ＡＮＤ２は、フラグＦ０００および論理積回路ＡＮＤ１の出力信号を受ける。そして、論理積回路ＡＮＤ２は、フラグＦ０００と論理積回路ＡＮＤ１の出力信号との論理積結果ＯＵＴ０を、論理和回路ＯＲ１に出力する。すなわち、論理積回路ＡＮＤ２は、フラグＦ０００の位置“０”が論理和の対象範囲のとき、フラグＦ０００の値を信号ＯＵＴ０として論理和回路ＯＲ１に出力する。また、論理積回路ＡＮＤ２は、フラグＦ０００の位置“０”が論理和の対象範囲外のとき、フラグＦ０００の値に拘わらず、論理値“０”の信号ＯＵＴ０を論理和回路ＯＲ１に出力する。
【００３９】
このように、選択部ＳＥＬＵ０は、フラグＦ０００の位置“０”が論理和の対象範囲のとき、フラグＦ０００の値を信号ＯＵＴ０として論理和回路ＯＲ１に出力する。また、選択部ＳＥＬＵ０は、フラグＦ０００の位置“０”が論理和の対象範囲外のとき、論理値“０”の信号ＯＵＴ０を論理和回路ＯＲ１に出力する。
【００４０】
選択部ＳＥＬＵ０と同様に、各選択部ＳＥＬＵ１−ＳＥＬＵ７は、各選択部ＳＥＬＵ１−ＳＥＬＵ７に対応するフラグＦの位置が論理和の対象範囲のとき、フラグＦの値を信号ＯＵＴ（ＯＵＴ１−ＯＵＴ７）として論理和回路ＯＲ１に出力する。また、各選択部ＳＥＬＵ１−ＳＥＬＵ７は、各選択部ＳＥＬＵ１−ＳＥＬＵ７に対応するフラグＦの位置が論理和の対象範囲外のとき、論理値“０”の信号ＯＵＴ（ＯＵＴ１−ＯＵＴ７）を論理和回路ＯＲ１に出力する。
【００４１】
例えば、選択部ＳＥＬＵ１は、フラグＦ００１の位置“１”が論理和の対象範囲のとき、フラグＦ００１の値を信号ＯＵＴ１として論理和回路ＯＲ１に出力する。また、選択部ＳＥＬＵ１は、フラグＦ００１の位置“１”が論理和の対象範囲外のとき、論理値“０”の信号ＯＵＴ１を論理和回路ＯＲ１に出力する。
【００４２】
なお、例えば、図２において、ヘッドポインタＨＰがテールポインタＴＰの右側に位置する場合、各選択部ＳＥＬＵの比較部ＣＯＭＰ１等は、テールポインタＴＰの示す位置（値）以下のフラグＦの位置等を補正して、比較する。すなわち、図２において、ヘッドポインタＨＰの示す位置（列Ｑの符号の末尾の数字）がテールポインタＴＰの示す位置（列Ｑの符号の末尾の数字）より大きい場合、各選択部ＳＥＬＵの比較部ＣＯＭＰ１等は、テールポインタＴＰの示す位置以下のフラグＦの位置等を補正して、比較する。
【００４３】
例えば、図２において、ヘッドポインタＨＰの示す位置がテールポインタＴＰの示す位置より大きい場合、テールポインタＴＰの示す位置以下のフラグＦの位置は、フラグＦの符号の末尾の１桁の数字に８を加算した値に換算して、比較される。同様に、ヘッドポインタＨＰの示す位置がテールポインタＴＰの示す位置より大きい場合、例えば、テールポインタＴＰの示す位置以下に対応する位置を示す信号ＣＨＫは、信号ＣＨＫの示す位置（値）に８を加算した値に換算して、比較される。
【００４４】
論理和回路ＯＲ１は、選択部ＳＥＬＵ０−ＳＥＬＵ７から受ける信号ＯＵＴ０−ＯＵＴ７の論理和結果ＲＥＰ０を出力する。これにより、信号ＣＨＫの示す位置に対応する命令（判定対象の命令）に先行する命令によるレジスタＲ０の使用状態を示す信号ＲＥＰ０が、図１に示した判定部６０に出力される。
【００４５】
なお、論理和部ＯＲＵの構成は、この例に限定されない。また、プロセッサ１０の構成は、図１−図３で説明した例に限定されない。例えば、判定部６０は、図２および図３に示した論理和部ＯＲＵを有してもよい。この場合、論理和部ＯＲＵは、フラグテーブル３０から省かれる。
【００４６】
図４は、図１に示したプロセッサ１０の動作の一例を示している。なお、図４は、フラグテーブル３０をＲＡＷ／ＷＡＷ用フラグテーブル３０として使用するプロセッサ１０の動作の一例を示している。例えば、プロセッサ１０は、ＲＡＷ／ＷＡＷ用フラグテーブル３０を用いて、スコアボード制御と同様の制御を実行する。図４の例では、プロセッサ１０は、命令発行ステージＩＳ、レジスタ読み出しステージＲＲ、実行ステージＥＸおよびレジスタ書き込みステージＷＢを有するパイプライン処理を実行する。図４では、図を見やすくするために、命令ＩＳ１、ＩＳ３とフラグ群ＦＧ０、ＦＧ１５との間の信号を抜粋して記載している。
【００４７】
命令ＩＳ１は、レジスタＲ０、Ｒ１５以外のレジスタＲからデータを読み出し、レジスタＲ０に実行結果（データ）を書き込む命令である。命令ＩＳ２は、レジスタＲ０、Ｒ１５以外のレジスタＲからデータを読み出し、レジスタＲ０、Ｒ１５以外のレジスタＲに実行結果（データ）を書き込む命令である。命令ＩＳ３は、レジスタＲ０からデータを読み出し、レジスタＲ１５に実行結果（データ）を書き込む命令である。
【００４８】
例えば、命令ＩＳ１の命令発行ステージＩＤでは、プロセッサ１０は、命令ＩＳ１を命令メモリから読み出す。そして、プロセッサ１０は、命令メモリから読み出した命令ＩＳ１を解読し、命令ＩＳ１を発行する。さらに、プロセッサ１０のフラグセット部４０は、命令ＩＳ１の実行結果が書き込まれるレジスタＲ０に対応するフラグ群ＦＧ０のフラグＦ００３を、セット信号ＳＥＴＣを用いて“１”にセットする。すなわち、フラグＦ００３は、命令ＩＳ１が発行される際にセットされる。
【００４９】
命令ＩＳ１のレジスタ読み出しステージＲＲでは、プロセッサ１０は、命令ＩＳ１で使用するデータを、オペランドで指定されたレジスタＲから読み出す。命令ＩＳ１の実行ステージＥＸでは、レジスタ読み出しステージＲＲで読み出したデータを用いて、命令ＩＳ１に基づく処理（演算等）を実行する。
【００５０】
命令ＩＳ１のレジスタ書き込みステージＷＢでは、プロセッサ１０の判定部６０は、命令ＩＳ１の先行命令によるレジスタＲ０の使用状態を判定する。例えば、判定部６０は、命令ＩＳ１に対応するフラグＦ００３の位置“３”を示す信号ＣＨＫを、フラグテーブル３０に出力する。そして、判定部６０は、命令ＩＳ１の先行命令によるレジスタＲ０の使用状態を示す信号ＲＥＰ０を、フラグテーブル３０から受ける。判定部６０は、フラグテーブル３０から受ける信号ＲＥＰ０に基づいて、命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みが終了したか否かを判定する。
【００５１】
例えば、ヘッドポイントＨＰがフラグＦ０００の位置“０”を示している場合、フラグＦ０００−Ｆ００２の全てが“０”にリセットされているとき、命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みは、終了している。また、例えば、ヘッドポイントＨＰがフラグＦ０００の位置“０”を示している場合、フラグＦ０００−Ｆ００２の少なくとも１つが“１”にセットされているとき、命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みは、終了していない。
【００５２】
命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みが終了しているとき、プロセッサ１０は、実行結果をレジスタＲ０に書き込む。さらに、プロセッサ１０のフラグリセット部５０は、命令発行ステージＩＤでセットしたフラグ群ＦＧ０のフラグＦ００３を、リセット信号ＲＳＴＣを用いて“０”にリセットする。すなわち、フラグＦ００３は、命令ＩＳ１によりレジスタＲ０にデータが書き込まれる際に、リセットされる。
【００５３】
なお、命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みが終了していないとき、プロセッサ１０は、レジスタ書き込みステージＷＢおよびレジスタ書き込みステージＷＢより上流のステージ（ステージＩＤ、ＲＲ、ＥＸ）の処理をストールさせる。例えば、プロセッサ１０は、命令ＩＳ１の先行命令によるレジスタＲ０へのデータの書き込みが終了するまで、命令発行ステージＩＤ、レジスタ読み出しステージＲＲ、実行ステージＥＸおよびレジスタ書き込みステージＷＢの処理をストールさせる。
【００５４】
このように、判定部６０は、実行中の複数の命令ＩＳが同じレジスタＲ０にデータを書き込むときにも、命令ＩＳ１の先行命令によるレジスタＲ０のへのデータの書き込みが終了したか否かを、信号ＲＥＰ０に基づいて判定できる。これにより、プロセッサ１０は、実行中の複数の命令ＩＳが同じレジスタＲ０にデータを書き込むときにも、命令ＩＳ１を、ＷＡＷ依存を守って実行できる。また、例えば、プロセッサ１０は、命令の発行をアウト・オブ・オーダで実行するときにも、ＷＡＷ依存を守ることができる。
【００５５】
命令ＩＳ２の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢは、命令ＩＳ１の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢが終了した後に実行される。例えば、命令ＩＳ２の命令発行ステージＩＤは、命令ＩＳ１の命令発行ステージＩＤが終了した後に、実行される。命令ＩＳ２の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理は、アクセスするレジスタＲ、フラグＦ等を除いて、命令ＩＳ１の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理と同様である。
【００５６】
命令ＩＳ３の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢは、命令ＩＳ２の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢが終了した後に実行される。例えば、命令ＩＳ３の命令発行ステージＩＤは、命令ＩＳ２の命令発行ステージＩＤが終了した後に、実行される。命令ＩＳ３の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理は、アクセスするレジスタＲ、フラグＦ等を除いて、命令ＩＳ１の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理と同様である。
【００５７】
例えば、命令ＩＳ３の命令発行ステージＩＤでは、プロセッサ１０は、命令メモリから読み出した命令ＩＳ３を解読し、命令ＩＳ３を発行する。さらに、プロセッサ１０のフラグセット部４０は、命令ＩＳ３の実行結果が書き込まれるレジスタＲ１５に対応するフラグ群ＦＧ１５のフラグＦ１５５を、セット信号ＳＥＴＣを用いて“１”にセットする。すなわち、フラグＦ１５５は、命令ＩＳ３が発行される際にセットされる。
【００５８】
命令ＩＳ３のレジスタ読み出しステージＲＲでは、プロセッサ１０の判定部６０は、命令ＩＳ３の先行命令によるレジスタＲ０の使用状態を判定する。例えば、判定部６０は、命令ＩＳ３に対応するフラグＦの位置“５”を示す信号ＣＨＫを、フラグテーブル３０に出力する。そして、判定部６０は、命令ＩＳ３の先行命令によるレジスタＲ０の使用状態を示す信号ＲＥＰ０を、フラグテーブル３０から受ける。判定部６０は、フラグテーブル３０から受ける信号ＲＥＰ０に基づいて、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了したか否かを判定する。
【００５９】
例えば、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、フラグＦ００３、Ｆ００４の全てが“０”にリセットされているとき、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みは、終了している。また、例えば、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、フラグＦ００３、Ｆ００４の少なくとも１つが“１”にセットされているとき、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みは、終了していない。
【００６０】
例えば、図４では、命令ＩＳ２がレジスタＲ０にデータを書き込まないため、フラグＦ００４は、“０”にリセットされている。したがって、判定部６０は、例えば、フラグＦ００３が“０”にリセットされているとき、論理値“０”の信号ＲＥＰ０を受ける。すなわち、図４の例では、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、命令ＩＳ１によるレジスタＲ０へのデータの書き込みが終了したとき、判定部６０は、論理値“０”の信号ＲＥＰ０を受ける。これにより、判定部６０は、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了したと判定する。
【００６１】
なお、図４において、例えば、命令ＩＳ２がレジスタＲ０にデータを書き込む命令である場合、命令ＩＳ２に対応するフラグＦ００４は、“１”にセットされる。したがって、フラグＦ００３が“０”にリセットされても、フラグＦ００４が“１”にセットされている期間は、判定部６０は、論理値“１”の信号ＲＥＰ０を受ける。このため、判定部６０は、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了していないと判定する。このように、判定部６０は、実行中の複数の命令ＩＳが同じレジスタＲ０にデータを書き込むときにも、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了したか否かを、信号ＲＥＰ０に基づいて判定できる。
【００６２】
命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了しているとき、プロセッサ１０は、命令ＩＳ３で使用するデータを、レジスタＲ０から読み出す。なお、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了していないとき、プロセッサ１０は、レジスタ読み出しステージＲＲおよびレジスタ読み出しステージＲＲより上流の命令発行ステージＩＳの処理をストールさせる。例えば、プロセッサ１０は、命令ＩＳ３の先行命令によるレジスタＲ０へのデータの書き込みが終了するまで、命令発行ステージＩＳおよびレジスタ読み出しステージＲＲの処理をストールさせる。
【００６３】
このように、プロセッサ１０は、実行中の複数の命令ＩＳが同じレジスタＲ０にデータを書き込むときにも、命令ＩＳ３の先行命令によるレジスタＲ０のへのデータの書き込みが終了したか否かを、信号ＲＥＰ０に基づいて判定できる。これにより、プロセッサ１０は、実行中の複数の命令ＩＳが同じレジスタＲ０にデータを書き込むときにも、命令ＩＳ３を、ＲＡＷ依存を守って実行できる。また、例えば、プロセッサ１０は、命令の発行をアウト・オブ・オーダで実行するときにも、ＲＡＷ依存を守ることができる。
【００６４】
命令ＩＳ３の実行ステージＥＸでは、レジスタ読み出しステージＲＲで読み出したデータを用いて、命令ＩＳ３に基づく処理（演算等）を実行する。命令ＩＳ３のレジスタ書き込みステージＷＢでは、プロセッサ１０は、実行結果をレジスタＲ１５に書き込む。さらに、プロセッサ１０のフラグリセット部５０は、命令発行ステージＩＤでセットしたフラグ群ＦＧ１５のフラグＦ１５５を、リセット信号ＲＳＴＣを用いて“０”にリセットする。すなわち、フラグＦ１５５は、命令ＩＳ３によりレジスタＲ１５にデータが書き込まれる際に、リセットされる。
【００６５】
このように、ＲＡＷ依存の確認処理およびＷＡＷ依存の確認処理の両方とも、命令発行ステージＩＤにフラグＦがセットされ、レジスタ書き込みステージＷＢにフラグＦがリセットされる。このため、この実施形態では、ＲＡＷ依存およびＷＡＷ依存の両方を共通のフラグテーブル３０を用いて確認できる。なお、ＲＡＷ依存の確認処理とＷＡＷ依存の確認処理とでは、フラグＦを参照するタイミング（パイプライン処理のステージ）が異なる。
【００６６】
例えば、１つの命令に対する処理でＲＡＷ依存およびＷＡＷ依存の両方を確認する場合、プロセッサ１０は、フラグ群ＦＧ（より詳細には、判定対象の命令の先行命令に対応するフラグＦ）の状態を、レジスタＲからデータを読み出す際およびレジスタＲにデータを書き込む際にそれぞれ確認する。すなわち、１つの命令に対する処理でＲＡＷ依存およびＷＡＷ依存の両方を確認する場合、プロセッサ１０は、フラグ群ＦＧの状態を２回確認する。
【００６７】
なお、ＲＡＷ／ＷＡＷ用フラグテーブル３０は、レジスタ読み出しステージＲＲで送信された信号ＣＨＫとレジスタ書き込みステージＷＢで送信された信号ＣＨＫとをほぼ同時に受けたとき、例えば、先に発行された命令に対応する信号ＣＨＫに基づく処理を先に実行する。
【００６８】
図５は、図１に示したプロセッサ１０の動作の別の例を示している。なお、図５は、フラグテーブル３０をＷＡＲ用フラグテーブル３０として使用するプロセッサ１０の動作の一例を示している。例えば、プロセッサ１０は、ＷＡＲ用フラグテーブル３０を用いて、スコアボード制御と同様の制御を実行する。図５の例では、プロセッサ１０は、命令発行ステージＩＳ、レジスタ読み出しステージＲＲ、実行ステージＥＸおよびレジスタ書き込みステージＷＢを有するパイプライン処理を実行する。
【００６９】
各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理は、フラグＦに関する動作やアクセスするレジスタ等を除いて、図４で説明した各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理と同様である。図４で説明した処理については、詳細な説明を省略する。図５では、図を見やすくするために、命令ＩＳ４、ＩＳ６とフラグ群ＦＧ０、ＦＧ１５との間の信号を抜粋して記載している。
【００７０】
命令ＩＳ４は、レジスタＲ０からデータを読み出し、レジスタＲ０、Ｒ１５以外のレジスタＲに実行結果（データ）を書き込む命令である。命令ＩＳ５は、レジスタＲ０、Ｒ１５以外のレジスタＲからデータを読み出し、レジスタＲ０、Ｒ１５以外のレジスタＲに実行結果（データ）を書き込む命令である。命令ＩＳ６は、レジスタＲ１５からデータを読み出し、レジスタＲ０に実行結果（データ）を書き込む命令である。
【００７１】
例えば、命令ＩＳ４の命令発行ステージＩＤでは、プロセッサ１０は、命令メモリから読み出した命令ＩＳ４を解読し、命令ＩＳ４を発行する。さらに、プロセッサ１０のフラグセット部４０は、命令ＩＳ４で使用するデータが読み出されるレジスタＲ０に対応するフラグ群ＦＧ０のフラグＦ００３を、セット信号ＳＥＴＣを用いて“１”にセットする。すなわち、フラグＦ００３は、命令ＩＳ４が発行される際にセットされる。
【００７２】
命令ＩＳ４のレジスタ読み出しステージＲＲでは、プロセッサ１０は、命令ＩＳ４で使用するデータを、レジスタＲ０から読み出す。さらに、プロセッサ１０のフラグリセット部５０は、命令発行ステージＩＤでセットしたフラグ群ＦＧ０のフラグＦ００３を、リセット信号ＲＳＴＣを用いて“０”にリセットする。すなわち、フラグＦ００３は、命令ＩＳ４によりレジスタＲ０からデータが読み出される際に、リセットされる。
【００７３】
命令ＩＳ４の実行ステージＥＸでは、レジスタ読み出しステージＲＲで読み出したデータを用いて、命令ＩＳ４に基づく処理（演算等）を実行する。命令ＩＳ４のレジスタ書き込みステージＷＢでは、例えば、プロセッサ１０は、オペランドで指定されたレジスタＲに実行結果を書き込む。なお、レジスタＲへの実行結果の書き込みは、命令ＩＳ６に示すように、実行結果が書き込まれるレジスタＲの使用状態を確認した後に、実行される。
【００７４】
命令ＩＳ５の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢは、命令ＩＳ４の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢが終了した後に実行される。例えば、命令ＩＳ５の命令発行ステージＩＤは、命令ＩＳ４の命令発行ステージＩＤが終了した後に、実行される。命令ＩＳ５の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理は、アクセスするレジスタＲ、フラグＦ等を除いて、命令ＩＳ４の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理と同様である。
【００７５】
命令ＩＳ６の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢは、命令ＩＳ５の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢが終了した後に実行される。例えば、命令ＩＳ６の命令発行ステージＩＤは、命令ＩＳ５の命令発行ステージＩＤが終了した後に、実行される。命令ＩＳ６の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理は、アクセスするレジスタＲ、フラグＦ等を除いて、命令ＩＳ４の各ステージＩＤ、ＲＲ、ＥＸ、ＷＢの処理と同様である。
【００７６】
例えば、命令ＩＳ６の命令発行ステージＩＤでは、プロセッサ１０は、命令メモリから読み出した命令ＩＳ６を解読し、命令ＩＳ６を発行する。さらに、プロセッサ１０のフラグセット部４０は、命令ＩＳ６で使用するデータが読み出されるレジスタＲ１５に対応するフラグ群ＦＧ１５のフラグＦ１５５を、セット信号ＳＥＴＣを用いて“１”にセットする。すなわち、フラグＦ１５５は、命令ＩＳ６が発行される際にセットされる。
【００７７】
命令ＩＳ６のレジスタ読み出しステージＲＲでは、プロセッサ１０は、命令ＩＳ６で使用するデータを、レジスタＲ１５から読み出す。さらに、プロセッサ１０のフラグリセット部５０は、命令発行ステージＩＤでセットしたフラグ群ＦＧ１５のフラグＦ１１５を、リセット信号ＲＳＴＣを用いて“０”にリセットする。すなわち、フラグＦ１１５は、命令ＩＳ６によりレジスタＲ１５からデータが読み出される際に、リセットされる。命令ＩＳ６の実行ステージＥＸでは、レジスタ読み出しステージＲＲで読み出したデータを用いて、命令ＩＳ６を実行する。
【００７８】
命令ＩＳ６のレジスタ書き込みステージＷＢでは、プロセッサ１０の判定部６０は、命令ＩＳ６の先行命令によるレジスタＲ０の使用状態を判定する。例えば、判定部６０は、命令ＩＳ６に対応するフラグＦの位置“５”を示す信号ＣＨＫを、フラグテーブル３０に出力する。そして、判定部６０は、命令ＩＳ６の先行命令によるレジスタＲ０の使用状態を示す信号ＲＥＰ０を、フラグテーブル３０から受ける。判定部６０は、フラグテーブル３０から受ける信号ＲＥＰ０に基づいて、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了したか否かを判定する。
【００７９】
例えば、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、フラグＦ００３、Ｆ００４の全てが“０”にリセットされているとき、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しは、終了している。また、例えば、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、フラグＦ００３、Ｆ００４の少なくとも１つが“１”にセットされているとき、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しは、終了していない。
【００８０】
例えば、図５では、命令ＩＳ５は、レジスタＲ０からデータを読み出さないため、フラグＦ００４は、“０”にリセットされている。したがって、判定部６０は、例えば、フラグＦ００３が“０”にリセットされているとき、論理値“０”の信号ＲＥＰ０を受ける。すなわち、図５の例では、ヘッドポイントＨＰがフラグＦ００３の位置“３”を示している場合、命令ＩＳ４によるレジスタＲ０からのデータの読み出しが終了したとき、判定部６０は、論理値“０”の信号ＲＥＰ０を受ける。これにより、判定部６０は、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了したと判定する。
【００８１】
なお、図５において、例えば、命令ＩＳ５がレジスタＲ０からデータを読み出す命令である場合、命令ＩＳ５に対応するフラグＦ００４は、“１”にセットされる。したがって、フラグＦ００３が“０”にリセットされても、フラグＦ００４が“１”にセットされている期間は、判定部６０は、論理値“１”の信号ＲＥＰ０を受ける。このため、判定部６０は、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了していないと判定する。このように、判定部６０は、実行中の複数の命令ＩＳが同じレジスタＲ０からデータを読み出すときにも、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了したか否かを、信号ＲＥＰ０に基づいて判定できる。
【００８２】
命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了しているとき、プロセッサ１０は、実行結果をレジスタＲ０に書き込む。なお、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了していないとき、プロセッサ１０は、レジスタ書き込みステージＷＢおよびレジスタ書き込みステージＷＢより上流のステージ（ステージＩＤ、ＲＲ、ＥＸ）の処理をストールさせる。例えば、プロセッサ１０は、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了するまで、命令発行ステージＩＤ、レジスタ読み出しステージＲＲ、実行ステージＥＸおよびレジスタ書き込みステージＷＢの処理をストールさせる。
【００８３】
このように、プロセッサ１０は、実行中の複数の命令ＩＳが同じレジスタＲ０からデータを読み出すときにも、命令ＩＳ６の先行命令によるレジスタＲ０からのデータの読み出しが終了したか否かを、信号ＲＥＰ０に基づいて判定できる。これにより、プロセッサ１０は、実行中の複数の命令ＩＳが同じレジスタＲ０からデータを読み出すときにも、命令ＩＳ６を、ＷＡＲ依存を守って実行できる。また、例えば、プロセッサ１０は、命令の発行をアウト・オブ・オーダで実行するときにも、ＷＡＲ依存を守ることができる。
【００８４】
ＷＡＲ依存の確認処理では、セットされるフラグＦは、ＲＡＷ依存およびＷＡＷ依存の確認処理でセットされるフラグＦと異なる。このため、この実施形態では、ＲＡＷ依存、ＷＡＷ依存およびＷＡＲ依存の全てを確認する場合、プロセッサ１０は、ＲＡＷ／ＷＡＷ用フラグテーブル３０とＷＡＲ用フラグテーブル３０との２種類を有する。すなわち、ＲＡＷ依存、ＷＡＷ依存およびＷＡＲ依存の全てを確認する場合、プロセッサ１０は、同時実行可能な命令の最大数（インフライト命令の最大数）の２倍の数のフラグＦをレジスタＲ毎に有する。
【００８５】
なお、同時にプロセッサ中に存在する命令（インフライト命令）の数が少ないプロセッサ（例えば、ベクトルプロセッサ）では、フラグＦの数の増加は、抑制される。例えば、１つの命令で大量のデータを扱うベクトルプロセッサでは、フラグＦの数の増加によるデメリット（回路規模の増加等のデメリット）は、レジスタ・リネーミング用にレジスタＲの数を増加させる構成に比べて、小さい。
【００８６】
図６は、命令パターンＰＴとフラグテーブル３０に対するアクセスとの関係の一例を示している。図６の丸印は、フラグテーブル３０に対する各項目の処理が実行されることを示している。
【００８７】
パターンＰＴ１の命令は、レジスタリード（レジスタＲからのデータの読み出し）とレジスタライト（レジスタＲへのデータの書き込み）との両方を実行する命令である。命令パターンＰＴ１では、ＷＡＲ用フラグテーブル３０のフラグＦのセット／リセットと、ＷＡＲ用フラグテーブル３０のフラグＦの参照と、ＲＡＷ／ＷＡＷ用フラグテーブル３０のフラグＦのセット／リセットと、ＲＡＷ／ＷＡＷ用フラグテーブル３０のフラグＦの参照とが実行される。
【００８８】
パターンＰＴ２の命令は、レジスタリードおよびレジスタライトのうちのレジスタリードのみを実行する命令である。命令パターンＰＴ２では、ＷＡＲ用フラグテーブル３０のフラグＦのセット／リセットと、ＲＡＷ／ＷＡＷ用フラグテーブル３０のフラグＦの参照とが実行される。
【００８９】
パターンＰＴ３の命令は、レジスタリードおよびレジスタライトのうちのレジスタライトのみを実行する命令である。命令パターンＰＴ３では、ＷＡＲ用フラグテーブル３０のフラグＦの参照と、ＲＡＷ／ＷＡＷ用フラグテーブル３０のフラグＦのセット／リセットと、ＲＡＷ／ＷＡＷ用フラグテーブル３０のフラグＦの参照とが実行される。
【００９０】
パターンＰＴ４の命令は、レジスタリードおよびレジスタライトの両方とも実行されない命令である。したがって、命令パターンＰＴ４では、ＷＡＲ用フラグテーブル３０およびＲＡＷ／ＷＡＷ用フラグテーブル３０の両方ともアクセスされない。このように、レジスタＲにアクセスする命令（パターンＰＴ１−ＰＴ３の命令）では、ＷＡＲ用フラグテーブル３０およびＲＡＷ／ＷＡＷ用フラグテーブル３０の少なくとも一方のフラグＦはセットされる。
【００９１】
なお、プロセッサ１０がＷＡＲ用フラグテーブル３０およびＲＡＷ／ＷＡＷ用フラグテーブル３０の両方を有する場合、ＷＡＲ用フラグテーブル３０とＲＡＷ／ＷＡＷ用フラグテーブル３０とで共通のヘッドポインタＨＰおよびテールポインタＴＰが使用される。すなわち、プロセッサ１０は、ＷＡＲ用フラグテーブル３０とＲＡＷ／ＷＡＷ用フラグテーブル３０とで共通のポインタ制御部ＰＣＮＴを有する。この場合、ポインタ制御部ＰＣＮＴは、例えば、レジスタＲにアクセスする命令（パターンＰＴ１−ＰＴ３のいずれかの命令）が発行される度に、テールポインタＴＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。
【００９２】
また、例えば、ポインタ制御部ＰＣＮＴは、ヘッドポインタＨＰで示される位置のフラグＦがＷＡＲ用フラグテーブル３０とＲＡＷ／ＷＡＷ用フラグテーブル３０との両方で全てリセットされたとき、ヘッドポインタＨＰを更新する。例えば、ポインタ制御部ＰＣＮＴは、セットされたフラグＦが存在する位置まで、ヘッドポインタＨＰをフラグ群ＦＧの末尾側（図２の右側）に移動させる。
【００９３】
以上、この実施形態では、プロセッサ１０は、実行中の複数の命令のそれぞれに割り当て可能な数のフラグＦを含むフラグ群ＦＧをレジスタＲ毎に有している。プロセッサ１０は、例えば、フラグ群ＦＧのフラグＦをレジスタＲに対する読み出しが終了したか否かを示すフラグとして使用することにより、実行中の複数の命令ＩＳが同じレジスタＲからデータを読み出すときにも、ＷＡＲ依存を守ることができる。例えば、プロセッサ１０の判定部６０は、実行中の複数の命令ＩＳが同じレジスタＲからデータを読み出すときにも、判定対象の命令に先行する命令によるレジスタＲからのデータの読み出しが終了したか否かを、信号ＲＥＰに基づいて判定できる。
【００９４】
また、プロセッサ１０は、例えば、フラグ群ＦＧのフラグＦをレジスタＲに対する書き込みが終了したか否かを示すフラグとして使用することにより、実行中の複数の命令ＩＳが同じレジスタＲにデータを書き込むときにも、ＲＡＷ依存およびＷＡＷ依存を守ることができる。例えば、プロセッサ１０の判定部６０は、実行中の複数の命令ＩＳが同じレジスタＲにデータを書き込むときにも、判定対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了したか否かを、信号ＲＥＰに基づいて判定できる。
【００９５】
さらに、この実施形態では、ＷＡＲ用フラグテーブル３０およびＲＡＷ／ＷＡＷ用フラグテーブル３０の両方を使用することにより、実行中の複数の命令が同じレジスタＲにアクセスするときにも、ＷＡＲ依存、ＲＡＷ依存およびＷＡＷ依存を守ることができる。このように、この実施形態では、実行中の複数の命令が同じレジスタＲにアクセスするときにも、命令間のデータ依存を守ることができる。
【００９６】
また、この実施形態では、フラグテーブル３０が複数のフラグＦを含むフラグ群ＦＧをレジスタＲ毎に有しているため、フラグＦのセットとフラグＦのリセットとを、パイプライン処理の互いに異なるステージで実行できる。これにより、この実施形態では、パイプライン処理の段数（ステージの数）を適切に設計できる。
【００９７】
図７は、別の実施形態におけるプロセッサ１２の一例を示している。図１−図６で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。プロセッサ１２は、複数の命令を並列に処理する。例えば、プロセッサ１２は、２つの処理系統により、２つのパイプライン処理を並列に実行する。レジスタリード部ＲＧＲ１、演算器ＡＬＵ１およびレジスタライト部ＲＧＷ１は、２つの処理系統のうちの一方の処理系統に含まれる。また、レジスタリード部ＲＧＲ２、演算器ＡＬＵ２およびレジスタライト部ＲＧＷ２は、２つの処理系統のうちの他方の処理系統に含まれる。なお、プロセッサ１２は、３つ以上のパイプライン処理を並列に実行するように設計されてもよいし、１つのパイプライン処理を実行するように設計されてもよい。
【００９８】
プロセッサ１２で実行するパイプライン処理は、例えば、パイプラインレジスタＰＲＧにより、命令発行ステージ、レジスタ読み出しステージ、実行ステージおよびレジスタ書き込みステージに分けられる。命令発行ステージ、レジスタ読み出しステージ、実行ステージおよびレジスタ書き込みステージの処理は、図４および図５で説明した命令発行ステージＩＤ、レジスタ読み出しステージＲＲ、実行ステージＥＸおよびレジスタ書き込みステージＷＢの処理と同様である。
【００９９】
プロセッサ１２は、例えば、レジスタファイル２０、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａ、ＷＡＲ用フラグテーブル３０Ｂ、命令メモリＭＥＭ、デコード部ＤＥＣ、レジスタリード部ＲＧＲ１、ＲＧＲ２、演算器ＡＬＵ１、ＡＬＵ２、レジスタライト部ＲＧＷ１、ＲＧＷ２およびパイプラインレジスタＰＲＧ１１、ＰＲＧ１２、ＰＲＧ２１、ＰＲＧ２２、ＰＲＧ３１、ＰＲＧ３２を有している。
【０１００】
レジスタファイル２０は、図１−図６で説明した実施形態のレジスタファイル２０と同様である。また、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａ、ＷＡＲ用フラグテーブル３０Ｂは、図１−図６で説明した実施形態のフラグテーブル３０と同様である。例えば、各フラグテーブル３０Ａ、３０Ｂは、実行中の複数の命令のそれぞれに割り当て可能な数のフラグＦを含むフラグ群ＦＧをレジスタＲ毎に有している。なお、図２に示したポインタ制御部ＰＣＮＴは、ＲＡＷ／ＷＡＷ用フラグテーブル３０ＡおよびＷＡＲ用フラグテーブル３０Ｂの一方に含まれる。また、各フラグテーブル３０Ａ、３０Ｂは、例えば、２つの処理系統にそれぞれ対応する論理和部ＯＲＵを有している。
【０１０１】
命令メモリＭＥＭは、例えば、プロセッサ１２で実行する命令を記憶している。命令メモリＭＥＭに記憶されている命令は、例えば、命令発行ステージにおいて、デコード部ＤＥＣにより読み出される。
【０１０２】
例えば、命令発行ステージでは、デコード部ＤＥＣは、命令メモリＭＥＭから読み出した命令を解読し、命令を発行する。また、デコード部ＤＥＣは、フラグセット部４０を有している。デコード部ＤＥＣのフラグセット部４０は、図１−図６で説明した実施形態のフラグセット部４０と同様である。例えば、フラグセット部４０は、命令メモリＭＥＭから読み出した命令に対し、命令の発行順に、各フラグテーブル３０Ａ、３０Ｂのエントリ（図２に示したテールポイントＴＰが示す位置のフラグＦ）を割り当てる。そして、フラグセット部４０は、割り当てたエントリ上の特定のフラグＦ（命令によりアクセスされるレジスタＲに対応するフラグＦ）を、信号ＳＥＴＣを用いてセットする。
【０１０３】
これにより、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａでは、例えば、テールポイントＴＰが示す位置のフラグＦのうち、命令によりデータが書き込まれるレジスタＲに対応するフラグＦがセットされる。また、ＷＡＲ用フラグテーブル３０Ｂでは、例えば、テールポイントＴＰが示す位置のフラグＦのうち、命令によりデータが読み出されるレジスタＲに対応するフラグＦがセットされる。
【０１０４】
デコード部ＤＥＣからの出力データ（命令の解読結果等）は、パイプラインレジスタＰＲＧ１（ＰＲＧ１１、ＰＲＧ１２）に保持される。パイプラインレジスタＰＲＧ１（ＰＲＧ１１、ＰＲＧ１２）に保持されているデータは、例えば、レジスタ読み出しステージにおいて、レジスタリード部ＲＧＲ（ＲＧＲ１、ＲＧＲ２）に転送される。
【０１０５】
レジスタ読み出しステージでは、レジスタリード部ＲＧＲ（ＲＧＲ１、ＲＧＲ２）は、命令のオペランドで指定されたレジスタＲからデータを読み出す。また、レジスタリード部ＲＧＲは、フラグリセット部５０および判定部６０を有している。レジスタリード部ＲＧＲのフラグリセット部５０および判定部６０は、図１−図６で説明した実施形態のフラグリセット部５０および判定部６０と同様である。したがって、レジスタリード部ＲＧＲは、レジスタＲからデータを読み出す際に、ＲＡＷ依存を守ることができる。
【０１０６】
例えば、レジスタリード部ＲＧＲの判定部６０は、データをレジスタファイル２０から読み出す前に、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａを参照し、命令によりデータが読み出されるレジスタＲに対応するフラグＦを調べる。ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａは、判定部６０から受ける信号ＣＨＫに基づく範囲のフラグＦの状態を示す信号ＲＥＰを、判定部６０に出力する。判定部６０は、信号ＲＥＰに基づいて、判定対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了したか否かを判定する。
【０１０７】
信号ＣＨＫに基づく範囲のフラグＦがセットされている場合（処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了していない場合）、レジスタリード部ＲＧＲは、レジスタＲからのデータの読み出しを待機する。すなわち、プロセッサ１２は、処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了していない場合、レジスタ読み出しステージの処理をストールさせる。さらに、プロセッサ１２は、レジスタ読み出しステージより上流のステージの処理をストールさせる。
【０１０８】
信号ＣＨＫに基づく範囲のフラグＦがリセットされている場合（処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了している場合）、レジスタリード部ＲＧＲは、レジスタＲからデータを読み出すとともに、ＷＡＲ用フラグテーブル３０Ｂを更新する。例えば、レジスタリード部ＲＧＲのフラグリセット部５０は、命令が割り当てられたエントリのフラグＦのうち、命令によりデータが読み出されるレジスタＲに対応するＷＡＲ用フラグテーブル３０ＢのフラグＦを、信号ＲＳＴＣを用いてリセットする。
【０１０９】
レジスタリード部ＲＧＲ（ＲＧＲ１、ＲＧＲ２）で読み出したデータ等は、パイプラインレジスタＰＲＧ２（ＰＲＧ２１、ＰＲＧ２２）に保持される。パイプラインレジスタＰＲＧ２（ＰＲＧ２１、ＰＲＧ２２）に保持されているデータ等は、例えば、実行ステージにおいて、演算器ＡＬＵ（ＡＬＵ１、ＡＬＵ２）に転送される。
【０１１０】
実行ステージでは、演算器ＡＬＵ（ＡＬＵ１、ＡＬＵ２）は、デコード部ＤＥＣで解読された命令に基づいて、演算を実行する。例えば、演算器ＡＬＵは、レジスタリード部ＲＧＲで読み出したデータを用いた演算を実行する。演算器ＡＬＵ（ＡＬＵ１、ＡＬＵ２）からの出力データ（演算結果等）は、パイプラインレジスタＰＲＧ３（ＰＲＧ３１、ＰＲＧ３２）に保持される。パイプラインレジスタＰＲＧ３（ＰＲＧ３１、ＰＲＧ３２）に保持されているデータは、例えば、レジスタ書き込みステージにおいて、レジスタライト部ＲＧＷ（ＲＧＷ１、ＲＧＷ２）に転送される。
【０１１１】
レジスタ書き込みステージでは、レジスタライト部ＲＧＷ（ＲＧＷ１、ＲＧＷ２）は、命令の実行結果（演算結果等）を、命令のオペランドで指定されたレジスタＲに書き込む。また、レジスタライト部ＲＧＷは、フラグリセット部５０および判定部６０を有している。レジスタライト部ＲＧＷのフラグリセット部５０および判定部６０は、図１−図６で説明した実施形態のフラグリセット部５０および判定部６０と同様である。したがって、レジスタライト部ＲＧＷは、レジスタＲにデータを書き込む際に、ＷＡＲ依存およびＷＡＷ依存を守ることができる。
【０１１２】
例えば、レジスタライト部ＲＧＷの判定部６０は、データをレジスタファイル２０に書き込む前に、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａを参照し、命令によりデータが書き込まれるレジスタＲに対応するフラグＦを調べる。ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａは、判定部６０から受ける信号ＣＨＫに基づく範囲のフラグＦの状態を示す信号ＲＥＰを、判定部６０に出力する。判定部６０は、信号ＲＥＰに基づいて、判定対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了したか否かを判定する。
【０１１３】
信号ＣＨＫに基づく範囲のフラグＦがセットされている場合（処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了していない場合）、レジスタライト部ＲＧＷは、レジスタＲへのデータの書き込みを待機する。すなわち、プロセッサ１２は、処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了していない場合、レジスタ書き込みステージの処理をストールさせる。さらに、プロセッサ１２は、レジスタ書き込みステージより上流のステージの処理をストールさせる。
【０１１４】
さらに、レジスタライト部ＲＧＷの判定部６０は、データをレジスタファイル２０に書き込む前に、ＷＡＲ用フラグテーブル３０Ｂを参照し、命令によりデータが書き込まれるレジスタＲに対応するフラグＦを調べる。ＷＡＲ用フラグテーブル３０Ｂは、判定部６０から受ける信号ＣＨＫに基づく範囲のフラグＦの状態を示す信号ＲＥＰを、判定部６０に出力する。判定部６０は、信号ＲＥＰに基づいて、判定対象の命令に先行する命令によるレジスタＲからのデータの読み出しが終了したか否かを判定する。
【０１１５】
信号ＣＨＫに基づく範囲のフラグＦがセットされている場合（処理対象の命令に先行する命令によるレジスタＲからのデータの読み出しが終了していない場合）、レジスタライト部ＲＧＷは、レジスタＲへのデータの書き込みを待機する。すなわち、プロセッサ１２は、処理対象の命令に先行する命令によるレジスタＲからのデータの読み出しが終了していない場合、レジスタ書き込みステージの処理をストールさせる。さらに、プロセッサ１２は、レジスタ書き込みステージより上流のステージの処理をストールさせる。
【０１１６】
ＲＡＷ／ＷＡＷ用フラグテーブル３０ＡおよびＷＡＲ用フラグテーブル３０Ｂの両方で、信号ＣＨＫに基づく範囲のフラグＦがリセットされている場合、レジスタライト部ＲＧＷは、レジスタＲにデータを書き込むとともに、ＲＡＷ／ＷＡＷ用フラグテーブル３０Ａを更新する。例えば、レジスタライト部ＲＧＷのフラグリセット部５０は、命令が割り当てられたエントリのフラグＦのうち、命令によりデータが書き込まれるレジスタＲに対応するＲＡＷ／ＷＡＷ用フラグテーブル３０ＡのフラグＦを、信号ＲＳＴＣを用いてリセットする。
【０１１７】
このように、レジスタライト部ＲＧＷは、処理対象の命令に先行する命令によるレジスタＲへのデータの書き込みが終了し、かつ、処理対象の命令に先行する命令によるレジスタＲからのデータの読み出しが終了している場合、レジスタＲにデータを書き込む。これにより、プロセッサ１２は、同一レジスタＲを更新する複数の命令が同時にプロセッサ１２中に存在することを許しても、命令間の依存関係を守ってプログラムを正しく実行することができる。
【０１１８】
なお、プロセッサ１２の構成および動作は、この例に限定されない。例えば、各フラグテーブル３０Ａ、３０Ｂは、２つの処理系統で共通に使用される論理和部ＯＲＵを有してもよい。この場合、各フラグテーブル３０Ａ、３０Ｂは、２つの処理系統から受ける信号ＣＨＫのうちの一方を選択して論理和部ＯＲＵに転送する調停回路を有してもよい。例えば、調停回路は、２つの処理系統から受ける信号ＣＨＫのうち、先に発行された命令に対応する信号ＣＨＫを選択する。また、調停回路は、例えば、選択した信号ＣＨＫを送信した判定部６０に、信号ＲＥＰを転送する。
【０１１９】
以上、この実施形態においても、上述した図１−図６で説明した実施形態と同様の効果を得ることができる。例えば、この実施形態では、プロセッサ１２は、ＲＡＷ／ＷＡＷ用フラグテーブル３０ＡおよびＷＡＲ用フラグテーブル３０Ｂを有している。各フラグテーブル３０Ａ、３０Ｂは、実行中の複数の命令のそれぞれに割り当て可能な数のフラグＦを含むフラグ群ＦＧをレジスタＲ毎に有している。このため、この実施形態では、実行中の複数の命令が同じレジスタＲにアクセスするときにも、ＷＡＲ依存、ＲＡＷ依存およびＷＡＷ依存を守ることができる。すなわち、この実施形態では、実行中の複数の命令が同じレジスタＲにアクセスするときにも、命令間のデータ依存を守ることができる。
【０１２０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１２１】
１０、１２‥プロセッサ；２０‥レジスタファイル；３０、３０Ａ、３０Ｂ‥フラグテーブル；４０‥フラグセット部；５０‥フラグリセット部；６０‥判定部；ＡＮＤ１、ＡＮＤ２‥論理積回路；ＣＯＭＰ１、ＣＯＭＰ２‥比較部；ＤＥＣ‥デコード部；Ｆ、Ｆ０００−Ｆ１５７‥フラグ；ＦＧ、ＦＧ０−ＦＧ１５‥フラグ群；ＭＥＭ‥命令メモリ；ＯＲ１‥論理和回路；ＯＲＵ０−ＯＲＵ１５‥論理和部；ＰＣＮＴ‥ポインタ制御部；ＰＲＧ１１、ＰＲＧ１２、ＰＲＧ２１、ＰＲＧ２２、ＰＲＧ３１、ＰＲＧ３２‥パイプラインレジスタ；Ｒ、Ｒ０−Ｒ１５‥レジスタ；ＲＧＲ１、ＲＧＲ２‥レジスタリード部；ＲＧＷ１、ＲＧＷ２‥レジスタライト部；ＳＥＬＵ０−ＳＥＬＵ７‥選択部
【図１】
2014041422.tif 000003
【図２】
2014041422.tif 000004
【図３】
2014041422.tif 000005
【図４】
2014041422.tif 000006
【図５】
2014041422.tif 000007
【図６】
2014041422.tif 000008
【図７】
2014041422.tif 000009