(57)【要約】【課題】分岐予測回路を内蔵することなくパイプラインステージの遅延スロットを有効に活用することで、ＣＰＵ性能を向上し得ること。【解決手段】一方にプリフェッチされた非分岐命令が格納され、他方にプリフェッチされた分岐先命令が格納される２系統のキューバッファ１１，１２と、パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージ（データパス部）とを備え、２系統形成されているパイプラインの処理ステージに、非分岐命令および分岐先命令を夫々投入して、分岐命令の条件が成立したか否かの判定信号に基づき２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替え制御を行う。【選択図】      図１
2004192021.tif 000002
【特許請求の範囲】
【請求項１】
複数ステージのパイプライン処理を実行するマイクロプロセッサにおいて、
命令を記憶するメモリと、
一方に前記メモリからプリフェッチされた命令のうちの非分岐命令が格納され、他方に前記プリフェッチされた命令のうちの分岐命令からの分岐先以降にある分岐先命令が格納される２系統のキューバッファと、
パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージと、
前記パイプライン処理ステージの最終段の処理ステージにおいて、分岐命令の条件が成立したか否かを判定し、この判定結果に基づき前記２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替えを行う第１の切り替え手段と、
前記判定結果に基づいて前記２系統のキューバッファから前記パイプライン処理ステージの２系統の処理ステージへの接続を切り替える第２の切り替え手段と、
を備えることを特徴とするマイクロプロセッサ。
【請求項２】
前記メモリから前記２系統のキューバッファへのバス上での分岐命令の存在を検出し、この検出信号および前記判定結果に基づいて前記２系統のキューバッファへの非分岐命令／分岐先命令の格納の割り振りを切り替える第３の切り替え手段をさらに備えることを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
前記２系統のキューバッファが空であることを夫々検出する空検出手段を備え、前記空検出手段からの検出信号に基づいて、前記パイプライン処理ステージの処理ステージに対する分岐先命令／非分岐先命令の投入を独立にスキップすることを特徴とする請求項１または２に記載のマイクロプロセッサ。
【請求項４】
前記２系統のパイプライン処理ステージの処理ステージで同時に処理が実行される分岐先命令と非分岐先命令に競合関係があるか否かを判定し、この判定結果に基づいて分岐先命令および非分岐先命令のうちの一方の処理をスキップすることを特徴とする請求項１または２に記載のマイクロプロセッサ。
【請求項５】
前記メモリから分岐先命令をプリフェッチする際、分岐先命令が設定された所定のバイト境界にないとき、分岐先命令のプリフェッチを連続して行うことを特徴とする請求項１〜４の何れか一つに記載のマイクロプロセッサ。
【請求項６】
分岐命令の中に連続アクセスの可否を示す連続アクセス可否情報を含ませ、該連続アクセス可否情報を検出し、その検出情報をもとに分岐先命令のプリフェッチを連続で行うかどうかを制御することを特徴とする請求項１〜４の何れか一つに記載のマイクロプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、命令プリフェッチ（先取り）機能およびパイプライン処理機能を有するマイクロプロセッサに関し、特に条件分岐命令についての処理を効率よく行うことでＣＰＵ性能を向上させ得るマイクロプロセッサに関するものである。
【０００２】
【従来の技術】
マイクロプロセッサの高速化の手法として、命令をパイプライン的に実行するいわゆるパイプライン処理方式がある。このようなパイプライン処理方式において、条件分岐命令を効率よく処理するために、遅延分岐と呼ばれる方式が従来から用いられてきた。
【０００３】
条件分岐命令は、演算命令や転送命令等の実行結果が反映された条件フラグ等に従って分岐するか否かが決定されるものである。また、遅延分岐とは、分岐命令の次の番地にある命令を遅延スロットに投入することによって空きスロットを除去する方式であり、この方式を用いることによってマイクロプロセッサの性能向上が見込まれる。このような遅延分岐に関しては、特許文献１などにその開示がある。
【０００４】
例えば図１６に示すような、命令フェッチおよび命令デコードを実行する第１ステージＳＴ０、アドレス生成およびメモリリードを実行する第２ステージＳＴ１、演算実行およびメモリライトを実行する第３ステージＳＴ３を有する３段階のステージからなるパイプライン処理ステージを考える。そして、このようなパイプライン処理ステージにおいて、条件フラグを書き換える演算命令（ｃｍｐ）の直後に条件分岐命令（ｃｂｒ）処理が行われるとする。図１６から判るように、パイプライン処理では、第３ステージにおいて、ｃｍｐ実行後に条件分岐命令（ｃｂｒ）の条件判定を行ってから分岐先あるいは非分岐先の命令がフェッチされるため、２サイクル分の空きスロット（遅延スロット）が生じることになる。
【０００５】
そこで、このような場合、遅延分岐方式を利用すると、図１６の場合では、条件が不成立の場合は遅延スロットにｃｂｒの次命令を投入し、条件が成立の場合は遅延スロットにｃｂｒの分岐先の命令を投入することができれば、性能向上が最大となる。
【０００６】
しかし、このような遅延分岐方式を採用するためには、分岐予測回路を内蔵して、ｃｂｒをデコードした時に分岐条件不成立が予測されたときは遅延スロットにｃｂｒの次命令を投入し、分岐条件成立が予測されたときは遅延スロットにｃｂｒの分岐先の命令を投入するようにすればよい。
【０００７】
このような分岐予測方式としては、これまでの分岐実行実績に基づき、分岐／否分岐を予測し、分岐／否分岐の判定の結果が判明する前に分岐処理または非分岐処理を進めている。より具体的には、例えば、過去に実行した分岐命令について、当該分岐命令の存在するアドレスと分岐先アドレスとを対にして記憶する履歴テーブルをマイクロプロセッサ内に備えておき、再びこの条件分岐命令を実行する際には、前記履歴テーブルに記憶しておいた分岐先アドレスを用いることで、分岐判定における分岐先アドレスの計算終了前に、当該分岐命令を実行している（例えば、特許文献２，特許文献３参照）。
【０００８】
【特許文献１】
特開平４−１２７２３７号公報
【特許文献２】
特開平１−２３９６３８号公報
【特許文献３】
特開平４−１１２３２７号公報
【０００９】
【発明が解決しようとする課題】
しかしながら、上記のような分岐予測方式は、予測テーブルの大きさ、応用によって異なるが、ヒット率を９０〜９５％ぐらいにするには、４Ｋビット程度の予測テーブルが必要であり、回路が大規模になり、マイクロコンピュータのチップ面積の増大を招くという問題があった。また、リアルタイム性が要求される機器制御用の組み込み用途では、最悪性能の見積もりが重要視されるので、プログラムの実行履歴によって性能が変動しやすい分岐予測回路の内蔵化は、ユーザに敬遠される傾向がある。
【００１０】
この発明は上記に鑑みてなされたもので、分岐予測回路を内蔵することなくパイプラインステージの遅延スロットを有効に活用することで、ＣＰＵ性能を向上し得るマイクロプロセッサを得ることを目的とする。
【００１１】
【課題を解決するための手段】
上記目的を達成するため、この発明にかかるマイクロプロセッサは、複数ステージのパイプライン処理を実行するマイクロプロセッサにおいて、命令を記憶するメモリと、一方に前記メモリからプリフェッチされた命令のうちの非分岐命令が格納され、他方に前記プリフェッチされた命令のうちの分岐命令からの分岐先以降にある分岐先命令が格納される２系統のキューバッファと、パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージと、前記パイプライン処理ステージの最終段の処理ステージにおいて、分岐命令の条件が成立したか否かを判定し、この判定結果に基づき前記２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替えを行う第１の切り替え手段と、前記判定結果に基づいて前記２系統のキューバッファから前記パイプライン処理ステージの２系統の処理ステージへの接続を切り替える第２の切り替え手段とを備えることを特徴とする。
【００１２】
この発明によれば、一方にプリフェッチされた非分岐命令が格納され、他方にプリフェッチされた分岐先命令が格納される２系統のキューバッファと、パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージとを備え、２系統形成されているパイプラインの処理ステージに、非分岐命令および分岐先命令を夫々投入して、分岐命令の条件が成立したか否かの判定信号に基づき２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替え制御を行うようにしたので、分岐予測回路を内蔵することなくパイプラインステージの遅延スロットを有効に活用し、ＣＰＵ性能を向上させることができる。
【００１３】
【発明の実施の形態】
以下に添付図面を参照して、この発明にかかるマイクロプロセッサの好適な実施の形態を詳細に説明する。
【００１４】
実施の形態１．
図１は本発明の実施の形態１を示すマイクロプロセッサの概略図であり、図２は図１のＣＰＵの内部構成を示す図である。
【００１５】
図１に示すマイクロプロセッサは、中央処理装置（ＣＰＵ）１と、命令用のキャッシュ領域（バスインターフェース回路）としてのコードインターフェース回路（ＣＩＵ）２、データ用のキャッシュ領域（バスインターフェース回路）としてのデータインターフエース回路（ＤＩＵ）３および実行するプログラムの命令列が記憶されている主記憶などのコードメモリ４を備えている。ＣＩＵ２はアドレスバスおよび命令コード用のコードバスを介してコードメモリ４に接続されている。ＣＰＵ１とＣＩＵ２とはオペコードバスＡ，Ｂを介して接続されている。なお、図１では、バスインターフェースユニットをＣＩＵとＤＩＵに分離したハーバードアーキテクチャの構成をとっているが、命令とデータの区別をせずに、同一のキャッシュメモリ領域でデータを管理するユニファイドキャッシュ方式を採用するようにしてもよい。
【００１６】
ＣＩＵ２は、分岐命令生成／アドレス生成回路１０と、２系統のキューバッファ１１，１２と、２系統のキューバッファ１１，１２の２出力とオペコードバスＡ，Ｂとの間の切り替えを行う切り替えスイッチ１３とを備えている。
【００１７】
キューバッファ１１，１２は、それぞれコードメモリ４からコードバスを介してプリフェッチ（先取り）した命令（コード）を複数個記憶することができるバッファであり、図示しない入力ポインタおよび出力ポインタによってコードメモリ４からプリフェッチした命令のキューバッファ１１，１２に対する書き込み制御およびキューバッファ１１，１２に格納された命令の読み出し制御を実行する。
【００１８】
分岐命令生成／アドレス生成回路１０は、コードバス上に条件分岐命令があるか否かを検出し、分岐命令がないときは図示しないプログラムカウンタの値を随時インクリメントしてアドレスを生成し、分岐命令を検出した場合は分岐命令をデコードし、その情報から分岐命令の分岐先アドレスを生成し、これらの生成したアドレスをアドレスバスを介してコードメモリ４に出力する。また、分岐命令生成／アドレス生成回路１０は、ＣＰＵ１から入力される切り替え信号Ｓａと分岐命令検出信号Ｓｃ（図示せず；コードバス上での条件分岐命令を検出する信号）とに基づき２系統のキューバッファ１１，１２の入力側の選択切り替えを行うためのキュー選択信号Ｓｂを形成し、形成したキュー選択信号Ｓｂをキューバッファ１１，１２に出力する。キュー選択信号Ｓｂの状態に応じて、コードバスからの命令が２系統のキューバッファ１１，１２の何れに入力されるかが決定される。
【００１９】
また、キューバッファ１１，１２の出力は切り替えスイッチ１３を経由して、オペコードバスＡ，Ｂに接続されている。切り替えスイッチ１３にはＣＰＵ１からの切り替え信号Ｓａが入力されており、切り替えスイッチ１３は切り替え信号Ｓａに基づいて、キューバッファ１１，１２の出力を夫々オペコードバスＡ，Ｂに接続する状態と、キューバッファ１１，１２の出力を夫々オペコードバスＢ，Ａに接続する状態とに切り替える。
【００２０】
ＣＰＵ１からの切り替え信号Ｓａは、後で詳述するが、ＣＰＵ１が条件分岐命令の分岐の条件が成立したと判断する度に、“Ｈｉｇｈ”から“Ｌｏｗ”にあるいは“Ｌｏｗ”から“Ｈｉｇｈ”に切り替えられるものである。したがって、切り替えスイッチ１３は、ＣＰＵ１が条件分岐命令の分岐の条件が成立したと判断する度に、オペコードバスＡ，Ｂに対するキューバッファ１１，１２の接続が逆になる。また、キュー選択信号Ｓｂは、前述したように、コードバス上のデータをキューバッファ１１，１２のどちらに書き込むかを選択するための信号であり、切り替え信号Ｓａおよび分岐命令検出信号Ｓｃの状態に応じて、コードバス上に出力された分岐先のコードあるいはシーケンシャルな動作に従うコードをキューバッファ１１，１２のどちらに書き込むかが決定される。
【００２１】
つぎに、ＣＰＵ１は、図２に示すように、制御回路部２０とデータパス部３０から構成されている。データパス部３０には、パイプライン処理を実行するための複数段の処理ステージを有している。この場合は、３ステージ（ＳＴ０，ＳＴ１，ＳＴ２）でパイプライン処理を実行するものとする。第１ステージＳＴ０では、命令フェッチおよび命令デコードを実行し、第２ステージＳＴ１では、アドレス生成およびメモリリードを実行し、第３ステージＳＴ３では、演算実行およびメモリライトを実行する。
【００２２】
ここで、複数ステージ中の最終ステージ（この場合は第３ステージＳＴ３）を除く他のステージ（この場合は第１および第２ステージＳＴ０，ＳＴ１）には、分岐条件が不成立の場合の通常のシーケンシャルな順序の命令に関わる処理を実行するためのシーケンシャル用第１および第２ステージＳＴ０＿Ａ、ＳＴ１＿Ａと、分岐先の命令に関わる処理を実行するための分岐先用第１および第２ステージＳＴ０＿Ｂ、ＳＴ１＿Ｂを有している。第２ステージＳＴ１と第３ステージＳＴ２との間には、セレクタ３１が配され、このセレクタ３１によってシーケンシャル用第２ステージＳＴ１＿Ａおよび分岐先用第２ステージＳＴ１＿Ｂの何れを選択して第３ステージＳＴ２に出力するかが選択される。セレクタ３１は制御回路部２０からの分岐／非分岐判定信号Ｓｄによってその選択動作を実行する。シーケンシャル用第１ステージＳＴ０＿ＡはオペコードバスＡに接続され、分岐先用第１ステージＳＴ０＿ＢはオペコードバスＢに接続されている。
【００２３】
データパス部３０の制御は制御回路部２０から入力される制御信号に従って行われる。そのうちの分岐／非分岐判定信号Ｓｄが第２ステージＳＴ１から第３ステージＳＴ２へのデータパスをＳＴ１＿ＡとＳＴ１＿Ｂのどちらを使用するかを選択する。
【００２４】
つぎに、ＣＩＵ２とコードメモリ４との間の動作を図３のタイムチャートを用いて説明する。ここではシーケンシャルな動作に従うコードをキューバッファ１１に格納し、分岐時の分岐先のコードをキューバッファ１２に格納するものとする。また、コードメモリ４ヘのアクセスはクロック同期で行われ、アクセスサイクル数は１サイクルとする。
【００２５】
ｃｙｃｌｅ１〜ｃｙｃｌｅ３ではシーケンシャル動作に従うコード先取り動作をしている。分岐命令検出信号Ｓｃが“Ｌｏｗ”の時はアドレスバスはプログラムカウンタの値から順次インクリメントされた値となる。また、キュー選択信号Ｓｂが“Ｌｏｗ”の時はコードバスのデータはキューバッファ１１に書き込まれる。
【００２６】
ここでｃｙｃｌｅ３でコードバス上に分岐命令がのっているとする。このとき分岐命令生成／アドレス生成回路１０がそれを検出し、分岐先アドレスを算出する。次のサイクル（ｃｙｃｌｅ４）で分岐命令検出回路Ａは分岐先のアドレスを出力する。また、同サイクル（ｃｙｃｌｅ４）で分岐命令生成／アドレス生成回路１０はキュー選択信号Ｓｂを“Ｈｉｇｈ”にアサートする。この結果、コードバス上の分岐先のコードはキューバッファ１２に取り込まれる。ｃｙｃｌｅ５以降は、シーケンシャルな動作に従うコード先取り動作に戻る。なお、分岐先命令（分岐先のコードおよび分岐先のコードに続く命令）はこの後、キューバッファ１２に書き込まれていくが、その後分岐先のコードに続く命令中に再度分岐命令が存在している場合は、この分岐命令からの分岐先命令はキューバッファ１１に書き込まれていく。
【００２７】
なお、１サイクル期間に、キューバッファ１１または１２に取り込まれるコード長は、１命令に対応する長さにしてもよいし、複数の命令に対応する長さにしてもよい。取り込まれるコード長を１命令に対応する長さとした場合は、分岐先のコードを取り込む際に、複数のサイクルに亘って分岐先以降のコードを取り込む必要がある。
【００２８】
以上のような構成にすれば、ＣＰＵ１で条件分岐命令を実行する前に分岐先の命令を先取りすることが可能となる。
【００２９】
次にＣＰＵの動作を図１〜図３の他に、図４〜図６を用いて説明する。図４は、条件フラグを書き換える演算命令（ｃｍｐ）の直後に条件分岐命令（ｃｂｒ）がある場合のアセンブラ言語レベルでのプログラムの一例を示した図であり、アドレス１００には条件フラグを書き換える演算命令ｃｍｐが、アドレス１０１には条件分岐命令ｃｂｒ２００（条件が成立した時アドレス２００に分岐）が記述されている。更にアドレス１０２には命令ａが、アドレス１０３には命令ｂが、アドレス１０４には命令ｃが、アドレス１０５には命令ｄが、アドレス２００には命令ｐが、命令２０１には命令ｑが、命令２０２には命令ｒが、命令２０３には命令ｓが記述されている。
【００３０】
図５は、図４のプログラムを実行したときの、条件分岐命令（ｃｂｒ）の分岐条件が成立した場合のパイプライン動作と、分岐／非分岐判定信号ＳｄとＣＩＵ２へ出力する切り替え信号Ｓａの変化タイミングを示した図である。
【００３１】
以下、図１〜図５を参照して分岐条件が成立した場合の具体的動作について説明する。
【００３２】
最初の状態では、切り替え信号Ｓａおよび分岐／非分岐判定信号は“Ｌｏｗ”である。したがって、キューバッファ１１がオペコードバスＡに接続されるとともにキューバッファ１２がオペコードバスＢに接続され、さらにセレクタ３１はオペコードＡ側のＳＴ１＿Ａを選択して第３ステージＳＴ２に出力している。
【００３３】
まず、第１サイクルで、ＣＩＵ２が命令ｃｍｐを図１のオペコードバスＡに供給すると、ＣＰＵ１は命令ｃｍｐをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。第２サイクルで、ＣＩＵ２が命令ｃｂｒ２００をオペコードバスＡに供給すると、ｃｂｒ２００はシーケンシャル用第１ステージＳＴ０＿Ａに投入される。ｃｂｒ２００は分岐命令であるので、それ以前のサイクルでＣＩＵ２のキューバッファ１２には分岐先のコードが取り込まれている。したがって、オペコードバスＢには分岐先のコード（命令ｐ，命令ｑ，命令ｒ，…）が供給されている。
【００３４】
第３サイクルで、ＣＰＵ１はオペコードバスＡ上に出力されている非分岐先命令ａをシーケンシャル用第１ステージＳＴ０＿Ａに投入するとともに、オペコードバスＢ上に出力されている分岐先命令ｐを分岐先用第１ステージＳＴ０＿Ｂに投入する。さらに第４サイクルでは、ＣＰＵ１はオペコードバスＡ上に出力されている非分岐先命令ｂをシーケンシャル用第１ステージＳＴ０＿Ａに投入するとともに、オペコードバスＢ上に出力されている分岐先命令ｑを分岐先用第１ステージＳＴ０＿Ｂに投入する。
【００３５】
次に、第４サイクルにおいて、ｃｂｒ２００命令の実行ステージＳＴ２で、ＣＰＵ１の制御回路部２０が分岐命令の条件成立と判定すると、これに応答してＣＰＵ１の制御回路部２０は次のサイクル（この場合は第５サイクル）で切り替え信号Ｓａおよび分岐／非分岐判定信号Ｓｄを“Ｈｉｇｈ”にアサートする。なお、この場合、分岐／非分岐判定信号Ｓｄは、データパス部３０の処理ステージ数（この場合は３ステージ）から１を引いた数（３−１）に対応するサイクル期間（この場合は２）だけ“Ｈｉｇｈ”に立ち上がり、その後“Ｌｏｗ”に戻るようにする。一方、切り替え信号Ｓａは次の分岐命令の条件成立を判定するまで、“Ｈｉｇｈ”を維持している。
【００３６】
したがって、第５および第６サイクルでは、セレクタ３１は分岐先用第２ステージＳＴ１＿Ｂを選択して第３ステージＳＴ２に出力する。このため、第５サイクルでは命令ｐが第３ステージＳＴ２へ投入され、また第６サイクルでは命令ｑが第３ステージＳＴ２へ投入される。
【００３７】
一方、ＣＩＵ２に入力される切り替え信号Ｓａが“Ｈｉｇｈ”となった時点で、切り替えスイッチ１３は逆側に切り替わる。すなわち、切り替えスイッチ１３は、切り替え信号Ｓａが“Ｈｉｇｈ”となった以降は、キューバッファ１２に格納されていた分岐先側の命令（ｒ，ｓ，…）をオペコードバスＡに出力し、キューバッファ１１に格納されていた非分岐命令をオペコードバスＢに出力するようにその接続を切り替える。したがって、第５サイクルで、ＣＩＵ２が命令ｒをオペコードバスＡに供給すると、ＣＰＵ１は命令ｒをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。第６サイクルで、ＣＩＵ２が命令ｓをオペコードバスＡに供給すると、ＣＰＵ１は命令ｓをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。
【００３８】
また、前述したように、第７サイクル以降は、分岐／非分岐判定信号Ｓｄは“Ｌｏｗ”に切り替わるので、セレクタ３１はシーケンシャル用第２ステージＳＴ１＿Ａを選択して第３ステージＳＴ２に出力する。このため、第７サイクルでは命令ｒが第３ステージＳＴ２へ投入され、また第８サイクルでは命令ｓが第３ステージＳＴ２へ投入されることになる。
【００３９】
図６は、図４のプログラムを実行したときの、条件分岐命令（ｃｂｒ）の分岐条件が成立しなかった場合のパイプライン動作と、分岐／非分岐判定信号ＳｄとＣＩＵ２へ出力する切り替え信号Ｓａの変化タイミングを示した図である。
【００４０】
以下、図１〜図４、図６を参照して分岐条件が成立しない場合の具体的動作について説明する。
【００４１】
最初の状態では、切り替え信号Ｓａおよび分岐／非分岐判定信号は“Ｌｏｗ”である。したがって、キューバッファ１１がオペコードバスＡに接続されるとともにキューバッファ１２がオペコードバスＢに接続され、さらにセレクタ３１はオペコードＡ側のＳＴ１＿Ａを選択して第３ステージＳＴ２に出力している。
【００４２】
まず、第１サイクルで、ＣＩＵ２が命令ｃｍｐをオペコードバスＡに供給すると、ＣＰＵ１は命令ｃｍｐをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。第２サイクルで、ＣＩＵ２が命令ｃｂｒ２００をオペコードバスＡに供給すると、ｃｂｒ２００はシーケンシャル用第１ステージＳＴ０＿Ａに投入される。ｃｂｒ２００は分岐命令であるので、それ以前のサイクルでＣＩＵ２のキューバッファ１２には分岐先のコードが取り込まれている。したがって、オペコードバスＢには分岐先のコード（命令ｐ，命令ｑ，命令ｒ，…）が供給されている。
【００４３】
第３サイクルで、ＣＰＵ１はオペコードバスＡ上に出力されている非分岐先命令ａをシーケンシャル用第１ステージＳＴ０＿Ａに投入するとともに、オペコードバスＢ上に出力されている分岐先命令ｐを分岐先用第１ステージＳＴ０＿Ｂに投入する。さらに第４サイクルでは、ＣＰＵ１はオペコードバスＡ上に出力されている非分岐先命令ｂをシーケンシャル用第１ステージＳＴ０＿Ａに投入するとともに、オペコードバスＢ上に出力されている分岐先命令ｑを分岐先用第１ステージＳＴ０＿Ｂに投入する。
【００４４】
次に、第４サイクルにおいて、ｃｂｒ２００命令の実行ステージＳＴ２で、ＣＰＵ１の制御回路部２０が分岐命令の条件が不成立と判定したとする。このため、ＣＰＵ１の制御回路部２０から出力される切り替え信号Ｓａおよび分岐／非分岐判定信号Ｓｄは“Ｌｏｗ”のままである。
【００４５】
したがって、第５サイクル以降において、セレクタ３１はシーケンシャル用第２ステージＳＴ１＿Ａを選択して第３ステージＳＴ２に出力する。このため、第５サイクルでは命令ａが第３ステージＳＴ２へ投入され、また第６サイクルでは命令ｂが第３ステージＳＴ２へ投入される。
【００４６】
一方、第５サイクル以降も切り替え信号Ｓａは“Ｌｏｗ”のままであるので、以前と同様、キューバッファ１１がオペコードバスＡに接続されるとともにキューバッファ１２がオペコードバスＢに接続される。したがって、第５サイクルで、ＣＩＵ２が命令ｃをオペコードバスＡに供給すると、ＣＰＵ１は命令ｃをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。第６サイクルで、ＣＩＵ２が命令ｄをオペコードバスＡに供給すると、ＣＰＵ１は命令ｄをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。
【００４７】
また、第７サイクル以降も分岐／非分岐判定信号Ｓｄは“Ｌｏｗ”のままであるので、セレクタ３１はシーケンシャル用第２ステージＳＴ１＿Ａを選択して第３ステージＳＴ２に出力する。このため、第７サイクルでは命令ｃが第３ステージＳＴ２へ投入され、また第８サイクルでは命令ｄが第３ステージＳＴ２へ投入されることになる。
【００４８】
このように実施の形態１においては、一方にプリフェッチされた非分岐命令が格納され、他方にプリフェッチされた分岐先命令が格納される２系統のキューバッファ１１，１２と、パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージ（データパス部３０）とを備え、２系統形成されているパイプラインの処理ステージに、非分岐命令および分岐先命令を夫々投入して、分岐命令の条件が成立したか否かの判定信号に基づき２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替え制御を行うようにしたので、分岐予測回路を内蔵することなくパイプラインステージの遅延スロットを有効に活用し、ＣＰＵ性能を向上させることができる。
【００４９】
実施の形態２．
つぎに、図７および図８を用いてこの発明の実施の形態２について説明する。図７は実施の形態２に関わるマイクロプロセッサの概略図である。図７に示す実施の形態２においては、各キューバッファ１１，１２が空か否かを夫々判定するエンプティ判定回路１４ａ，１４ｂをＣＩＵ２内に追加するようにしている。エンプティ判定回路１４ａはキューバッファ１１が空になるとアサートされるエンプティ信号ＥＰａをＣＰＵ１の制御回路部２０に出力する。エンプティ判定回路１４ｂはキューバッファ１２が空になるとアサートされるエンプティ信号ＥＰｂをＣＰＵ１の制御回路部２０に出力する。
【００５０】
つぎに図７および図８を参照して、遅延スロット投入時に非分岐先のコードがキューバッファ１１に蓄積されていない場合で、分岐条件が成立する場合の動作について説明する。プログラムは先の図４に示すものであるとする。
【００５１】
命令ｃｂｒ２００が投入されるところ（第２ステージ）までは、図５に示したものと同じ動作であるので説明は省略する。
【００５２】
ｃｂｒ２００は分岐命令であるので、第３サイクルで、ＣＰＵ１はオペコードバスＡ上に出力されているはずである非分岐先命令ａおよびオペコードバスＢ上に出力されているはずである分岐先命令ｐを夫々シーケンシャル用第１ステージＳＴ０＿Ａおよび分岐先用第１ステージＳＴ０＿Ｂに投入しようとするが、この場合は、第３サイクルにおいてエンプティ信号ＥＰａが“Ｈｉｇｈ”にアサートされているので、シーケンシャル用第１ステージＳＴ０＿Ａには何も投入されず、分岐先命令ｐのみが分岐先用第１ステージＳＴ０＿Ｂに投入される。
【００５３】
第４サイクルでは、キューバッファ１１に非分岐先命令ａが格納されたため、エンプティ信号ＥＰａが“Ｌｏｗ”にネゲートされる。ＣＩＵ２は、オペコードバスＡに非分岐先命令ａを、オペコードバスＢに分岐先命令ｑを供給し、ＣＰＵ１はそれらの命令をシーケンシャル用第１ステージＳＴ０＿Ａおよび分岐先用第１ステージＳＴ０＿Ｂに投入する。
【００５４】
さらに、第４サイクルにおいて、ｃｂｒ２００命令の実行ステージＳＴ２で、ＣＰＵ１の制御回路部２０が分岐命令の条件成立と判定すると、これに応答してＣＰＵ１の制御回路部２０は次のサイクル（この場合は第５サイクル）で切り替え信号Ｓａおよび分岐／非分岐判定信号Ｓｄを“Ｈｉｇｈ”にアサートする。
【００５５】
したがって、第５および第６サイクルでは、セレクタ３１は分岐先用第２ステージＳＴ１＿Ｂを選択して第３ステージＳＴ２に出力する。このため、第５サイクルでは命令ｐが第３ステージＳＴ２へ投入され、また第６サイクルでは命令ｑが第３ステージＳＴ２へ投入される。
【００５６】
一方、ＣＩＵ２に入力される切り替え信号Ｓａが“Ｈｉｇｈ”となった時点で、切り替えスイッチ１３は逆側に切り替わる。すなわち、切り替えスイッチ１３は、切り替え信号Ｓａが“Ｈｉｇｈ”となった以降は、キューバッファ１２に格納されていた分岐先側の命令（ｒ，ｓ，…）をオペコードバスＡに出力し、キューバッファ１１に格納されていた非分岐命令をオペコードバスＢに出力するようにその接続を切り替える。したがって、第５サイクルで、ＣＩＵ２が命令ｒをオペコードバスＡに供給すると、ＣＰＵ１は命令ｒをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。第６サイクルで、ＣＩＵ２が命令ｓをオペコードバスＡに供給すると、ＣＰＵ１は命令ｓをシーケンシャル用第１ステージＳＴ０＿Ａに投入する。
【００５７】
また、前述したように、第７サイクル以降は、分岐／非分岐判定信号Ｓｄは“Ｌｏｗ”に切り替わるので、セレクタ３１はシーケンシャル用第２ステージＳＴ１＿Ａを選択して第３ステージＳＴ２に出力する。このため、第７サイクルでは命令ｒが第３ステージＳＴ２へ投入され、また第８サイクルでは命令ｓが第３ステージＳＴ２へ投入されることになる。
【００５８】
このようにこの実施の形態２によれば、ＣＩＵ２からＣＰＵ１にキューバッファ１１，１２が空であることを示すエンプティ信号ＥＰａ，ＥＰｂを入力するようにしたので、パイプライン処理の際に、分岐先のコードおよび非分岐先のコードの両方が揃っていなくても両方のコードが揃うまで処理をとめる必要がなくなり、独立にスキップ投入可能となるので、ＣＰＵ性能を向上させることができる。
【００５９】
実施の形態３．
つぎに、図９〜図１１を用いてこの発明の実施の形態３について説明する。図９は実施の形態３に関わるマイクロプロセッサの概略図、図１０は実施の形態３に関わるＣＰＵの概略図である。
【００６０】
この実施の形態３においては、遅延スロットに投入する分岐先命令と非分岐先命令に同じデータ領域からデータを読み出すなどのデータ資源の競合関係が発生しているか否かをＣＰＵ１が判定し、競合関係が発生している場合、分岐先命令および非分岐先命令のうちの一方を選択するようにしている。
【００６１】
この実施の形態３のマイクロプロセッサにおいては、図９に示すように、ＤＩＵ３を介してレジスタ値が設定されるレジスタ１５が追加されている。レジスタ１５のレジスタ値はソフトウェアによって書き換え可能であり、その出力がスキップ選択信号ＳｅとしてＣＰＵ１に入力されている。ＣＰＵ１はＤＩＵ３を介してレジスタ１５の値すなわちスキップ選択信号Ｓｅを書き込み／読み出しすることができる。
【００６２】
また、図１０に示すように、ＣＰＵ１の制御回路部２０には、調停回路２１が追加されている。調停回路２１は、遅延スロットに投入する分岐先命令と非分岐先命令に競合関係が発生したか否かを判定し、競合関係が発生している場合は、入力されたスキップ選択信号Ｓｅに基づいてスキップ信号ＳＰａ，ＳＰｂの何れかをアサートする。スキップ信号ＳＰａがアサートされた場合は、シーケンシャル用第２ステージＳＴ０＿Ａでの処理がスキップされ、またスキップ信号ＳＰｂがアサートされた場合は、分岐先用第２ステージＳＴ０＿Ｂでの処理がスキップされる。すなわち、この場合は、アドレス生成およびメモリリードを実行する第２ステージＳＴ１において、上記の競合関係が発生すると、各処理を同時に実行することができないので、一方の処理をスキップさせる。また、例えば、スキップ選択信号Ｓｅが“Ｌｏｗ”のときはスキップ信号ＳＰａがアサートされて非分岐先命令がスキップされ、スキップ選択信号Ｓｅが“Ｈｉｇｈ”のときはスキップ信号ＳＰｂがアサートされて分岐先命令がスキップされる。
【００６３】
つぎに図１１を参照して、遅延スロットに投入する分岐先命令と非分岐先命令に競合関係が発生した場合であって、分岐条件が成立する場合の動作について説明する。プログラムは先の図４に示すものであるとする。
【００６４】
図１１において、最初の遅延スロットに分岐先命令および非分岐先命令が投入されるところ（第２サイクル）までは、先の実施の形態１，２の動作と同じ動作であるので説明は省略する。
【００６５】
第３サイクルにおいて、非分岐先命令ａおよび分岐先命令ｐがシーケンシャル用第１ステージＳＴ０＿Ａおよび分岐先用第１ステージＳＴ０＿Ｂに２に投入されると、ＣＰＵ１の制御回路部２０は両命令が競合しているか否かを判定する。そして、競合関係があれば、スキップ選択信号Ｓｅを参照し、このスキップ選択信号Ｓｅに基づいて一方の命令の第２ステージでの処理をスキップさせる。この場合は、スキップ選択信号Ｓｅが“Ｌｏｗ”であるので、スキップ信号ＳＰａを“Ｈｉｇｈ”にアサートする。この結果、第４サイクルにおいて、非分岐先命令ａの第２ステージＳＴ１＿Ａでの処理がスキップされる。
【００６６】
また、第４サイクルにおいて、非分岐先命令ａおよび分岐先命令ｑとの競合関係が判定されるが、この場合は競合は発生していないとしているので、第５サイクルにおいて、これら非分岐先命令ａおよび分岐先命令ｑについての第２ステージでの処理は、スキップされることなく実行される。それ以外の動作は、図５に示したものと同じであるので、ここではその説明を省略する。
【００６７】
このようにこの実施の形態３によれば、遅延スロット投入時に、競合関係があっても分岐先あるいは非分岐先の命令のうちの何れかの処理をスキップしてどちらかの命令を遅延スロットに投入できるので、ＣＰＵ性能が向上する。また、ソフトウェアでスキップ対象を制御することができるので、予め条件分岐命令の分岐条件成立が発生する頻度がわかる場合は、頻度が高いほうを優先する（頻度が低いほうをスキップ対象にする）ようにプログラミングすれはプログラム全体の実行時間を短縮することができる。
【００６８】
実施の形態４．
つぎに、図１２を用いてこの発明の実施の形態４について説明する。図１２は実施の形態４に関わるマイクロプロセッサの概略図である。
【００６９】
この実施の形態４においては、マイクロプロセッサをシステムＬＳＩに搭載し、スキップ選択信号Ｓｅをマイクロプロセッサの外部のハードウェア１６からマイクロプロセッサのＣＰＵ１に入力するようにしている。他は、実施の形態３と同じである。
【００７０】
図１２のようにマイクロプロセッサを内蔵した組み込み用途のシステムＬＳＩにおいては、条件分岐命令の分岐条件成立の成否を決定する信号がマイクロプロセッサの外部のハードウェア１６に存在する場合がある。このような場合は、図９のレジスタ１５の代わりに、このハードウェア１６からスキップ選択信号Ｓｅとして、ＣＰＵ１に入力することで、実施の形態３と同様の効果を得ることができる。
【００７１】
実施の形態５．
つぎに、図１３および図１４を用いてこの発明の実施の形態５について説明する。図１３は実施の形態５に関わるマイクロプロセッサの概略図である。
【００７２】
この実施の形態５のマイクロプロセッサにおいては、図１３に示すように、ＣＰＵ１によってＤＩＵ３を介してレジスタ値が設定されるレジスタ１８が追加されている。レジスタ１８のレジスタ値はソフトウェアによって書き換え可能であり、その出力が境界設定信号ＳｆとしてＣＩＵ２に入力されている。ＣＰＵ１はＤＩＵ３を介してレジスタ１８の値すなわち境界設定信号Ｓｆを書き込み／読み出しすることができる。
【００７３】
レジスタ１８には、例えば、図１４に示すような２ビットの境界設定信号Ｓｆが設定されている。境界設定信号Ｓｆは、分岐命令検出／アドレス生成回路４０がコードメモリ４にアクセスして命令コードを読み出す際に、連続アクセスして命令コードを読み出すか否かを指定するための信号である。例えば、分岐命令検出／アドレス生成回路４０での１回の読み出しが１バイト単位であるときに、分岐先命令の命令長（コード長）が２バイトである時などに、連続アクセスを行わせるための信号である。
【００７４】
図１４の場合は、境界設定信号Ｓｆが０のときは連続アクセスは行わない。また、境界設定信号Ｓｆが１のときは、分岐先コードが２バイト境界にないときに連続アクセスを実行させる。境界設定信号Ｓｆが２のときは、分岐先コードが４バイト境界にないときに連続アクセスを実行させる。境界設定信号Ｓｆが３のときは、分岐先コードが８バイト境界にないときに連続アクセスを実行させる。
【００７５】
分岐命令検出／アドレス生成回路４０は、新たにコードバス上に分岐命令があるのを検出したときに分岐先のアドレスを生成するが、このとき境界設定信号Ｓｆの値と生成した分岐先アドレスの値に基づき、分岐先のコード先取りを連続して行うか否かを判定する機能を有している。そして、この判定結果に応じて分岐先のコード先取りを連続では実行しなかったり、連続して行うようにする。
【００７６】
このようにこの実施の形態５によれば、境界設定信号Ｓｆの値と生成した分岐先アドレスの値に基づき、分岐先のコード先取りを連続して行うか否かを判定するようにしているので、分岐先の１回のコード先取りで取得したデータでは分岐先命令として成り立たない場合（例えば、命令長が長い場合）でも、あらかじめ分岐先のコードを余分に先取りできるため、実際に命令がパイプライン処理ステージに投入されるなどの際に、新たに不足分のコードを取得するための待機期間がなくなり、ＣＰＵ性能が向上する。
【００７７】
実施の形態６．
実施の形態６においては、分岐先のコード先取り時にコードを連続して取得するかどうかの情報（連続取得情報）を分岐命令のコードの中に持たせるようにしている。
【００７８】
プログラムからコンパイラあるいはアセンブラによってメモリテーブルを作成する際に、分岐先のコードの長さとそのコードがメモリにマッピングされるアドレス情報により、コードを連続取得する必要があるか否かを所定のツールで検出し、その検出情報をもとに各分岐命令内に最適な図１４に示すような連続取得情報を夫々設定するようにすれば、プログラム作成時に分岐先のコードの連続取得の可否を意識することなく、実施の形態５と同様の効果が得られる。また、この場合は、実施の形態５に示したレジスタ１８は必要なくなる。また、プログラム上でレジスタ１８の値を書き換える必要がなくなるので、その分コードメモリ４の低容量化を図ることができる。
【００７９】
実施の形態７．
つぎに、図１５を用いてこの発明の実施の形態７を説明する。図１５は実施の形態５に関わるマイクロプロセッサの概略図である。
【００８０】
実施の形態７においては、出現頻度の高い分岐命令に対して、分岐先のコード先取り時にコードを連続して取得するかどうかの情報をコードの中に持たせるようにしている。実施の形態７においては、図１５に示すように、ＣＩＵ２内に連続取得情報検出回路６０を追加している。連続取得情報検出回路６０は、コードバス上に上述したコード連続取得情報をもたせた分岐命令があるかを検出し、その分岐命令からコード連続取得情報を抽出して、抽出した情報を新たにコード連続取得情報をもたせた分岐命令が検出されるまで保持し、その情報を境界設定信号Ｓｇとして分岐命令検出／アドレス生成回路４０に出力する。分岐命令検出／アドレス生成回路４０では、先の実施の形態７と同様の動作を実行する。
【００８１】
この実施の形態７によれば、全ての分岐命令に連続取得情報をいれる必要がなくなるので、実施の形態５，６の効果に加え、コードメモリ４のメモリ効率が向上するという効果がさらに得られる。
【００８２】
実施の形態８．
実施の形態５，６，７において、さらに、分岐先のコード先取りを連続取得するためにコードメモリ４にアクセスする場合のアクセス方式をバーストアクセスになるような回路をＣＩＵ２の中に組みこむ。このような構成をとるとコードメモリアクセスに複数サイクル必要な場合、アクセスサイクル数を低減できる場合があるので、プログラム全体の実行時間を短縮することができる。
【００８３】
【発明の効果】
以上説明したように、この発明によれば、一方にプリフェッチされた非分岐命令が格納され、他方にプリフェッチされた分岐先命令が格納される２系統のキューバッファと、パイプライン処理を実行する複数の処理ステージを有し、最終段の処理ステージ以外の処理ステージが２系統形成されているパイプライン処理ステージとを備え、２系統形成されているパイプラインの処理ステージに、非分岐命令および分岐先命令を夫々投入して、分岐命令の条件が成立したか否かの判定信号に基づき２系統形成されている処理ステージの何れかを最終段の処理ステージに投入する切り替え制御を行うようにしたので、分岐予測回路を内蔵することなくパイプラインステージの遅延スロットを有効に活用し、ＣＰＵ性能を向上させることができる。
【図面の簡単な説明】
【図１】この発明の実施の形態１のマイクロプロセッサの構成を示すブロック図である。
【図２】実施の形態１のＣＰＵの内部構成を示すブロック図である。
【図３】ＣＩＵとコードメモリとの間の動作を説明するためのタイムチャートである。
【図４】コードメモリに記憶されるプログラムを例示する図である。
【図５】条件分岐命令の分岐条件が成立した場合のパイプライン動作と、分岐／非分岐判定信号Ｓｄおよび切り替え信号Ｓａの変化タイミングを示した図である。
【図６】条件分岐命令の分岐条件が不成立の場合のパイプライン動作と、分岐／非分岐判定信号Ｓｄおよび切り替え信号Ｓａの変化タイミングを示した図である。
【図７】この発明の実施の形態２のマイクロプロセッサの構成を示すブロック図である。
【図８】実施の形態２のマイクロプロセッサの動作を説明するための図である。
【図９】この発明の実施の形態３のマイクロプロセッサの構成を示すブロック図である。
【図１０】実施の形態３のＣＰＵの内部構成を示すブロック図である。
【図１１】実施の形態３のマイクロプロセッサの動作を説明するための図である。
【図１２】この発明の実施の形態４のマイクロプロセッサの構成を示すブロック図である。
【図１３】この発明の実施の形態５のマイクロプロセッサの構成を示すブロック図である。
【図１４】境界設定信号を説明するための図である。
【図１５】この発明の実施の形態７のマイクロプロセッサの構成を示すブロック図である。
【図１６】従来技術を示す図である。
【符号の説明】
１  ＣＰＵ、２  ＣＩＵ、３  ＤＩＵ、４  コードメモリ、１０，４０  分岐命令検出／アドレス生成回路、１１，１２  キューバッファ、１３  切り替えスイッチ、１４ａ，１４ｂ  エンプティ判定回路、１５  レジスタ、１６  ハードウェア、１８  レジスタ、２０  制御回路部、２１  調停回路、３０  データパス部、３１  セレクタ、６０  連続取得情報検出回路。
【図１】
2004192021.tif 000003
【図２】
2004192021.tif 000004
【図３】
2004192021.tif 000005
【図４】
2004192021.tif 000006
【図５】
2004192021.tif 000007
【図６】
2004192021.tif 000008
【図７】
2004192021.tif 000009
【図８】
2004192021.tif 000010
【図９】
2004192021.tif 000011
【図１０】
2004192021.tif 000012
【図１１】
2004192021.tif 000013
【図１２】
2004192021.tif 000014
【図１３】
2004192021.tif 000015
【図１４】
2004192021.tif 000016
【図１５】
2004192021.tif 000017
【図１６】
2004192021.tif 000018