(57)【特許請求の範囲】
【請求項１】
命令を順次に取得する命令取得部と、
前記命令取得部において取得された命令を実行する命令実行部と、
前記命令実行部において分岐命令が実行されると、当該分岐命令による分岐の結果に関する分岐情報を記憶し、当該分岐情報に基づいて、前記命令取得部において分岐命令が取得された場合の分岐先を予測し、当該予測した分岐先から順次に命令を取得するように前記命令取得部を制御する分岐予測部と、
前記命令実行部において分岐命令を用いずに一連の命令群を繰り返し実行する場合、その最初の実行において、前記一連の命令群の末尾の命令から先頭の命令へ分岐するためのループ開始用分岐を前記命令取得部に指示し、前記一連の命令群の最後の実行において、前記命令群の末尾の命令から先頭の命令へのループのための分岐を無効にする制御を行うループ制御部と、
を有し、
前記ループ制御部が、前記一連の命令群の最初の実行において前記ループ開始用分岐を前記命令取得部に指示するとき、前記命令実行部に対して前記一連の命令群の最後の命令に付随する分岐命令として扱われる擬似的な分岐命令を提供し、そして、前記分岐予測部が前記一連の命令群の最後の命令を分岐命令として記憶する、
プロセッサ。
【請求項２】
前記ループ制御部は、前記一連の命令群の最後の実行において、当該一連の命令群の末尾の命令から前記一連の命令群の次の命令へ分岐するためのループ終了用分岐を前記命令取得部に指示する、請求項１に記載のプロセッサ。
【請求項３】
前記分岐予測部が、前記ループ終了用分岐の分岐情報の記憶を行わない、請求項２に記載のプロセッサ。
【請求項４】
前記ループ制御部は、前記一連の命令群の最初の実行において、前記分岐予測部が繰り返し処理用の擬似的な分岐命令による分岐を予測している場合、前記命令取得部への前記ループ開始用分岐の指示を行わない、請求項１〜３の何れかに記載のプロセッサ。
【請求項５】
前記命令取得部によって取得された命令を前記命令実行部に供給するまで当該命令を保持する記憶部をさらに有し、
前記ループ制御部は、前記ループ終了用分岐を前記命令取得部に指示する場合に、前記記憶部に記憶された命令のうち前記一連の命令群内の命令の記憶を消去する、請求項２に記載のプロセッサ。
【請求項６】
命令を命令取得部で順次に取得して当該命令を命令実行部で実行する信号処理方法であって、
分岐命令が実行されると、当該分岐命令による分岐の結果に関する分岐情報を記憶する記憶工程と、
前記記憶工程で記憶した前記分岐情報に基づいて分岐先を予測する予測工程と、
前記予測工程で予測した分岐先から順次に命令を取得する取得工程と、
前記命令実行部において分岐命令を用いずに一連の命令群を繰り返し実行する場合、その最初の実行において、前記一連の命令群の末尾の命令から先頭の命令へ分岐するためのループ開始用分岐を前記命令取得部に指示すると共に前記一連の命令群の末尾の命令を分岐命令として学習させるループ開始制御工程と、
前記一連の命令群の繰り返し実行の最後の実行において、前記一連の命令群の末尾の命令から先頭の命令へのループのための分岐を無効にする制御を行うループ終了工程と、
を有する信号処理方法。
【請求項７】
メモリアクセスのためのプログラムカウンタを含む命令フェッチ部と、命令実行部と、ブロックリピート命令に基づくブロックリピート動作の実行を制御するループ制御部と、上記命令フェッチ部のプログラムカウンタのアドレス値を監視し、命令の分岐を予測したときに上記命令フェッチ部に分岐先アドレスを供給する分岐予測部とを有し、パイプライン処理により命令の実行を行なうプロセッサにおいて、
上記ブロックリピート動作が最初に実行されるときに、上記分岐予測部に対して、上記ブロックリピート動作の対象の命令群の末尾のアドレスの命令が上記命令群の先頭のアドレスへの分岐命令であると学習させるステップと、
上記ブロックリピート動作が２回目以降に実行されるときに、上記命令フェッチ部の上記プログラムカウンタのアドレス値が上記命令群の末尾のアドレスになると、上記分岐予測部が上記命令フェッチ部に対して、上記命令群の先頭のアドレスを分岐先のアドレスとして供給するステップと、
を実行するプロセッサ。
【請求項８】
請求項７に記載のプロセッサにおいて、
上記分岐予測部の上記学習のために、上記ループ制御部が上記命令実行部に対してブロックリピート動作の対象の命令群の末尾の命令に付随する分岐命令として扱われる擬似的な分岐命令を供給する、プロセッサ。
【請求項９】
請求項７に記載のプロセッサにおいて、
上記ブロックリピート動作の１回目の実行時において、上記ループ制御部が、上記命令フェッチ部に対して、上記命令群の末尾のアドレスの次のフィッチ先のアドレスとして、上記命令群の先頭のアドレスを供給すると共に、上記命令実行部に対してブロックリピート動作の対象の命令群の末尾の命令に付随する分岐命令として扱われる擬似的な分岐命令を供給する、プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分岐予測機構およびループ支援機構に特徴を有するプロセッサおよび信号処理方法に関するものである。
【背景技術】
【０００２】
例えば、複雑高度な命令セットを持つＣＩＳＣ(Complex Instruction Set Computer)型のＤＳＰ(Digital Signal Processor)がある。このようなＤＳＰは、ＤＳＰ処理に特有のプログラム中の繰り返し構造を支援するハードウェア資源を備えている。さらにこのハードウェア資源を操作する専用命令を備えていることもある。
例えば、フィルタ演算等をＤＳＰに実行させる場合に、繰り返し処理がプログラムされることが多い。このようなプログラムを効率的に実行するには、分岐命令を使わずに繰り返しを実現するための専用のループ支援機構を持つことは有用である。
このようなループ支援機構を用いることで、「繰り返す」という動作（繰り返し回数をチェックし、未完了であればループの先頭へ分岐する動作）を自動化し、理想的にはサイクルペナルティなしにループ中の命令を実行することができる。
このようなＤＳＰの内部にはループ支援機構が備えられ、プログラム中の繰り返し構造をその先頭・終端の命令のアドレスで回路中に表現・保持する。また、それら先頭・終端の命令のアドレスを保持するアドレスレジスタを初期化することでループ構造を宣言する専用命令を備えていることもある。
【０００３】
専用命令が命令実行部で実行されることで、ループ支援機構のアドレスレジスタが初期化される。ループの繰り返し回数は、別の命令を用いて事前に回数レジスタを初期化しておくことで指示する。
そして、ループ支援機構は、ＤＳＰがループを実行中であるとき、ループの繰り返しが間際なく行われるように、命令フェッチに干渉する。具体的には、ループ支援機構は、フェッチがループ終端に到達すると、次にフェッチすべき命令がある場所としてループ先頭アドレスを示す。この指示によりＤＳＰは、その内部に、実行すべき命令をループ構造に沿って先行して用意することができる。これにより、サイクルペナルティなしの繰り返しのための必要条件が満たされる。このようなＤＳＰは、例えば、可変長命令を採用しておりフェッチ幅が命令幅ではないなどといった理由のため、内部に命令キューを持つこともある。
【特許文献１】特開２００１−１０９６２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、近年、ＤＳＰでは、ＤＳＰ処理の割合を減少させ、制御コード（条件判断と分岐を主とするプログラムまたはルーチン）の処理の割合を増やした場合に適合するために、制御コード実行時の所要サイクルの低減を狙って新たに分岐予測機構を搭載することがある。
【０００５】
ところで、上述したようなＣＩＳＣ型のＤＳＰでは、制御コードの処理の割合を増大させた場合の処理の効率化を図るために、ループ支援機構と分岐予測機構との双方を共存させたいという要請がある。
しかしながら、ループ支援機構と分岐予測機構は、いずれも命令フェッチに干渉するものであるため、単純に組み合わせただけでは両者が競合したときに最適な先行命令フェッチを行えない可能性があり、両者を調停してそのような事態を回避するための複雑な機構が必要になるという問題がある。
【０００６】
本発明はかかる事情に鑑みてなされたものであり、その目的は、ループ支援機構と分岐予測機構との双方を備えた場合に、プログラムの先行フェッチを最適に、且つ簡単な構成で処理することができるプロセッサおよび信号処理方法を提供することにある。
【課題を解決するための手段】
【０００７】
上述した従来技術の問題点を解決し、上述した目的を達成するために、第１の観点の発明のプロセッサは、命令を順次に取得する命令取得部と、前記命令取得部において取得された命令を実行する命令実行部と、前記命令実行部において分岐命令が実行されると、当該分岐命令による分岐の結果に関する分岐情報を記憶し、当該分岐情報に基づいて、前記命令取得部において分岐命令が取得された場合の分岐先を予測し、当該予測した分岐先から順次に命令を取得するように前記命令取得部を制御する分岐予測部と、前記命令実行部において命令群を繰り返し実行する場合、その最初の実行において、前記命令群の末尾の命令から先頭の命令へ分岐するためのループ開始用分岐を前記命令取得部に指示し、前記命令群の最後の実行において、前記命令群の末尾の命令から先頭の命令への分岐を無効にする制御を行うループ制御部とを有する。
【０００８】
第１の観点の発明のプロセッサでは、命令実行部がプログラム中の繰り返し構造（ループ）を実行するとき、ループ制御部は、その最初の周回（実行）において、当該ループの末尾の命令から先頭の命令へ分岐するためのループ形成制御（ループ開始用分岐）を前記命令取得部に指示し、同時に架空の分岐命令を前記命令実行部に与える。命令取得部がループ開始指示に従うことにより、プロセッサは前記ループの末尾の命令から先頭の命令へ分岐する。
そして、前記命令実行部は架空の分岐命令を認識すると、分岐動作そのものは行わないものの、一般の分岐命令と同様に、分岐命令が存在したことを前記分岐予測部に記憶させる。架空分岐命令は、分岐元のプログラムアドレスをループ末尾の命令アドレス、分岐先のアドレスをループ先頭の命令アドレスとしている。分岐予測部は、常時、前記命令実行部における分岐命令による分岐の結果に関する分岐情報を記憶し、当該分岐情報に基づいて、前記命令取得部において分岐命令が取得された場合の分岐先を予測し、当該予測した分岐先から順次に命令を取得するように前記命令取得部を制御している。分岐予測部は、架空の分岐命令によりループの存在を記憶することとなる。
これにより、繰り返し命令による繰り返し処理を、分岐予測部による分岐予測処理によって実現でき、繰り返し（ループ）支援機構と分岐予測機構との間の複雑な調停が不要になり、簡単な構成で実現が可能になる。
【０００９】
好適には、第１の観点の発明のプロセッサの前記ループ制御部は、前記命令群の最後の実行において、当該命令群の末尾の命令から前記命令群の次の命令へ分岐するためのループ終了用分岐を前記命令取得部に指示する。
これにより、ループ終了処理を実現できる。
【００１０】
好適には、第１の観点の発明のプロセッサの前記分岐予測部は、前記ループ終了用分岐情報の記憶を行わない。
これにより、同一のループを次に実行する際に、ループ形成用分岐制御を指示しなくても、分岐予測部による予測により、ループの末尾の命令から先頭の命令に自動的に分岐できる。
【００１１】
好適には、第１の観点の発明のプロセッサの前記ループ制御部は、前記命令群の最初の実行において、前記分岐予測部が繰り返し処理用の架空分岐命令による分岐を予測している場合、前記命令取得部への前記ループ開始用分岐の指示を行わない。
【００１２】
好適には、第１の観点の発明のプロセッサは、前記命令取得部によって取得された命令を前記命令実行部に供給するまで当該命令を保持する記憶部をさらに有し、前記ループ制御部は、前記ループ終了用分岐を前記命令取得部に指示する場合に、前記記憶部に記憶された命令のうち前記命令群内の命令の記憶を消去する。
【００１３】
第２の観点の発明の信号処理方法は、命令を命令取得部で順次に取得して当該命令を命令実行部で実行する信号処理方法であって、分岐命令が実行されると、当該分岐命令による分岐の結果に関する分岐情報を記憶する記憶工程と、前記記憶工程で記憶した前記分岐情報に基づいて分岐先を予測する予測工程と、前記予測工程で予測した分岐先から順次に命令を取得する取得工程と、前記命令実行部において命令群を繰り返し実行する場合、その最初の実行において、前記命令群の末尾の命令から先頭の命令へ分岐するためのループ開始用分岐を前記命令取得部に指示するループ開始制御工程と、前記命令群の繰り返し実行の最後の実行において、前記命令群の末尾の命令から先頭の命令への分岐を無効にする制御を行うループ終了工程とを有する。
第３の観点の発明のプロセッサは、メモリアクセスのためのプログラムカウンタを含む命令フェッチ部と、命令実行部と、ブロツクリピート命令に基づくブロックリピート動作（ブロックリピード命令が指示するループ（繰り返し動作））の実行を制御するループ制御部と、上記命令フェッチ部のプログラムカウンタのアドレス値を監視し、命令の分岐を予測したときに上記命令フェッチ部に分岐先アドレスを供給する分岐予測部とを有し、パイプライン処理により命令の実行を行なうプロセッサであって、上記ブロックリピート動作が最初に実行されるときに、上記分岐予測部に対して、上記ブロックリピート動作の対象の命令群の末尾のアドレスの命令が上記命令群の先頭のアドレスへの分岐命令であると学習させるステップと、上記ブロックリピート動作が２回目以降に実行されるときに、上記命令フェッチ部の上記プログラムカウンタのアドレス値が上記命令群の末尾のアドレスになると、上記分岐予測部が上記命令フェッチ部に対して、上記命令群の先頭のアドレスを分岐先のアドレスとして供給するステップとを実行する。
【発明の効果】
【００１４】
本発明によれば、ループ支援機構と分岐予測機構との双方を備えた場合に、簡単な構成で両者の統合が行われ、最適な先行命令フェッチを行うことができるプロセッサおよび信号処理方法を提供することができる。
【発明を実施するための最良の形態】
【００１５】
＜本発明の実施形態の関連技術＞
以下、本発明の実施形態の関連技術について説明する。
図１は、当該関連技術に係るループ支援機構を備えたＤＳＰ１０１の構成図である。
図１に示すＤＳＰ１０１では、命令実行部１１９においてループ構造宣言命令（ブロックリピート命令）が実行されると、繰り返し構造（ループ）が認識される。これにより、ループ制御部１２３内のレジスタＲＳＡに対してループのスタートアドレスＳＡが書き込まれ、レジスタＲＥＡに対してループのエンドアドレスＥＡが書き込まれ、レジスタＢＲＡＦに記憶されているブロックリピートアクティブフラグＡＦがアクティブを示す論理値「１」に書き換えられる。繰り返し回数（ループ回数）を初期値として示すブロックリピートカウント値ＢＲＣＶは、レジスタＢＲＣに対して事前に書き込んでおく。
【００１６】
ループ制御部１２３は、コントローラ１４９，２４９を備えており、繰り返し動作を少ないサイクルペナルティで実現するループ支援機構である。
コントローラ１４９は、フェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスとループのエンドアドレスＥＡとが一致したタイミングにおいて、ブロックリピートアクティブフラグＡＦがアクティブを示し、且つブロックリピートカウンタ値ＢＲＣＶが非「０」であるという繰り返し条件を満たしているかを判定する。そして、コントローラ１４９は、上記繰り返し条件を満たしていると判定した場合に、命令フェッチ部１１３のセレクタ１３３にループのスタートアドレスＳＡを供給する。これにより、命令実行部１１９においてループ繰り返し条件を判断する前に、ブロック内のスタートアドレスＳＡの命令がメモリアクセス部１３７によってメモリ１１１からキュー１１５にフェッチされる。
なお、上述したフェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスと、ループのエンドアドレスＥＡとが一致／不一致のいずれかであるかの比較処理は、値の一致判定ではなく、エンドアドレスＥＡに存在する命令の末尾を含むフェッチが行われたか否かを判定する。例えば、「ＥＡ＋最大命令長−１」のアドレス分のフェッチが行われたか否かを判定する。
【００１７】
コントローラ２４９は、ディスパッチプログラムカウンタＰＣ−Ｄが指し示すアドレスとループ（ブロックリピート）のエンドアドレスＥＡとが一致したタイミングにおいて、ブロックリピートアクティブフラグＡＦがアクティブを示し、且つブロックリピートカウンタ値ＢＲＣＶが「０」であるという繰り返し（ループ）終了条件を満たしているか否かを判定する。そして、コントローラ２４９は、上記繰り返し終了条件を満たしていると判定した場合に、キュー１１５およびディスパッチ部１１７に格納されたループ内の命令を破棄する。なお、ディスパッチプログラムカウンタＰＣ−Ｄは、ディスパッチ部１１７から命令実行部１１９に出力される命令のアドレスを示している。
また、セレクタ１３３では、ループ制御部１２３からのスタートアドレスＳＡではなく、エンドアドレスＥＡに対してエンドアドレスにおける命令の長さが加算されたアドレスが選択される。これにより、メモリアクセス部１３７によって、ループに続く命令がキュー１１５にフェッチされ、ループから抜けることになる。
【００１８】
上述したように、ＤＳＰ１０１では、ループ制御部１２３を備えることで、ループを少ないサイクルペナルティで実現できる。
【００１９】
図２は、当該関連技術に係る分岐予測機構を備えたＤＳＰ２０１の構成図である。
図２に示すＤＳＰ２０１では、分岐予測部２２１において、命令実行部２１９で実行した分岐命令を記憶する。そして、分岐予測部２２１は、フェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスを常時監視し、その履歴を基に分岐予測を行う。分岐予測部２２１は、当該分岐予測の結果に基づいて、セレクタ２３３の選択するアドレスを切り換える。
すなわち、分岐予測部２２１は、過去に命令実行部２１９が実行した分岐命令を記憶し、フェッチアドレスと、その記憶したアドレスとを常時比較し、命令実行部２１９が次に分岐命令を実行することを予測する。分岐予測部２２１は、分岐命令を予測した場合に、フェッチプログラムカウンタＰＣ−Ｆが分岐先のアドレスを指し示すように制御する。
【００２０】
これにより、命令実行部２１９において分岐命令を実行する前に、分岐した場合に用いられる命令をフェッチしてキュー２１５に格納でき、分岐予測が当たった場合には、命令実行部２１９による分岐処理は行われずに、分岐レイテンシを抑えることができる。
一方、命令実行部２１９は、分岐予測が外れた場合、例えば、分岐をせずに次のアドレスの命令を実行することになった場合には、分岐予測によってキュー２１５およびディスパッチ部２１７に取り込まれた命令を消去すると共に、上記次のアドレスをフェッチプログラムカウンタＰＣ−Ｆが指し示すように制御する。この場合には、次のアドレスの命令をメモリ１１からフェッチしてキュー２１５およびディスパッチ部２１７を介して命令実行部２１９に投入する時間的なレイテンシが発生する。
なお、分岐予測が当たったか否かは、命令実行部２１９が分岐命令に対応する条件判定処理を行うことで判定される。
【００２１】
また、分岐予測部２２１が予測した分岐は、上述したようにフェッチプログラムカウンタＰＣ−Ｆに反映されると同時に、キュー２１５中で専用のＦＩＦＯ(First In First Out)に蓄えられる。当該ＦＩＦＯ内の予測情報は、ディスパッチ部２１７から命令実行部２１９に当該分岐命令が投入されるときに、当該命令と併せて渡される。命令実行部２１９では、命令の実行結果が予測と比較され、予測が誤りだったと判明した場合には、数サイクルのレイテンシ（値は命令に依存し、最小で５サイクル）を伴いながら明示的に分岐が実行される。
【００２２】
上述したように、ＤＳＰ２０１では、分岐予測部２２１を備えることで、分岐命令を少ないサイクルペナルティで実行できる。
【００２３】
＜本発明の実施形態＞
以下、本発明の実施形態に係るＤＳＰについて説明する。
本実施形態のＤＳＰは、分岐予測機構とループ支援機構とを簡単な構成で併せ持つものである。
図３は、本発明の実施形態に係るＤＳＰ１の構成図である。
図３に示すように、ＤＳＰ１は、例えば、メモリ１１、命令フェッチ部１３、命令キュー１５、ディスパッチ部１７、命令実行部１９、分岐予測部２１およびループ制御部２３を有する。
【００２４】
ここで、命令フェッチ部１３が本発明の命令取得部の一例であり、命令実行部１９が本発明の命令実行部の一例である。また、分岐予測部２１が本発明の分岐予測部の一例であり、ループ制御部２３が本発明のループ制御部の一例である。尚、命令取得部に、命令キュー、ディスパッチ部が含まれる場合もある。
【００２５】
図３に示すように、ＤＳＰ１は、分岐予測部２１とループ制御部２３との双方を備え、分岐予測とループ制御との統合を簡単な構成で実現する。
すなわち、ＤＳＰ１では、命令実行部１９がブロックリピート命令（ループ宣言命令）を実行した後、ディスパッチプログラムカウンタＰＣ−Ｄがループ（ブロックリピート動作の対象の命令群）の最後の命令のアドレスを指し示したタイミング（当該最後の命令が命令実行部１９に投入されるタイミング）で、ループ制御部２３がループ先頭への分岐を命令フェッチ部１３へ指示し、上記ループの先頭の命令に分岐させる。これにより、フェッチプログラムカウンタＰＣ−Ｆが上記ループの先頭の命令のアドレスＳＡを指し示す。またループ制御部２３は同時に、「架空の分岐命令（擬似分岐命令）」を命令実行部１９に投入する。
【００２６】
そして、命令実行部１９において、上記架空の分岐命令は、アドレスＥＡにあるループの最後の命令に付随していたように扱われ、アドレスＳＡにあるループの最初の命令に分岐したことが分岐予測部２１に記憶される。
その後、分岐予測部２１は、フェッチプログラムカウンタＰＣ−Ｆが、次に上記ループの最後の命令のアドレスＥＡを指し示すと、分岐を予測して、セレクタ３３を介して、上記ブロックの最初の命令のアドレスＳＡをフェッチプログラムカウンタＰＣ−Ｆに指定させる。
【００２７】
このように、ＤＳＰ１では、分岐予測およびループ支援のいずれもフェッチプログラムカウンタＰＣ−Ｆへ働きかけるものであることを利用して、ループにおける最初の周回（実行）において架空の分岐命令を投入し、以後、分岐予測部２１にループの末尾において先頭への分岐を予測させることで、ループ処理を分岐予測処理に吸収させる。これにより、分岐予測機構とループ支援機構との間で複雑な調停を行う必要がなくなり、簡単な構成で両者の統合を実現することが可能になる。
【００２８】
以下、図３に示す各構成要素について説明する。
［メモリ１１］
メモリ１１は、ＳＲＡＭ(static RAM)等のメモリであり、命令実行部１９が実行するプログラムのオブジェクトコードを記憶する。当該コードには、複数の一群の命令（コード）を指定された回数繰り返し実行することを指示するブロックリピート命令（ループ構造宣言命令）が含まれている。
また、上記コードに含まれる命令は、可変長命令である。
【００２９】
［命令フェッチ部１３］
命令フェッチ部１３は、例えば、加算器３１、セレクタ３３、フェッチプログラムカウンタ３５およびメモリアクセス部３７を有する。
加算器３１は、フェッチプログラムカウンタ３５が指し示すアドレスに、所定のフェッチ幅を加算したアドレスＡＤＲ３１をセレクタ３３に出力する。
セレクタ３３は、加算器３１からのアドレスＡＤＲ３１と、命令実行部１９からのアドレスＡＤＲ１９と、分岐予測部２１からのアドレスＡＤＲ２１と、ループ制御部２３からのアドレスのなかから一つのアドレスを選択してフェッチプログラムカウンタＰＣ−Ｆに出力する。
【００３０】
メモリアクセス部３７は、メモリ１１内のアドレスのうち、フェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスから、上記フェッチ幅を単位として命令をフェッチする（読み出す）。メモリアクセス部３７は、上記読み出した命令をキュー１５に出力する。
【００３１】
［キュー１５］
キュー１５は、メモリアクセス部３７から入力した、連続した可変長の命令よりなる命令列から、ディスパッチ部１７が命令を個別に取り出すまで、命令列を保持する。
すなわち、メモリアクセス部３７から渡される（フェッチされる）単位が命令ではないため、キュー１５を設けて命令をディスパッチ部１７に出力するように調整を行う。キュー１５は、ＦＩＦＯ形式で命令を入出力する。
【００３２】
［ディスパッチ部１７］
ディスパッチ部１７は、キュー１５から入力した命令列中の先頭にある命令を認識し、その長さを調べ、命令実行部１９に出力する。同時にその命令の長さをキュー１５に渡し、次の命令を出力させるようにする。
ＤＳＰ１では、上述したように、分岐予測部２１の機能により、分岐条件やループ条件を判断せずに、分岐先あるいはループの先頭の命令を先行してキュー１５にフェッチする。この場合に、ディスパッチ部１７やループ制御部４９において、分岐条件やループ条件が最終的に判定された後に、予測の正誤に応じて適切な命令をディスパッチして命令実行部１９に投入することで、プログラムを正しく実行することができる。
ディスパッチ部１７は、ディスパッチプログラムカウンタＰＣ−Ｄを有し、命令実行部１９に出力しようとしている命令のアドレスをループ制御部２３に出力する。
【００３３】
［命令実行部１９］
命令実行部１９は、ディスパッチ部１７から入力された命令をデコードし、デコード結果に基づいて処理を実行する。命令実行部１９は、例えば、分岐用実行部と演算用実行部等が多重化されており、それぞれにおいて命令の実行が行なわれる。図３においては、簡略的に分岐用実行部のみを示している。
命令実行部１９は、例えば、１サイクルに２命令を実行する構成を有し、２つのパイプラインを備えている。
命令実行部１９は、一つのパイプラインの命令レジスタＩＲの後段にセレクタ５１を配置している。セレクタ５１は、通常は、ディスパッチ部１７から命令レジスタＩＲに入力された命令を選択して後段のパイプラインに投入する。一方、セレクタ５１は、ループ制御部２３からの命令（後述する「架空の分岐命令」）を入力した場合には、これを選択して後段のパイプラインに投入する。  
【００３４】
なお、命令実行部１９は、ディスパッチ部１７から入力した可変長の命令をデコードし、使用するデータのアドレス（実効アドレス）を計算する。そして、命令実行部１９は、使用する整数データの読み出し動作を行う。そして、命令実行部１９は、整数演算を行い、結果を出力する。
【００３５】
［分岐予測部２１］
分岐予測部２１は、命令実行部１９において、実行された分岐命令のアドレスと、その分岐先のアドレスとを記憶する。
また、分岐予測部２１は、フェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスを監視し、フェッチプログラムカウンタＰＣ−Ｆのアドレスと記憶している分岐命令のアドレス及び分岐先のアドレスとを基に分岐予測を行う。具体的には、分岐予測部２１は、フェッチプログラムカウンタＰＣ−Ｆが、記憶されている過去に分岐を実行した分岐命令のアドレスを指し示した場合に、上記記憶されているアドレス等を参照して過去の分岐先のアドレスをフェッチプログラムカウンタＰＣ−Ｆが指し示すようにセレクタ３３を制御する。
【００３６】
これにより、命令実行部１９において分岐命令を実行する前に、分岐した場合に用いられる命令をフェッチすることができ、分岐予測が当たった場合には、分岐先の命令は既にキュー１５に格納されているため、命令実行部１９による分岐処理は行われずに、分岐レイテンシを抑えることができる。
一方、分岐予測が外れた場合（分岐をせずに次のアドレスの命令を実行することになった場合）には、命令実行部１９が、分岐予測によってキュー１５およびディスパッチ部１７に取り込まれた命令を消去すると共に、上記次のアドレスをフェッチプログラムカウンタＰＣ−Ｆが指し示すように制御する。
このように分岐予測が外れた場合には、次のアドレスの命令をメモリ１１からフェッチしてキュー１５およびディスパッチ部１７を介して命令実行部１９に投入するまでの時間的なレイテンシが発生する。
なお、分岐予測が当たったか否かは、命令実行部１９が分岐命令に対応する条件判定処理を行ない、与えられた分岐予測の情報と比較することで判定される。
【００３７】
ところで、ループ制御部２３によって命令実行部１９に「架空の分岐命令」が投入され、ループ制御部２３からセレクタ３３に、ループの先頭のアドレスＳＡが出力され、当該アドレスがフェッチプログラムカウンタＰＣ−Ｆに設定された場合を考える。
この場合には、命令実行部１９（分岐用実行部）は分岐予測部２１に対して、アドレスＥＡにあるループの最後の命令があたかも分岐命令であったかのような挙動を示し、それにより分岐予測部２１では、アドレスＳＡに対応するループの最初の命令に分岐したことが記憶される。
そして、分岐予測部２１は、フェッチプログラムカウンタＰＣ−Ｆが、次に上記ループの最後の命令のアドレスＥＡを指し示すと、分岐を予測して、セレクタ３３を介して、上記ループの最初の命令のアドレスＳＡをフェッチプログラムカウンタＰＣ−Ｆに指定させる。これにより、ループが分岐予測によって実現される。
【００３８】
［ループ制御部２３］
ループ制御部２３は、レジスタＲＳＡ，ＲＥＡ，ＢＲＣ，ＢＲＡＦおよび比較器４１を有する。
レジスタＲＳＡには、ループの先頭のアドレスＳＡが書き込まれる。
レジスタＲＥＡには、ループの末尾のアドレスＥＡが書き込まれる。
レジスタＢＲＣには、ブロック繰り返しカウンタＢＲＣＶが書き込まれる。
レジスタＢＲＡＦには、ブロック繰り返しアクティブフラグＡＦが書き込まれる。
【００３９】
比較器４１は、ディスパッチプログラムカウンタＰＣ−Ｄが示す値と、レジスタＲＥＡから読み出されたループの末尾のアドレスＥＡとを比較し、一致していれば論理値「１」を示す比較値をコントローラ４９に出力する。
【００４０】
コントローラ４９は、レジスタＲＳＡに記憶された繰り返し演算の先頭のアドレスＳＡと、比較器４１からの比較値ＣＶと、レジスタＢＲＣに記憶されたブロック繰り返しカウンタ値ＢＲＣＶと、レジスタＢＲＡＦに記憶されたブロック繰り返しアクティブフラグとＡＦに基づいて、ループ制御処理を行う。
具体的には、コントローラ４９は、ブロックリピート命令（ループ宣言命令）実行開始後（アクティブフラグＡＦが論理値「０」から「１」に切り換った後）に、最初に比較値ＣＶが論理値「０」から「１」に切り換ったタイミング（ループの最後の命令が命令実行部１９に投入されるタイミング）で、ループを形成するため、フェッチプログラムカウンタＰＣ−Ｆが上記ブロックの先頭の命令のアドレスＳＡを指し示すようにセレクタ３３を制御する。換言すれば、アドレスＳＡを次のフェッチアドレスとして与える。また、ループの先頭アドレスＳＡに分岐することを示す「架空の分岐命令」を命令実行部１９のセレクタ５１に出力する。
【００４１】
命令実行部１９は「架空の分岐命令」を実行したかのように振舞い、それが分岐予測部２１によって学習される。これにより、フェッチプログラムカウンタＰＣ−ＦがアドレスＥＡを次に指し示したときに、分岐予測部２１によってアドレスＳＡへの分岐予測が自動的に行われる。そのため、ループ制御部２３は、ループ実現のため、フェッチプログラムカウンタＰＣ−Ｆを常時監視し、ブロックの末尾のアドレスＥＡから先頭のアドレスＳＡに戻すという機構を独自に持つ必要がない。
【００４２】
また、コントローラ４９は、ループの最後の命令がディスパッチ部１７から命令実行部１９に出力されると、レジスタＢＲＣに記憶されたブロックリピートカウンタ値ＢＲＣＶを「１」だけデクリメントする。
【００４３】
コントローラ４９は、比較値ＣＶが論理値「０」から「１」に切り換ったタイミング（ループの最後の命令が命令実行部１９に投入されたタイミング）で、ブロック繰り返しカウンタ値ＢＲＣＶが「０」かつアクティブフラグＡＦが論理値「１」であるという非繰り返し条件（ループ終了条件）を満たしたか否かを判断する。コントローラ４９は、ループのエンドアドレスＥＡよりスタートアドレスＳＡへの分岐が予測され、かつ上記終了条件が満たされたと判断すると、その予測を取り消すために、命令フェッチ部１３に対し、上記ループの最後のアドレスＥＡの次のアドレスへ分岐するよう指示を出す。これにより、処理がループから抜ける。
【００４４】
また、コントローラ４９は、上記非繰り返し条件を満たすと、キュー１５およびディスパッチ部１７に残っている上記ループに対応した命令を消去（リフレッシュ）する。
【００４５】
以下、図３に示すＤＳＰ１によるブロックリピート命令（ループ宣言命令）およびループの実行に係る動作例を説明する。
図４は、図３に示すＤＳＰ１の動作例を説明するためのタイミングチャートである。
図４（Ａ）はフェッチプログラムカウンタＰＣ−Ｆが示すアドレスを示す図、図４（Ｂ）は命令実行部１９の命令レジスタＩＲに投入された命令を示す図、図４（Ｃ）はレジスタＢＲＡＦに格納されたブロック繰り返しアクティブフラグＡＦの状態を示す図、図４（Ｄ）はレジスタＲＳＡに格納されたアドレスを示す図、図４（Ｅ）はレジスタＲＥＡに格納されたアドレスを示す図、図４（Ｆ）はレジスタＢＲＣに格納されたブロック繰り返しカウンタＢＲＣＶの値を示す図である。
図４において、「Ｉ」は命令を示している。
図５は、図１に示すＤＳＰ１の動作例を説明するためのフローチャートである。
【００４６】
例えば、命令実行部１９において、分岐命令以外の非制御命令が順次実行されている状態では、加算器３１からのアドレスＡＤＲ３１がセレクタ３３で選択され、フェッチプログラムカウンタＰＣ−Ｆに設定される。
メモリアクセス部３７は、フェッチプログラムカウンタＰＣ−Ｆが指し示すアドレスを基にメモリ１１にアクセスを行って、メモリ１１から命令を読み出してキュー１５に格納する。このとき、アドレスＡＤＲ３１は、フェッチ幅だけ順次加算した値になるため、メモリアクセス部３７からフェッチ幅を単位として命令がキュー１５に読み出される。
【００４７】
そして、ディスパッチ部１７が、キュー１５からＦＩＦＯ方式で命令を読み出して命令実行部１９の命令レジスタＩＲに格納する。
命令実行部１９は、命令レジスタＩＲに格納された命令を実行する。
ＤＳＰ１は、上述した動作により、フェッチプログラムカウンタＰＣ−Ｆを基にメモリ１１から読み出された命令を、キュー１５およびディスパッチ部１７を介して命令実行部１９に供給して順に実行する。
【００４８】
そして、ディスパッチ部１７から命令実行部１９にブロックリピート命令ＢＲ（ループ宣言命令）が出力され、命令実行部１９がブロックリピート命令ＢＲを実行する（図５のステップＳＴ１）。
命令実行部１９は、ブロックリピート命令ＢＲを実行して繰り返し構造（ループ）を認識すると、ループ制御部２３内のレジスタＢＲＡＦに格納されたブロックリピートアクティブフラグＡＦを論理値「１」に設定する。
また、命令実行部１９は同時に、ループ制御部２３内のレジスタＲＳＡに対してループ（ブロックリピート動作の対象の一連の命令群）のスタートアドレスＳＡを書き込む。また、命令実行部１９は、レジスタＲＥＡに対してループのエンドアドレスＥＡを書き込む（図５のステップＳＴ２）。
【００４９】
その後、ループ制御部２３のコントローラ４９は、ブロックリピート命令実行後（アクティブフラグＡＦが論理値「０」から「１」に切り換った後）に、最初に比較値ＣＶが論理値「０」から「１」に切り換ったタイミング（ループの最後の命令が命令実行部１９に投入されたタイミング）を検知すると（図５のステップＳＴ３）、ループの先頭アドレスＳＡに分岐することを命令フェッチ部１３に指示する。
これにより、命令フェッチ部１３ではセレクタ３３によってループ制御部２３が出力した先頭アドレスＳＡが選択されて、フェッチプログラムカウンタＰＣ−Ｆが当該アドレスＳＡを指し示す［図４のタイミングＣ１］。
【００５０】
またループ制御部２３のコントローラ４９は、上記分岐指示と同時に、この分岐を分岐予測器２１に学習させるために「架空の分岐命令」を命令実行部１９のセレクタ５１に出力する（図５のステップＳＴ４）。  当該架空分岐命令は、分岐予測部２１によって学習される。
【００５１】
その後、セレクタ３３はアドレスＡＤＲ３１を選択してフェッチプログラムカウンタＰＣ−Ｆに出力し、メモリアクセス部３７によって、ループ内の命令が順にフェッチされる。
そして、フェッチプログラムカウンタＰＣ−Ｆがループの末尾のアドレスＥＡを次に指し示したときに、分岐予測部２１によってアドレスＳＡへの分岐予測が自動的に行われる。すなわち、分岐予測部２１からループの先頭のアドレスＳＡがセレクタ３３に出力され、これが選択されてフェッチプログラムカウンタＰＣ−Ｆに格納される。
これにより、フェッチプログラムカウンタＰＣ−Ｆが、ループの末尾のアドレスＥＡに続いて、ループの先頭のアドレスＳＡを指し示す［図４のタイミングＣ３→Ｃ４］。
【００５２】
以後、フェッチプログラムカウンタＰＣ−Ｆがループの末尾のアドレスＥＡを指し示す度に、分岐予測部２１による分岐予測が機能して、アドレスＥＡに続いてアドレスＳＡを示すようにフェッチプログラムカウンタＰＣ−Ｆが制御される。
これにより、ループのフェッチが、ループ制御部２３による制御なしに、分岐予測部２１による分岐予測により実現される（図５のステップＳＴ５）。
【００５３】
上述したループの実行において、ループ制御部２３のコントローラ４９は、ループの最後の命令がディスパッチ部１７から命令実行部１９に出力されると、レジスタＢＲＣに記憶されたブロックリピートカウンタ値ＢＲＣＶを「１」だけデクリメントする。
【００５４】
コントローラ４９は、比較値ＣＶが論理値「０」から「１」に切り換ったタイミング（ループの最後の命令が命令実行部１９に投入されるタイミング）で、ブロック繰り返しカウンタ値ＢＲＣＶが「０」かつアクティブフラグＡＦが論理値「１」であるという非繰り返し条件を満たしたか否かを常に判定する（図５のステップＳＴ６）。
そして、コントローラ４９は、上記非繰り返し条件が満たされたがフェッチにおいては繰り返しが予測されていたと判断すると、ループ制御部２３が命令フェッチ部１３に上記ループの最後のアドレスＥＡの次のアドレスの命令Ｉｎｅｘｔに分岐するよう指示を行う（図５のステップＳＴ７）［図４のタイミングＣ１１］。
そして、メモリアクセス部３７が、当該次のアドレスを基にメモリ１１から命令Ｉｎｅｘｔをフェッチしてキュー１５に出力する。これにより、数サイクル遅れて、命令Ｉｎｅｘｔが命令実行部１９の命令レジスタＩＲに書き込まれて実行される。
【００５５】
また、コントローラ４９は、上記繰り返し予測の取り消し動作を行ったとき、キュー１５およびディスパッチ部１７に残っている上記ループに対応した命令を消去（リフレッシュ）する。
【００５６】
また、本実施形態では、上述する繰り返し予測の取り消し動作を行ったとき、分岐予測部２１において繰り返しのための分岐命令の記憶を取り除かない。これにより、ループの最後の命令に対応した「架空の分岐命令」の実行の記憶がそのまま分岐予測部２１で有効になり、次に同一ループを再度実行するときに、ループの末尾のアドレスＥＡから先頭のアドレスＳＡに分岐するという予測がなされ、上記図５のステップＳＴ４の「ループ形成分岐」が不要になる。これにより、レイテンシをさらに短くできる。このとき、Ｎサイクルの本体をＭ回繰り返すようなループを、「Ｍ×Ｎ＋５」サイクルで実現できる。ここで、５サイクルは、ループを抜けるための処理に伴うサイクルである。
【００５７】
以上説明したように、ＤＳＰ１では、繰り返し演算を行う場合に、ループの最初の周回（実行）の最後の命令の位置で、ループの最初のアドレスＳＡに分岐する「架空の分岐命令」を発行し、それを分岐予測部２１に学習させる。これにより、その後、ループ制御部２３による制御を行うことなく、分岐予測部２１の分岐予測により、ループの最後の命令をフェッチした直後にループの最初の命令を自動的にフェッチさせること（繰り返し処理）ができる。すなわち、ＤＳＰ１によれば、ループ処理を分岐予測処理に吸収させることで、分岐予測機構とループ支援機構とを備えた場合でも、両機構の間で複雑な調停を行う必要がなく、簡単な構成で実現することが可能になる。
【００５８】
本発明は上述した実施形態には限定されない。
すなわち、当業者は、本発明の技術的範囲またはその均等の範囲内において、上述した実施形態の構成要素に関し、様々な変更、コンビネーション、サブコンビネーション、並びに代替を行ってもよい。
【００５９】
例えば、上述した実施形態では、分岐予測部２１からループ形成のための分岐の記憶を取り除かない場合を例示したが、これを取り除くようにさせてもよい。この場合には、次にブロックリピート命令を実行する際に、図４および図５と同様に処理が行われる。また、プログラムの命令が可変長の場合を例に説明したが、命令が固定長であってもよい。
【産業上の利用可能性】
【００６０】
本発明は、分岐予測機構およびループ支援機構とを併用するシステムに適用可能である。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施形態の関連技術に係るループ支援機構を備えたＤＳＰの構成図である。
【図２】本発明の実施形態の関連技術に係る分岐予測機構を備えたＤＳＰの構成図である。
【図３】本発明の実施形態に係るＤＳＰの構成図である。
【図４】図３に示すＤＳＰの動作例を説明するためのタイミングチャートであり、図４（Ａ）はフェッチプログラムカウンタＰＣ−Ｆが示すアドレスを示す図、図４（Ｂ）は命令実行部の命令レジスタＩＲに投入された命令を示す図、図４（Ｃ）はレジスタＢＲＡＦに格納されたブロック繰り返しアクティブフラグＡＦの状態を示す図、図４（Ｄ）はレジスタＲＳＡに格納されたアドレスを示す図、図４（Ｅ）はレジスタＲＥＡに格納されたアドレスを示す図、図４（Ｆ）はレジスタＢＲＣに格納されたブロック繰り返しカウンタＢＲＣＶの値を示す図である。
【図５】図１に示すＤＳＰ１の動作例を説明するためのフローチャートである。
【符号の説明】
【００６２】
１…ＤＳＰ、１１…メモリ、１３…命令フェッチ部、１５…キュー、１７…ディスパッチ部、１９…命令実行部、２１…分岐予測部、３１…加算器、３３…セレクタ、３７…メモリアクセス部、４１…比較器、４９…コントローラ、５１…セレクタ、ＰＣ−Ｆ…フェッチプログラムカウンタ、ＰＣ−Ｄ…ディスパッチプログラムカウンタ
【図１】
0004526560.tif 000002
【図２】
0004526560.tif 000003
【図３】
0004526560.tif 000004
【図４】
0004526560.tif 000005
【図５】
0004526560.tif 000006