(57)【要約】【課題】簡素な構成でパイプライン処理におけるハザードを抑制する。【解決手段】命令レジスタ２に取り込んだ命令セット（命令コードおよびスキップ条件ビットからなる）の命令コードを命令デコーダでデコードして、実行ユニット５で実行する。命令が演算命令である場合、実行ユニット５は命令の実行結果を演算結果フラグ（キャリーフラグなど）として出力し、フラグレジスタ６に格納する。この演算結果フラグと、命令セットにおけるスキップ条件ビットとを合致回路８で比較して、両者が一致した場合、フリップフロップ９にスキップフラグをセットする。これにより、実行ユニット５が次の命令の実行を停止する。このように、条件付き分岐命令を使用する代わりに、スキップ機能付き命令を使用することにより、条件付き分岐命令が実行された結果で分岐条件が成立するまでパイプライン処理を停止させるようなことがなくなる。【選択図】図１
2008158810.tif 000002
【特許請求の範囲】
【請求項１】
取り込まれた命令をデコードする命令デコード部と、デコードされた命令を実行する実行部とを備え、命令のデコードおよび実行をパイプライン処理にて行う命令実行処理装置において、
前記命令が演算命令であるとき前記実行部から出力された演算命令実行結果が当該演算命令に付加された付加条件と一致すると、前記実行部に前記演算命令の次の命令の実行を停止させる一方、前記演算命令実行結果が前記付加条件と一致しないと、前記実行部に前記次の命令を実行させる実行制御部を備えていることを特徴とする命令実行処理装置。
【請求項２】
前記演算命令実行結果を格納する演算命令実行結果格納部と、
前記実行制御部が前記次の命令の実行を停止させるときに前記演算命令実行結果格納部に格納された前記演算命令実行結果を出力する一方、前記実行制御部が前記次の命令を実行させるときに前記実行部による非演算命令実行結果を出力する出力選択部とを備えていることを特徴とする請求項１に記載の命令実行処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン処理におけるハザードを防止する機能を備えたマイクロプロセッサ等の命令実行処理装置に関するものである。
【背景技術】
【０００２】
近年、マイクロプロセッサにパイプライン処理を導入して高速処理化を図ることは、ごく一般的になってきている。パイプライン処理においては、条件付き分岐命令を実行するとき、図６に示すように、実行ステージで条件付き分岐命令が実行されることにより、分岐条件が成立すれば、分岐先の命令にジャンプし、分岐条件が成立しなければ、分岐先の命令にはジャンプしない。ジャンプする場合は、実行ステージで分岐条件が成立するまで分岐先の命令フェッチができない。このように、条件付き分岐命令についての命令デコードステージおよびアドレス計算ステージの段階で、パイプライン処理の次のサイクルが停止するため、パイプライン処理が乱されてしまう。
【０００３】
このような条件分岐によるハザードを防止し、分岐命令の処理を高速化するために、分岐予測を行う手法が知られている。例えば、分岐予測では、分岐予測テーブルを用いて、分岐予測テーブルに登録された以前に出現した分岐命令のアドレスとデコードされた分岐命令のアドレスとを比較し、一致すれば、分岐先命令を分岐予測テーブルから取り出して実行することが知られている（特許文献１）。ここで、ハザードが生じないということは、プログラムの内容の一部がスキップ等で実行されない場合があっても、プログラムの流れは停止しないということを意味している。
【特許文献１】特開平５−１４３３３４号公報（１９９３年６月１１日公開）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところが、上記のような分岐予測の手法を用いると、分岐予測テーブルが必要である上、全ての条件分岐の可能性の予測に対応するためには、複数のパイプラインを備える必要があるなどマイクロプロセッサの構成が複雑化する。
【０００５】
本発明は、上記の問題点に鑑みてなされたものであり、簡素な構成でパイプライン処理におけるハザードを抑制することを目的としている。
【課題を解決するための手段】
【０００６】
本発明に係る命令実行処理装置は、取り込まれた命令をデコードする命令デコード部と、デコードされた命令を実行する実行部とを備え、命令のデコードおよび実行をパイプライン処理にて行う命令実行処理装置において、上記の課題を解決するために、前記命令が演算命令であるとき前記実行部から出力された演算命令実行結果が当該演算命令に付加された付加条件と一致すると、前記実行部に前記演算命令の次の命令の実行を停止させる一方、前記演算命令実行結果が前記付加条件と一致しないと、前記実行部に前記次の命令を実行させる実行制御部を備えていることを特徴としている。
【０００７】
上記の構成では、演算命令を実行するときに、実行部からの演算命令実行結果と演算命令に付加された付加条件とが一致すると、実行制御部によって、次の命令の実行が停止される。また、演算命令実行結果と付加条件とが一致しないと、実行制御部によって、次の命令の実行される。これにより、次の命令がスキップされることになり、条件付き分岐命令を使用しなくても、条件に応じて処理を選択するプログラムを実行することができる。このように命令をスキップすることにより、パイプライン処理が乱されることなく行われる。
【０００８】
前記命令実行処理装置は、前記演算命令実行結果を格納する演算命令実行結果格納部と、前記実行制御部が前記次の命令の実行を停止させるときに前記演算命令実行結果格納部に格納された前記演算命令実行結果を出力する一方、前記実行制御部が前記次の命令を実行させるときに前記実行部による非演算命令実行結果を出力する出力選択部とを備えていることが好ましい。
【０００９】
上記の構成においては、実行制御部によって命令の実行を停止させるときに、演算命令実行結果格納部に格納された演算命令実行結果が出力選択部を介して実行制御部に出力される。これにより、実行制御部によって、演算命令実行結果と付加条件との一致／不一致が判断される。また、実行制御部が命令を実行させるときに、実行部による非演算命令実行結果が出力選択部を介して実行制御部に出力される。これにより、実行制御部によって、非演算命令実行結果と付加条件との不一致が判断される。このように、演算命令の実行前後で得られる値に変化がある場合、演算命令実行結果と付加条件との一致／不一致を実行制御部で判断する必要がある一方で、非演算命令の実行前後では得られる値に変化がない場合、実行制御部では不一致の判断結果しか得られないので、出力選択部によって、実行制御部に入力される実行結果を選択している。
【発明の効果】
【００１０】
本発明に係る命令実行処理装置は、以上のように、命令が演算命令であるとき実行部から出力された演算命令実行結果が当該演算命令に付加された付加条件と一致すると、前記実行部に前記演算命令の次の命令の実行を停止させる一方、前記演算命令実行結果が前記付加条件と一致しないと、前記実行部に前記次の命令を実行させる実行制御部を備えているので、条件付き分岐命令を使用しなくても、条件に応じて処理を選択するプログラムを実行することができる。したがって、本発明の命令実行処理装置を採用すれば、分岐予測を行う従来のマイクロプロセッサと比べて、簡素な構成でハザードの発生を大幅に抑制することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１１】
本発明の実施形態について図１ないし図５に基づいて説明すると、以下の通りである。
【００１２】
図１に示すように、マイクロプロセッサ１は、命令レジスタ２と、命令デコーダ３と、アドレス計算部４と、実行ユニット５と、フラグレジスタ６と、セレクタ７と、合致回路８と、Ｄフリップフロップ９と、ＡＮＤゲート１０とを備えている。
【００１３】
なお、図１においては、太い実線が複数ビットの信号線を表し、細い実線が１ビットの信号線を表している。
【００１４】
命令レジスタ２は、図示しない命令メモリから命令セットをフェッチして格納している。命令セットは、命令コードおよびスキップ条件ビットからなる。スキップ条件ビットは、スキップ条件付き命令のスキップ条件を表すビットである。スキップ条件付き命令は、スキップ条件に応じて次の命令をスキップするか実行するかを規定した命令である。スキップ条件としては、演算命令の実行結果である演算結果を示す演算結果フラグ、例えばキャリーフラグＣ、ゼロフラグＺ、サインフラグＳおよびオーバーフローチャートフラグＶのそれぞれの状態、すなわちセット（“１”）およびクリア（“０”）が用いられる。例えば、スキップ条件付き命令としては、各フラグがセットであるときに次の命令をスキップするが、各フラグがクリアであるときに次の命令を実行する命令や、逆に、各フラグがセットであるときに次の命令を実行するが、各フラグがクリアであるときに次の命令をスキップする命令が挙げられる。
【００１５】
例えば、演算結果フラグおよびスキップ条件ビットは、次の表１に示すように４ビットで設定される。また、スキップ条件ビットには無条件で命令を実行するビットも含まれる。
【００１６】
【表１】
2008158810.tif 000003
【００１７】
命令デコーダ３は、命令レジスタ２に格納されている命令セットにおける命令コードをデコードすることにより、マイクロプロセッサ１に対する指令を取り出す部分である。具体的には、この命令デコーダ３は、命令の種類を判別するとともに、命令コードから情報を取り出して実行すべき演算の種類を決定したり、各種の制御信号を発生したりする。
【００１８】
アドレス計算部４は、ロード命令およびストア命令や条件付き分岐命令で必要とするアドレスをデコードされた命令におけるオペランドの部分に所定の計算処理を施すことによって求める部分である。また、アドレス計算部４は、デコードされた命令のオペコード部分に基づいて、デコードされた命令コードが演算命令の命令コードであるか否かを判定する。具体的には、アドレス計算部４は、デコードされた命令コードが演算命令の命令コードである場合に“０”の演算命令判定ビットを出力し、そうでない場合に“１”の演算命令判定ビットを出力する。
【００１９】
実行ユニット５は、命令デコーダ３によるデコード結果に基づいて、所定の演算処理を行うことにより命令を実行する部分である。また、実行ユニット５は、イネーブル端子Enable端子に、後述するフリップフロップ９からの“０”の実行制御信号が入力されると、命令の実行に関する全ての処理を停止する。
【００２０】
フラグレジスタ６は、実行ユニット５から出力される命令の実行結果として、演算命令の実行結果を示す前述の演算結果フラグを格納するためのレジスタである。
【００２１】
セレクタ７は、実行ユニット５から出力される命令実行の結果と、フラグレジスタ６に格納された演算結果フラグとのいずれか一方を選択してＹ端子から出力する回路である。具体的には、セレクタ７は、Ｓ端子に入力されるＡＮＤゲート１０からの制御信号が“１”であるときに実行ユニット５からの命令実行の結果を出力し、制御信号が“０”であるときに演算結果フラグを出力する。
【００２２】
合致回路８は、一致検出コンパレータなどで構成されており、命令レジスタ２から読み出されたスキップ条件ビットとセレクタ７からの出力値とを比較する。また、合致回路８は、比較の結果、両者が一致したときに“１”の値の一致信号を出力し、両者が一致しなかったときに“０”の不一致信号を出力する。
【００２３】
フリップフロップ９は、Ｄフリップフロップであり、パイプライン処理の基準となるクロック信号ＣＬＯＣＫが入力されている。このフリップフロップ９は、合致回路８から“１”のデータが入力されると、クロック信号ＣＬＯＣＫに同期してスキップフラグをセットし、“０”の実行制御信号をＱ（バー）端子から出力する。また、フリップフロップ９は、合致回路８から“０”のデータが入力されると、スキップフラグをリセットして、“１”の実行制御信号をＱ（バー）端子から出力する。
【００２４】
ＡＮＤゲート１０は、フリップフロップ９からの実行制御信号とアドレス計算部４からの演算命令判定ビットとの論理積をセレクタ７のＳ端子に出力する。
【００２５】
ここで、上記のように構成されるマイクロプロセッサ１の命令実行処理時の動作について説明する。
【００２６】
まず、命令デコードステージにおいては、命令レジスタ２に格納された命令セットにおける命令コードが、命令デコーダ３によってデコードされる。次いで、アドレス計算ステージでは、当該命令コードで特定される命令が演算命令であるか否かがアドレス計算部４によって判定される。命令が演算命令であるとき、アドレス計算部４からは、“０”の演算命令判定ビットが出力される。
【００２７】
実行ステージにおいては、命令デコーダ３による命令コードのデコード結果に基づいて、命令の実行処理が実行ユニット５によって行われる。演算命令が実行された場合、実行ユニット５から演算結果フラグが出力され、当該演算結果フラグがフラグレジスタ６にセットされる。
【００２８】
初期状態では、フリップフロップ９においてスキップフラグがクリアされているので、“１”の実行制御信号がフリップフロップ９から出力される。これにより、上記の実行ステージでの実行処理が可能となる。また、このとき、実行制御信号が“０”であるので、演算命令判定ビットの値に関わらず、ＡＮＤゲート１０の出力が“０”となる。これにより、フラグレジスタ６からの演算結果フラグがセレクタ７を介して合致回路８に出力される。
【００２９】
合致回路８では、セレクタ７から入力された演算結果フラグと、命令レジスタ２からのスキップ条件ビットとが比較される。そして、両者が一致すると、合致回路８から“１”の一致信号が出力されるので、フリップフロップ９にはスキップフラグがセットされて、“０”の実行制御信号がフリップフロップ９から出力される。実行ユニット５は、この実行制御信号の指示を受けて実行処理を停止する。これにより、次の命令は、パイプライン処理の次のサイクルで命令デコードステージおよびアドレス計算ステージまで処理が進んでいても、実行ステージで実行されずにスキップされる。
【００３０】
一方、合致回路８において、両者が一致しないと判定された場合、合致回路８から“０”の不一致信号が出力されるので、フリップフロップ９にはスキップフラグがリセットされて、“１”の実行制御信号がフリップフロップ９から出力される。実行ユニット５は、この実行制御信号の指示を受けて実行処理を可能とする。これにより、次の命令についても、パイプライン処理の次のサイクルで命令デコードステージおよびアドレス計算ステージに続いて、実行ステージでも処理される。
【００３１】
上記のスキップされた命令の次の命令についても、続くサイクルで命令デコードステージおよびアドレス計算ステージにより処理が行われる。この命令が、演算命令ではない命令（例えば転送命令）であれば、スキップ条件ビットが設定されていない、すなわちすべて０である。この場合、合致回路８では、前の演算結果フラグと０のスキップ条件ビットが比較された結果、両者が不一致であると判定されるので、フリップフロップ９にはスキップフラグがリセットされる。このとき、“１”の実行制御信号がフリップフロップ９から出力されることにより、実行ユニット５では実行処理が可能となるので、上記の命令が実行されることになる。また、このとき、実行制御信号が“１”であり、かつ上記の命令が非演算命令であるために演算命令判定ビットが“１”となるので、ＡＮＤゲート１０の出力が“１”となる結果、実行ユニット５の実行出力がセレクタ７から出力される。
【００３２】
このように、上記の構成においては、演算命令を処理するときに、実行ユニット５から出力される演算結果フラグが、セレクタ７を介して合致回路８に入力されてスキップビット条件と比較される。その結果として、両者が一致したときに、スキップフラグがセットされることにより、実行ユニット５の実行処理が停止される。一方、両者が一致しなかったときに、スキップフラグがリセットされることにより、実行ユニット５の実行処理が行われる。したがって、演算命令の実行の結果によってスキップ条件が成立したときには、次の命令が実行されないので、不要な処理が行われることを回避できる。
【００３３】
続いて、命令実行処理の具体例について説明する。
【００３４】
図２のフローチャートに示すプログラムは、次のような処理手順を含んでいる。
【００３５】
まず、Ｒ１レジスタの値とＲ２レジスタの値とを加算して、その結果をＲ１レジスタに格納する（ステップＳ１）。次いで、ステップＳ１での演算結果としてのＲ１レジスタの値についてキャリーフラグＣがセットであるかクリアであるか判定する（ステップＳ２）。キャリーフラグＣがセットである場合（ＹＥＳ）、Ｒ３レジスタの値をＲ１レジスタに格納し（ステップＳ３）、キャリーフラグＣがクリアである場合（ＮＯ）、Ｒ２レジスタの値をＲ１レジスタに格納する（ステップＳ４）。
【００３６】
引き続き、Ｒ１レジスタの値からＲ２レジスタの値を減算して、その結果をＲ１レジスタに格納する（Ｓ５）。次いで、ステップＳ５での演算結果としてのＲ１レジスタの値についてサインフラグＳがセットであるかクリアであるか判定する（ステップＳ６）。サインフラグＳがセットである場合（ＹＥＳ）、Ｒ２レジスタの値をＲ１レジスタに格納して（ステップＳ７）、Ｒ１レジスタの値についてゼロフラグＺがセットであるかクリアであるか判定する（ステップＳ８）。また、サインフラグＳがクリアである場合（ＮＯ）、ステップＳ８に移行する。
【００３７】
さらに、ゼロフラグＺがクリアである場合（ＮＯ）、Ｒ３レジスタの値とＲ１レジスタの値とを加算して、その結果をＲ３レジスタに格納して（ステップＳ９）、Ｒ３レジスタの値をＲ２レジスタに格納する（ステップＳ１０）。また、ゼロフラグＺがセットである場合（ＹＥＳ）、ステップＳ１０に移行する。
【００３８】
上記の一連の処理を実現するためのプログラムは、従来の条件付き分岐命令でニーモニック形式で記述すると、図３のように表される。
【００３９】
このプログラムにおいては、ステップＳ２でキャリーフラグＣがセットであると判定されると（２行目の［ＢＲ＿Ｃ］）、分岐条件が成立して、５行目の転送命令（［Ｍｏｖｅ  Ｒ３，Ｒ１］）にジャンプする。また、ステップＳ２でキャリーフラグＣがクリアであると判定されると、分岐条件が成立しないので、３行目の転送命令（［Ｍｏｖｅ  Ｒ２，Ｒ１］）が実行される。この場合は、５行目の転送命令が実行されないので、６行目の減算命令にジャンプする（［Ｓｕｂ  Ｒ２，Ｒ１］）。
【００４０】
ステップＳ８でゼロフラグＺがセットであると判定されると（９行目の［Ｂｒ＿Ｚ］）、分岐条件が成立して、１１行目の転送命令（［Ｍｏｖｅ  Ｒ３，Ｒ２］）にジャンプする。また、ステップＳ８でゼロフラグＺがクリアであると判定されると、分岐条件が成立しないので、１０行目の加算命令（［Ａｄｄ  Ｒ１，Ｒ３］）が実行される。
【００４１】
このように、条件付き分岐命令を用いると、条件が成立するまで、パイプライン処理における次のサイクルの動作が停止するので、ハザードが生じてしまう。
【００４２】
これに対し、スキップ条件付き命令を用いたマイクロプロセッサ１においては、上記の一連の処理を実現するためのプログラムは、ニーモニック形式で記述すると、図４のように表される。
【００４３】
このプログラムにおいては、まず、ステップＳ１の加算演算の結果、キャリーフラグＣがセットである場合、１行目の［Ａｄｄ  Ｒ２，Ｒ１  ｓｋｉｐ＝Ｃ］により、スキップ条件が成立するので、次の転送命令（２行目の［Ｍｏｖｅ  Ｒ２，Ｒ１  ｓｋｉｐ＝ｎｏｔＣ］）をスキップして、３行目の転送命令（［Ｍｏｖｅ  Ｒ３，Ｒ１  ］）を実行する。一方、キャリーフラグＣがクリアである場合、１行目の［Ａｄｄ  Ｒ２，Ｒ１  ｓｋｉｐ＝Ｃ］により、スキップ条件が成立しないので、２行目の転送命令を実行する。また、この転送命令では、次の命令をスキップする条件として、キャリーフラグＣがクリアであることが含まれているので、３行目の転送命令をスキップする。
【００４４】
ステップＳ７の転送命令を実行した結果、ゼロフラグＺがセットである場合、５行目の［Ｍｏｖｅ  Ｒ２，Ｒ１  ｓｋｉｐ＝Ｚ］により、スキップ条件が成立するので、次の転送命令（６行目の［Ｍｏｖｅ  Ｒ３，Ｒ１］）をスキップして、７行目の転送命令（［Ｍｏｖｅ  Ｒ３，Ｒ２］）を実行する。
【００４５】
ここで、マイクロプロセッサ１が、上記の一連の処理をパイプラインによって図４に示すプログラムを実行するときの動作を図５のタイミングチャートを参照して説明する。
【００４６】
まず、図４の１行目の命令が、クロック信号ＣＬＯＣＫの１クロック毎に、命令デコードステージ、アドレス計算ステージ、実行ステージの順で処理されていく。実行ステージでは、１行目の命令の実行の結果、キャリーフラグＣがセットされることにより、スキップフラグがセットされる。これにより、スキップ条件が成立するので、２行目の命令のスキップが決定する。
【００４７】
次のサイクルでは、２行目の命令が、最初のサイクルから１クロック遅れて同様に処理されていく。しかしながら、スキップ条件が成立しているので、２行目の命令は、実行ステージで実行されない（スキップされる）ことになる。そして、続く３行目の命令は、前のサイクルから１クロック遅れて処理されていく。
【００４８】
このように、本実施形態のマイクロプロセッサ１は、命令コードとスキップ条件とを含む命令セット（スキップ機能付き命令）を実行可能とするため、実行ステージを実現する構成として実行ユニット５に加えて、フラグレジスタ６、セレクタ７、合致回路８、フリップフロップ９およびＡＮＤゲート１０を備えている。これにより、演算命令に設定されたスキップ条件が成立すると、その次の命令の実行を停止してスキップする一方、スキップ条件が成立しないと、その次の命令を実行する。それゆえ、上記の構成は、２つ以上の命令をスキップする必要がある場合には適用できないが、図２に示すように、条件判定のステップから１つのステップを介して合流するような処理を行う場合に適している。一般に、プログラムは、このような処理を多用しているので、次の命令をスキップすることで、条件付き分岐命令を使用しなくても、条件に応じて処理を選択するプログラムを実行することができる。このように命令をスキップすることにより、図５に示すように、パイプライン処理が乱されることなく行われる。したがって、本実施形態のマイクロプロセッサ１を採用すれば、分岐予測を行う従来のマイクロプロセッサと比べて、簡素な構成でハザードの発生を大幅に抑制することができる。
【００４９】
本発明は、上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【００５０】
本発明の命令実行処理装置は、スキップ機能付き命令を用い、実行される演算命令が所定の条件を満たしたときに、次の命令を実行せずにスキップする一方、当該演算命令が所定の条件を満たさなかったときに、次の命令を実行するように構成されることにより、ハザードの発生を抑制できるので、マイクロプロセッサの高速化に好適に利用できる。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施形態に係るマイクロプロセッサの構成を示すブロック図である。
【図２】上記マイクロプロセッサおよび従来のマイクロプロセッサで実行されるプログラムによって実現される処理手順を示すフローチャートである。
【図３】従来のマイクロプロセッサで実行されるプログラムの一例を示す図である。
【図４】図１のマイクロプロセッサで実行されるプログラムの一例を示す図である。
【図５】図４のプログラムをパイプライン処理で実行するときの図１のマイクロプロセッサの動作を示すタイミングチャートである。
【図６】パイプライン処理の各サイクルの命令処理の各ステージを示す図である。
【符号の説明】
【００５２】
１    マイクロプロセッサ
２    命令レジスタ
３    命令デコーダ（デコード部）
４    アドレス計算部
５    実行ユニット（実行部）
６    フラグレジスタ（演算命令実行結果格納部）
７    セレクタ（出力選択部）
８    合致回路（実行制御部）
９    フリップフロップ
１０    ＡＮＤゲート
【図１】
2008158810.tif 000004
【図２】
2008158810.tif 000005
【図３】
2008158810.tif 000006
【図４】
2008158810.tif 000007
【図５】
2008158810.tif 000008
【図６】
2008158810.tif 000009