(57)【特許請求の範囲】
【請求項１】
命令を、命令の解読ステージ、オペランドのアドレス計算ステージ、オペランドの読み出しステージ、該オペランドを使用しての演算のステージを含むパイプラインで処理を行なう情報処理装置であって、メモリから先読みした命令を格納する命令バッファと、前記命令バッファから読み出される複数の命令を格納する第１の命令レジスタと、前記解読ステージに先行する命令フェッチステージで前記第１の命令レジスタの複数の命令を解読する第１の命令デコーダと、前記第１の命令レジスタに格納された命令を逐次格納する命令フローレジスタと、前記第１の命令レジスタ、または前記命令フローレジスタの出力する命令を格納する第２の命令レジスタと、前記第２の命令レジスタに格納された命令を解読する第２の命令デコーダと、前記オペランドを使用しての演算を行なう演算器を備え、前記第２の命令デコーダは、前記解読ステージで前記第２の命令レジスタに格納された命令を解読し、前記アドレス計算ステージへ命令を転送するよう構成され、前記第１の命令デコーダは分岐命令を解読すると、前記メモリに対し、当該分岐命令の分岐先命令の読み出し要求をすることを特徴とする情報処理装置。
【請求項２】
更に、第１の命令レジスタの命令が有効のとき第１の値を取る第１のレジスタ有効識別子と、前記命令フローレジスタに空きがあるとき第１の値を取るセット信号ラッチと、前記第１のレジスタ有効識別子が第１の値であり、前記セット信号ラッチが第１の値であるとき、前記第１の命令レジスタに格納されている命令を前記命令フローレジスタに格納せしめる制御回路とを有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
命令を、命令の解読ステージ、オペランドのアドレス計算ステージ、オペランドの読み出しステージ、該オペランドを使用しての演算のステージを含むパイプラインで処理を行なう情報処理装置であって、メモリから先読みした命令を格納する命令バッファと、前記命令バッファから読み出される複数の命令を格納する第１の命令レジスタと、前記解読ステージに先行する命令フェッチステージで前記第１の命令レジスタの複数の命令を解読する第１の命令デコーダと、前記第１の命令レジスタに格納された命令を逐次格納する命令フローレジスタと、前記命令フローレジスタの出力する命令を格納する第２の命令レジスタと、前記第２の命令レジスタに格納された命令を解読する第２の命令デコーダと、前記オペランドを使用しての演算を行なう演算器を備え、前記第２の命令デコーダは、前記解読ステージで前記第２の命令レジスタに格納された命令を解読し、前記アドレス計算ステージへ命令を転送するよう構成され、前記第１の命令デコーダは分岐命令を解読すると、前記メモリに対し、当該分岐命令の分岐先命令の読み出し要求をすることを特徴とする情報処理装置。
【請求項４】
命令を、命令の解読ステージ、オペランドのアドレス計算ステージ、オペランドの読み出しステージ、該オペランドを使用しての演算のステージを含むパイプラインで処理を行なう命令のパイプライン処理装置を持った情報処理装置であって、命令キャッシュと、前記キャッシュから先読みした命令を格納する命令バッファと、前記命令バッファから前記パイプライン処理装置の１マシンサイクルで複数の命令を読み出すレジスタと、前記解読ステージに先行する命令フェッチステージで読み出された複数の命令を解読し、分岐命令が解読されたとき前記命令キャッシュに分岐先命令の先取りを要求する第１の命令デコーダと、前記命令バッファから読み出された命令を命令実行のためデコードする第２の命令デコーダと、オペランドキャッシュと、前記オペランドキャッシュから読み出した前記オペランドを使用しての演算を行なう演算器を有し、前記第２の命令デコーダは、前記解読ステージで前記第２の命令レジスタに格納された命令を解読し、前記アドレス計算ステージへ命令を転送するよう構成され、かつ前記命令バッファから１マシンサイクルで読み出す命令数が前記第２の命令デコーダで１マシンサイクル当たりデコードする平均命令数より大きいことを特徴とする情報処理装置。
【請求項５】
命令を、命令の解読ステージ、オペランドのアドレス計算ステージ、オペランドの読み出しステージ、該オペランドを使用しての演算のステージを含むパイプラインで処理を行なう命令のパイプライン処理装置を持ったもので、第１、第２の命令デコーダ、先読みした命令を格納する命令バッファ、命令バッファから読み出された命令を一時格納する命令フローレジスタを持った情報処理装置であり、複数の命令を前記パイプライン処理装置の１マシンサイクルで読み出し、前記解読ステージに先行する命令フェッチステージで前記第１の命令デコーダで前記読み出した命令を解読し、解読の結果分岐命令があれば、分岐先命令を前記命令バッファに先取りさせ、前記読み出した命令を前記命令フローレジスタへ転送する命令フェッチ回路と、前記命令フェッチステージに引き続いて設けられ、前記命令フローレジスタの命令を前記解読ステージにおいて前記第２の命令デコーダで解読し前記アドレス計算ステージへ命令を転送するデコード回路と、オペランドキャッシュと、前記オペランドキャッシュから読み出した前記オペランドを使用しての演算を行なう演算器を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン方式の情報処理装置に係り、特に、分岐命令を効率的に実行することを可能にした情報処理装置に関する。
【０００２】
【従来の技術】
図４は従来技術によるパイプライン方式の情報処理装置の命令レジスタおよび命令デコーダ部分の構成例を示すブロック図、図５は命令レジスタ、命令デコーダを含む情報処理装置の構成例を示すブロック図、図６は分岐命令を含む命令群の流れの一例を示す図、図７は図６に示す命令列における動作を説明するタイミングチャートである。以下図４〜図７を参照して従来技術による情報処理装置について説明する。
【０００３】
図４において、１００はメモリの写しを持つ命令キャッシュ、２００は命令キャッシュから読み出した複数の命令を保持する命令バッファ（ＩＢＲ）、１２００は次に実行する命令を保持する第１命令レジスタ（ＩＲＰ）、１３００はＩＲＰ１２００に続く命令を保持する第２命令レジスタ（ＩＲＳ）、１５００はＩＲＰ１２００に保持されている命令が有効であることを示す識別子（ＩＲＰＶ）、１６００はＩＲＳ１３００に保持されている命令が有効であることを示す識別子（ＩＲＳＶ）、３００はＩＢＲ２００、ＩＲＰ１２００、ＩＲＳ１３００、ＩＲＰＶ１５００およびＩＲＳＶ１６００の制御を行うＩＢＲ制御回路、１７００はＩＲＰ１２００およびＩＲＳ１３００に保持された命令を解読する命令デコーダである。
【０００４】
命令キャッシュ１００から読み出された複数の命令はＩＢＲ２００に保持される。次に実行される命令がＩＢＲ２００から切り出されＩＲＰ１２００にセットされる。また、ＩＲＰ１２００にセットされた命令の次の命令も同時にＩＢＲ２００から切り出されＩＲＳ１３００にセットされる。
【０００５】
一般に高性能な情報処理装置では複数の命令を同時に処理するスーパスカラ方式を採用している。ＩＢＲ制御回路３００ではＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ処理可能な命令組み合わせか否かを判断する。ＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ処理可能な命令組み合わせの場合，両方の命令が有効であることを示すために、ＩＢＲ制御回路３００はＩＲＰＶ１５００およびＩＲＳＶ１６００に'１'をセットする。ＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ不可な命令組み合わせの場合、またはＩＲＰ１２００にセットされた命令の次の命令がまだＩＢＲ２００に格納されていない場合、ＩＢＲ制御回路３００はＩＲＰＶ１５００にのみ'１'をセットする。
【０００６】
ＩＲＰ１２００にセットされる命令がまだＩＢＲ２００に格納されていない場合、ＩＢＲ制御回路３００はＩＲＰＶ１５００およびＩＲＳＶ１６００に'０'をセットする。また、ＩＢＲ制御回路３００は次に実行する命令の切り出しをＩＢＲ２００に対して要求する。このとき、ＩＲＰＶ１５００とＩＲＳＶ１６００の両方が'１'の場合はＩＲＳ１３００にセットされた命令の次命令からの切り出しを要求し、ＩＲＰＶ１５００のみ'１'の場合はＩＲＰ１２００にセットされた命令の次命令からの切り出しを要求する。また、ＩＢＲ２００に空きが生じた場合、ＩＢＲ制御回路３００は命令キャッシュ１００に対して命令の読み出しを要求する。
【０００７】
命令デコーダ１７００はＩＲＰ１２００，ＩＲＳ１３００に格納されている命令を解読する。
ＩＲＰ１２００またはＩＲＳ１３００に分岐命令が解読された場合、命令デコーダ１７００は命令キャッシュ１００に対して分岐先命令の命令読み出しを要求する。
【０００８】
次に図５で従来技術による情報処理装置の各パイプラインにおける処理について説明する。
図５において、１００は命令キャッシュ、２００はＩＢＲ、１２００はＩＲＰ、１３００はＩＲＳ、１７００は命令デコーダ、２０００は例えば１６本のレジスタ群で構成される汎用レジスタ、２１００は命令デコーダ１７００での解読結果によりオペランドアドレス計算のために指定された汎用レジスタ２０００の内容と命令により指定された変位値から命令の演算実行に必要なメモリオペランドのアドレスを計算するオペランド用アドレス加算器、２２００はメモリの写しを持つオペランドキャッシュ、２３００はオペランドキャッシュ２２００から読み出したデータのうち演算に使用する部分を先頭に並び替えるアライナ、２４００はアライナ２３００で並び替えを実施した後のメモリオペランドと、命令デコーダ１７００での解読結果により演算のために指定された汎用レジスタ２０００の内容で演算を行う演算器である。
【０００９】
ＤステージではＩＲＰ１２００およびＩＲＳ１３００にセットされた命令を命令デコーダ１７００で同じステージ内で解読する。命令の解読結果により汎用レジスタ２０００の指定された番号のレジスタを読み出し、オペランド用アドレス加算器２１００に転送する。また、別の解読結果である変位値もオペランド用アドレス加算器２１００に転送する。
【００１０】
Ａステージでは指定された汎用レジスタの内容と変位値よりオペランド用アドレス加算器２１００でアドレス計算を行い、命令の演算実行に必要なメモリオペランド格納先のオペランドアドレスを計算する。オペランド用アドレス加算器２１００により求めたオペランドアドレスはオペランドキャッシュ２２００に転送される。
【００１１】
Ｔステージではオペランドキャッシュの参照を実施する。オペランドキャッシュの読み出しデータはアライナ２３００に転送される。
【００１２】
Ｂステージではオペランドキャッシュ２２００からの読み出しデータの並べ替えを行い、オペランドデータが順序通りに配列されるようになされる。
【００１３】
Ｌステージで演算器に転送する。
Ｅステージではアライナ２２００からのメモリオペランドと汎用レジスタ２０００からのレジスタオペランドを使用して演算を行う。演算結果は汎用レジスタ２０００に書き込まれる。
このように、命令はＤ，Ａ，Ｔ，Ｂ，Ｌ，Ｅの６つのパイプラインステージに分解して実行される。
【００１４】
次に分岐命令を含む命令列についての一連の処理について説明する。
図６に示す命令列においてＬはロード命令、Ａは加算命令、ＳＴはストア命令、Ｃは比較命令、ＢＣは条件分岐命令を示す。また，ＧＲ１〜ＧＲ４は命令の演算に使用する汎用レジスタの番号を示し、ｔｅｓｔ１〜ｔｅｓｔ６およびｐｒ１は各々メモリ上の領域を示すラベルである。
【００１５】
図６に示す一連の命令列を実行するときのタイミングチャートを図７に示す。図７において横軸は時間を表わし，一目盛が１マシンサイクルを示している。横軸に示す１〜２１の数字は説明に使うために便宜上付けたサイクル数である。以下、図６に示す命令列の処理を図５および図７で説明する。
【００１６】
サイクル２でＬ命令がＩＲＰ１２００にセットされる。このときＩＲＳ１３００にはＬ命令の次のＡ命令がセットされるが、Ｌ命令もＡ命令もメモリオペランド参照が必要であるため、オペランド用アドレス加算器２１００／オペランドキャッシュ２２００の競合によりスーパスカラ処理は実施できない。従って、サイクル２ではＬ命令のみが解読され、以降、サイクル３でアドレス計算、サイクル４でオペランドキャッシュ参照、サイクル５で読み出しデータのアライン、サイクル６で演算器２４００に転送、サイクル７で演算を実行する。以下、Ａ命令、ＳＴ命令、Ｌ命令、Ａ命令、ＳＴ命令、Ｌ命令と同様に処理される。
【００１７】
次にサイクル９でＣ命令がＩＲＰ１２００にセットされる。このとき同時にＩＲＳ１３００にはＢＣ命令がセットされる。ＢＣ命令はオペランド用アドレス加算器２１００／オペランドキャッシュ２２００を使用しないためＣ命令とのスーパスカラ処理が可能である。従って、ＢＣ命令はサイクル９で命令の解読が行われ、命令キャッシュ１００に対して分岐先命令の読み出し要求を行う。サイクル１０からサイクル１２で命令キャッシュ１００の読み出しおよびＩＢＲ２００への命令の格納が行われ、サイクル１３に分岐先命令であるＬ命令がＩＲＰ１２００にセットされる。以下、Ａ命令、ＳＴ命令と順次処理され、ＳＴ命令の実行はサイクル２０で完了する。
【００１８】
前述した従来技術による情報処理装置は，分岐命令の解読を待ってから分岐先命令の命令読み出しを始めるため、分岐先の命令の解読を開始するまでの間に３サイクルの空きが生じる。即ち、一般に分岐命令が発生すると、分岐先命令読み出しが完了するまで分岐先命令の解読を開始することができず、このため分岐命令以降の命令の演算実行が遅れることになるという問題が発生する。
【００１９】
こうしたパイプライン処理における分岐命令の出現における処理の乱れ、（遅れ）については種々の改善案が提案されてきている。例えば、特開平７−２３９７８１号公報がある。しかしながら、これは、いずれも実行の為の命令のデコード処理に応答した高速化の工夫がなされている。
【００２０】
【発明が解決しようとする課題】
以上のような従来の技術においては、パイプライン処理における分岐命令の出現に対し、処理の遅れが避けられない、分岐先命令のアドレスを記憶するためのバッファメモリなどの大きな物量が必要などの課題が残っている。
【００２１】
本発明の目的は，前述した従来技術の問題を解決し，分岐命令が発生した場合においても、分岐先命令読み出しのための遅れを極力減じてパイプライン処理、即ち、命令の解読および演算実行などを進めることのできる情報処理装置を提供することにある。
【００２２】
【課題を解決するための手段】
本発明の命令先取り方式は、命令の解読を２つのステージに分け、第１の命令解読ステージでは第１の命令デコーダにより、命令バッファから読み出した命令を１マシンサイクルあたりに複数の命令の解読を行い、また、第１の命令解読ステージでは、分岐命令を解読した場合メモリに対して命令バッファへの当該分岐命令の分岐先命令読み出し要求を行い、そして前記命令を第２の命令解読ステージにおいて第２の命令デコーダにより順次実行のため解読するものである。
【００２３】
【発明の実施の形態】
本実施形態ではパイプラインを実質的に２本持つスーパースカラ処理装置を対象にしている。但し、従来の技術で述べたように、オペランドキャッシュを２命令分同時にアクセスすることは出来ないので、そうではない条件が成立したときにのみ２つの命令が併行して実行される。説明する実施形態はスーパースカラ処理装置であるが、本発明はスカラ処理装置にも同様に適用することが出来る。
【００２４】
また、本実施形態は分岐成立を前提とした時のパイプライン処理を例にしたものであり、これに分岐予測などの技術を組み合わせてもよい。さらに、本実施形態では、命令キャッシュとオペランドキャッシュと（それぞれメインメモリの写しを格納するメモリである）を別に構成している。命令キャッシュ、オペランドキャッシュは命令、オペランドを含むキャッシュメモリに置き換え得る。
【００２５】
以下、本発明による情報処理装置の一実施形態を図面により詳細に説明する。
【００２６】
図１は本発明の一実施形態によるパイプライン方式の情報処理装置の命令レジスタおよび命令デコーダ部分の構成例を示すブロック図、図２は命令レジスタ、命令デコーダを含む情報処理装置の構成例を示すブロック図、図３は図６に示す命令列における動作を説明するタイミングチャートである。以下、図１〜図３を参照して本発明による情報処理装置について説明する。
【００２７】
図１において１００はメモリの写しを持つ命令キャッシュ、２００は命令キャッシュから読み出した複数の命令を保持する命令バッファ（ＩＢＲ）、４００は第１の命令解読ステージで次に解読する命令を保持する第１分岐命令レジスタ（ＢＩＲＰ）、５００はＢＩＲＰ４００に続く命令を保持する第２分岐命令レジスタ（ＢＩＲＳ）、６００はＢＩＲＰ４００およびＢＩＲＳ５００に命令をセットするセット信号ラッチ（ＳＥＴＢＩＲＤ）、７００はＢＩＲＰ４００に保持されている命令が有効であることを示す識別子（ＢＩＲＰＶ）、８００はＢＩＲＳ５００に保持されている命令が有効であることを示す識別子（ＢＩＲＳＶ）、３００はＩＢＲ２００、ＢＩＲＰ４００、ＢＩＲＳ５００、ＳＥＴＢＩＲＤ６００、ＢＩＲＰＶ７００およびＢＩＲＳＶ８００を制御するＩＢＲ制御回路、９００はＢＩＲＰ４００およびＢＩＲＳ５００に保持された命令を解読する第１命令デコーダ、１０００はＢＩＲＰ４００およびＢＩＲＳ５００にセットされた命令を逐次格納する命令フローレジスタ（ＩＦＲ）であり、例えば８命令分保持することのできるレジスタ群である。
【００２８】
１０１０はＢＩＲＰ４００の出力とＩＦＲ１０００の出力を選択する選択回路、１２００は第２の命令解読ステージで次に解読する命令を保持する第１命令レジスタ（ＩＲＰ）、１３００はＩＲＰ１２００に続く命令を保持する第２命令レジスタ（ＩＲＳ）、１５００はＩＲＰ１２００に保持されている命令が有効であることを示す識別子（ＩＲＰＶ）、１６００はＩＲＳ１３００に保持されている命令が有効であることを示す識別子（ＩＲＳＶ）、１１００はＩＦＲ１０００、選択回路１０１０、ＩＲＰ１２００、ＩＲＳ１３００、ＩＲＰＶ１５００およびＩＲＳＶ１６００を制御するＩＦＲ制御回路、１７００はＩＲＰ１２００およびＩＲＳ１３００に保持された命令を解読する第２命令デコーダである。
【００２９】
選択回路１０１０はＩＦＲ１０００に命令が存在しないときに、ＩＦＲ１０００をバイパスしてＢＩＲＰ４００の命令をＩＲＰ１２００に格納するためのものであるが、ある場合には空きサイクルが出ても良いとする設計思想のもとに常にＩＦＲ１０００を経由する方式とすれば持たなくとも構わない。また、本実施形態ではステージの時間的制約上ＢＩＲＳ５００からＩＲＳ１３００へ至る経路に選択回路を持たせなかったが、設計態様によってはここにも選択回路を持たせることも有り得る。また、第１分岐命令レジスタ（ＢＩＲＰ）４００、第２分岐命令レジスタ（ＢＩＲＳ）５００と物理的に分離した２つのレジスタとして例示してあるが、要は１サイクルに複数の命令の読み出しとデコードが可能であれば良いのであって、必要な書き込み、読み出しが出来るものであれば一体のレジスタであっても良く、これを機能的に第１、第２の分岐命令レジスタと呼んでも良い。
【００３０】
命令キャッシュ１００から読み出された複数の命令はＩＢＲ２００に保持される。次に解読される命令がＩＢＲ２００から切り出され、ＢＩＲＰ４００にセットされる。また，ＢＩＲＰ４００にセットされた命令の次の命令も同時にＩＢＲ２００から切り出されＢＩＲＳ５００にセットされる。ＩＢＲ制御回路３００ではＢＩＲＰ４００とＢＩＲＳ５００にセットされた命令が有効か否かを判断する。有効とはレジスタ内に命令全体が格納されていることを示す。ＢＩＲＰ４００とＢＩＲＳ５００にセットされた命令が両方とも有効な命令である場合、両方の命令が有効であることを示すために、ＩＢＲ制御回路３００はＢＩＲＰＶ７００およびＢＩＲＳＶ８００に'１'をセットする。
【００３１】
ＢＩＲＰ４００にセットされた命令の次の命令がまだＩＢＲ２００に格納されていない場合、ＩＢＲ制御回路３００はＢＩＲＰＶ７００にのみ'１'をセットする。ＢＩＲＰ４００にセットされる命令がまだＩＢＲ２００に格納されていない場合、ＩＢＲ制御回路３００はＢＩＲＰＶ７００およびＢＩＲＳＶ８００に'０'をセットする。また、ＩＢＲ制御回路３００は次に実行する命令の切り出しをＩＢＲ２００に対して要求する。このとき、ＢＩＲＰＶ７００とＢＩＲＳＶ８００の両方が'１'の場合はＢＩＲＳ５００にセットされた命令の次命令からの切り出しを要求し、ＢＩＲＰＶ７００のみ'１'の場合はＢＩＲＰ４００にセットされた命令の次命令からの切り出しを要求する。また、ＩＢＲ２００に空きが生じた場合、ＩＢＲ制御回路３００は命令キャッシュ１００に対して命令の読み出しを要求する。
【００３２】
第１命令デコーダ９００はＢＩＲＰ４００、ＢＩＲＳ５００に格納されているＢＩＲＰＶ７００、ＢＩＲＳＶ８００で有効とされた命令を解読する。ＢＩＲＰ４００またはＢＩＲＳ５００に分岐命令が解読された場合、第１命令デコーダ９００は命令キャッシュ１００に対して分岐先命令の命令読み出しを要求する。ＢＩＲＰ４００およびＢＩＲＳ５００にセットされた命令はＩＦＲ１０００に逐次格納される。このとき、ＩＦＲ１０００に対する命令の格納はＩＦＲ制御回路１１００の制御により、ＳＥＴＢＩＲＤ６００が'１'（即ち、ＩＦＲ１０００に空きがある）かつＢＩＲＰＶ７００が'１'かつＢＩＲＳＶ８００が'１（即ち、それぞれの命令が有効に揃っている）ならば、ＢＩＲＰ４００にセットされた命令とＢＩＲＳ５００にセットされた命令の両方をＩＦＲ１０００に格納する。また，ＳＥＴＢＩＲＤ６００が'１'かつＢＩＲＰＶ７００が'１'かつＢＩＲＳＶ８００が'０'ならば、ＢＩＲＰ４００にセットされた命令のみをＩＦＲ１０００に格納する。また、ＳＥＴＢＩＲＤ６００が'１'かつＢＩＲＰＶ７００が'０'かつＢＩＲＳＶ８００が'０'またはＳＥＴＢＩＲＤ６００が'０（即ち、ＩＦＲ１０００に空きがない）ならば、ＩＦＲ１０００に対して命令の格納は行われない。
【００３３】
選択回路１０１０はＩＦＲ制御回路１１００からの指示に従い、ＩＦＲ１０００に命令が存在しない場合はＢＩＲＰ４００の出力を選択し、ＩＦＲ１０００に命令が存在する場合はＩＦＲ１０００の第１出力を選択する（選択回路については先に述べた通りである）。ＩＦＲ１０００の第１出力にはＩＦＲ１０００に格納されている命令の内、最も最初に格納された命令、即ち、次に解読される命令が出力される。また、ＩＦＲ１０００の第２出力には第１出力に出力される命令の次の命令が出力される。選択回路１０１０の出力，即ち次に解読される命令がＩＲＰ１２００にセットされる。また、ＩＲＰ１２００にセットされた命令の次の命令も同時にＩＦＲ１０００から切り出され、ＩＦＲ１０００の第２出力を経由しＩＲＳ１３００にセットされる。
【００３４】
ＩＦＲ制御回路１１００ではＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ処理可能な命令組み合わせか否かを判断する。この判断はオペランドキャッシュというメモリからの読み出しに競合が生じるかどうかで行なわれる。ＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ処理可能な命令組み合わせの場合、ＩＦＲ制御回路１１００はＩＲＰＶ１５００およびＩＲＳＶ１６００に'１'をセットする。
【００３５】
ＩＲＰ１２００とＩＲＳ１３００にセットされた命令の組み合わせがスーパスカラ処理不可な命令組み合わせの場合、またはＩＲＰ１２００にセットされた命令の次の命令がまだＩＦＲ１０００に格納されていない場合、ＩＦＲ制御回路１１００はＩＲＰＶ１５００にのみ'１'をセットする。ＩＲＰ１２００にセットされる命令がまだＩＢＲ２００に格納されていない場合、ＩＦＲ制御回路１１００はＩＲＰＶ１５００およびＩＲＳＶ１６００に'０'をセットする。また、ＩＦＲ制御回路１１００は次に実行する命令の切り出しをＩＦＲ１０００に対して要求する。このとき、ＩＲＰＶ１５００とＩＲＳＶ１６００の両方が'１'の場合はＩＲＳ１３００にセットされた命令の次命令からの切り出しを要求し、ＩＲＰＶ１５００のみ'１'の場合はＩＲＰ１２００にセットされた命令の次命令からの切り出しを要求する。
【００３６】
また、ＩＦＲ制御回路１１００はＩＦＲ１０００の８命令分のレジスタが全て使用中であることを検出すると、ＩＢＲ制御回路３００に対してＢＩＲＰ４００およびＢＩＲＳ５００への命令のセットを抑止する要求を発行する。ＢＩＲＰ４００およびＢＩＲＳ５００への命令のセットが抑止されるとＳＥＴＢＩＲＤ６００が'０'となり、ＩＦＲ１０００に対して命令の格納が行われないため、ＩＦＲ１０００に解読されていない命令が残っている状態で、上書きされることはない。そして、第２命令デコーダ１７００はＩＲＰ１２００、ＩＲＳ１３００に格納されている命令を解読する。
【００３７】
次に図２で本発明による情報処理装置の各パイプラインにおける処理について説明する。
図２において、１００は命令キャッシュ、２００はＩＢＲ、４００はＢＩＲＰ、５００はＢＩＲＳ、９００は第１命令デコーダ、１０００はＩＦＲ、１０１０は選択回路、１２００はＩＲＰ、１３００はＩＲＳ、１７００は第２命令デコーダ、２０００は汎用レジスタ、２１００は第２命令デコーダ１７００での解読結果によりオペランドアドレス計算のために指定された汎用レジスタ２０００の内容と命令により指定された変位値から命令の演算実行に必要なメモリオペランドのアドレスを計算するオペランド用アドレス加算器、２２００はメモリの写しを持つオペランドキャッシュ、２３００はオペランドキャッシュ２２００から読み出したデータのうち演算に使用する部分を先頭に並び替えるアライナ、２４００はアライナ２３００で並び替えを実施した後のメモリオペランドと、命令デコーダ１７００での解読結果により演算のために指定された汎用レジスタ２０００の内容で演算を行う演算器である。
【００３８】
命令フェッチステージであるＩＦステージではＢＩＲＰ４００およびＢＩＲＳ５００にセットされた命令を第１命令デコーダ９００で解読する。第１命令デコーダ９００で分岐命令が解読されると命令キャッシュ１００に対して分岐先命令の命令読み出し要求が発行される。ＢＩＲＰ４００およびＢＩＲＳ５００にセットされた命令はＩＦＲ１０００に格納される。また、ＢＩＲＰ４００にセットされた命令は選択回路１０１０にも転送される。このように、第１の命令解読ステージであるＩＦステージでは１マシンサイクルあたり２命令ずつ解読し、第２の命令解読ステージであるＤステージに命令を転送する。ここで、ＩＦステージを遂行する回路を命令フェッチ回路と呼ぶこととする。
【００３９】
第２の命令解読ステージであるＤステージではＩＲＰ１２００およびＩＲＳ１３００にセットされた命令を第２命令デコーダ１７００で解読する。このとき、第２命令デコーダで同時に２命令解読できる組み合わせは、両方の命令がメモリオペランド参照を必要とするとき以外である。即ち、２つの命令の内、少なくとも片方の命令はメモリオペランド参照を必要としないレジスタ−レジスタ間演算命令もしくは分岐命令のときに、２命令同時に解読することが可能である。一般にはメモリオペランド参照を必要とする命令の出現頻度が高いため、第２の命令解読ステージであるＤステージでは平均的にみると１マシンサイクルあたり２命令ずつの解読はできない。また，Ｄステージでは命令の解読結果により汎用レジスタ２０００の指定された番号の汎用レジスタを読み出し、オペランド用アドレス加算器２１００に転送する。また、別の解読結果である変位値もオペランド用アドレス加算器２１００に転送する。ここで、Ｄステージを遂行する回路をデコード回路と呼ぶ事とする。
【００４０】
Ａステージでは指定された汎用レジスタの内容と変位値よりオペランド用アドレス加算器２１００でアドレス計算を行い、命令の演算実行に必要なメモリオペランド格納先のオペランドアドレスを計算する。オペランド用アドレス加算器２１００により求めたオペランドアドレスはオペランドキャッシュ２２００に転送される。
【００４１】
Ｔステージではオペランドキャッシュの参照を実施する。オペランドキャッシュの読み出しデータはアライナ２３００に転送される。
【００４２】
Ｂステージではオペランドキャッシュ２２００からの読み出しデータの並べ替えを行い、Ｌステージで演算器に転送する。
【００４３】
Ｅステージではアライナ２２００からのメモリオペランドと汎用レジスタ２０００からのレジスタオペランドより演算を行う。演算結果は汎用レジスタ２０００に書き込まれる。
このように、命令はＩＦ，Ｄ，Ａ，Ｔ，Ｂ，Ｌ，Ｅの７つのパイプラインステージに分解して実行される。
【００４４】
次に分岐命令を含む命令列についての一連の処理について説明する。
図６に示す一連の命令列を実行するときのタイミングチャートを図３に示す。図３において横軸は時間を表わし、一目盛が１マシンサイクルを示している。横軸に示す１〜２１の数字は説明に使うために便宜上付けたサイクル数である。
【００４５】
以下、図６に示す命令列の処理を図２および図３で説明する。
サイクル１にＬ命令がＢＩＲＰ４００に，Ａ命令がＢＩＲＳ５００にセットされる。サイクル１にＢＩＲＰ４００およびＢＩＲＳ５００にセットされた命令は第１命令デコーダ９００で解読されるとともにＩＦＲ１０００に転送される。また、サイクル１ではＩＦＲ１０００に命令が格納されていないため、選択回路１０１０ではＢＩＲＰ４００の出力が選択される。
【００４６】
サイクル２ではＳＴ命令およびＬ命令が各々ＢＩＲＰ４００、ＢＩＲＳ５００にセットされ、第１命令デコーダ９００で解読されるとともにＩＦＲ１０００に転送される。
以降、サイクル３でＡ命令とＳＴ命令が、サイクル４でＬ命令とＣ命令がＢＩＲＰ４００およびＢＩＲＳ５００にセットされ，第１命令デコーダ９００で解読されるとともにＩＦＲ１０００に転送される。
【００４７】
次にサイクル５でＢＣ命令がＢＩＲＰ４００にセットされ、ＩＦＲ１０００に転送される。第１命令デコーダ９００はＢＩＲＰ４００にセットされたＢＣ命令が分岐命令であることを解読すると、命令キャッシュ１００に対して分岐先命令の読み出し要求を行う。サイクル６からサイクル８で命令キャッシュ１００の読み出しおよびＩＢＲ２００への命令の格納が行われる。（即ち、ここでは命令キャッシュ１００からＩＢＲ２００への命令の格納に３マシンサイクル掛かるとしている。）従って、ＢＣ命令の分岐先命令であるＬ命令およびＡ命令はサイクル９でＢＩＲＰ４００およびＢＩＲＳ５００にセットされる。これは第１命令デコーダ９００で解読されるとともにＩＦＲ１０００と選択回路１０１０にもに転送される。そして、サイクル１０ではＳＴ命令がＢＩＲＰ４００にセットされ、第１命令デコーダ９００で解読されるとともにＩＦＲ１０００に転送される。
【００４８】
このように、ＩＦステージでは毎サイクル２命令ずつ解読し、逐次ＩＦＲ１０００に命令を転送する。一方、サイクル２ではＬ命令が選択回路１０１０で選択されＩＲＰ１２００にセットされる。このときＩＲＳ１３００にはＬ命令の次のＡ命令はまだＩＦＲに転送中のためセットされない。従って，サイクル２ではＬ命令のみが解読される。以降、サイクル３でアドレス計算、サイクル４でオペランドキャッシュ参照、サイクル５で読み出しデータのアライン、サイクル６で演算器２４００に転送、サイクル７で演算を実行する。以下、Ａ命令、ＳＴ命令、Ｌ命令、Ａ命令、ＳＴ命令、Ｌ命令と同様に処理される。
【００４９】
次にサイクル９でＣ命令がＩＲＰ１２００にセットされる。このとき同時にＩＲＳ１３００にはＢＣ命令がセットされる。ＢＣ命令はオペランド用アドレス加算器２１００、オペランドキャッシュ２２００を使用しないためＣ命令とのスーパスカラ処理が可能である。従って、ＢＣ命令はサイクル９で第２命令デコーダ１７００での解読が行われる。サイクル１０でＢＣ命令の分岐先命令であるＬ命令がＩＲＰ１２００にセットされる。この時はＩＦＲ１０００からのＩＲＰ１２００のセットに１マシンサイクル余分にかかってしまうので選択回路１０１０を通してＩＲＰ１２００にセットされている。即ち、空きサイクルなしに分岐先命令のデコードのステージに入ることが出来ている。
【００５０】
ＢＩＲＰ４００，ＢＩＲＳ５００へのＩＦとデコードステージＤとの間にもう１つのマシンサイクルの差があればＩＦＲ１０００からの命令をＩＲＰ１２００にセットすることが出来る。一般にはＩＦＲ１２００からの命令のセットが多い。これはどういう命令列になっているのかということに依存するもので、図６に説明のため例示した命令列の場合に上述したようになったということである。
以下、Ａ命令、ＳＴ命令と順次処理され、ＳＴ命令の実行はサイクル１７で完了する。
【００５１】
このように本実施形態では分岐先命令の先行読み出しが容易に出来、空きサイクルなしに分岐先命令のデコードが実施出来る。
【００５２】
以上の実施形態では第１の命令デコーダで２命令ずつデコードし、第２の命令デコーダでは前述したようにスーパースカラでも命令の実行は必ずしも２命令ずつ行なわれないから平均すれば２命令より小さな数の命令ずつ実行のためデコードされることになっている。また、スカラ計算機の場合は平均は１命令デコード／サイクルを超えない。このように、分岐先命令の先取りのため、第１のデコーダの１サイクルでの先行命令デコード数は、１サイクルでの命令実行デコード数より大きいという関係を保っている。これによって、分岐先命令の先取りを可能にしている。
【００５３】
以上，本発明を実施形態に基づいて説明したが，本発明は前述した実施形態に限定されるものではなく，その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００５４】
【発明の効果】
以上、説明したように本発明によれば、分岐命令が発生した場合においても、分岐命令以降の命令の解読および演算の実行が遅れることを改善して，命令列の効率的な処理を行うことができる。
【図面の簡単な説明】
【図１】本発明の一実施形態によるパイプライン方式の情報処理装置の命令レジスタおよび命令デコーダ部分の構成例を示すブロック図。
【図２】本発明の一実施形態による命令レジスタおよび命令デコーダ部分を含む情報処理装置の構成例を示すブロック図。
【図３】図６に示す命令列における本発明の一実施形態の動作を説明するタイミングチャート。
【図４】従来技術によるパイプライン方式の情報処理装置の命令レジスタおよび命令デコーダ部分の構成例を示すブロック図。
【図５】従来技術による命令レジスタおよび命令デコーダ部分を含む情報処理装置の構成例を示すブロック図。
【図６】分岐命令を含む命令群の流れの一例を示す図。
【図７】図６に示す命令列における従来技術の動作を説明するタイミングチャート。
【符号の説明】
１００：命令キャッシュ
２００：命令バッファ（ＩＢＲ）
３００：ＩＢＲ制御回路
４００：第１分岐命令レジスタ（ＢＩＲＰ）
５００：第２分岐命令レジスタ（ＢＩＲＳ）
６００：分岐命令レジスタセット信号ラッチ（ＳＥＴＢＩＲＤ）
７００：ＢＩＲＰ有効識別子（ＢＩＲＰＶ）
８００：ＢＩＲＳ有効識別子（ＢＩＲＳＶ）
９００：第１命令デコーダ
１０００：命令フローレジスタ（ＩＦＲ）
１０１０：選択回路
１１００：ＩＦＲ制御回路
１２００：第１命令レジスタ（ＩＲＰ）
１３００：第２命令レジスタ（ＩＲＳ）
１５００：ＩＲＰ有効識別子（ＩＲＰＶ）
１６００：ＩＲＳ有効識別子（ＩＲＳＶ）
１７００：第２命令デコーダ
【図１】
0003668643.tif 000002
【図２】
0003668643.tif 000003
【図３】
0003668643.tif 000004
【図４】
0003668643.tif 000005
【図５】
0003668643.tif 000006
【図６】
0003668643.tif 000007
【図７】
0003668643.tif 000008