(57)【特許請求の範囲】
【請求項１】
複数のステージを持つパイプライン処理を実行するプロセッサであって、
演算命令をフェッチして、この演算命令のソースオペランド番号とディスティネーションオペランド番号とを出力する命令フェッチユニットであって、前記演算命令が条件分岐命令である場合には、前記条件分岐命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、
前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記ソースオペランド番号に対応するソースオペランドを出力する、レジスタファイルと、
バイパスマルチプレクサと演算装置とを少なくとも有する第１パイプラインであって、前記バイパスマルチプレクサには、前記演算装置の演算結果である演算結果オペランドと前記レジスタファイルから出力された前記ソースオペランドが入力され、前記演算結果オペランドと前記ソースオペランドのうちの一方をセレクト信号に基づいて選択して前記演算装置に出力する、第１パイプラインと、
前記分岐命令の条件が成立したか否かを判断するブランチユニットを少なくとも有する第２パイプラインと、
少なくとも前記予測結果情報を用いて、前記セレクト信号を生成するバイパスセレクトロジック回路と、
を備えることを特徴とするプロセッサ。
【請求項２】
前記予測結果情報を格納する予測レジスタを備えるとともに、前記予測結果情報は、パイプライン処理の各ステージに同期して前記予測レジスタに順次転送されることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記命令フェッチユニットは、前記条件分岐命令の次の命令列に位置する演算命令の前記ソースオペランド番号を出力する際には、その演算命令が前記条件分岐命令の次の命令列に位置する演算命令であることを示すブランチディレイスロット情報も出力する、ことを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記ブランチディレイスロット情報を格納するブランチレジスタを備えるとともに、前記ブランチディレイスロット情報は、パイプライン処理の各ステージに同期して前記ブランチレジスタに順次転送されることを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、
前記予測レジスタから取り出した前記予測結果情報と、
前記ブランチレジスタから取り出した前記ブランチディレイスロット情報と、
前記セレクト信号を出力するステージの前のステージで演算ステージに到達している前記ディスティネーションオペランド番号と、
を用いて前記セレクト信号を生成する、ことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、前記ディスティネーションオペランド番号とを比較する、比較ロジック回路を、
少なくとも有するセレクト信号生成回路を備えており、
前記セレクト信号生成回路は、
前記比較ロジック回路が前記ソースオペランド番号と前記ディスティネーションオペランド番号とが一致することを検出するとともに、前記ブランチディレイスロット情報が演算ステージに到達している命令が条件分岐命令の次の命令でないことを示している場合、又は、前記予測結果情報が条件成立を示している場合には、前記前記バイパスマルチプレクサが前記演算結果オペランドを選択する第１状態の前記セレクト信号を生成し、
前記第１状態の前記セレクト信号を生成しない場合には、前記前記バイパスマルチプレクサが前記ソースオペランドを選択する第２状態の前記セレクト信号を生成する、
ことを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記セレクトバイパスロジック回路は、フリップフロップをさらに備えるとともに、
前記演算装置が演算を行う前のステージで前記セレクト信号を生成して前記フリップフロップに格納し、前記演算装置が演算を行うステージで前記フリップフロップから前記セレクト信号を出力する、
ことを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記演算結果オペランドを格納する結果レジスタを、さらに備えることを特徴とする請求項７に記載のプロセッサ。
【請求項９】
第１ステージから第５ステージの５つのステージとを少なくとも有するパイプライン処理を行うとともに、
命令セットアーキテクチャとして、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立したか否かに関わらず実行する通常の条件分岐命令と、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立した場合にのみ実行するブランチライクリー命令とを少なくとも有する、プロセッサであって、
前記第１ステージにおいて、少なくとも２つの演算命令をフェッチして、各演算命令につき１つ又は２つのソースオペランド番号と１つのディスティネーションオペランド番号とをそれぞれ出力する命令フェッチユニットであって、前記演算命令の１つがブランチライクリー命令である場合には、前記ブランチライクリー命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、
前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記第２ステージにおいて、前記各ソースオペランド番号に対応するソースオペランドをそれぞれ出力する、レジスタファイルと、
前記第４ステージに到達した演算結果オペランドである第１演算結果オペランドと、前記第５ステージに到達した演算結果オペランドである第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち１の前記演算命令に対する１の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記１の演算命令に対する前記１のソースオペランドとのうちの１つを第１セレクト信号に基づいて選択して第１演算オペランドとして出力する、第１バイパスマルチプレクサと、
前記第４ステージに到達した前記第１演算結果オペランドと、前記第５ステージに到達した前記第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち前記１の演算命令に対する他の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記１の演算命令に対する前記他のソースオペランドとのうちの１つを第２セレクト信号に基づいて選択して第２演算オペランドとして出力する、第２バイパスマルチプレクサと、
前記第１演算オペランドと前記第２演算オペランドとが入力され、前記第３ステージにおいて、前記第１演算オペランドと前記第２演算オペランドに基づいて演算を行い、その演算結果を前記演算結果オペランドとして出力する演算装置と、
前記第４ステージに到達した第１演算結果オペランドと、前記第５ステージに到達した第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する１の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記他の演算命令に対する前記１のソースオペランドとのうちの１つを第３セレクト信号に基づいて選択して第１比較オペランドとして出力する、第３バイパスマルチプレクサと、
前記第４ステージに到達した第１演算結果オペランドと、前記第５ステージに到達した第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する他の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記他の演算命令に対する前記他のソースオペランドとのうちの１つを第４セレクト信号に基づいて選択して第２比較オペランドとして出力する、第４バイパスマルチプレクサと、
前記第３ステージにおいて、前記第１比較オペランドと前記第２比較オペランドとが入力され、前記第１比較オペランドと前記第２比較オペランドとを比較して、前記分岐命令の条件が成立したか否かを判断するブランチユニットと、
前記第２ステージにおいて、少なくとも前記予測結果情報を用いて、前記第１乃至第４セレクト信号を生成するバイパスセレクトロジック回路と、
を備えることを特徴とするプロセッサ。
【請求項１０】
前記予測結果情報は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第３ステージに到達した前記予測結果情報を第１予測結果情報として格納する第１予測レジスタと、
前記第４ステージに到達した前記予測結果情報を第２予測結果情報として格納する第２予測レジスタと、
をさらに備えることを特徴とする請求項９に記載のプロセッサ。
【請求項１１】
前記命令フェッチユニットは、前記条件分岐命令の次の命令列に位置する演算命令の前記ソースオペランド番号を出力する際には、その演算命令が前記条件分岐命令の次の命令列に位置する演算命令であることを示すブランチディレイスロット情報も出力する、ことを特徴とする請求項１０に記載のプロセッサ。
【請求項１２】
前記ブランチディレイスロット情報は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第３ステージに到達した前記ブランチディレイスロット情報を第１ブランチディレイスロット情報として格納する第１ブランチレジスタと、
前記第４ステージに到達した前記ブランチディレイスロット情報を第２ブランチディレイスロット情報として格納する第２ブランチレジスタと、
をさらに備えることを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記ディスティネーションオペランド番号は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第３ステージに到達した前記ディスティネーションオペランド番号を第１ディスティネーションオペランド番号として格納する第１ディスティネーションレジスタと、
前記第４ステージに到達した前記ディスティネーションオペランド番号を第２ディスティネーションオペランド番号として格納する第２ディスティネーションレジスタと、
をさらに備えることを特徴とする請求項１２に記載のプロセッサ。
【請求項１４】
前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、
前記第１予測レジスタから取り出した前記第１予測結果情報と、
前記第２予測レジスタから取り出した前記第２予測結果情報と、
前記第１ブランチレジスタから取り出した前記第１ブランチディレイスロット情報と、
前記第２ブランチレジスタから取り出した前記第２ブランチディレイスロット情報と、
前記第１ディスティネーションレジスタから取り出した前記第１ディスティネーションオペランド番号と、
前記第２ディスティネーションレジスタから取り出した前記第２ディスティネーションオペランド番号と、
を用いて前記第１乃至第４セレクト信号を生成する、ことを特徴とする請求項１３に記載のプロセッサ。
【請求項１５】
前記バイパスセレクトロジック回路は、
前記第１セレクト信号を生成する第１セレクト信号生成回路と、
前記第２セレクト信号を生成する第２セレクト信号生成回路と、
前記第３セレクト信号を生成する第３セレクト信号生成回路と、
前記第４セレクト信号を生成する第４セレクト信号生成回路と、
を少なくとも備えており、
前記第１乃至第４セレクト信号生成回路のそれぞれは、
前記命令フェッチユニットが出力した１の前記ソースオペランド番号と、前記第１ディスティネーションオペランド番号とを比較する、第１比較ロジック回路と、
前記命令フェッチユニットが出力した前記１のソースオペランド番号と、前記第２ディスティネーションオペランド番号とを比較する、第２比較ロジック回路と、
少なくとも備えており、
前記第１比較ロジック回路が前記１のソースオペランド番号と前記第１ディスティネーションオペランド番号とが一致することを検出するとともに、前記第１ブランチディレイスロット情報が前記第３ステージに到達した命令が条件分岐命令の次の命令でないことを示している場合、又は、前記第１予測結果情報が条件成立を示している場合には、前記前記バイパスマルチプレクサが前記第１演算結果オペランドを選択する第１状態の前記第１乃至第４セレクト信号の１つを生成し、
前記第２比較ロジック回路が前記１のソースオペランド番号と前記第２ディスティネーションオペランド番号とが一致することを検出するとともに、前記第２ブランチディレイスロット情報が前記第４ステージに到達した命令が条件分岐命令の次の命令でないことを示している場合、又は、前記第２予測結果情報が条件成立を示している場合で、前記第１状態の前記第１乃至第４セレクト信号の１つを生成しない場合には、前記前記バイパスマルチプレクサが前記第２演算結果オペランドを選択する第２状態の前記第１乃至第４セレクト信号の１つを生成し、
前記第１状態及び前記第２状態の前記第１乃至第４セレクト信号の１つを生成しない場合には、前記前記バイパスマルチプレクサが前記ソースオペランドを選択する第３状態の前記第１乃至第４セレクト信号の１つを生成する、
ことを特徴とする請求項１４に記載のプロセッサ。
【請求項１６】
前記セレクトバイパスロジック回路は、前記第１乃至第４セレクト信号を保持する第１乃至第４フリップフロップをさらに備えるとともに、
前記第２ステージで前記第１乃至第４セレクト信号を生成して前記第１乃至第４フリップフロップに格納し、前記第３ステージで前記第１乃至第４フリップフロップから前記第１乃至第４セレクト信号を出力する、
ことを特徴とする請求項１５に記載のプロセッサ。
【請求項１７】
前記第４ステージに到達した前記演算結果オペランドを前記第１演算結果オペランドとして格納する第１結果レジスタと、
前記第５ステージに到達した前記演算結果オペランドを前記第２演算結果オペランドとして格納する第２結果レジスタと、
をさらに備えることを特徴とする請求項１６に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサに関し、特に、パイプライン処理を行う際にデータバイパスをするプロセッサに関する。
【０００２】
【従来の技術】
図８は、従来のプロセッサの内部構造を示す図であり、図９は、図８に示したプロセッサの各パイプラインにおけるパイプラインステージを示す図である。
【０００３】
図９に示すように、図８のプロセッサは、５段階のパイプラインステージを有している。すなわち、演算命令をフェッチするステージである「Ｉステージ」と、命令をデコードしてレジスタファイルからレジスタを読み出す「Ｒステージ」と、演算を行う「Ａステージ」と、データキャッシュをアクセスする「Ｄステージ」と、レジスタファイルに演算結果をライトバックする「Ｗステージ」とを、有している。このプロセッサにおいては、「Ａステージ」で、命令の演算の他に、条件分岐命令の条件を判定して、分岐が成立するか、成立しないかの判断を行う。
【０００４】
図８に示すように、プロセッサは、主として、命令フェッチユニット１１０と、レジスタファイル１２０と、バイパスセレクトロジック回路１３０と、２つのパイプライン１４０、１５０と、レジスタＲＧ１０１〜ＲＧ１０６とを、備えて構成されている。
【０００５】
２つのパイプライン１４０、１５０で演算ユニットが構成されている。これら２つのパイプライン１４０、１５０では、同時に命令の実行可能である。すなわち、このプロセッサは、２ウェイのスーパースカラープロセッサ（2 way supperscalar processer）である。
【０００６】
この図８の例では、パイプライン１４０が、ＡＬＵ１４２と、レジスタＲＧ１１０〜１１３と、バイパスマルチプレクサ１４４、１４６とを、備えており、ＡＬＵ演算命令を実行する。また、パイプライン１５０が、ブランチユニット１５２と、レジスタＲＧ１２０〜ＲＧ１２２と、バイパスマルチプレクサ１５４、１５６とを、備えており、分岐命令の実行する。ここでは、簡単のためにこれらＡＬＵ１４２とブランチユニット１５２のみを示しているが、各パイプライン１４０、１５０は他の演算装置も備えている。
【０００７】
命令フェッチユニット１１０は、「Ｉステージ」において、命令キャッシュメモリ（図示省略）から演算命令を読み出し、この演算命令の種類を判断した上で、実行可能な命令を演算ユニットに送出する。すなわち、命令フェッチユニット１１０は、演算命令をフェッチして、演算命令の命令部分とオペランド部分とに分離する。この図８には示していないが、演算命令の命令部分の種類に基づいて、ＡＬＵ命令はＡＬＵ１４２を有するパイプライン１４０に送出し、条件分岐命令はブランチユニット１５２を有するパイプライン１５０に送出する。
【０００８】
一方、命令フェッチユニット１１０は、演算命令のオペランド部分のうち、ソースオペランド番号Ｒｓ０Ｒ、Ｒｔ０Ｒ、Ｒｓ１Ｒ、Ｒｔ１Ｒは、レジスタファイル１２０に出力する。つまり、ソースオペランド番号Ｒｓ０Ｒ、Ｒｔ０Ｒは、パイプライン１４０に発行される命令のソースオペランドの番号であり、ソースオペランドＲｓ１Ｒ、Ｒｔ１Ｒは、パイプライン１５０に発行される命令のソースオペランドの番号である。
【０００９】
また、命令フェッチユニット１１０は、演算命令のオペランド部分のうち、ディスティネーションオペランド番号Ｒｄ０Ｒを、レジスタＲＧ１０１に出力する。このディスティネーションオペランド番号Ｒｄ０Ｒは、パイプライン１４０に発行される命令のディスティネーションオペランドの番号を示している。これらソースオペランド番号Ｒｓ０Ｒ、Ｒｔ０Ｒ、Ｒｓ１Ｒ、Ｒｔ１Ｒと、ディスティネーションオペランド番号Ｒｄ０Ｒは、５ビットの信号である。つまり、このプロセッサには、３２個のレジスタが存在することを想定している。
【００１０】
このため、命令ニーモニックは、次のように書き表すことができる。
【００１１】
Ａｄｄ  Ｒｄ、Ｒｓ、Ｒｔ
なお、本件明細書において、各種信号を示す符号の末尾は、その信号が到達しているステージを示すこととする。例えば、「Ｒステージ」にあるディスティネーションオペランド番号Ｒｄ０Ｒが、「Ａステージ」に到達するとディスティネーションオペランド番号Ｒｄ０Ａになる。
【００１２】
命令フェッチユニット１１０は、ブランチディレイスロット情報ＢＤＳ０Ｒと、命令有効情報Ｖａｌｉｄ１Ｒとを、出力する。ブランチディレイスロット情報ＢＤＳ０Ｒは、パイプライン１４０の命令が、ブランチライクリー命令のブランチディレイスロット（branch delay slot）の命令であるか否かを示す信号である。ブランチディレイスロットとは、命令列において、ブランチライクリー命令の直後に位置する命令のことである。この図８の例では、条件分岐命令直後の命令スロットである場合に、ブランチディレイスロット情報ＢＤＳ０Ｒが１になり、それ以外の場合に０になる。また、この命令セットアーキテクチャ（ＩＳＡ）では、ブランチディレイスロットにある１命令は、直前の条件分岐命令の条件が成立したかどうかに関わらず原則として実行される。つまり、通常の条件分岐命令の直後の命令は、無条件で実行される。但し、この命令セットアーキテクチャでは、ブランチライクリー命令の場合は、条件が成立しないときはブランチディレイスロットの命令を実行せず、条件が成立したときはブランチディレイスロットの命令を実行する。
【００１３】
通常の条件分岐命令の命令例の一例を図１０に示す。この図１０において、Ａｄｄ命令は、レジスタｒ２の内容とレジスタｒ３の内容を加算して、レジスタｒ１に格納するという命令である。ＢＮＥ命令は、レジスタＲｓの内容とレジスタＲｔの内容が異なるときに、分岐が成立するという命令である。すなわち、（レジスタｒ１の内容）≠（レジスタｒ２の内容）のとき、ＢＮＥ命令で分岐が成立してＬｏｏｐのラベルのあるＡｄｄ命令に処理が戻る。ところが、ブランチディレイスロットにあるＳｕｂ命令は、分岐が成立したとしても、実行される。すなわち、命令実行順序は次のようになる。
【００１４】
Ａｄｄ  →  …  →  ＢＮＥ  →  Ｓｕｂ  →  Ａｄｄ
一方、分岐命令が不成立のときには、そのままシーケンシャルに命令列が実行されるので、命令実行順序は次のようになる。
【００１５】
Ａｄｄ  →  …  →  ＢＮＥ  →  Ｓｕｂ  →  ｌｗ
ここで、Ｓｕｂ命令はレジスタｒ４の内容からレジスタｒ５の内容を減算して、レジスタｒ３に格納するという命令である。また、ｌｗ命令はレジスタｒ６の内容に、（０＋レジスタｒ７の内容）で特定されるメモリアドレスのデータをロードするという命令である。
【００１６】
以上が、通常の条件分岐命令の実行列であるが、次に、ブランチライクリー命令の実行列を説明する。図１１は、ブランチライクリー命令の実行列の一例を示す図である。このブランチライクリー命令は、上述したように、分岐が成立したときはブランチディレイスロットの命令を実行し、分岐が成立しないときはブランチディレイスロットの命令は実行しないような命令である。
【００１７】
図１１に示すＢＮＥＬ命令は、Ｒｔ≠Ｒｓ、つまり、（レジスタｒ１の内容）≠（レジスタｒ２の内容）のときは、ＢＮＥＬ命令で分岐が成立し、Ｌｏｏｐのラベルに戻り、Ａｄｄ命令が実行される。また、ブランチディレイスロットにあるＳｕｂ命令は、分岐が成立したときは実行される。このため、命令実行順序は次のようになる。
【００１８】
Ａｄｄ  →  …  →  ＢＮＥＬ  →  Ｓｕｂ  →  Ａｄｄ
一方、ブランチライクリー命令においては、分岐が不成立のときは、ブランチディレイスロットは実行されない。このため、命令実行順序は次のようになる。
【００１９】
Ａｄｄ  →  …  →  ＢＮＥＬ  →  ｌｗ
このように、ブランチライクリー命令は、分岐不成立のときの処理が通常の条件分岐命令とは異なり、ブランチディレイスロットにある命令が実行されない。
【００２０】
再び図８に説明を戻す。「Ｒステージ」で命令フェッチユニット１１０から送出された４つのソースオペランド番号Ｒｓ０Ｒ、Ｒｔ０Ｒ、Ｒｓ１Ｒ、Ｒｔ１Ｒは、レジスタファイル１２０に入力される。そして、このレジスタファイル１２０において、これらソースオペランド番号Ｒｓ０Ｒ、Ｒｔ０Ｒ、Ｒｓ１Ｒ、Ｒｔ１Ｒに対応するレジスタの内容が読み出される。つまり、各レジスタに格納されているデータ内容が読み出され、このデータがソースオペランドとなる。
【００２１】
この例では、ソースオペランドは６４ビットのデータであり、この読み出されたデータが、レジスタＲＧ１１０、１１１、１２０、１２１に保持されて、次の「Ａステージ」に送られる。
【００２２】
「Ａステージ」のパイプライン１４０においては、データバイパスが起きなければ、レジスタファイル１２０から読み出されたソースオペランドがＡＬＵ１４２に転送されて、演算が行われる。ここで、データバイパスとは次のような場合に起きる。
【００２３】
すなわち、データ依存関係のある命令が近接していると、前の演算結果がレジスタファイル１２０にライトバックされる前に、データ依存関係のある次の命令が実行されてしまう。このため、前の演算結果を、レジスタファイル１２０を介さずに、直接、バイパスマルチプレクサ１４４、１４６、１５４、１５６にバイパスする必要がある。図１２は、このようなデータ依存関係のある命令が近接している命令列の一例を示す図である。
【００２４】
この図１２においては、Ａｄｄ命令の結果がレジスタｒ１に格納されるが、このレジスタｒ１がＳｕｂ命令のソースオペランドとして使用されている。このように２つの命令が近接している場合、Ａｄｄ命令の結果は、「Ｄステージ」からＳｕｂ命令の「Ａステージ」に、内部のバイパスＤＡを使用して供給する必要がある。これを、「Ｄステージ」から「Ａステージ」へのデータバイパスという。同様の理由により、「Ｗステージ」から「Ａステージ」にバイパスＷＡを使用して、データバイパスをする必要が生ずる場合もある。
【００２５】
ＡＬＵ１４２における演算が終了すると、演算結果はＤステージのレジスタＲＧ１１２に格納される。「Ｄステージ」では、この図では示していないが、データキャッシュメモリのアクセスが行われる。このため、ＡＬＵ１４２の演算結果は、レジスタファイル１２０への書き込みタイミングをそろえるために、単に「Ｄステージ」の間、このレジスタＲＧ１１２に演算結果が保持される。そして、次のサイクルで「Ｗステージ」のレジスタＲＧ１１３に格納されて、レジスタファイル１２０にライトバックされる。
【００２６】
ブランチユニット１５２を有するパイプライン１５０では、ＢＮＥ命令、ＢＥＱ命令、ＢＮＥＬ命令、ＢＥＱＬ命令の処理を行う。
【００２７】
ＢＮＥ命令は通常の条件分岐命令であり、２つのソースオペランドが等しくないとき、分岐が成立する。ＢＥＱ命令も通常の条件分岐命令であり、２つのソースオペランドが等しいとき、分岐が成立する。ＢＮＥＬ命令はブランチライクリー命令であり、２つのソースオペランドが等しくないとき、分岐が成立する。ＢＥＱＬ命令もブランチライクリー命令であり、２つのソースオペランドが等いとき、分岐が成立する。
【００２８】
図１３は、ブランチユニット１５２の内部構成を示す図である。この図１３に示すように、「Ａステージ」におけるブランチユニット１５２には、バイパスマルチプレクサ１５４からオペランドＰ１ＲｓＡが入力され、バイパスマルチプレクサ１５６からオペランドＰ１ＲｔＡが入力される。上述したように、これらのオペランドＰ１ＲｓＡ、Ｐ１ＲｔＡは、６４ビットのデータである。
【００２９】
ブランチユニット１５２に入力されたオペランドＰ１ＲｓＡ、Ｐ１ＲｔＡは、比較ロジック１６０に入力され、全ビット比較が行われる。そして、この比較ロジック１６０は、オペランドＰ１ＲｓＡとオペランドＰ１ＲｔＡとが等しい場合には１を出力し、等しくない場合には０を出力する。
【００３０】
この比較ロジック１６０の出力は、反転した上でＡＮＤ回路１６１に入力され、また、そのまま反転せずにＡＮＤ回路１６２に入力される。このＡＮＤ回路１６１にはデコードＢＮＥ信号ＤＢＮＥも入力され、ＡＮＤ回路１６２にはデコードＢＥＱ信号ＤＢＥＱも入力される。デコードＢＮＥ信号ＤＢＮＥは、ＢＮＥ命令又はＢＮＥＬ命令が「Ａステージ」に到達した際に１になる信号であり、デコードＢＥＱ信号ＤＢＥＱは、ＢＥＱ命令又はＢＥＱＬ命令が「Ａステージ」に到達した際に１になる信号である。
【００３１】
これらＡＮＤ回路１６１とＡＮＤ回路１６２の出力は、ＯＲ回路１６３に入力される。さらに、このＯＲ回路１６３の出力は、ＮＡＮＤ回路１６４に入力される。このＮＡＮＤ回路１６４には、命令有効情報Ｖａｌｉｄ１Ａも入力される。この命令有効情報Ｖａｌｉｄ１Ａは、有効な命令がパイプライン１５０の「Ａステージ」に到達したことを示す信号である。図８に示すように、この命令有効情報Ｖａｌｉｄ１Ａは、「Ｒステージ」において、命令フェッチユニット１１０が命令とともにレジスタＲＧ１０３に出力する。これが、パイプラインステージに沿って、「Ａステージ」のレジスタ１０４まで転送された信号である。
【００３２】
ＮＡＮＤ回路１６４の出力が分岐条件不成立信号ＮＴｋｎＡとなり、このブランチユニット１５２の出力となる。図１３に示すように、ブランチユニット１５２が構成されているので、オペランドＰ１ＲｓＡとオペランドＰ１ＲｔＡとが等しく、且つ、命令がＢＥＱ命令又はＢＥＱＬ命令である場合に、分岐が成立するので、分岐条件不成立信号ＮＴｋｎＡは０になる。また、オペランドＰ１ＲｓＡとオペランドＰ１ＲｔＡとが等しくなく、且つ、命令がＢＮＥ命令又はＢＮＥＬ命令である場合に、分岐が成立するので、分岐条件不成立信号ＮＴｋｎＡは０になる。これら２つの場合以外は、この分岐条件不成立信号ＮＴｋｎＡは１になる。
【００３３】
図８に示すバイパスセレクトロジック回路１３０は、パイプライン１４０にあるバイパスマルチプレクサ１４４、１４６と、パイプライン１５０にあるバイパスマルチプレクサ１５４、１５６の制御を行う。この制御は、ＡＬＵ１４２とブランチユニット１５２へ、正しいオペランドを転送するために行われる。
【００３４】
具体的には、バイパスセレクトロジック回路１３０は、４つのセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成し、バイパスマルチプレクサ１４４、１４６、１５４、１５６のそれぞれに供給する。これらセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１は、ワン・ホット（one-hot）の３ビット信号であり、３ビットの信号のうち１ビットが１になる信号である。
【００３５】
この例では、ビット０が１の場合には、バイパスマルチプレクサ１４４、１４６、１５４、１５６は、「Ｄステージ」からのバイパスＤＡからのオペランドを選択して出力する。ビット１が１の場合には、バイパスマルチプレクサ１４４、１４６、１５４、１５６は、「Ｗステージ」からのバイパスＷＡからのオペランドを選択して出力する。ビット２が１の場合には、バイパスマルチプレクサ１４４、１４６、１５４、１５６は、レジスタファイル１２０からのオペランドを選択して出力する。
【００３６】
セレクト信号ＳｅｌＲｔ０を例にバイパスセレクトロジック回路１３０の動作を説明すると、このセレクト信号ＳｅｌＲｔ０は、データバイパスをしようとするサイクルの前のサイクルで生成し、これをフリップフロップでラッチした上で、バイパスマルチプレクサ１４４に供給する必要がある。これは、一般的に、パイプラインの「Ａステージ」は、ＡＬＵ１４２等の演算器が動作するステージであるため、動作タイミングが最も長くなるステージである場合が多い。このため、ＡＬＵ１４２等に与えるオペランドは、なるべく早いタイミングで確定しておく必要がある。このためには、バイパスマルチプレクサ１４４のオペランドも可能な限り早いタイミングで通過させなければならず、バイパスマルチプレクサ１４４に与えるセレクト信号ＳｅｌＲｔ０はそれよりも早いタイミングで確定させなければならない。したがって、通常、セレクト信号ＳｅｌＲｔ０は、「Ａステージ」の前のステージである「Ｒステージ」で生成しておく必要がある。
【００３７】
図１４は、バイパスセレクトロジック回路１３０の内部構成の一例を示す図である。この図１４に示すように、バイパスセレクトロジック回路１３０は、４個のセレクト信号生成回路１３２Ａ〜１３２Ｄを備えて構成されている。これらセレクト信号生成回路１３２Ａ〜１３２Ｄが、それぞれ、セレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成する。
【００３８】
各セレクト信号生成回路１３２Ａ〜１３２Ｄは、同様の構成をしている。例えば、セレクト信号生成回路１３２Ａは、比較ロジック１７２、１７４と、ＡＮＤ回路１７６、１７８、１８０、１８２と、インバータ回路１８４、１８６とを、備えて構成されている。
【００３９】
このセレクト信号生成回路１３２Ａの動作を、「Ｄステージ」から「Ａステージ」へのデータバイパスが生じる場合を例に説明する。このように「Ｄステージ」から「Ａステージ」へのデータバイパスが生じる場合の命令列としては、例えば、上述した図１２に示すような命令列が挙げられる。
【００４０】
この図１２の例の場合、第４サイクルにおいて、Ａｄｄ命令の演算結果が「Ｄステージ」から「Ａステージ」にバイパスされる必要がある。このためには、１つ前のサイクルである第３サイクルで、そのためのセレクト信号ＳｅｌＲｓ０を生成しておく必要がある。
【００４１】
第３サイクルで、Ａｄｄ命令とＳｕｂ命令との間のデータ依存性を検出するために、図１４に示すように、「Ａステージ」に到達したＡｄｄ命令のディスティネーションオペランド番号Ｒｄ０Ａと、「Ｒステージ」に到達したＳｕｂ命令のソースオペランド番号Ｒｓ０Ｒとが、比較ロジック１７２で比較される。この比較ロジック１７２は、これらディスティネーションオペランド番号Ｒｄ０Ａとソースオペランド番号Ｒｓ０Ｒとが一致する場合に１を出力し、一致しない場合に０を出力する。この例の場合、ディスティネーションオペランド番号Ｒｄ０Ａとソースオペランド番号Ｒｓ０Ｒとが一致するので、比較ロジック１７２は１を出力する。このため、ＡＮＤ回路１７６の一方の入力が１となる。
【００４２】
ＡＮＤ回路１７６の他方の入力には、ブランチディレイスロット情報ＢＤＳ０Ｒと分岐条件不成立信号ＮＴｋｎＡのＮＡＮＤをとったＮＡＮＤ回路１９０からの信号が、入力される。つまり、「Ａステージ」の命令がブランチライクリー命令の次の命令であり、且つ、このブランチライクリー命令が条件不成立の場合に、このＮＡＮＤ回路１９０の出力が０になる。この例では、Ａｄｄ命令は、ブランチディレイスロットではないため、ＮＡＮＤ回路１９０の出力は１になる。よって、ＡＮＤ回路１７６の出力は１となり、セレクト信号ＳｅｌＲｓ０のビット０が１となる。一方、ＡＮＤ回路１７６における１の出力は、インバータ回路１８４を介して、ＡＮＤ回路１８０、１８２に入力されるので、ＡＮＤ回路１８０、１８２の出力は０になり、セレクト信号ＳｅｌＲｓ０のビット１、ビット２が０になる。このセレクト信号ＳｅｌＲｓ０は、フリップフロップ１９２Ａにラッチされる。
【００４３】
このフリップフロップ１９２Ａにラッチされたセレクト信号ＳｅｌＲｓ０は、次のサイクルでバイパスマルチプレクサ１４４に入力される。このセレクト信号ＳｅｌＲｓ０に基づいて、バイパスマルチプレクサ１４４は、「Ｄステージ」からのバイパスＤＡから入力されたオペランドを選択して、ＡＬＵ１４２に出力する。
【００４４】
次に、ブランチディレイスロットの命令が、キャンセルされて「Ｄステージ」から「Ａステージ」へのデータバイパスが生じないケースを説明する。図１５は、このようなケースが発生する命令列の一例を示す図である。
【００４５】
この図１５に示す例では、Ａｄｄ命令のレジスタｒ１とＡＮＤ命令のレジスタｒ１とが一致している。また、Ａｄｄ命令は、命令列においてブランチライクリー命令であるＢＮＥＬ命令の次の命令である。さらに、ここでは、このＢＮＥＬ命令については、分岐が成立しないと予測しているものとする。このため、命令列においてＡｄｄ命令の次の命令であるＡＮＤ命令を、投機的に実行する。このような場合に、予測が当たって、ＢＮＥＬ命令の条件が成立しなかった場合には、ブランチディレイスロットに位置するＡｄｄ命令はキャンセルされるため、Ａｄｄ命令からＡＮＤ命令へのデータバイパスは行われない。すなわち、第４サイクルにおいて、バイパスマルチプレクサ１４４は、レジスタファイルＲＧ１１０から入力されたソースオペランドを、ＡＬＵ１４２に出力する。
【００４６】
【発明が解決しようとする課題】
しかしながら、上述したプロセッサにおいては、バイパスセレクトロジック回路１３０の処理時間が長いため、プロセッサの動作周波数を低下させるという問題があった。なぜなら、図１３に示したように、条件分岐命令の分岐が成立するかどうかの判断は、ブランチユニット１５２においてオペランドＲｓとオペランドＲｔとを全６４ビット比較して決めなければならず、これが「Ａステージ」の終わり近くにならないと決まらないからである。
【００４７】
このことを図１６に基づいて、詳しく説明する。この図１６は、図１５に示したようにＢＮＥＬ命令とＡＮＤ命令とが連続するサイクルに位置する場合における分岐条件不成立信号ＮＴｋｎＡとセレクト信号ＳｅｌＲｓ０の動作タイミングを説明する図である。
【００４８】
この図１６に示すように、ＢＮＥＬ命令の「Ａステージ」の前半でバイパスマルチプレクサ１５４、１５６が動作し、ブランチユニット１５２に入力されるオペランドが確定する。その後、このブランチユニット１５２で６４ビットのオペランドの全ビット比較が行われる。このため、比較結果である分岐条件不成立信号ＮＴｋｎＡが確定するのは、「Ａステージ」の終わり頃になる。上述したように、バイパスセレクトロジック回路１３０では、この分岐条件不成立信号ＮＴｋｎＡを用いてセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成するので、これらセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１の生成はさらに遅いタイミングになってしまう。
【００４９】
一般的に、パイプライン処理におけるサイクルタイムは、「Ａステージ」でのＡＬＵ演算がちょうど終了する程度の時間に設定するのが、最適である。すなわち、このように設定した場合に、動作周波数とハードウェアの効率が最も良くなる。
【００５０】
しかし、ＡＬＵ１４２の処理に必要な時間と、ブランチユニット１５２の処理に必要な時間とは、ほぼ同じ程度である。また、ＡＬＵ１４２にオペランドが与えられるタイミングと、ブランチユニット１５２にオペランドが与えられるタイミングも、ほぼ同じである。このため、この比較結果である分岐条件不成立信号ＮＴｋｎＡを用いるバイパスセレクトロジック回路１３０に残された時間は、ほとんどないことになってしまう。このため、バイパスセレクトロジック回路１３０が、プロセッサの動作周波数を低下させるボトルネックになってしまうという問題があった。
【００５１】
そこで、本発明は上記課題に鑑みてなされたものであり、バイパスセレクトロジック回路がプロセッサの動作周波数を決定する上でのボトルネックとならないようにすることを目的とする。そして、これにより、動作周波数の高いプロセッサを提供することを目的とする。
【００５２】
【課題を解決するための手段】
上記課題を解決するため、本発明に係るプロセッサは、複数のステージを持つパイプライン処理を実行するプロセッサであって、演算命令をフェッチして、この演算命令のソースオペランド番号とディスティネーションオペランド番号とを出力する命令フェッチユニットであって、前記演算命令が条件分岐命令である場合には、前記条件分岐命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記ソースオペランド番号に対応するソースオペランドを出力する、レジスタファイルと、バイパスマルチプレクサと演算装置とを少なくとも有する第１パイプラインであって、前記バイパスマルチプレクサには、前記演算装置の演算結果である演算結果オペランドと前記レジスタファイルから出力された前記ソースオペランドが入力され、前記演算結果オペランドと前記ソースオペランドのうちの一方をセレクト信号に基づいて選択して前記演算装置に出力する、第１パイプラインと、前記分岐命令の条件が成立したか否かを判断するブランチユニットを少なくとも有する第２パイプラインと、少なくとも前記予測結果情報を用いて、前記セレクト信号を生成するバイパスセレクトロジック回路と、を備えることを特徴とする。
【００５３】
また、本発明に係るプロセッサは、第１ステージから第５ステージの５つのステージとを少なくとも有するパイプライン処理を行うとともに、命令セットアーキテクチャとして、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立したか否かに関わらず実行する通常の条件分岐命令と、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立した場合にのみ実行するブランチライクリー命令とを少なくとも有する、プロセッサであって、前記第１ステージにおいて、少なくとも２つの演算命令をフェッチして、各演算命令につき１つ又は２つのソースオペランド番号と１つのディスティネーションオペランド番号とをそれぞれ出力する命令フェッチユニットであって、前記演算命令の１つがブランチライクリー命令である場合には、前記ブランチライクリー命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記第２ステージにおいて、前記各ソースオペランド番号に対応するソースオペランドをそれぞれ出力する、レジスタファイルと、前記第４ステージに到達した演算結果オペランドである第１演算結果オペランドと、前記第５ステージに到達した演算結果オペランドである第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち１の前記演算命令に対する１の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記１の演算命令に対する前記１のソースオペランドとのうちの１つを第１セレクト信号に基づいて選択して第１演算オペランドとして出力する、第１バイパスマルチプレクサと、前記第４ステージに到達した前記第１演算結果オペランドと、前記第５ステージに到達した前記第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち前記１の演算命令に対する他の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記１の演算命令に対する前記他のソースオペランドとのうちの１つを第２セレクト信号に基づいて選択して第２演算オペランドとして出力する、第２バイパスマルチプレクサと、前記第１演算オペランドと前記第２演算オペランドとが入力され、前記第３ステージにおいて、前記第１演算オペランドと前記第２演算オペランドに基づいて演算を行い、その演算結果を前記演算結果オペランドとして出力する演算装置と、前記第４ステージに到達した第１演算結果オペランドと、前記第５ステージに到達した第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する１の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記他の演算命令に対する前記１のソースオペランドとのうちの１つを第３セレクト信号に基づいて選択して第１比較オペランドとして出力する、第３バイパスマルチプレクサと、前記第４ステージに到達した第１演算結果オペランドと、前記第５ステージに到達した第２演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する他の前記ソースオペランドが入力され、前記第３ステージにおいて、前記第１演算結果オペランドと前記第２演算結果オペランドと前記他の演算命令に対する前記他のソースオペランドとのうちの１つを第４セレクト信号に基づいて選択して第２比較オペランドとして出力する、第４バイパスマルチプレクサと、前記第３ステージにおいて、前記第１比較オペランドと前記第２比較オペランドとが入力され、前記第１比較オペランドと前記第２比較オペランドとを比較して、前記分岐命令の条件が成立したか否かを判断するブランチユニットと、前記第２ステージにおいて、少なくとも前記予測結果情報を用いて、前記第１乃至第４セレクト信号を生成するバイパスセレクトロジック回路と、を備えることを特徴とする。
【００５４】
【発明の実施の形態】
図１は、本発明の一実施形態に係るプロセッサの内部構成を示す図である。この図１に示すように、本実施形態に係るプロセッサは、主として、命令フェッチユニット１０と、レジスタファイル２０と、バイパスセレクトロジック回路３０と、第１パイプライン４０と、第２パイプライン５０と、レジスタＲＧ１〜ＲＧ８とを備えて構成されている。
【００５５】
さらに、第１パイプライン４０は、レジスタＲＧ１０〜ＲＧ１３と、ＡＬＵ４２と、バイパスマルチプレクサ４４、４６とを、備えて構成されている。第２パイプライン５０は、レジスタＲＧ２０〜ＲＧ２２と、ブランチユニット５２と、バイパスマルチプレクサ５４、５６とを、備えて構成されている。
【００５６】
本実施形態におけるプロセッサは、次の３つの点を主たる特徴としている。
【００５７】
（ａ）命令フェッチユニット１０が命令をフェッチした段階で、条件分岐命令である場合には、その条件分岐命令の条件が成立するかどうかを予測する。そして、この予測した結果である予測結果フラグＰｒｄＮＴｋｎ１Ｒを出力する。また、命令フェッチユニット１０は、この分岐予測結果に基づき、分岐命令以後の命令をパイプライン４０、５０に供給する。
【００５８】
（ｂ）この予測結果フラグＰｒｄＮＴｋｎ１Ｒを、条件分岐命令の命令部分やソースオペランド部分と同期させて、「Ａステージ」、「Ｄステージ」まで転送し、それぞれレジスタＲＧ７、ＲＧ８に格納する。これがそれぞれ、予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄとなる。
【００５９】
（ｃ）バイパスセレクトロジック回路３０は、ブランチユニット５２が出力する実際の分岐条件不成立信号ＮＴｋｎＡではなく、分岐を予測した結果である予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄを使用して、セレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成する。
【００６０】
具体的に説明すると、命令フェッチユニット１０は、「Ｒステージ」において、条件分岐命令をフェッチした場合には、ブランチユニット５１を有する第２パイプライン５０に、この条件分岐命令の命令部分とソースオペランド部分とを発行する。このとき、命令フェッチユニット１０は、発行した条件分岐命令の分岐条件が成立するか又は成立しないかを予測する。その予測方法は問わないが、例えば、この条件分岐命令における過去の条件成立／不成立の履歴を保持しておき、回数の多い方を予測結果として用いるというような方法が挙げられる。
【００６１】
図２は、図１におけるバイパスセレクトロジック回路３０の内部構成を示す図である。この図２に示すように、バイパスセレクトロジック回路３０は、セレクト信号生成回路３２Ａ〜３２Ｄと、ＮＡＮＤ回路３４、３６と、フリップフロップ３８Ａ〜３８Ｄとを、備えて構成されている。
【００６２】
ＮＡＮＤ回路３４には、レジスタＲＧ５に格納されているブランチディレイスロット情報ＢＤＳ０Ａと、レジスタＲＧ７に格納されている予測結果フラグＰｒｄＮＴｋｎ１Ａとが、入力される。つまり、「Ａステージ」に到達したブランチディレイスロット情報ＢＤＳ０Ａと予測結果フラグＰｒｄＮＴｋｎ１Ａとが、入力される。このＮＡＮＤ回路３４の出力は、セレクト信号生成回路３２Ａ〜３２Ｄのぞれぞれに入力される。
【００６３】
ＮＡＮＤ回路３６には、レジスタＲＧ６に格納されているブランチディレイスロット情報ＢＤＳ０Ｄと、レジスタＲＧ８に格納されている予測結果フラグＰｒｄＮＴｋｎ１Ｄとが、入力される。つまり、「Ｄステージ」に到達したブランチディレイスロット情報ＢＤＳ０Ｄと予測結果フラグＰｒｄＮＴｋｎ１Ｄとが、入力される。このＮＡＮＤ回路３６の出力も、セレクト信号生成回路３２Ａ〜３２Ｄのぞれぞれに入力される。
【００６４】
このように、バイパスセレクトロジック回路３０が、バイパスマルチプレクサ４４、４６、５４、５６を切り替えるのに用いるセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成するのにあたり、予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄを使用することが、本実施形態の特徴的な部分の１つである。
【００６５】
セレクト信号生成回路３２Ａ〜３２Ｄはそれぞれ同様の内部構成をしている。セレクト信号生成回路３２Ａを例に説明すると、このセレクト信号生成回路３２Ａは、比較ロジック７２、７４と、ＡＮＤ回路７６、７８、８０、８２と、インバータ回路８４、８６とを、備えて構成されている。
【００６６】
次に、これら図１及び図２に示したプロセッサにおけるデータバイパスの動作を、（１）ブランチライクリー命令の分岐が成立すると予測した場合、（２）ブランチライクリー命令の分岐が成立しないと予測した場合、（３）条件分岐命令でない通常命令で「Ｄステージ」から「Ａステージ」へのバイパスが発生する場合、（４）分岐命令でない通常命令で「Ｗステージ」から「Ａステージ」へのバイパスが発生する場合、（５）バイパスが発生せずにレジスタファイル２０からのソースオペランドが選択される場合、とに分けて説明する。
【００６７】
（１）ブランチライクリー命令の分岐が成立すると予測した場合
命令フェッチユニット１０がブランチライクリー命令の条件分岐命令をフェッチし、分岐が成立すると予測した場合には、この条件分岐命令を第２パイプライン５０に発行するとともに、０の予測結果フラグＰｒｄＮＴｋｎ１Ｒを出力する。すなわち、本実施形態においては、分岐が成立すると予測した場合に、予測結果フラグＰｒｄＮＴｋｎ１Ｒを０にし、分岐が成立しないと予測した場合に、予測結果フラグＰｒｄＮＴｋｎ１Ｒを１にする。また、本実施形態においては、この予測結果フラグＰｒｄＮＴｋｎ１Ｒを１にするのは、ブランチライクリー命令において分岐が成立しないと予測した場合であるが、通常の条件分岐命令において分岐が成立しないと予測した場合にも予測結果フラグＰｒｄＮＴｋｎ１Ｒを１にするようにしてもよい。
【００６８】
例えば、図３に示すような命令列を、このプロセッサで処理するとする。この図３に示す命令列を分岐が成立するとした予測の下、ブランチライクリー命令であるＢＮＥＬ命令以降の命令を、このプロセッサで処理すると、図４に示すようなパイプライン処理が行われる。
【００６９】
この図４に示すように、命令フェッチユニット１０は、第１サイクルで、ＢＮＥＬ命令とＡｄｄ命令とをフェッチし、第２サイクルで、ＢＮＥＬ命令を第２パイプライン５０に発行し、Ａｄｄ命令を第１パイプライン４０に発行する。また、ここではＢＮＥＬ命令の分岐条件が成立すると予測したので、第２サイクルで、予測結果フラグＰｒｄＮＴｋｎ１Ｒを０にして、レジスタＲＧ７に出力する。
【００７０】
また、分岐が成立すると予測したので、分岐飛び先の命令であるターゲット命令をパイプラインに投入する。すなわち、この第２サイクルでは、命令フェッチユニット１０は、ターゲット命令であるＳｕｂ命令を第１パイプライン４０に発行する。
【００７１】
第３サイクルにおいては、ＢＮＥＬ命令とＡｄｄ命令とは、「Ａステージ」に到達しており、ターゲット命令であるＳｕｂ命令は「Ｒステージ」に到達している。Ａｄｄ命令からＳｕｂ命令へのバイパスは第４サイクルで発生するため、この第３サイクルにおいてデータバイパスをするか否かを決定しておく必要がある。つまり、この第３サイクルで、バイパスセレクトロジック回路３０は、セレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を確定しておく必要がある。
【００７２】
図２に基づいて、セレクト信号ＳｅｌＲｓ０の生成過程を詳細に説明すると、この例では、セレクト信号生成回路３２Ａの比較ロジック７２において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ａとが比較される。ここでは、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒと「Ａステージ」にあるディスティネーションオペランド番号Ｒｄ０Ａとは、ともにレジスタｒ１で等しいので、この比較ロジック７２の出力は１になる。つまり、Ａｄｄ命令とＳｕｂ命令との間に、レジスタｒ１について依存関係があることが検出される。また、上述したように予測結果フラグＰｒｄＮＴｋｎ１Ａが０であるので、ＮＡＮＤ回路３４の出力も１になる。このように比較ロジックの出力が１であり、且つ、ＮＡＮＤ回路３４の出力も１であるので、ＡＮＤ回路７６の出力が１になる。したがって、フリップフロップ３８Ａのビット０に１が格納される。
【００７３】
一方、ＡＮＤ回路７６の出力が１であるので、ＡＮＤ回路８０、８２の一方の入力は０になり、このため、ＡＮＤ回路８０、８２の出力は０になる。したがって、フリップフロップ３８Ａのビット１、ビット２には、０が格納される。これにより、セレクト信号ＳｅｌＲｓ０が生成され、次の第４サイクルで、フリップフロップ３８Ａからバイパスマルチプレクサ４４に供給される。このビット０が１のセレクト信号ＳｅｌＲｓ０の供給を受けたバイパスマルチプレクサ４４は、バイパスＤＡから入力されているオペランドを選択してＡＬＵ４２に出力する。つまり、これにより、第４サイクルで、「Ｄステージ」から「Ａステージ」へのデータバイパスが行われる。
【００７４】
すなわち、命令フェッチユニット１０は、ＢＮＥＬ命令の分岐は成立すると予測した。この予測が正しいとすると、ブランチディレイスロットのＡｄｄ命令はキャンセルされないと予測される。このため、Ａｄｄ命令から次の命令であるＳｕｂ命令へのデータバイパスが行われるように、バイパスセレクトロジック回路３０がセレクト信号ＳｅｌＲｓ０を生成したことになる。
【００７５】
この分岐予測が当たった場合には、このプロセッサはそのまま処理を続行する。予測がはずれた場合には、分岐が不成立であったことになるので、ブランチライクリー命令の次の命令は、そもそも実行されない。つまり、ブランチディレイスロットにあるＡｄｄ命令は実行されない命令になる。したがって、Ａｄｄ命令がキャンセルされる。また、分岐が不成立であったので、その次のターゲット命令であるＳｕｂ命令もキャンセルされる。このため、データバイパスが間違っていても、何らの問題も生じない。
【００７６】
（２）ブランチライクリー命令の分岐が成立しないと予測した場合
命令フェッチユニット１０がブランチライクリー命令の条件分岐命令をフェッチし、分岐が成立しないと予測した場合には、この条件分岐命令を第２パイプライン５０に発行するとともに、１の予測結果フラグＰｒｄＮＴｋｎ１Ｒを出力する。
【００７７】
例えば、上述した図３に示すような命令列を、このプロセッサで処理するとする。この図３に示す命令列を分岐が成立しないとした予測の下、ブランチライクリー命令であるＢＮＥＬ命令以降の命令を、このプロセッサで処理すると、図５に示すようなパイプライン処理が行われる。
【００７８】
この図５に示すように、命令フェッチユニット１０は、第１サイクルで、ＢＮＥＬ命令とＡｄｄ命令とをフェッチし、第２サイクルで、ＢＮＥＬ命令を第２パイプライン５０を発行し、Ａｄｄ命令を第１パイプライン４０に発行する。また、ここではＢＮＥＬ命令の分岐条件が成立しないと予測したので、第２サイクルで、予測結果フラグＰｒｄＮＴｋｎ１Ｒを１にして、レジスタＲＧ７に出力する。
【００７９】
また、分岐が成立しないと予測したので、さらにその次の命令であるシーケンシャル命令をパイプラインに投入する。すなわち、この第２サイクルでは、命令フェッチユニット１０は、Ａｄｄ命令の次の命令であるＡＮＤ命令を第１パイプライン４０に発行する。
【００８０】
第３サイクルにおいては、ＢＮＥＬ命令とＡｄｄ命令とは、「Ａステージ」に到達しており、シーケンシャル命令であるＡＮＤ命令は「Ｒステージ」に到達している。Ａｄｄ命令からＡＮＤ命令へのバイパスは第４サイクルで発生するため、この第３サイクルにおいてデータバイパスをするか否かを決定しておく必要がある。つまり、この第３サイクルで、バイパスセレクトロジック回路３０はセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を確定しておく必要がある。
【００８１】
図２に基づいて、セレクト信号ＳｅｌＲｓ０の生成過程を詳細に説明すると、この例では、セレクト信号生成回路３２Ａの比較ロジック７２において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ａとが等しいかどうかが判断される。ここでは、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒと「Ａステージ」にあるディスティネーションオペランド番号Ｒｄ０Ａとは、ともにレジスタｒ１で等しいので、この比較ロジック７２の出力は１になる。つまり、Ａｄｄ命令とＡＮＤ命令との間に、レジスタｒ１について依存関係があることが検出される。
【００８２】
また、Ａｄｄ命令は、ブランチライクリー命令の次の命令であるので、ブランチディレイスロット情報ＢＤＳ０Ａが１になっている。したがって、予測結果フラグＰｒｄＮＴｋｎ１Ａが１であり、且つ、ブランチディレイスロット情報ＢＤＳ０Ａも１であるので、ＮＡＮＤ回路３４の出力は０になる。このように比較ロジックの出力が１であり、且つ、ＮＡＮＤ回路３４の出力が０であるので、ＡＮＤ回路７６の出力が０になる。したがって、フリップフロップ３８Ａのビット０に０が格納される。一方、ＡＮＤ回路７６の出力が０であるので、ＡＮＤ回路８０、８２の一方の入力は１になる。
【００８３】
また、比較ロジック７４において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ｄとが、等しいかどうかが判断される。ここでは、「Ｄステージ」の命令とはオペランドの依存関係はなかったと仮定する。このため、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒと「Ｄステージ」にあるディスティネーションオペランド番号Ｒｄ０Ｄとは、等しくない。すると、この比較ロジック７２の出力は０になる。さらに、「Ｄステージ」の命令は、ブランチライクリー命令のブランチディレイスロットにある命令でないと仮定する。すなわち、ＮＡＮＤ回路３６において、ブランチディレイスロット情報ＢＤＳ０Ｄは０であり、且つ、予測結果フラグＰｒｄＮＴｋｎ１Ｄも０である。すると、このＮＡＮＤ回路３６の出力は１になる。このため、ＡＮＤ回路７８の出力は０になる。したがって、ＡＮＤ回路８０の他方の入力には０が入力され、ＡＮＤ回路８２の他方の入力には１が入力される。
【００８４】
このため、ＡＮＤ回路８０の出力は０になり、フリップフロップ３８Ａのビット１に０が格納される。また、ＡＮＤ回路８２の出力は１になり、フリップフロップ３８Ａのビット２に１が格納される。これにより、セレクト信号ＳｅｌＲｓ０が生成され、次の第４サイクルで、フリップフロップ３８Ａからバイパスマルチプレクサ４４に供給される。このビット２が１のセレクト信号ＳｅｌＲｓ０の供給を受けたバイパスマルチプレクサ４４は、レジスタファイル２０から入力されているオペランドを選択してＡＬＵ４２に出力する。つまり、データバイパスが行われないことになる。
【００８５】
すなわち、命令フェッチユニット１０は、ＢＮＥＬ命令の分岐は成立しないと予測した。この予測が正しいとすると、ブランチディレイスロットのＡｄｄ命令はキャンセルされると予測される。この場合、Ａｄｄ命令から次の命令であるＡＮＤ命令へのデータバイパスは行われてはならないので、バイパスセレクトロジック回路３０は、データバイパスが起きないようにセレクト信号ＳｅｌＲｓ０を生成する。
【００８６】
この分岐予測が当たった場合には、このプロセッサはそのまま処理を続行する。つまり、Ａｄｄ命令をキャンセルした上で、レジスタｒ１の内容をレジスタファイル２０から読み出して、ＡＮＤ命令を実行する。
【００８７】
予測がはずれた場合には、分岐が成立したことになるので、ブランチライクリー命令の次の命令は、そのまま実行される。つまり、ブランチディレイスロットにあるＡｄｄ命令はそのまま実行される。但し、分岐が成立しているので、その次のシーケンシャル命令であるＡＮＤ命令は、実行されずにキャンセルされる。したがって、バイパス予測が間違っていたとしても問題は生じない。
【００８８】
なお、上記においては、「Ｄステージ」から「Ａステージ」へのデータバイパスが生じる場合について説明したが、「Ｗステージ」から「Ａステージ」へのデータバイパスが生じる場合でも同様の動作になる。
【００８９】
（３）分岐命令でない通常命令で「Ｄステージ」から「Ａステージ」へのバイパスが発生する場合
例えば、上述した図１２に示す命令列がこのプロセッサで実行されたとする。この場合、上述したように第４サイクルでデータバイパスが発生するので、その前のサイクルである第３サイクルで、バイパスセレクトロジック回路３０はセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を確定しておく必要がある。
【００９０】
図２に基づいて、セレクト信号ＳｅｌＲｓ０の生成過程を詳細に説明すると、この例では、セレクト信号生成回路３２Ａの比較ロジック７２において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ａとが等しいかどうかが判断される。ここでは、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒと「Ａステージ」にあるディスティネーションオペランド番号Ｒｄ０Ａとは、ともにレジスタｒ１で等しいので、この比較ロジック７２の出力は１になる。つまり、Ａｄｄ命令とＡＮＤ命令との間に、レジスタｒ１について依存関係があることが検出される。
【００９１】
また、Ａｄｄ命令は、ブランチライクリー命令の次の命令ではないと仮定すると、ブランチディレイスロット情報ＢＤＳ０Ａが０になっており、予測結果フラグＰｒｄＮＴｋｎ１Ａが０になっている。このため、ＮＡＮＤ回路３４の出力は１になる。このように比較ロジックの出力が１であり、且つ、ＮＡＮＤ回路３４の出力も１であるので、ＡＮＤ回路７６の出力が１になる。したがって、フリップフロップ３８Ａのビット０に１が格納される。一方、ＡＮＤ回路７６の出力が１であるので、ＡＮＤ回路８０、８２の一方の入力は０になる。このため、ＡＮＤ回路８０、８２の出力は０になり、フリップフロップ３８Ａのビット１、ビット２に０が格納される。これにより、セレクト信号ＳｅｌＲｓ０が生成され、次の第４サイクルで、フリップフロップ３８Ａからバイパスマルチプレクサ４４に供給される。このビット０が１のセレクト信号ＳｅｌＲｓ０の供給を受けたバイパスマルチプレクサ４４は、バイパスＤＡから入力されているオペランドを選択してＡＬＵ４２に出力する。つまり、これにより、第４サイクルで、「Ｄステージ」から「Ａステージ」へのデータバイパスが行われる。
【００９２】
（４）分岐命令でない通常命令で「Ｗステージ」から「Ａステージ」へのバイパスが発生する場合
例えば、図６に示す命令列がこのプロセッサで実行されたとする。この図６の命令列におけるｎｏｐ命令とは、何も実行しない命令である。この場合、Ａｄｄ命令の結果がレジスタｒ１に格納されるが、このレジスタｒ１が２サイクル後のＳｕｂ命令のソースオペランドとして使用されている。このため、Ｓｕｂ命令の「Ａステージ」においては、レジスタｒ１を「Ｗステージ」からデータバイパスする必要がある。
【００９３】
このように第５サイクルでデータバイパスが発生するので、その前のサイクルである第４サイクルで、バイパスセレクトロジック回路３０はセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を確定しておく必要がある。
【００９４】
図２に基づいて、セレクト信号ＳｅｌＲｓ０の生成過程を詳細に説明すると、この例では、セレクト信号生成回路３２Ａの比較ロジック７２において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ａとが等しいかどうかが判断される。ここでは、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒはレジスタｒ１であり、「Ａステージ」にはディスティネーションオペランド番号Ｒｄ０Ａはレジスタｒ１ではないので、この比較ロジック７２の出力は０になる。このため、ＡＮＤ回路７６の出力は０になり、フリップフロップ３８Ａのビット０に０が格納される。また、ＡＮＤ回路７６の出力が０であるので、ＡＮＤ回路８０、８２の一方の入力には、１が入力される。
【００９５】
一方、比較ロジック７４において、ソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ｄとが等しいかどうかが判断される。ここでは、「Ｒステージ」にあるソースオペランド番号Ｒｓ０Ｒはレジスタｒ１であり、「Ｄステージ」にあるディスティネーションオペランド番号Ｒｄ０Ｄもレジスタｒ１であるので、この比較ロジック７２の出力は１になる。つまり、Ａｄｄ命令とＳｕｂ命令との間に、レジスタｒ１について依存関係があることが検出される。
【００９６】
また、Ａｄｄ命令が、ブランチライクリー命令の次の命令ではないと仮定すると、ブランチディレイスロット情報ＢＤＳ０Ｄは０になっており、予測結果フラグＰｒｄＮＴｋｎ１Ｄも０になっている。このため、ＮＡＮＤ回路３６の出力は１になる。このように比較ロジック７４の出力が１であり、且つ、ＮＡＮＤ回路３６の出力も１であるので、ＡＮＤ回路７８の出力が１になる。したがって、ＡＮＤ回路８０の入力の双方が１になるので、ＡＮＤ回路８０の出力が１になる。このため、フリップフロップ３８Ａのビット１に１が格納される。
【００９７】
一方、ＡＮＤ回路７６の出力が１であるので、ＡＮＤ回路８２の他方の入力は０になる。このため、ＡＮＤ回路８２の出力は０になり、フリップフロップ３８Ａのビット２に０が格納される。これにより、セレクト信号ＳｅｌＲｓ０が生成され、次の第５サイクルで、フリップフロップ３８Ａからバイパスマルチプレクサ４４に供給される。このビット１が１のセレクト信号ＳｅｌＲｓ０の供給を受けたバイパスマルチプレクサ４４は、バイパスＷＡから入力されているオペランドを選択してＡＬＵ４２に出力する。つまり、これにより、第５サイクルで、「Ｗステージ」から「Ａステージ」へのデータバイパスが行われる。
【００９８】
（５）バイパスが発生せずにレジスタファイル２０からのソースオペランドが選択される場合
これは、近接する命令の間にソースオペランドの依存関係がない場合である。この場合、図２に示す比較ロジック７２がソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ａの不一致を検出し、０を出力する。このため、ＡＮＤ回路７６の出力は０になり、フリップフロップ３８Ａのビット０に０が格納される。
【００９９】
また、比較ロジック７４がソースオペランド番号Ｒｓ０Ｒとディスティネーションオペランド番号Ｒｄ０Ｄとの不一致を検出し、０を出力する。このため、ＡＮＤ回路７８の出力が０になり、フリップフロップ３８Ａのビット１に０が格納される。また、ＡＮＤ回路７６の出力が０であり、ＡＮＤ回路７８の出力が０であるので、ＡＮＤ回路８２の双方の入力は１になる。このため、ＡＮＤ回路８２から１が出力され、フリップフロップ３８Ａのビット２に１が格納される。
【０１００】
これにより、セレクト信号ＳｅｌＲｓ０が生成され、次のサイクルで、このセレクト信号ＳｅｌＲｓ０がバイパスマルチプレクサ４４に供給される。このビット２が１のセレクト信号ＳｅｌＲｓ０が供給されたバイパスマルチプレクサ４４は、レジスタファイル２０からのオペランドを選択して、ＡＬＵ４２に出力する。
【０１０１】
以上のように、本実施形態に係るプロセッサは、セレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成するにあたり、予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄを使用し、ブランチユニット５２の分岐条件不成立信号ＮＴｋｎＡ、ＮＴｋｎＤを使用しないこととした。このため、従来のようなセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成する際のタイミングの問題が生じないようにすることができる。
【０１０２】
すなわち、予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄは、命令フェッチユニット１０が事前に確定する値である。このため、バイパスセレクトロジック回路３０は、予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄを、レジスタＲＧ７、ＲＧ８から読み出し、図７に示すように、ＢＮＥＬ命令の「Ａステージ」又は「Ｄステージ」の最初に確定させることができる。このため、バイパスセレクトロジック回路３０は、この早いタイミングで確定した予測結果フラグＰｒｄＮＴｋｎ１Ａ、ＰｒｄＮＴｋｎ１Ｄを用いてセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成することができる。したがって、バイパスセレクトロジック回路３０は、これらセレクト信号ＳｅｌＲｓ０、ＳｅｌＲｔ０、ＳｅｌＲｓ１、ＳｅｌＲｔ１を生成するにあたり、十分な時間を確保することができる。
【０１０３】
【発明の効果】
以上説明したように、本発明に係るプロセッサよれば、バイパスセレクトロジック回路がセレクト信号を生成するにあたり、早いタイミングで確定する予測結果情報に基づいてこのセレクト信号を生成することとしたので、バイパスセレクトロジック回路は、このセレクト信号を生成するのにあたり、十分な時間を確保することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るプロセッサの内部構成の主要部分を示す図。
【図２】図１に示すバイパスセレクトロジック回路の内部構成を示す図。
【図３】図１に示すプロセッサで処理する命令列の一例を示す図。
【図４】図３に示す命令列を分岐が成立するとした予測の下、ブランチライクリー命令であるＢＮＥＬ命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図５】図３に示す命令列を分岐が成立しないとした予測の下、ブランチライクリー命令であるＢＮＥＬ命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図６】「Ｗステージ」から「Ａステージ」へのデータバイパスが発生する命令列の一例を示す図。
【図７】予測結果フラグが確定するタイミングを示すタイミングチャート。
【図８】従来のプロセッサの内部構造の主要部分を示す図。
【図９】パイプライン処理における５つのステージの内容を説明する図。
【図１０】図８に示したプロセッサで処理する通常の条件分岐命令を有する命令列の一例を示す図。
【図１１】図８に示したプロセッサで処理するブランチライクリー命令を有する命令列の一例を示す図。
【図１２】ソースオペランド間に依存関係のある命令が近接している命令列の一例を示す図。
【図１３】図８に示すブランチユニットの内部構成の一例を示す図。
【図１４】図８に示すバイパスセレクトロジック回路の内部構成の一例を示す図。
【図１５】ブランチライクリー命令の条件が成立しないとした予測の下、ブランチライクリー命令であるＢＮＥＬ命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図１６】分岐条件不成立信号とセレクト信号の生成タイミングを説明するタイミングチャート。
【符号の説明】
１０  命令フェッチユニット
２０  レジスタファイル
３０  バイパスセレクトロジック回路
４０  第１パイプライン
４２  ＡＬＵ
５０  第２パイプライン
５２  ブランチユニット
【図１】
0003708022.tif 000002
【図２】
0003708022.tif 000003
【図３】
0003708022.tif 000004
【図４】
0003708022.tif 000005
【図５】
0003708022.tif 000006
【図６】
0003708022.tif 000007
【図７】
0003708022.tif 000008
【図８】
0003708022.tif 000009
【図９】
0003708022.tif 000010
【図１０】
0003708022.tif 000011
【図１１】
0003708022.tif 000012
【図１２】
0003708022.tif 000013
【図１３】
0003708022.tif 000014
【図１４】
0003708022.tif 000015
【図１５】
0003708022.tif 000016
【図１６】
0003708022.tif 000017