(57)【要約】【課題】  命令の有効無効に関わらず、実行サイクルを一定にすることができるプログラム制御方法およびプロセッサを提供する。【解決手段】  ＣＰＵ１０は条件判定の際、条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理を行う。ＣＰＵ１０はスキップ処理にてそれ以降の命令を無効とする場合にも、命令のシーケンス制御は継続して実行し、データの書き込みのみ禁止する。【選択図】      図１
2006309454.tif 000002
【特許請求の範囲】
【請求項１】
条件判定の際、条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化する、プロセッサのスキップ処理のためのプログラム制御方法であって、
スキップ処理にてそれ以降の命令を無効とする場合にも、命令のシーケンス制御は継続して実行し、データの書き込みのみ禁止するようにしたことを特徴とするプログラム制御方法。
【請求項２】
命令セットに、前方のみに分岐することを許可された条件付き分岐命令を有し、
条件付き分岐命令を実行した際、条件が成立した場合に、それ以降の命令を無効化するスキップ処理を開始することを特徴とする請求項１に記載のプログラム制御方法。
【請求項３】
前記条件付き分岐命令で指定された分岐先アドレスと、プログラムカウンタの現在のアドレスが、
分岐先アドレス≦現在のアドレス
となったことをトリガとしてスキップ処理を終了することを特徴とする請求項２に記載のプログラム制御方法。
【請求項４】
条件判定に基づき条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理制御手段を備えたプロセッサであって、
前記スキップ処理制御手段は、スキップ処理中は命令の種類に関わらず、プロセッサ内外に対するデータの書き込みを禁止し続けることを特徴とするプロセッサ。
【請求項５】
前記スキップ処理制御手段は、命令によるデータの書き込みを制御するスキップ状態フラグを備え、
前記スキップ状態フラグは、スキップ処理開始命令を実行することでスキップ状態にセットされ、スキップ処理終了命令を実行することで通常状態にリセットされることを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記スキップ処理制御手段は、命令によるデータの書き込みを制御するスキップ状態フラグを備え、
前記スキップ状態フラグは、条件付き分岐命令における条件が成立した場合にスキップ状態にセットされることを特徴とする請求項４に記載のプロセッサ。
【請求項７】
前記スキップ処理制御手段は、
前記条件付き分岐命令によって指定される分岐先アドレスを保持するための分岐先アドレスレジスタと、
分岐先アドレスレジスタの分岐先アドレスとプログラムカウンタの現在のアドレスを比較するアドレス比較手段と、
を備え、
前記アドレス比較手段は、
分岐先アドレス≦現在のアドレス
となったことをトリガにして、前記スキップ状態フラグを通常状態にリセットする
ことを特徴とする請求項６に記載のプロセッサ。
【請求項８】
前記アドレス比較手段は、データパスの内部の算術論理演算ユニットで構成され、スキップ状態フラグがスキップ状態にセットされている場合には、前記算術論理演算ユニットに、分岐先アドレスレジスタの分岐先アドレスとプログラムカウンタの現在のアドレスを入力し、前記算術論理演算ユニットより出力されるコンディションコードが
分岐先アドレス≦現在のアドレス
となったことをトリガにして、スキップ状態フラグを通常状態にリセットすることを特徴とする請求項７に記載のプロセッサ。
【請求項９】
前記スキップ処理制御手段は、
割り込み発生時に前記スキップ状態フラグのフラグデータをレジスタないしメモリへ退避するフラグデータ退避手段と、
復帰命令により、退避した前記フラグデータをスキップ状態フラグに復帰するフラグデータ復帰手段と、
を備えることを特徴とする請求項５〜８のいずれか１項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのプロセッサに係り、特に、条件判定により条件が成立した場合にそれ以降の命令を無効化するスキップ処理のためのプログラム制御方法に関するものである。
【背景技術】
【０００２】
ＣＰＵ（プロセッサ）において、プログラムの条件分岐を制御する方式として、従来、
（ｉ）命令セットに条件付き分岐命令などを有し、条件が成立した場合、指定のアドレスまでジャンプする方式や、
（ｉｉ）命令セットにスキップ命令を有し、直後の一ないし連続する複数の命令を無効とする方式
がある。例えば特許文献１には、スキップ時に命令をＮＯＰ化（ノー・オペレーション化）する技術が開示されている。
【特許文献１】特開昭６１−２２１９３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
（ｉ），（ｉｉ）のいずれの場合も、条件成立時と非成立時では実行サイクル数が異なるため、命令の実行タイミングが重要なプログラム及びそのシステムにおいて、分岐処理後（命令のＮＯＰ化を伴うスキップ処理の後）の命令を同じサイクルタイミングにて実行できないという問題がある。
【０００４】
（ｉｉ）の方式においては、例えば、バス幅を超えるデータサイズのロードストア命令など、命令の実行に複数サイクルを要すものがそれに該当する。
本発明は上記問題点に着目してなされたものであり、その目的は、命令の有効無効に関わらず、実行サイクルを一定にすることができるプログラム制御方法およびプロセッサを提供することにある。
【課題を解決するための手段】
【０００５】
請求項１に記載の発明は、条件判定の際、条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化する、プロセッサのスキップ処理のためのプログラム制御方法であって、スキップ処理にてそれ以降の命令を無効とする場合にも、命令のシーケンス制御は継続して実行し、データの書き込みのみ禁止するようにしたプログラム制御方法をその要旨とする。
【０００６】
請求項１に記載の発明によれば、スキップ処理にてそれ以降の命令を無効とする場合にも、命令のシーケンス制御は継続して実行され、データの書き込みのみ禁止される。よって、命令無効時にも命令有効時と同じサイクル数を消費させて、命令の有効無効に関わらず、実行サイクルを一定にすることができる。
【０００７】
請求項２に記載のように、請求項１に記載のプログラム制御方法において、命令セットに、前方のみに分岐することを許可された条件付き分岐命令を有し、条件付き分岐命令を実行した際、条件が成立した場合に、それ以降の命令を無効化するスキップ処理を開始すると、条件付き分岐命令によりスキップ処理を開始することによって、スキップ命令に比べ、命令数が少なくて済む。また、スキップ処理用の命令を実装しなくてよい。
【０００８】
請求項３に記載のように、請求項２に記載のプログラム制御方法において、前記条件付き分岐命令で指定された分岐先アドレスと、プログラムカウンタの現在のアドレスが、
分岐先アドレス≦現在のアドレス
となったことをトリガとしてスキップ処理を終了すると、スキップ無効命令を挿入する場合に比べ、命令数が少なくて済む。また、スキップ処理用の命令を実装しなくてよい。
【０００９】
請求項４に記載の発明は、条件判定に基づき条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理制御手段を備えたプロセッサであって、前記スキップ処理制御手段は、スキップ処理中は命令の種類に関わらず、プロセッサ内外に対するデータの書き込みを禁止し続けるプロセッサをその要旨とする。
【００１０】
請求項４に記載の発明によれば、スキップ処理制御手段が、スキップ処理中は命令の種類に関わらず、プロセッサ内外に対するデータの書き込みを禁止し続けることにより、命令無効時にも命令有効時と同じサイクル数を消費させて、命令の有効無効に関わらず、実行サイクルを一定にすることができる。
【００１１】
請求項５に記載のように、請求項４に記載のプロセッサにおいて、前記スキップ処理制御手段は、命令によるデータの書き込みを制御するスキップ状態フラグを備え、前記スキップ状態フラグは、スキップ処理開始命令を実行することでスキップ状態にセットされ、スキップ処理終了命令を実行することで通常状態にリセットされるものであると、スキップ状態フラグをセット／リセットすることができる。
【００１２】
請求項６に記載のように、請求項４に記載のプロセッサにおいて、前記スキップ処理制御手段は、命令によるデータの書き込みを制御するスキップ状態フラグを備え、前記スキップ状態フラグは、条件付き分岐命令における条件が成立した場合にスキップ状態にセットされるものであると、スキップ状態フラグをセットする構成として好ましいものとなる。
【００１３】
請求項７に記載のように、請求項６に記載のプロセッサにおいて、前記スキップ処理制御手段は、前記条件付き分岐命令によって指定される分岐先アドレスを保持するための分岐先アドレスレジスタと、分岐先アドレスレジスタの分岐先アドレスとプログラムカウンタの現在のアドレスを比較するアドレス比較手段と、を備え、前記アドレス比較手段は、
分岐先アドレス≦現在のアドレス
となったことをトリガにして、前記スキップ状態フラグを通常状態にリセットするものであると、フラグをリセットする構成として好ましいものとなる。
【００１４】
請求項８に記載のように、請求項７に記載のプロセッサにおいて、前記アドレス比較手段は、データパスの内部の算術論理演算ユニットで構成され、スキップ状態フラグがスキップ状態にセットされている場合には、前記算術論理演算ユニットに、分岐先アドレスレジスタの分岐先アドレスとプログラムカウンタの現在のアドレスを入力し、前記算術論理演算ユニットより出力されるコンディションコードが
分岐先アドレス≦現在のアドレス
となったことをトリガにして、スキップ状態フラグを通常状態にリセットすると、分岐先アドレスレジスタの分岐先アドレスとプログラムカウンタの現在のアドレスの比較を実行する構成として、データパスの内部の算術論理演算ユニットを用いることによってリソースの活用による小型化を図ることができる。
【００１５】
請求項９に記載のように、請求項５〜８のいずれか１項に記載のプロセッサにおいて、前記スキップ処理制御手段は、割り込み発生時に前記スキップ状態フラグのフラグデータをレジスタないしメモリへ退避するフラグデータ退避手段と、復帰命令により、退避した前記フラグデータをスキップ状態フラグに復帰するフラグデータ復帰手段と、を備えることにより、割り込み時のスキップ処理を継続することができる。
【発明を実施するための最良の形態】
【００１６】
（第１の実施の形態）
以下、本発明を具体化した第１の実施形態を図面に従って説明する。
図１は、本実施形態のマイクロコンピュータにおけるＣＰＵ（プロセッサ）の内部構成を示すブロック図である。図２には、ＣＰＵの命令実行動作、特にパイプライン動作の一例を示す。
【００１７】
図１において、ＣＰＵ１０は制御ユニット２０とデータパス３０で構成されている。データパス３０は、データの格納や、算術・論理演算を実行する。制御ユニット２０は、メモリから取り込んだ命令に応じ、データパス３０を制御する。
【００１８】
制御ユニット２０は命令デコーダ２１とスキップ処理制御ユニット２２で構成されている。命令デコーダ２１は、メモリより取り込んだ命令を格納し、取り込んだ命令を解読する。スキップ処理制御手段としてのスキップ処理制御ユニット２２は、条件分岐における条件判定の際、条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理を行うためのものである。スキップ処理制御ユニット２２は、命令デコーダ２１より出力される、スキップ処理開始信号とスキップ処理終了信号から、スキップ状態か否かを判断し、ＣＰＵ１０の内外部に対し、データの書き込みを制御する。
【００１９】
データパス３０は、ロードストアユニット３１と実行ユニット３２とレジスタファイル３３とプログラム状態レジスタ３４とプログラムカウンタ３５で構成されている。ロードストアユニット３１は、ＣＰＵ１０の外部からのデータ読み込み及び、外部へのデータ書き込みを制御する。実行ユニット３２は、命令デコーダ２１で解読された命令に従い、制御ユニット２０より出力される、制御信号に応じて、所定の算術・論理演算を実行する。レジスタファイル３３は、実行ユニット３２により実行された結果のデータもしくはメモリ等のＣＰＵ１０の外部より取り込まれたデータを格納する。プログラム状態レジスタ３４は、ＣＰＵ１０の処理状態を保持する。プログラムカウンタ３５はフェッチする命令のアドレスを示す。
【００２０】
ここで、ＣＰＵ１０と、ＣＰＵ１０の外部の周辺回路を接続するバスが、データバス４０とアドレスバス４１の２種類のバスで構成されており、図１のＣＰＵ１０のバスアーキテクチャはノイマンバス構成となっている。
【００２１】
ＣＰＵ１０は、図２に示すように、５種類のステージからなるパイプライン処理にて、プログラムを実行するものである。
５種類のステージとは、ＩＦ（命令フェッチ）ステージと、ＤＥＣ（デコード）ステージと、ＥＸＥ（実行）ステージと、ＭＡ（メモリアクセス）ステージと、ＷＢ（ライトバック）ステージである。ＩＦ（命令フェッチ）ステージは、メモリから命令を読み込むステージである。ＤＥＣ（デコード）ステージは、ＩＦステージで読み込んだ命令を解読するステージである。ＥＸＥ（実行）ステージは、ＤＥＣステージで解読された命令の内容に応じて、算術・論理演算やＩＦステージで読み込むべき命令のアドレスやメモリへアクセスする際のアドレス等を演算するステージである。ＭＡ（メモリアクセス）ステージは、ＤＥＣステージで解読された命令の内容に応じて、ＥＸＥ（実行）ステージでの演算結果をアドレスとしてメモリへのアクセスを行うステージである。ＷＢ（ライトバック）ステージは、ＤＥＣステージで解読された命令の内容に応じて、演算データもしくはメモリから取り込んだデータを内部レジスタに書き込むステージである。
【００２２】
ノイマンバス構成下のパイプライン処理においては、先に述べた５種類のステージによる、５段のパイプラインを構築した場合、メモリより命令を取り込むＩＦステージと、メモリに対し、データの書き込みもしくは読み出しを行う、ＭＡステージが競合する。
【００２３】
そこで、ＩＦステージとＭＡステージの競合を避けるために種々の方策が存在するが、競合回避の一例としての図２のパイプライン動作について説明する。
図２において、メモリへのアクセスを必要としない命令Ａ，Ｂ，Ｄ及びスキップ命令は、ＩＦ、ＤＥＣ、ＥＸＥ、ＷＢの４つのステージでパイプラインが構成されており、命令実行後（ＥＸＥステージ）、次のステージにて結果がレジスタに書き込まれる（ＷＢステージ）。一方、ストア命令などメモリアクセスを必要とする命令Ｃは、ＥＸＥステージとＷＢステージの間にＭＡステージが挿入され、５種類のステージにてパイプラインが構成される。ただし、命令ＣのＭＡステージ実行中は、他命令のパイプラインをストールさせる。こうすることで、メモリアクセスが必要な命令のみ、２サイクル必要となるが、ＩＦステージとＭＡステージの競合を避けることができる。
【００２４】
以上、述べたようなＣＰＵ構成による、スキップ処理の手順を説明する。
図１において、プログラムカウンタ３５の値（アドレス）がアドレスバス４１から出力され、バス４１に接続されたＲＯＭより該当する命令がデータバス４０に出力される。ＣＰＵ１０においてロードストアユニット３１を介してデータバス４０上のデータを取り込み、命令デコーダ２１に格納する。命令デコーダ２１は、フェッチした命令の内容を解読し、解読した命令の内容に応じて、データパス３０及び、ＣＰＵ１０の外部に対して所定の制御を行う。
【００２５】
例えば、フェッチした命令が、レジスタＲ１０とレジスタＲ１１のデータを加算し、レジスタＲ１１に書き込むという命令の場合、制御ユニット２０は、実行ユニット３２に対し、レジスタＲ１０とレジスタＲ１１のデータを入力し、加算オペレーションを指示する他、レジスタファイル３３に対し、実行結果を入力し、レジスタＲ１１に書き込み許可を指示する。
【００２６】
ここで、条件付き分岐命令であった場合には次のようにする。つまり、前処理の実行結果に基づいて条件判定を行い、次命令以下をジャンプする場合には次のようにする。
フェッチした命令がスキップ処理開始命令の場合は、命令デコーダ２１よりスキップ処理制御ユニット２２に対しスキップ処理開始信号が出力される。また、フェッチした命令がスキップ処理終了命令の場合は、命令デコーダ２１よりスキップ処理制御ユニット２２に対しスキップ処理終了信号が出力される。
【００２７】
スキップ処理制御ユニット２２は、スキップ状態か通常状態かを示すスキップ状態フラグ２２ａを備えており、スキップ状態フラグ２２ａは、命令によるデータの書き込みを制御するためのものである。このスキップ状態フラグ２２ａは、スキップ処理開始信号を受けてスキップ状態にセットされ、スキップ処理終了信号を受けて通常状態にリセットされる。
【００２８】
スキップ状態フラグ２２ａがセットされスキップ状態を示している場合には、命令デコーダ２１から出力される書き込み制御信号の状態に関わらず、メモリを含む周辺回路への書き込みを制御する、外部書き込み制御信号、及び、レジスタファイル３３など内部レジスタへの書き込みを制御する、内部書き込み制御信号として、書き込み禁止を出力する。これにより、スキップ処理にてそれ以降の命令を無効とする場合には、命令のシーケンス制御は継続して実行され、データの書き込みのみ禁止される。
【００２９】
以上に示した、スキップ処理制御手段としてのスキップ処理制御ユニット２２について、スキップ処理中のパイプライン動作を用い（図２，３，４）、一般例と比較しながらより詳細に説明する。
【００３０】
図２においては、スキップ処理開始命令とスキップ処理終了命令の間である、命令Ａ〜命令Ｄをスキップする例を示している。
図３は、一般的なスキップ処理中のパイプライン動作を、図４は、本実施形態におけるスキップ処理中のパイプライン動作を示している。
【００３１】
まず、図３の一般例の動作図について説明する。
一般的なスキップ処理制御手法では、スキップ処理開始命令が実行された後、以降の命令をＮＯＰ（ノー・オペレーション命令）化する。このとき、図２における命令Ｃが、実行に２サイクルを要するストア命令だった場合、ＮＯＰ化によって、ＭＡステージがなくなる。従って、スキップ処理しない場合に比べて、１サイクル短くなり、命令Ａ〜命令Ｄに係るサイクル数（実行サイクル数）は「４」となる。
【００３２】
一方、図４の本実施形態によれば、スキップ処理開始命令が実行された後も、命令がＮＯＰ化されるわけではなく、データの書き込みのみ禁止される。
図４中の命令Ｃ（ストア命令）を例に説明すると、スキップ状態フラグは、スキップ処理開始命令を実行することでスキップ状態にセットされ、スキップ処理終了命令を実行することで通常状態にリセットされる。スキップ処理制御ユニット２２は、スキップ状態フラグがスキップ状態の間も、命令のシーケンス制御はそのまま継続して実行し、書き込み制御信号を書き込み禁止にする。即ち、スキップ処理中は命令の種類に関わらず、ＣＰＵ内外に対するデータの書き込みを禁止し続ける。そのため、ＭＡステージでは、データの書き込みが禁止される。よって、ストア命令は実質的に無効となるが、消費サイクルは命令有効時と同じ２サイクルとなる。従って、スキップ処理区間である、命令Ａ〜命令Ｄに係るサイクル数（実行サイクル数）は、命令の種類に関わらず、命令有効時と同じ「５」となる。つまり、命令の実行サイクルを命令の有効無効に関わらず、一定とすることができ、命令Ａ〜Ｄの命令群をスキップした場合としない場合とで、処理にかかるサイクル数を同じとすることができる。
【００３３】
このように、本方式は、条件判定の結果、条件が成立し、スキップ処理にてそれ以降の命令を無効化する場合においても、命令のシーケンス制御は継続して行い、データの書き込みのみ禁止することで、条件判定の成立、不成立に関わらず、一定のインストラクションサイクル数を消費させる（スキップ処理制御による命令の有効無効に関わらず、常に同じインストラクションサイクルを消費することができる）。つまり、スキップ処理を実行した場合と実行しなかった場合、いずれの場合においても、スキップ処理終了後の命令の実行タイミングを同じにすることができる。例えば、命令１から命令２の間がスキップ処理区間であり（命令１から命令２の間が条件分岐区間であり）、命令２の命令１に対する実行タイミングを常に一定としたいプログラムにおいて非常に効果的である（命令の実行タイミングが重要な場合において、プログラムの条件分岐による実行サイクルのずれを防ぐことができる）。
【００３４】
以上のごとく、本実施形態は下記の特徴を有する。
プログラム制御方法として、条件成立時に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理を行う際に、スキップ処理にてそれ以降の命令を無効とする場合にも、命令のシーケンス制御は継続して実行し、データの書き込みのみ禁止するようにした。これにより、命令無効時にも命令有効時と同じサイクル数を消費させて、命令の有効無効に関わらず、実行サイクルを一定にすることができる。
【００３５】
ＣＰＵ（プロセッサ）として、条件判定に基づき条件が成立した場合に、それ以降の一ないし連続する複数の命令を無効化するスキップ処理制御ユニット２２を備えたＣＰＵ（プロセッサ）であって、スキップ処理制御ユニット２２は、スキップ処理中は、１サイクル命令や２サイクル命令といった命令の種類に関わらず、プロセッサ内外（プロセッサ内外部）に対するデータの書き込みを禁止し続ける。よって、命令無効時にも命令有効時と同じサイクル数を消費させて、命令の有効無効に関わらず、実行サイクルを一定にすることができる。このようにして、スキップ中にデータの書き込みを禁止するための基本構成を構築することができる。
【００３６】
ここで、スキップ処理制御ユニット２２は、命令によるデータの書き込みを制御するスキップ状態フラグ（２２ａ）を備え、スキップ状態フラグ（２２ａ）は、スキップ処理開始命令を実行することでスキップ状態にセットされ、スキップ処理終了命令を実行することで通常状態にリセットされるので、スキップ状態フラグをセット／リセットすることができる。
（第２の実施の形態）
次に、第２の実施形態を、第１の実施形態との相違点を中心に説明する。
【００３７】
図５には、図４に代わる本実施形態におけるスキップ処理中のパイプライン動作図を示す。
第１の実施形態に比べ本実施形態においては、図４中のスキップ状態フラグをスキップ状態にセットする手段として、条件付き分岐命令を使用している。
【００３８】
図５において、命令セットに、前方のみに分岐することを許可された条件付き分岐命令を有している。前方のみに分岐することを許可された条件付き分岐命令の条件が成立した場合に、命令デコーダ２１よりスキップ処理制御ユニット２２に対しスキップ処理開始信号が出力される。これにより、スキップ状態フラグがスキップ状態にセットされ、以降の命令が無効化される。また一方で、条件が不成立の場合にはスキップ状態フラグは通常状態のままとなり、以降の命令は実行される。このように、プログラム制御方法として、条件付き分岐命令を実行した際、条件が成立した場合に、それ以降の命令を無効化するスキップ処理を開始する。
【００３９】
スキップ処理制御手段としてのスキップ処理制御ユニット２２の制御方法は、第１の実施形態における手順と同様であり、分岐しなかった場合（命令を実行）と分岐した場合（命令を無効化）とで、サイクル数は同じとなる。
【００４０】
また、本実施形態でのプログラム制御方法によれば、スキップ処理を開始するための命令が不要となり、命令数が削減できる。即ち、条件付き分岐命令によりスキップ処理を開始することによって、スキップ命令に比べ、命令数が少なくて済む。また、スキップ処理用の命令を実装しなくてよい。
【００４１】
一方、ＣＰＵ（プロセッサ）として、スキップ処理制御ユニット２２は、命令によるデータの書き込みを制御するスキップ状態フラグ（２２ａ）を備え、スキップ状態フラグ（２２ａ）は、条件付き分岐命令における条件が成立した場合にスキップ状態にセットされる。これにより、スキップ状態フラグをセットする別構成として好ましいものとなる。
（第３の実施の形態）
次に、第３の実施形態を、第２の実施形態との相違点を中心に説明する。
【００４２】
図６は、図１に代わる本実施形態におけるＣＰＵの内部構成を示すブロック図である。図７には、図４に代わる本実施形態におけるスキップ処理中のパイプライン動作図を示す。
【００４３】
第２の実施形態において、スキップ状態フラグを通常状態にリセットする手段として、本実施形態では次のようにしている。
図６において、ＣＰＵ１０は、第１の実施形態に挙げたＣＰＵ１０と同じく、条件判定に基づき条件が成立した場合にそれ以降の一ないし連続する複数の命令を無効化するスキップ処理制御ユニット２２を備えている。
【００４４】
ＣＰＵ１０は、ＩＦ、ＤＥＣ、ＥＸＥ、ＭＡ、ＷＢの５種類のステージからなるパイプライン処理にて、プログラムを実行するものである。ＣＰＵ１０は、データの格納や、算術・論理演算を実行するデータパス３０と、メモリから取り込んだ命令に応じ、データパス３０を制御する制御ユニット２０とで構成されている。
【００４５】
制御ユニット２０は、命令デコーダ２１とスキップ処理制御ユニット２２で構成されている。命令デコーダ２１は、メモリより取り込んだ命令を格納し、取り込んだ命令を解読する。スキップ処理制御ユニット２２は、命令デコーダ２１から出力されるスキップ処理開始信号と、データパス３０から出力されるスキップ処理終了信号（第２のスキップ処理終了信号ＩＩ）とから、スキップ状態か否かを判断し、ＣＰＵ１０内外部に対しデータの書き込みを制御する。
【００４６】
データパス３０は、ロードストアユニット３１と実行ユニット３２とレジスタファイル３３とプログラム状態レジスタ３４とプログラムカウンタ３５と分岐先アドレスレジスタ３６とパイプラインレジスタ３７で構成されている。ロードストアユニット３１は、ＣＰＵ１０外部からのデータ読み込み及び外部へのデータ書き込みを制御する。実行ユニット３２は、命令デコーダ２１で解読された命令に従い、制御ユニット２０から出力される、制御信号に応じて、所定の算術・論理演算を実行する。ここで、実行ユニット３２においてＡＬＵ（算術論理演算ユニット）５０を有し、このＡＬＵ５０はスキップ処理時にも使用される。レジスタファイル３３は、実行ユニット３２により実行された結果のデータもしくはメモリ等のＣＰＵ１０外部より取り込まれたデータを格納する。プログラム状態レジスタ３４は、ＣＰＵ１０の処理状態を保持する。プログラムカウンタ３５は、フェッチする命令のアドレスを示す。分岐先アドレスレジスタ３６は、条件付き分岐命令での分岐先アドレスを保持する。パイプラインレジスタ３７は、実行ユニット３２（ＡＬＵ５０）の出力であるコンディションコード信号を、第１のスキップ処理終了信号Ｉとして、当該信号を１サイクル遅延させて、この信号を第２のスキップ処理終了信号ＩＩとしてスキップ処理制御ユニット２２に出力する。
【００４７】
また、バス接続についても、第１の実施形態のＣＰＵと同様の構成であり、ノイマンバス構成となっている。
本実施形態においては、スキップ処理制御ユニット２２とデータパス３０によりスキップ処理制御手段が構成されている。
【００４８】
以上、述べたようなＣＰＵ構成における、スキップ処理の手順を図６及び図７を用いて、説明する。
スキップ処理制御ユニット２２は、第２の実施形態と同じく、スキップ状態フラグ２２ａを備えており、スキップ状態フラグ２２ａがスキップ状態の場合には、内外部の書き込み制御信号として書き込み禁止を出力する。
【００４９】
また、スキップ状態フラグ２２ａは、第２の実施形態と同様に、命令デコーダ２１で条件付き分岐命令を解読し、条件が成立した際に出力される、スキップ処理開始信号を受けて、スキップ状態にセットされる。
【００５０】
本実施形態におけるスキップ処理制御ユニット２２は、スキップ処理開始信号が入力された場合には、同時に、実行ユニット３２にて算出された、分岐先アドレスを分岐先アドレスレジスタ３６に格納する。
【００５１】
また、本実施形態のスキップ処理制御ユニット２２は、スキップ状態フラグがスキップ状態の間、実行ユニット３２を制御して、分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスの比較演算を行わせる。具体的には、分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスを実行ユニット３２内のＡＬＵ（算術論理演算ユニット）５０に入力し、実行ユニット３２に対し、比較オペレーションを指示する。条件付き分岐命令（前方のみに分岐することを許可された条件付き分岐命令）によるスキップ処理区間は、条件付き分岐命令の次命令から、分岐先アドレスの１つ手前までとなるため、［分岐先アドレスレジスタ３６の分岐先アドレス］＝［プログラムカウンタ３５の現在のアドレス］となった時点で、スキップ状態フラグをリセットすればよいことになる。本構成の場合、実行ユニット３２（ＡＬＵ５０）の出力であるコンディションコード信号が第１のスキップ処理終了信号Ｉとなる。
【００５２】
ただし、複数のステージによるパイプライン処理を行うＣＰＵの場合、演算結果を書き込むタイミングとプログラムカウンタ３５の値（アドレス）とにずれが生じるため、タイミング調整のためのパイプラインレジスタ３７（この場合、1サイクル分の遅延）を用いて遅延させた信号を第２のスキップ処理終了信号ＩＩとする。このようにしてデータの書き込みのみを分岐先アドレスの１つ手前の命令まで禁止することができる（命令有効時と同じサイクル数を消費させることができる）。
【００５３】
ここで、プログラムカウンタ３５のアドレスと分岐先アドレスレジスタ３６のアドレスの比較を実行ユニット３２で処理する構成を採っているのは、演算器の共有化によるＣＰＵ小型化の効果を狙ったものであり、スキップ状態フラグがスキップ状態の間は、命令が無効となるため、実行ユニット３２を分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスの比較演算に有効利用することが可能である。
【００５４】
スキップ状態フラグが条件付き分岐命令によってセット及びリセットされる動作を、図７を用いて詳しく説明する。
メモリ上のアドレスが１００番地にある、条件付き分岐命令（前方のみに分岐することを許可された条件付き分岐命令）をサイクル番号♯１の時点でフェッチし、サイクル番号♯３で実行する。サイクル番号♯３において条件判定を行い条件が成立した時点で、命令デコーダ２１よりスキップ処理開始信号が出力され、サイクル番号♯４の時点ではスキップ状態フラグがセットされる。これと同時に、分岐先アドレスレジスタ３６に分岐先アドレス（この場合１０５）がセットされる。
【００５５】
スキップ状態フラグがスキップ状態にセットされると、その時点でＥＸＥステージにある命令から、データの書き込みが禁止され、図７においては、命令Ａのデータ書き込みから禁止される。また、スキップ状態フラグがスキップ状態の間は、実行ユニット３２でプログラムカウンタ３５のアドレスと分岐先アドレスレジスタ３６のアドレスの比較演算が行われる。［プログラムカウンタの現在のアドレス］≧［分岐先アドレスレジスタのアドレス］となったサイクル番号♯６の時点で、第１のスキップ処理終了信号Ｉが出力され、これに伴ってパイプラインレジスタ３７により１サイクル分だけ遅延してスキップ状態フラグがリセットされる。即ち、サイクル番号♯７までスキップ状態フラグがセットされ、サイクル番号♯８でリセットされる。
【００５６】
アドレスが１０５番地の命令である命令Ｅは、ＥＸＥステージがスキップ状態フラグが通常状態にリセットされたサイクル番号♯８の時点となるため、命令Ｅ以降のデータ書き込みから再び有効になる。
【００５７】
このように、本実施形態のＣＰＵ１０では、スキップ処理専用の命令を用いることなく、スキップ処理制御を実現することができ、かつハードウェアリソースを有効活用することで、小型な構成とすることができる。
【００５８】
また、本実施形態のプログラム制御方法によれば、スキップ処理を終了するための命令が不要となり、命令数が削減できる。さらに、条件付き分岐命令での条件成立にてフラグ・セットを行うとともにアドレスの比較にてフラグ・リセットを行うことにより、スキップ処理を開始、終了するための命令が不要となり、命令数が削減できる他、プログラム中の、命令の有効化／無効化を行う位置をプログラマが意識し、必要な命令を埋め込む作業を不要とできる効果もある。
【００５９】
以上のごとく、本実施形態は下記の特徴を有する。
プログラム制御方法として、前方のみに分岐することを許可された条件付き分岐命令で指定された分岐先アドレスと、プログラムカウンタ３５の現在のアドレスが、分岐先アドレス≦現在のアドレスとなったことをトリガとしてスキップ処理を終了する。これにより、スキップ無効命令を挿入する場合に比べ、命令数が少なくて済む。また、スキップ処理用の命令を実装しなくてよい。
【００６０】
ＣＰＵ（プロセッサ）として、スキップ処理制御手段（２２，３０）は、条件付き分岐命令によって指定される分岐先アドレスを保持するための分岐先アドレスレジスタ３６と、分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスを比較するアドレス比較手段としてのＡＬＵ（算術論理演算ユニット）５０と、を備え、ＡＬＵ５０は、分岐先アドレス≦現在のアドレスとなったことをトリガにして、スキップ状態フラグを通常状態にリセットする。これにより、スキップ状態フラグをリセットする別構成として好ましいものとなる。
【００６１】
また、アドレス比較手段は、データパス３０の内部のＡＬＵ（算術論理演算ユニット）５０で構成され、スキップ状態フラグがスキップ状態にセットされている場合には、ＡＬＵ５０に、分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスを入力し、ＡＬＵ５０より出力されるコンディションコード、即ち、比較演算結果が分岐先アドレス≦現在のアドレスとなったことをトリガにして、スキップ状態フラグを通常状態にリセットする。これにより、分岐先アドレスレジスタ３６の分岐先アドレスとプログラムカウンタ３５の現在のアドレスの比較を実行する構成として、データパス３０の内部のＡＬＵ５０を用いることによってリソースの活用による小型化を図ることができる。
（第４の実施の形態）
次に、第４の実施形態を、第３の実施形態との相違点を中心に説明する。
【００６２】
図８は、図６に代わる本実施形態におけるＣＰＵの内部構成を示すブロック図である。図９には、図７に代わる本実施形態におけるスキップ処理中のパイプライン動作図を示す。
【００６３】
図８において、スキップ処理制御ユニット２２は、スキップ状態フラグ２２ａと、フラグデータ退避手段としてのフラグデータ退避ユニット２２ｂと、フラグデータ復帰手段としてのフラグデータ復帰ユニット２２ｃを備えている。また、データパス３０にはフラグデータ退避用レジスタ３８が設けられている。
【００６４】
本実施形態においては、スキップ処理制御ユニット２２とデータパス３０によりスキップ処理制御手段が構成されている。
この構成により、次のように作用する。
【００６５】
図９において、アドレスが１００番地の条件付き分岐命令（前方のみに分岐することを許可された条件付き分岐命令）の後に、アドレスが１０１番地の命令Ａ、アドレスが１０２番地の命令Ｂ、アドレスが１０３番地の命令Ｃ、アドレスが１０４番地の命令Ｄがスキップ処理されるとともに、アドレスが１０２番地の命令Ｂとアドレスが１０３番地の命令Ｃとの間において割り込みが発生してアドレスが１０６番地の命令Ｆを実行した後にリターンするものとする。
【００６６】
条件付き分岐命令（前方のみに分岐することを許可された条件付き分岐命令）によりスキップ状態フラグがセットされ、その後の割り込みの発生時にスキップ処理制御ユニット２２のフラグデータ退避ユニット２２ｂはスキップ状態フラグのフラグデータをレジスタ３８へ退避する。また、割り込みの発生にて、プログラムカウンタ３５および分岐先アドレスレジスタ３６にはアドレス（番地）として「１０６」がセットされる（分岐先アドレス≦現在のアドレスが成立する）。
【００６７】
割り込みが終了した後の復帰命令により、スキップ処理制御ユニット２２のフラグデータ復帰ユニット２２ｃは、レジスタ３８に退避したフラグデータをスキップ状態フラグに復帰する。また割り込みの終了に伴うアドレスが１０３番地の命令Ｃを処理すべくプログラムカウンタ３５にはアドレス（番地）として「１０３」がセットされる（分岐先アドレスレジスタ３６にはアドレス（番地）として「１０５」がセットされ、分岐先アドレス＞現在のアドレスとなる）。
【００６８】
その後、サイクル番号♯７において、分岐先アドレスレジスタ３６の分岐先アドレスが「１０５」、プログラムカウンタ３５の現在のアドレスが「１０５」、即ち、分岐先アドレス＝現在のアドレスとなり、その次のサイクルでスキップ状態フラグをリセットする（スキップ処理を終了させる）。
【００６９】
このようにして、割り込みによって処理が切り替わり、リターン命令により処理を再開する際においても、スキップ処理を継続することができる。
ここで、前述のフラグデータ退避ユニット２２ｂ、フラグデータ復帰ユニット２２ｃおよびフラグデータ退避用レジスタ３８が無かった場合について図１０を用いて説明する。
【００７０】
図１０において、条件付き分岐命令（前方のみに分岐することを許可された条件付き分岐命令）によりスキップ状態フラグがセットされた後において割り込みが発生してもスキップ状態フラグのフラグデータの退避が行われない。この状態において、割り込みの発生にて、プログラムカウンタ３５および分岐先アドレスレジスタ３６にはアドレス（番地）として「１０６」がセットされ、この分岐先アドレス≦現在のアドレスの成立に伴ってスキップ状態フラグがリセットされることになる。
【００７１】
割り込みが終了すると、アドレスが１０３番地の命令Ｃを処理すべくプログラムカウンタ３５にはアドレス（番地）として「１０３」が、分岐先アドレスレジスタ３６にはアドレス（番地）として「１０５」がセットされ、分岐先アドレス＞現在のアドレスとなるが、既にスキップ状態フラグのリセットのための動作が終わっているため、スキップ処理を継続することができない。
【００７２】
これに対し、本実施形態においては、割り込みによりスキップ状態フラグがリセットされることはない。
スキップ状態フラグのデータは図８のフラグデータ退避用レジスタ３８ではなくＣＰＵ外部のメモリに退避してもよい。
【００７３】
なお、図８においてスキップ状態フラグ２２ａは制御ユニット２０ではなくデータパス３０のプログラム状態レジスタ３４においてスキップ状態フラグ３４ａとして設けてもよい。
【００７４】
以上のごとく、本実施形態は下記の特徴を有する。
ＣＰＵ（プロセッサ）として、スキップ処理制御手段（２２，３０）は、割り込み発生時にスキップ状態フラグ（２２ａ）のフラグデータをレジスタ３８ないしメモリへ退避するフラグデータ退避ユニット２２ｂと、復帰命令により、退避したフラグデータをスキップ状態フラグ（２２ａ）に復帰するフラグデータ復帰ユニット２２ｃと、を備える。これにより、割り込み時のスキップ処理を継続することができる。この構成は第１実施形態に適用してもよい。
【００７５】
なお、これまでの説明においてはパイプラインでシーケンス制御を行う場合について説明してきたが、これに限定されるものではない。
【図面の簡単な説明】
【００７６】
【図１】第１の実施形態のＣＰＵの内部構成を示すブロック図。
【図２】ＣＰＵのパイプライン動作図。
【図３】一般例でのスキップ処理中のパイプライン動作図。
【図４】第１の実施形態のスキップ処理中のパイプライン動作図。
【図５】第２の実施形態のスキップ処理中のパイプライン動作図。
【図６】第３の実施形態のＣＰＵの内部構成を示すブロック図。
【図７】第３の実施形態のスキップ処理中のパイプライン動作図。
【図８】第４の実施形態のＣＰＵの内部構成を示すブロック図。
【図９】第４の実施形態のスキップ処理中のパイプライン動作図。
【図１０】比較のためのスキップ処理中のパイプライン動作図。
【符号の説明】
【００７７】
１０…ＣＰＵ、２０…制御ユニット、２１…命令デコーダ、２２…スキップ処理制御ユニット、２２ａ…スキップ状態フラグ、２２ｂ…フラグデータ退避ユニット、２２ｃ…フラグデータ復帰ユニット、３０…データパス、３１…ロードストアユニット、３２…実行ユニット、３３…レジスタファイル、３４…プログラム状態レジスタ、３５…プログラムカウンタ、３６…分岐先アドレスレジスタ、３７…パイプラインレジスタ、３８…フラグデータ退避用レジスタ、５０…ＡＬＵ。
【図１】
2006309454.tif 000003
【図２】
2006309454.tif 000004
【図３】
2006309454.tif 000005
【図４】
2006309454.tif 000006
【図５】
2006309454.tif 000007
【図６】
2006309454.tif 000008
【図７】
2006309454.tif 000009
【図８】
2006309454.tif 000010
【図９】
2006309454.tif 000011
【図１０】
2006309454.tif 000012