(57)【要約】【課題】  ノンブロッキング動作におけるパイプラインのストールを抑制することのできるマイクロプロセッサを提供する。【解決手段】  命令の実行をパイプライン処理するマイクロプロセッサは、メモリ１と、先行のロード命令によりメモリ１から読み出されたデータを保持するバッファレジスタ２と、バッファレジスタ２の保持されたデータが有効であること示すフラグを立てるフラグ生成部３と、演算命令による演算を実行するＡＬＵ４と、ＡＬＵ４の出力を格納するパイプライン・Ｍステージレジスタ５と、選択信号Ｓによりバッファレジスタ２の出力とパイプライン・Ｍステージレジスタ５の出力のいずれかを選択してＧＰＲ７へ出力するセレクタ６と、フラグ生成部３にフラグが立っているときに実行される命令がＧＰＲ７への書き込みを伴わない命令であるときにバッファレジスタ２の出力を選択するよう選択信号Ｓを生成する選択信号生成部８とを具備する。【選択図】  図１
2007079711.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行をパイプライン処理するマイクロプロセッサであって、
メモリと、
先行のロード命令により前記メモリから読み出されたデータを保持するデータ保持手段と、
前記データが有効であるときに、前記データが有効であること示すフラグを立てるフラグ生成手段と、
前記ロード命令に後続の演算命令による演算を実行する演算手段と、
前記演算手段の演算結果を格納する演算結果格納手段と、
選択信号により前記データ保持手段の出力と前記演算結果格納手段の出力のいずれかを選択し、汎用レジスタへ出力する選択手段と、
前記フラグが立っているときに実行される命令の解析結果にもとづいて前記選択信号を生成する選択信号生成手段と
を具備することを特徴とするマイクロプロセッサ。
【請求項２】
前記選択信号生成手段は、前記フラグが立っているときに実行される命令が汎用レジスタへの書き込みを伴わない命令であるときに前記データ保持手段の出力を選択するよう前記選択信号を生成することを特徴とする請求項１に記載のマイクロプロセッサ。
【請求項３】
命令の実行をパイプライン処理するマイクロプロセッサであって、
メモリと、
先行のロード命令により前記メモリから読み出されたデータを保持するデータ保持手段と、
前記データが有効であるときに、前記データが有効であること示すフラグを立てるフラグ生成手段と、
前記ロード命令に後続の演算命令による演算を実行する演算手段と、
前記演算手段の演算結果を格納する演算結果格納手段と、
第１の選択信号により前記データ保持手段の出力と前記演算結果格納手段の出力のいずれかを選択し、汎用レジスタへ出力する第１の選択手段と、
第２の選択信号により前記データ保持手段の出力と前記汎用レジスタの出力のいずれかを選択し、前記演算手段へ出力する第２の選択手段と、
前記フラグが立っているときに実行される命令の解析結果にもとづいて前記第１の選択信号を生成する第１の選択信号生成手段と、
前記フラグが立っているときに実行される命令の解析結果にもとづいて前記第２の選択信号を生成する第２の選択信号生成手段と
を具備することを特徴とするマイクロプロセッサ。
【請求項４】
前記第１の選択信号生成手段は、前記フラグが立っているときに実行される命令が次のロード命令であるときに前記データ保持手段の出力を選択するよう前記第１の選択信号を生成することを特徴とする請求項３に記載のマイクロプロセッサ。
【請求項５】
前記第２の選択信号生成手段は、前記フラグが立っているときに実行される命令が前記データ保持手段に保持されているデータを参照する命令であるときは、前記データ保持手段の出力を選択するよう前記第２の選択信号を生成することを特徴とする請求項３に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特にパイプライン処理を行うマイクロプロセッサに関する。
【背景技術】
【０００２】
マイクロプロセッサの命令実行を高速化する手法の一つにパイプライン処理がある。パイプライン処理では、命令の実行をいくつかのステージに分け、各ステージの処理を並列に行うことにより、複数の命令が時間をずらしながら並行的に実行される。これにより、マイクロプロセッサの処理効率が向上する。総てのステージを同じ処理時間（例えば、１クロック）で常に並列に動作させることができれば、最高の処理効率が得られる。
【０００３】
しかし、ロード命令などはメモリアクセスに時間がかかるため、メモリアクセスが完了するまで後続命令の処理を待たせる必要がある。このような処理待ち時間が発生したときは、パイプラインの処理を停止させる必要があり、この処理の停止をストールと呼ぶ。
【０００４】
ストールが発生するとマイクロプロセッサの処理効率が低下するので、従来からストールの発生を抑える工夫がされており、その一つとしてパイプラインの段数と同数以上のプログラムカウンタを設ける方法が提案されている（例えば、特許文献１参照。）。
【０００５】
そのほか、ロード命令の後続命令が、そのロード命令でロードされるレジスタを使用しない場合には、パイプラインをストールさせることなく後続の命令を継続して実行することが行われる。これをノンブロッキングロードと呼ぶ。
【０００６】
しかし、ノンブロッキングロードの場合、ロード命令でメモリから読み出したデータは、その後のいずれかのタイミングでマイクロプロセッサの汎用レジスタ（ＧＰＲ）に格納しなければならない。このとき、そのタイミングが後続の命令の演算結果をＧＰＲに書き込むステージと重なることがある。従来、このような場合、パイプラインをストールさせて後続の命令の演算結果の書き込み動作を待たせ、メモリからの読み出しデータをＧＰＲへ書き込んでいた。図５に、その例を示す。
【０００７】
図５は、命令フェッチ（Ｆ）、命令デコード（Ｄ）、命令実行（Ｅ）、データキャッシュアクセス（Ｍ）、汎用レジスタ書き込み（Ｗ）の５つのパイプラインステージ有する従来のマイクロプロセッサにおいて、ノンブロッキングロードを実行した際にストールが発生する例を示したものである。
【０００８】
図５の例では、先行のロード命令（ｌｗ）でメモリから読み出したデータを汎用レジスタの１つであるレジスタｒ８に書き込むタイミングが、後続の減算命令（ｓｕｂ）の演算結果を格納したレジスタの出力を汎用レジスタの１つであるレジスタｒ２０に書き込むタイミングと重なるため、後続の命令の実行をストールさせて演算結果の汎用レジスタｒ２０への書き込みを待たせ、ロード命令でメモリから読み出したデータを先に汎用レジスタｒ８に書き込んでいた。なお、パイプラインステージに表記のＭｓ、Ｅｓ、Ｄｓは、それぞれＭ、Ｅ、Ｄステージにストールが発生したことを示す。
【０００９】
従来、このようなノンブロッキングロードなどのノンブロッキング動作において、上述のようにパイプラインをストールさせることにより、マイクロプロセッサの処理のスループットが低下するという問題が発生していた。
【特許文献１】特開２００４−３６２４５４号公報  （第３−４ページ、図２）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
そこで、本発明の目的は、ノンブロッキング動作におけるパイプラインのストールを抑制することのできるマイクロプロセッサを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の一態様によれば、命令の実行をパイプライン処理するマイクロプロセッサであって、メモリと、先行のロード命令により前記メモリから読み出されたデータを保持するデータ保持手段と、前記データが有効であるときに、前記データが有効であること示すフラグを立てるフラグ生成手段と、前記ロード命令に後続の演算命令による演算を実行する演算手段と、前記演算手段の演算結果を格納する演算結果格納手段と、選択信号により前記データ保持手段の出力と前記演算結果格納手段の出力のいずれかを選択し、汎用レジスタへ出力する選択手段と、前記フラグが立っているときに実行される命令の解析結果にもとづいて前記選択信号を生成する選択信号生成手段とを具備することを特徴とするマイクロプロセッサが提供される。
【００１２】
また、本発明の別の一態様によれば、命令の実行をパイプライン処理するマイクロプロセッサであって、メモリと、先行のロード命令により前記メモリから読み出されたデータを保持するデータ保持手段と、前記データが有効であるときに、前記データが有効であること示すフラグを立てるフラグ生成手段と、前記ロード命令に後続の演算命令による演算を実行する演算手段と、前記演算手段の演算結果を格納する演算結果格納手段と、第１の選択信号により前記データ保持手段の出力と前記演算結果格納手段の出力のいずれかを選択し、汎用レジスタへ出力する第１の選択手段と、第２の選択信号により前記データ保持手段の出力と前記汎用レジスタの出力のいずれかを選択し、前記演算手段へ出力する第２の選択手段と、前記フラグが立っているときに実行される命令の解析結果にもとづいて前記第１の選択信号を生成する第１の選択信号生成手段と、前記フラグが立っているときに実行される命令の解析結果にもとづいて前記第２の選択信号を生成する第２の選択信号生成手段とを具備することを特徴とするマイクロプロセッサが提供される。
【発明の効果】
【００１３】
本発明によれば、パイプラインのストールの発生を抑制することができるので、マイクロプロセッサの処理のスループットを向上させることができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施例を図面を参照して説明する。
【実施例１】
【００１５】
図１は、本発明の実施例１に係るマイクロプロセッサの構成の例を示すブロック図である。本実施例のマイクロプロセッサも従来と同様、命令フェッチ（Ｆ）、命令デコード（Ｄ）、命令実行（Ｅ）、データキャッシュアクセス（Ｍ）、汎用レジスタ書き込み（Ｗ）の５つのパイプラインステージ有する。
【００１６】
本実施例のマイクロプロセッサは、データなどを記憶するメモリ１と、メモリ１から読み出されたデータを保持するバッファレジスタ２と、バッファレジスタ２へ保持されているデータが有効であることを示すフラグを立てるフラグ生成部３と、演算命令による演算を実行するＡＬＵ（演算論理装置）４と、ＡＬＵ４の演算結果がパイプラインのＭステージの期間に書き込まれるパイプライン・Ｍステージレジスタ５と、バッファレジスタ２の出力とパイプライン・Ｍステージレジスタ５の出力が入力されて、そのいずれかを選択して出力するセレクタ６と、レジスタ番号を有する複数のレジスタで構成され、セレクタ６の出力が書き込まれるＧＰＲ（汎用レジスタ）７と、セレクタ６における入力選択用の選択信号Ｓを生成する選択信号生成部８とを有する。
【００１７】
バッファレジスタ２へは、メモリ１からのデータとともに、書き込み先のＧＰＲ７のレジスタの番号（Ｄｓｔｒｅｇ番号）が保持される。
【００１８】
ＡＬＵ４は、２つの入力端子Ｒｓ、Ｒｔを有する。Ｒｓ端子へは、演算命令が指定したソースレジスタからのデータが入力され、Ｒｓ端子へは、演算命令が指定したターゲットレジスタからのデータが入力される。ここで、ソースレジスタおよびターゲットレジスタはＧＰＲ７のレジスタの１つであり、それぞれＧＰＲ７へ入力されるＲｓｒｅｇ番号（ソースレジスタ指定）およびＲｔｒｅｇ番号（ターゲットレジスタ指定）で指定される。
【００１９】
パイプライン・Ｍステージレジスタ５へは、ＡＬＵ４の演算結果とともに、書き込み先のＧＰＲ7のレジスタの番号（Ｄｓｔｒｅｇ番号）が書き込まれる。
【００２０】
ＧＰＲ７は、複数のレジスタで構成され、それぞれのレジスタに異なるデータを書き込むことができるが、それぞれのレジスタに対するデータの書き込みを同時に行うことはできない。
【００２１】
そのため、本実施例のマイクロプロセッサにおいても従来と同様、ノンブロッキングロード動作を行なうと、先行するロード命令でメモリ１から読み出したデータをＧＰＲ７へ書き込むタイミングと、後続の演算命令による演算結果をＧＰＲ７へ書き込むタイミングが重なることが起きる。
【００２２】
このとき、本実施例のマイクロプロセッサは、従来のマイクロプロセッサとは異なり、パイプライン処理をストールさせず、後続の演算命令による演算結果のＧＰＲ７への書き込みを優先し、先行するロード命令でメモリ１から読み出したデータより先に、パイプライン・Ｍステージレジスタ５に格納されたＡＬＵ４の演算結果をＧＰＲ７へ書き込む。
【００２３】
そのために、本実施例のマイクロプロセッサは、バッファレジスタ２を有し、ＧＰＲ７への書き込みを待つ間、メモリ１から読み出したデータをバッファレジスタ２に保持する。
【００２４】
バッファレジスタ２にＧＰＲ７への書き込みを待つデータが入力されると、フラグ生成部３は、バッファレジスタ２へ保持されているデータが有効であることを示すフラグを立てる。
【００２５】
選択信号生成部８は、メモリ１から読み出されてバッファレジスタ２に保持されたデータをＧＰＲ７へ書き込むタイミングを制御する。
【００２６】
選択信号生成部８へは、フラグ生成部３から出力されたフラグと、先行のロード命令に後続する命令が入力される。選択信号生成部８は、フラグが立っているときに入力される後続の命令が、ジャンプ命令、分岐命令、ストア命令、専用レジスタを使用する乗算／除算命令など、ＧＰＲ７への書き込みを伴わない命令であるかどうかを解析する。
【００２７】
選択信号生成部８は、先行のロード命令に後続する命令がＧＰＲ７への書き込みを伴わない命令であるときは、その空きステージのタイミングで、セレクタ６がバッファレジスタ２からの出力を選択するよう、選択信号Ｓを出力する。
【００２８】
この選択信号Ｓの出力により、先行のロード命令によりメモリ１から読み出されてバッファレジスタ２に保持されていたデータは、そのデータとともにバッファレジスタ２に保持されていたＤｓｔｒｅｇ番号で指定されたＧＰＲ７へ書き込まれる。
【００２９】
この書き込みが行なわれると、選択信号生成部８はフラグ生成部３に対してフラグのクリア要求を出力し、フラグ生成部３はフラグをクリアする。
【００３０】
図２に、本実施例のマイクロプロセッサにおけるパイプライン処理による命令実行の例を示す。
【００３１】
図２の例では、ノンブロッキングロード動作として、ロード命令（ｌｗ）に継続して、加算命令（ａｄｄ）、減算命令（ｓｕｂ）、分岐命令（ｂｎｅ）、加算命令（ａｄｄ）が順次実行されるものとする。
【００３２】
ロード命令でメモリ１から読み出されたデータをＧＰＲ７のレジスタｒ８（ｒ8はレジスタ番号）へ書き込むタイミングは、パイプライン・Ｍステージレジスタ５に格納したＡＬＵ４による減算命令（ｓｕｂ）の実行結果（ＳＵＢ）のＧＰＲ７のレジスタｒ２０（ｒ２０はレジスタ番号）への書き込みタイミングと重なる。
【００３３】
このとき、本実施例のマイクロプロセッサは、減算命令（ｓｕｂ）の実行結果の書き込みを優先し、パイプライン・Ｍステージレジスタ５の出力をＧＰＲ７のレジスタｒ２０へ書き込む。
【００３４】
一方、メモリ１から読み出されたデータおよびＤｓｔｒｅｇ番号であるｒ８は、バッファレジスタ２へ書き込まれる。この書き込みを受けて、フラグ生成部３は、そのデータが有効であることを示すフラグ（“１”）を立てる。
【００３５】
このフラグが立つと、選択信号生成部８は、後続の命令がＧＰＲ７への書き込みを伴わない命令であるかどうかを解析する。その結果、後続の命令のうち、分岐命令（ｂｎｅ）がＧＰＲ７への書き込みを伴わない命令であることが判明する。そこで、選択信号生成部８は、分岐命令（ｂｎｅ）の空きステージで選択信号Ｓを“１”にする。
【００３６】
選択信号Ｓが“１”のとき、セレクタ６がバッファレジスタ２からの出力を選択するものとすると、このタイミングで、バッファレジスタ２に保持されていたメモリ１から読み出されたデータは、ＧＰＲ７のレジスタｒ８へ書き込まれる。
【００３７】
この書き込みが行なわれると、選択信号生成部８はフラグ生成部３に対してフラグのクリア要求を出力し、フラグ生成部３はフラグをクリアする。
【００３８】
このような本実施例のマイクロプロセッサによれば、ノンブロッキング動作において、先行のロード命令によりメモリから読み出されたデータは、後続の命令がＧＰＲ７への書き込みを伴わない命令であるときに、そのパイプラインの空きステージを利用して、汎用レジスタへ書き込まれる。これにより、後続命令を実行するときにパイプラインをストールさせる必要がなく、マイクロプロセッサの処理のスループットを向上させることができる。
【実施例２】
【００３９】
図３は、本発明の実施例２に係るマイクロプロセッサの構成の例を示すブロック図である。本実施例のマイクロプロセッサも実施例１と同じＦ、Ｄ、Ｅ、Ｍ、Ｗの５つのパイプラインステージ有する。そこで、実施例１のマイクロプロセッサと同じ機能を有するブロックには図１と同じ符号を付し、ここではその詳細な説明を省略する。なお、本実施例のマイクロプロセッサにおけるメモリからのデータの読み出しは、メモリアクセスのアドレスが確定したサイクルの次のサイクルで行なわれるものとする。
【００４０】
本実施例のマイクロプロセッサも実施例１のマイクロプロセッサと同様に、メモリ１と、バッファレジスタ２と、フラグ生成部３と、ＡＬＵ４と、パイプライン・Ｍステージレジスタ５と、セレクタ６と、ＧＰＲ７とを有する。さらに、本実施例のマイクロプロセッサは、ＡＬＵ４のＲｓ端子へ入力するデータをＧＰＲ７からの出力とするかバッファレジスタ２からの出力とするかを選択するセレクタ９１と、ＡＬＵ４のＲｔ端子へ入力するデータをＧＰＲ７からの出力とするかバッファレジスタ２からの出力とするかを選択するセレクタ９２とを有し、セレクタ６に与える選択信号Ｓ１を生成する選択信号生成部８１と、セレクタ９１に与える選択信号Ｓ２１およびセレクタ９２に与える選択信号Ｓ２２を生成する選択信号生成部８２とを有する。
【００４１】
選択信号生成部８１へは、フラグ生成部３から出力されたフラグと、先行のロード命令に後続する命令が入力される。選択信号生成部８１は、フラグが立っているときに入力される後続の命令の中に、次のロード命令があるかどうかを解析する。そして、次のロード命令が発行されたときは、その空きステージのタイミングで、セレクタ６がバッファレジスタ２からの出力を選択するよう、選択信号Ｓ１を出力する。
【００４２】
この選択信号Ｓ１が出力されると、先行のロード命令によりメモリ１から読み出されてバッファレジスタ２に保持されていたデータは、データとともに保持されていたＤｓｔｒｅｇ番号で指定されたＧＰＲ７へ書き込まれる。
【００４３】
この書き込みが行なわれると、選択信号生成部８１はフラグ生成部３に対してフラグのクリア要求を出力し、フラグ生成部３はフラグをクリアする。
【００４４】
ところで、選択信号Ｓ１の出力により、バッファレジスタ２に保持されているデータをＧＰＲ７へ書き込む場合、次のロード命令が発行される前にバッファレジスタ２に保持されているデータを参照する命令が発行される可能性がある。この場合、ＧＰＲ７のデータを用いて命令を実行するとデータのコヒーレンシ（一貫性）が保たれなくなる。
【００４５】
そこで、本実施例ではセレクタ９１、９２および選択信号生成部８２を設け、次のロード命令が発行される前にバッファレジスタ２に保持されているデータを参照する命令が発行されてもデータのコヒーレンシが保てるようにしている。
【００４６】
すなわち、選択信号生成部８２は、フラグ生成部３から出力されたフラグと先行のロード命令に後続する命令および後続の命令で指定されるＲｓｒｅｇ番号とＲｔｒｅｇ番号、バッファレジスタに保持されているＤｓｔｒｅｇ番号が入力され、フラグが立っているときに入力される後続の命令の中に、バッファレジスタ２に保持されているデータを参照する命令があるかどうかを解析する。具体的には、後続の命令で指定されるＲｓｒｅｇ番号あるいはＲｔｒｅｇ番号が、バッファレジスタ２に保持されているＤｓｔｒｅｇ番号と一致するかどうかを検査する。
【００４７】
その結果、選択信号生成部８２は、Ｒｓｒｅｇ番号がＤｓｔｒｅｇ番号と一致するときは選択信号Ｓ２１を出力し、Ｒｔｒｅｇ番号がＤｓｔｒｅｇ番号と一致するときは選択信号Ｓ２２を出力する。
【００４８】
選択信号Ｓ２１が出力されると、セレクタ９１は、ＡＬＵ４のＲｓ端子へ入力するデータをバッファレジスタ２からの出力とする選択を行なう。
【００４９】
選択信号Ｓ２２が出力されると、セレクタ９２は、ＡＬＵ４のＲｔ端子へ入力するデータをバッファレジスタ２からの出力とする選択を行なう。
【００５０】
これにより、バッファレジスタ２に保持されているデータをＧＰＲ７へ書き込む前に、バッファレジスタ２に保持されているデータを参照する命令が発行されたときは、バッファレジスタ２に保持されているデータがＡＬＵ４へ入力され、データのコヒーレンシが保たれる。
【００５１】
図４に、本実施例のマイクロプロセッサにおけるパイプライン処理による命令実行の例を示す。
【００５２】
図４の例では、ノンブロッキングロード動作として、ロード命令（ｌｗ）に継続して、加算命令（ａｄｄ）、減算命令（ｓｕｂ）、積和命令（ｍａｄｄ）、乗算命令（ｍｕｌｔ）、ロード命令（ｌｗ）、加算命令（ａｄｄ）が順次実行されるものとする。
【００５３】
先行のロード命令でメモリ１から読み出されたデータのＧＰＲ７のレジスタｒ８に書き込むタイミングは、パイプライン・Ｍステージレジスタ５に格納したＡＬＵ４による減算命令の実行結果（ＳＵＢ）のＧＰＲ７のレジスタｒ２０への書き込みタイミングと重なる。
【００５４】
このとき、本実施例のマイクロプロセッサも実施例１のマイクロプロセッサと同様、減算命令（ｓｕｂ）の実行結果の書き込みを優先し、パイプライン・Ｍステージレジスタ５の出力をＧＰＲ７のレジスタｒ２０へ書き込む。
【００５５】
一方、メモリ１から読み出されたデータはバッファレジスタ２へ書き込まれ。この書き込みを受けて、フラグ生成部３は、そのデータが有効であることを示すフラグ（“１”）を立てる。
【００５６】
このフラグが立つと、選択信号生成部８１は、後続の命令に次のロード命令があるかどうかを解析する。そして、次のロード命令が発行されたときに、選択信号Ｓ１を“１”にする。
【００５７】
選択信号Ｓが“１”のとき、セレクタ６はバッファレジスタ２からの出力を選択し、このタイミングで、バッファレジスタ２に保持されていたメモリ１から読み出されたデータが、ＧＰＲ７のレジスタｒ８へ書き込まれる。
【００５８】
この書き込みが行なわれると、選択信号生成部８はフラグ生成部３に対してフラグのクリア要求を出力し、フラグ生成部３はフラグをクリアする。
【００５９】
このような本実施例のマイクロプロセッサによれば、ノンブロッキング動作において、先行のロード命令によりメモリから読み出されたデータは、後続の命令の中で次のロード命令が発行されたときに汎用レジスタへ書き込まれる。これにより、後続命令を実行するときにパイプラインをストールさせる必要がなく、マイクロプロセッサの処理のスループットを向上させることができる。
【図面の簡単な説明】
【００６０】
【図１】本発明の実施例１に係るマイクロプロセッサの構成の例を示すブロック図。
【図２】本発明の実施例１に係るマイクロプロセッサにおけるパイプライン処理の例を示す図。
【図３】本発明の実施例２に係るマイクロプロセッサの構成の例を示すブロック図。
【図４】本発明の実施例２に係るマイクロプロセッサにおけるパイプライン処理の例を示す図。
【図５】従来のマイクロプロセッサにおけるパイプライン処理の例を示す図。
【符号の説明】
【００６１】
１  メモリ
２  バッファレジスタ
３  フラグ生成部
４  ＡＬＵ
５  パイプライン・Ｍステージレジスタ
６、９１、９２  セレクタ
７  ＧＰＲ
８  選択信号生成部
８１  第１の選択信号生成部
８２  第２の選択信号生成部
【図１】
2007079711.tif 000003
【図２】
2007079711.tif 000004
【図３】
2007079711.tif 000005
【図４】
2007079711.tif 000006
【図５】
2007079711.tif 000007