(57)【特許請求の範囲】
【請求項１】
オペランドを３以上指定でき、命令のオペランド指定フィールドのどれが処理結果の出力先であるかを命令内で明示的に指定する命令形式を有するパイプライン計算機であって、
命令の同一のオペランド指定フィールドで指定されるオペランドレジスタのレジスタ番号同士のみを比較することによって、レジスタコンフリクトを検出するレジスタコンフリクト検出回路を備えたことを特徴とするパイプライン計算機。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はパイプライン計算機に関する。
プロセサの速度を向上させる手法として、RISC(Reduced Instruction Set Computer)アーキテクチャ、パイプライン処理等が用いられる。これらは、命令の単純化、処理単位の細分化により単位処理（パイプラインステージ）の処理時間を短くするものである。従って、処理単位内のクリティカルパスをできるだけ短くすることが要求されている。
【０００２】
【従来の技術】
最近のアーキテクチャ（特にRISCアーキテクチャ）では多数の演算用レジスタが用意され、主としてこれらの演算用レジスタ間の演算により処理を進める。レジスタ間演算においては演算器の入力となる２つのレジスタ、出力となる１つのレジスタをそれぞれ指定する３オペランド方式が通常採用される。
【０００３】
図４（１）は従来の３オペランド方式の命令フォーマットの例である。命令コード (ＯＰＣ)11 、入力レジスタ指定フィールド (ＯＲ１)12 ,(ＯＲ２)13 ，出力レジスタ指定フィールド (ＯＲ３)14 他よりなる。処理（演算）回路は、命令コード11で指定された処理（演算）を、入力レジスタ指定フィールド12,13 で指定された２つのレジスタから読み出された内容に対して行い、結果を出力レジスタ指定フィールド14で指定されたレジスタにセットする。
【０００４】
図４（２）に示す演算の例により説明する。各レジスタＲ１，Ｒ２，Ｒ３，Ｒ４に、例えばロード命令の結果または他の演算の結果としてそれぞれ値Ａ，Ｂ，Ｃ，Ｄが保持されているとする。ここで図４（２）に示す演算を行うためには、図４（３）に示す命令列を使用する。
【０００５】
図５にパイプライン処理の説明図を示す。パイプラインの処理段階は高速化に伴って、細分化が進み、パイプラインの深さが深くなり、レジスタからの読出と書込みの間隔が大きくなっている。ここではパイプライン・ステージ数ｍ＝６段、レジスタ読出とレジスタ書込みのステージ段差数ｎ＝４としてある。
【０００６】
命令はパイプラインの第１ステージＳ１に投入され、順次ステージを変えて処理される。レジスタ読出はＳ２で行われ、書込みはＳ６で行われるものとする。そしてレジスタの読出と書込みに何の関係もなければ図のようにパイプライン中に順次命令が流され、最大速度で処理される。しかし、前の命令によって処理された結果が出力レジスタにセットされる前に後続命令の入力として使われてしまうと正しい処理が行われないことになる。これがレジスタコンフリクトである。図の命令６のオペランド読出が命令１を含む命令以前の出力レジスタを指定している場合は問題が起きないが、命令２〜命令５の出力レジスタと同じであると正しい結果にならない。従って、演算結果がセットされるレジスタを入力として指定する命令の処理は以前の処理結果が確定しセットされるまで待たせるように制御する。図４（３）で命令１（Ｑ１）で出力レジスタとして指定されたＲ３の値が２つ後の命令３（Ｑ３）で入力として指定され、また命令２（Ｑ２）で出力レジスタとして指定されたＲ６の値が１つ後の命令３（Ｑ３）で入力として指定されている。従って、レジスタ読出とレジスタ書込みのステージ段差数ｎ＞１であればレジスタコンフリクトが発生する。
【０００７】
図６にレジスタコンフリクトが発生する場合を示す。（１）は直ぐ後に続く命令Ｑ２が直前の命令Ｑ１で出力レジスタとして使われたレジスタを読み出すようになっている場合である。Ｑ２はＳ１でＱ１のレジスタ書込みが終わるまで待つように制御（ウエイト制御）される。（２）は４命令後の命令Ｑ５が命令Ｑ１で出力レジスタとして使われたレジスタを読み出す場合である。
【０００８】
この出力レジスタと入力レジスタの番号比較がレジスタのコンフリクト検出である。レジスタのコンフリクト検出は、パイプラインの深さによって確認すべきレジスタの数が増えてくる。
【０００９】
図７にレジスタコンフリクトを検出する回路の例を示す。この場合、レジスタ読出とレジスタ書込みのステージ段差数ｎ＝４であるので、レジスタに書き込む命令Ｑ１の書込みレジスタ指定Ｑ１ＯＲ３と、後に続くＱ２，Ｑ３，Ｑ４の（ｎ−１＝３）命令の入力レジスタ指定Ｑ２ＯＲ１，Ｑ２ＯＲ２〜Ｑ４ＯＲ１，Ｑ４ＯＲ２とを比較する。一致した場合、Ｃ１〜Ｃ１２のいずれかの信号が出る。それにより、パイプラインのウエイト制御を行う。このウエイト制御については色々な方式があり、本発明の直接的な課題ではないので説明は省略する。
【００１０】
図７に示すように、Ｑ１ＯＲ３信号は６つの比較回路の入力（出力先が６）となっており、他の信号は４ないし２であるのに対し最も負荷が重い。
【００１１】
【発明が解決しようとする課題】
すなわち、演算回路の出力となるレジスタのコンフリクト検出回路への出力数が大きく、負荷が重くなる。特にＣＭＯＳ回路では、回路の段数の他に負荷の重さ（出力先の数、配線長）が重要なファクタとなり、回路の遅延時間が長くなる。これがクリティカルパスの１つとなり、全体のクロック周期を長くするという問題がある。
【００１２】
本発明は、レジスタのコンフリクト検出回路を分散して特定の部分に重い負荷が掛からないようにすることにより、クリティカルパスができないようにすることを目的としている。
【００１３】
【課題を解決するための手段】
オペランドを３以上指定できる命令形式のパイプライン計算機において、命令のオペランド指定フィールドのどれが処理結果の出力先であるかを命令内で明示的に指定するように構成する。
【００１４】
図１は実施例の命令フォーマットであり、明示的に指定ができる命令フォーマットの例として、３オペランド命令形式を代表として示す。４つ以上のオペランドがある場合でも同様である。（１）各オペランド指定フィールド毎に入力／出力の指定ビットをもつことでもよいし、（２）各オペランド指定フィールドの内どれが出力オペランドであるかを指定することでもよい。
【００１５】
このように各オペランドの入力／出力を命令内で個別に指定できれば、レジスタの読み出しステージと書込みステージとのステージ数の差以内で連続する命令で書込みレジスタと同じレジスタから読み出す場合に、プログラム上で図２（３）に示すように、書込みレジスタと読込レジスタとが命令の指定フィールドが同じになるようにすることができる。指定フィールドが同じになるようにするにはコンパイラで処理すればよい。このように構成することにより、出力レジスタとして使われたレジスタのコンフリクト検出回路への信号は負荷が少なくてすむのでディレイ時間が少なくなる。従って、クリティカルパスを少なくすることができ、プロセサのクロック周期を短くすることができる。
【００１６】
【発明の実施の形態】
図１は本発明の実施例の命令フォーマットである。（１）は、オペランドのそれぞれが入力であるか、出力となるかを１ビットの入力／出力指定フラグ15a,15b,15c で指定する。（２）は２ビットの出力オペランド指定フィールド15により出力レジスタが３つの内のどれであるかを指定する。以下、図２〜図４を参照して説明する。図２（２）に演算例を示す。これは、図４で説明したものと同じである。図２（３）はそれを書込みレジスタと読込レジスタとが命令の指定フィールドが同じになるようにコンパイラで処理した結果である。
【００１７】
命令１はＡ＋Ｂを演算してレジスタＲ３にセットする。オペランド１の指定フィールド（ＯＲ１）12でＲ３を指定し、入力／出力の指定ビット15a を‘１’〔出力〕に指定する。命令Ｑ３では同じオペランド１の指定フィールド（ＯＲ１）12でＲ３を指定し、入力／出力の指定ビット15a を‘０’〔入力〕に指定する。同様に、命令２はＣ＋Ｄを演算してレジスタＲ６にセットする。命令２で出力、命令３で入力となるレジスタＲ６はオペランド２の指定フィールド13でＲ６と指定し、命令２では入力／出力の指定ビット15b を‘１’〔出力〕に指定し、命令Ｑ３では入力／出力の指定ビット15b を‘０’〔入力〕に指定する。
【００１８】
図６で説明したように、レジスタの読み出しステージと書込みステージとのステージ段数の差より１少ない命令についての指定信号をレジスタコンフリクト検出に使えばよいので、また、出力レジスタと入力レジスタとは必ず命令のおなじフィールドで指定されるので、レジスタコンフリクト検出回路は図３に示すような回路で実現できる。
【００１９】
この図でわかるように、各信号Ｑ１ＯＲ１〜Ｑ４ＯＲ３はいずれも負荷が３ですんでいる。従来方式の図７ではＱ１ＯＲ３信号が負荷６であったのと比べると大幅に減少している。
【００２０】
【発明の効果】
以上説明したように、本発明によればレジスタコンフリクト検出回路の遅延時間を少なくでき、クリティカルパスを少なくできる。結果としてクロック周期を短くできるので、プロセサの速度を速くすることができる。
【図面の簡単な説明】
【図１】  実施例の命令フォーマット
【図２】  実施例の命令の指定例
【図３】  実施例のレジスタコンフリクト検出回路
【図４】  レジスタ指定の説明図
【図５】  パイプライン処理の説明図
【図６】  同  レジスタコンフリクトが発生する場合
【図７】  従来のレジスタコンフリクト検出回路
【符号の説明】
11  命令コード
12  オペランド指定フィールド１
13  オペランド指定フィールド２
14  オペランド指定フィールド３
15  出力オペランド指定フィールド
15a 15b 15c   入力／出力指定フラグ
【図１】
0003658879.tif 000002
【図２】
0003658879.tif 000003
【図３】
0003658879.tif 000004
【図４】
0003658879.tif 000005
【図５】
0003658879.tif 000006
【図６】
0003658879.tif 000007
【図７】
0003658879.tif 000008