(57)【特許請求の範囲】
【請求項１】
デコード段を備えたパイプラインを有するプロセッサにおいて命令をバッファリングする方法であって、
前記デコード段の機能停止を検出するステップと、
前記デコード段の機能停止の検出に応答して、前記デコード段が機能停止状態でなくなるまでメモリ内の命令の前のフェッチを再実施するステップと、
前記デコード段が機能停止状態でなくなった後に命令バッファ内へ前記フェッチされた命令を書き込むステップと、
を含む、方法。
【請求項２】
デコード段に先行する複数の順次段と、
順次段の数より小さいか等しい数の命令を同時に記憶するよう動作しうる限定命令バッファと、
該限定命令バッファにより受け取られる命令を記憶する記憶場所のアドレスを指示するカウントを記憶するカウンタを含むカウンタシステムであって、前記デコード段の状態に基づいて前記カウンタの前記カウントを調整するように動作しうるカウンタシステムと、を含み、
前記複数の順次段が、前記カウントにより指示される前記アドレスに前記命令をフェッチするように動作しうるフェッチユニットを含む、
プロセッサパイプライン。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般的には、プロセッサに関し、特に、プロセッサにおいて命令をバッファリングする方法およびシステムに関する。
【０００２】
【従来の技術】
多くの最新のプロセッサは、効率を高めるためにプロセッサ内にパイプラインを用いている。パイプラインの使用により、タスクはいくつかの順次サブタスクに細分される。順次サブタスクへのタスクの細分は、任意の与えられた時刻におけるいくつかのプログラム命令のフェッチング，デコーディングおよび実行を可能にする。したがって、任意の特定の時刻において、いくつかの命令がパイプラインのさまざまな段において処理されうる。多くのそのようなプロセッサは、デコード段を有するパイプラインを含む。パイプラインのデコード段においては、プログラムメモリから得られた命令は、その命令が実行されうるようにデコードされる。命令がデコードされた後には、その命令をプロセッサ内に記憶する必要はない。しかし、命令がデコードされるまでは、プログラムメモリから得られた命令は記憶されなければならない。命令がデコードされるまで命令を記憶するために、多くのプロセッサは命令バッファを用いる。
【０００３】
従来、命令バッファは、デコード段を含むデコード段までの段数に等しい数の命令を記憶するのに十分なレジスタを含む。例えば、パイプラインがその最初の３つの段としてプレフェッチ段とフェッチ段とデコード段とを有すれば、関連の命令バッファは、３つの命令を記憶するための３つのレジスタを有する。命令バッファのレジスタのこの数が従来から用いられてきた理由は、デコード段が機能停止していると決定されたときに、得られつつある命令の保存を可能にするためである。
【０００４】
命令バッファの使用は情報の損失なしに処理の再開を可能にするが、その欠点がないわけではない。例えば、通常の命令フェッチのサイズが増大するのに伴って、命令バッファ内のレジスタのサイズが増大し、これは追加のシリコン領域を必要とする。
【０００５】
【発明が解決しようとする課題】
したがって、プロセッサにおいて命令をバッファリングする改善された方法およびシステムが必要とされるようになった。本発明は、従来のシステムおよび方法の欠点を改善する、プロセッサにおける命令のバッファリングのシステムおよび方法を提供する。
【０００６】
【課題を解決するための手段】
本発明の１つの実施の形態によれば、デコード段を備えたパイプラインを有するプロセッサにおいて命令をバッファリングする方法は、前記デコード段の機能停止を検出するステップと、前記デコード段が機能停止状態でなくなるまでメモリ内の命令の前のフェッチを再実施するステップと、前記デコード段が機能停止状態でなくなった後に命令バッファ内へ前記フェッチされた命令を書き込むステップとを含む。
【０００７】
本発明の別の実施の形態によれば、プロセッサ・パイプラインは、デコード段に先行する複数の順次段と、順次段の数より小さいかまたは等しい数の命令を同時に記憶するよう動作しうる限定命令バッファとを含む。前記プロセッサ・パイプラインはまた、カウンタ・システムを含む。このカウンタ・システムは、前記限定命令バッファにより受け取られる命令を記憶する記憶場所のアドレスを指示するカウントを記憶するカウンタを含む。前記カウンタ・システムはまた、前記デコード段の状態に基づいて前記カウンタの前記カウントを調整するように動作しうる。前記複数の順次段は、前記カウントにより指示される前記アドレスにおける前記命令をフェッチするように動作しうるフェッチ段を含む。
【０００８】
本発明の実施の形態は多くの技術的利点を有する。例えば、本発明の１つの実施の形態においては、プログラムメモリからフェッチされた命令をバッファリングするために、従来の大形命令バッファではなく、限定命令バッファが用いられる。小さいサイズの限定命令バッファは、シリコン領域を小さくすることにより、小さい装置を可能にし、または、プロセッサの他の領域内におけるそのようなシリコン領域の使用を可能にする。
【０００９】
他の技術的利点は、当業者にとっては、以下の図面、説明および特許請求の範囲から容易に明らかになる。
本発明およびその利点の完全な理解のために、ここで添付図面と共に以下の説明を参照されたい。
【００１０】
【発明の実施の形態】
本発明の実施の形態およびその利点は図１から図４までを参照することにより最も良く理解でき、これらの図において、同じ参照符号は同じまたは対応する部品を指示するために用いられている。
【００１１】
図１は、本発明の教示によるプロセッサのブロック図である。コンピュータ・システム１０は、プロセッサ１２およびメモリシステム１４を含む。プロセッサ１２は、メモリシステム１４にアクセスする動作を行いうる。メモリシステム１４は、プログラムメモリ１６およびデータメモリ１８の双方を含みうる。プロセッサ１２は、パイプライン２０を含む。パイプライン２０は、プレフェッチ段２４とフェッチ段２６とデコード段２８と読取り段３０と実行段３２と記憶段３４とを含む。プロセッサ１２はまた、付加処理素子２１をも含みうる。
【００１２】
プレフェッチ段２４は、命令を読み取るプログラムメモリ１６内の記憶場所のアドレスを決定する。フェッチ段２６は、プレフェッチ段２４により決定されたプログラムメモリ記憶場所の命令を読み取る。フェッチ段２６は、プログラムメモリ１６からフェッチされた命令をバッファリングする限定命令バッファ５０を含む。限定命令バッファ５０は、図４に示されている。この例においては、限定命令バッファ５０は、第１のレジスタ５２および第２のレジスタ５４を含む。本発明によれば、限定命令バッファ５０は、パイプライン２０内のデコード段２８に先行する段の数と同数のレジスタを含み、それより多くのレジスタは含まず、その数はこの例においては“２”である。
【００１３】
デコード段２８は、プログラムメモリ１６から得た命令をデコードする。読取り段３０は、デコード段２８によりデコードされた命令の実行に必要なデータをデータメモリ１８から読み取る。読取り段３０は、１つより多い段により置換されうる。例えば、読取り段３０は、データメモリ１８内のいずれの場所からデータを読み取るべきかを決定するために必要な計算を行う別個の段と、そのようなデータを読み取る機能を行う別個の段とにより置換されうる。実行段３２は、デコード段２８によりデコードされた命令を実行する機能を行う。記憶段３４は、結果のような、命令の実行後に書き込まれる必要のあるデータを書き込む機能を行う。
【００１４】
デコード段２８に先行する段の数に等しくかつそれより多くない数のレジスタを有する限定命令バッファの使用は、プロセッサ１２のために必要なシリコン領域を減少させる。プロセッサ１２のために必要なシリコン領域の減少は、一般に、有利である。本発明によれば、以下に図２から図４までを参照しつつ詳述するように、プログラムメモリ１６内の命令のフェッチを再実施することにより、なんらプロセッサ性能の損失を生じることなく限定命令バッファを利用しうる。
【００１５】
図２は、パイプライン２０が機能停止しない例における、パイプライン２０のさまざまな段に対するプログラムメモリ１６から得られる命令の場所を示すタイミング図である。正常な処理中においては、プロセッサ１２は、実行のための順次アドレスを有するプログラムメモリ１６内の場所から連続的に命令をフェッチする。ある理由のためにプロセッサ１２が機能停止しても、プロセッサ１２はプログラムメモリ１６からの命令のフェッチを続ける。例えば、プロセッサ１２は、データメモリ１８からのデータの受取りを待つ間、機能停止しうる。そのような場合、限定命令バッファ５０は、処理の再開を待つ間に２つの命令を蓄積することができる。限定命令バッファ５０に関連するプレフェッチ段２４，フェッチ段２６およびデコード段２８の動作について、機能停止が起こらない例に対して、図２を参照しつつを以下に説明する。
【００１６】
第１のクロックサイクル中には、第１の命令Ｉ1に対応する記憶場所のアドレスが計算される。第２のクロックサイクル中には、第２の命令Ｉ2のアドレスが計算され、命令Ｉ1のフェッチングが開始される。第３のクロックサイクル中には、第３の命令Ｉ3に対応する記憶場所のアドレスが計算され、命令Ｉ1のフェッチングが完了し、Ｉ2のフェッチングが開始され、プロセッサ１２は機能停止していないので命令Ｉ1のデコーディングが開始されかつ完了する。
【００１７】
第３のクロックサイクル中には、限定命令バッファ５０のレジスタ５２は命令Ｉ1を記憶する。限定命令バッファ５０は、デコードされるべき現在の命令を記憶する限定命令バッファ５０内のレジスタをポイントするポインタ５６を含む。命令ポインタ５６は、図４においてはレジスタ５２をポイントしているように示されている。第３のクロックサイクル中には、命令ポインタ５６はレジスタ５２をポイントする。第４のクロックサイクル中には、第４の命令Ｉ4のアドレスが計算され、命令Ｉ2のフェッチングが完了し、命令Ｉ3のフェッチングが開始され、命令Ｉ2のデコーディングが開始されかつ完了する。第４のクロックサイクル中には、レジスタ５２は、命令Ｉ1が別の命令により上書きされないために、命令Ｉ1を記憶し続けており、レジスタ５４は命令Ｉ2を記憶し、ポインタ５６はレジスタ５４をポイントする。
【００１８】
第５のクロックサイクル中には、第５の命令Ｉ5のアドレスが計算され、命令Ｉ3のフェッチングが完了し、命令Ｉ4のフェッチングが開始され、命令Ｉ3のデコーディングが開始されかつ完了する。第５のクロックサイクル中には、命令Ｉ3はレジスタ５２に記憶され、限定命令バッファ５０のポインタ５６はレジスタ５２をポイントする。第６のクロックサイクル中には、第６の命令Ｉ6のアドレスが計算され、命令Ｉ4のフェッチングが完了し、命令Ｉ5のフェッチングが開始され、命令Ｉ4のデコーディングが開始されかつ完了し、命令Ｉ3に関連するデータが読み取られる。第６のクロックサイクル中には、命令Ｉ4はレジスタ５４内に記憶され、限定命令バッファ５０のポインタ５６はレジスタ５４をポイントする。
【００１９】
命令を得て処理する上述のシーケンスにおいて、限定命令バッファ５０は、命令がデコードされつつあるとき、その命令を２つのレジスタ５２，５４の１つのに記憶する。プロセッサ１２は上述のシーケンスにおいては機能停止をしないので、限定命令バッファ５０は、フェッチの再実施なしに追加の順次命令のフェッチングの継続を可能にすることが十分にできる。次に、図３を参照しつつ、間欠的な機能停止の期間中におけるプロセッサ１２の動作を説明する。
【００２０】
図３は、パイプライン２０の間欠的な機能停止が起こる例におけるパイプライン２０のさまざまな段に対するプログラムメモリ１６から得られる命令の場所を示すタイミング図である。パイプライン２０に間欠的な機能停止が起こる例におけるプレフェッチ段２４，フェッチ段２６，デコード段２８および限定命令バッファ５０の動作を以下説明する。第１のクロックサイクル中には、第１の命令Ｉ1のアドレスが計算される。図３の最後の行に示されているように、第１のクロックサイクル中にはプロセッサ１２の機能停止は起こらない。第２のクロックサイクル中には、第２の命令Ｉ2のアドレスが計算され、命令Ｉ1のフェッチングが開始される。第３のクロックサイクル中には、第３の命令Ｉ3のアドレスが計算され、命令Ｉ1のフェッチングが完了し、命令Ｉ2のフェッチングが開始され、命令Ｉ1のデコーディングが開始される。この例においては、第３のクロックサイクル中にデコード段２８が機能停止し、したがって、命令Ｉ1のデコーディングは第３のクロックサイクル中には完了しない。ここで用いられるように、デコード段２８の機能停止とは、デコード段２８の実際の機能停止、または、デコード段２８が次の命令をデコードするのを阻止するパイプライン２０内の別の段の機能停止のことをいう。例えば、そのような機能停止は、メモリ読取り動作中に読取り段３０の機能停止により起こりうる。第３のクロックサイクル中には、命令Ｉ1はレジスタ５２に記憶され、ポインタ５６はレジスタ５２をポイントする。
【００２１】
第４のクロックサイクル中には、前クロックサイクルにおいてデコード段２８が機能停止したので、次の命令に関連する追加のアドレスは計算されない。命令Ｉ2のフェッチングが完了し、命令Ｉ3のフェッチングが開始される。デコード段２８が機能停止したままになっているので、命令Ｉ1のデコーディングが継続されるが完了はしない。この第４のクロックサイクル中には、命令Ｉ1はレジスタ５２に保持され、命令Ｉ2はレジスタ５４に記憶され、ポインタ５６はレジスタ５２をポイントしたままになっている。
【００２２】
第５のクロックサイクル中には、前クロックサイクルにおいてデコード段２８が機能停止していたので、追加の命令の追加のアドレスは計算されない。さらに、限定命令バッファ５０はいっぱいになっているので、命令Ｉ3は限定命令バッファ５０に記憶されえないため、命令Ｉ3のフェッチングは完了しない。したがって、命令Ｉ3は廃棄され、第５のクロックサイクル中に命令Ｉ3のフェッチングが再実施される。デコード段２８はもはや機能停止状態にはないので、第５のクロックサイクル中に命令Ｉ1のデコーディングが完了する。従来のプロセッサは、命令Ｉ3を廃棄しかつ命令Ｉ3のフェッチを再実施するためではなく命令Ｉ3を記憶するための第３のレジスタを命令バッファ内に含む。本発明はそのようなレジスタを必要としないので、必要なシリコン領域は減少する。第５のクロックサイクル中には、レジスタ５２は命令Ｉ1を記憶し、レジスタ５４は命令Ｉ2を記憶し、ポインタ５６はレジスタ５２をポイントする。
【００２３】
第６のクロックサイクル中には、デコード段２８はもはや機能停止状態にはない。したがって、第４の命令Ｉ4のアドレスが計算され、命令Ｉ3のフェッチングが完了し、命令Ｉ2のデコーディングが開始されかつ完了する。第６のクロックサイクル中には、命令Ｉ3はレジスタ５２に記憶され、命令Ｉ2はレジスタ５４に記憶され、ポインタ５６はレジスタ５４をポイントする。
【００２４】
したがって、パイプライン２０に間欠的な機能停止が起こる図３に示されている例においては、パイプラインが機能停止したときにアドレスの計算を受ける命令は、パイプラインが機能停止状態でなくなるまで連続的に出される。したがって、本発明は、パイプラインが最初に機能停止したときに計算されつつあるアドレスに見い出される命令（すなわち、上述の例における命令Ｉ3）を記憶するための第３のレジスタを命令バッファが有する必要を回避している。命令バッファにおけるそのようなレジスタの必要の回避は、パイプライン２０の機能停止時における命令Ｉ3のような命令のフェッチの再実施によって行われる。命令を処理する上述の方法の物理的具体化の例について、図４を参照して以下に説明する。
【００２５】
図４は、プロセッサ１２のプレフェッチ段２４およびフェッチ段２６の追加の詳細を示すブロック図である。図示されているように、プレフェッチ段２４は、プログラムカウンタ５８およびマルチプレクサ６０を含む。プログラムカウンタ５８は、命令が受け取られるメモリシステム１４内の場所を指示する現カウントを保持する。マルチプレクサ６０は、プログラムカウンタ５８の前カウントと“１”だけ増加（インクリメント）されたプログラムカウンタ５８の前カウントとを入力信号として受ける。マルチプレクサ６０は、プログラムカウンタ５８用の更新されたカウントを与える出力信号６２を発生する。マルチプレクサ６０は、デコード段２８から受け取った選択信号６４により制御される。デコード段２８自体の機能停止によりまたはパイプライン２０のデコード段２８の下流の段の機能停止によってデコード段２８が機能停止しているときは、選択信号６４がプログラムカウンタ５８の前の値を選択し、また、デコード段２８が機能停止していないときは、出力信号６２が、“１”だけ増加されたプログラムカウンタ５８の前カウントを選択する。そのとき、出力信号６２はプログラムカウンタ５８へ供給される。このようにして、デコード段２８が機能停止しているときは、プレフェッチ段２４によりアドレスが計算された最も最近の命令が、デコード段２８が機能停止状態でなくなるまで連続的にフェッチされる。
【００２６】
本発明およびその利点を詳細に説明してきたが、添付の特許請求の範囲により定められる本発明の精神および範囲から逸脱することなく、さまざまな変化、置換および変更を行いうることを理解すべきである。
【００２７】
以上の説明に関して更に以下の項を開示する。
（１）デコード段を備えたパイプラインを有するプロセッサにおいて命令をバッファリングする方法であって、
前記デコード段の機能停止を検出するステップと、
前記デコード段の機能停止の検出に応答して、前記デコード段が機能停止状態でなくなるまでメモリ内の命令の前のフェッチを再実施するステップと、
前記デコード段が機能停止状態でなくなった後に命令バッファ内へ前記フェッチされた命令を書き込むステップと、
を含む、方法。
【００２８】
（２）前記命令バッファがいっぱいであるかどうかを決定するステップをさらに含む、第１項記載の装置。
（３）前記前のフェッチを再実施するステップが、前記命令バッファがいっぱいである場合に限りメモリに記憶されている命令の前のフェッチを再実施するステップを含む、第２項記載の装置。
（４）前記前のフェッチを再実施するステップが、プログラムカウンタのカウントにより指示されたアドレスを有する記憶場所に記憶されている命令をフェッチするステップを含む、第１項記載の装置。
（５）前記前のフェッチを再実施するステップが、前の命令がフェッチされた記憶場所のアドレスに対応するカウントに前記プログラムカウンタのカウントを調整するステップを含む、第４項記載の装置。
（６）前記前のフェッチを再実施するステップが、前記プログラムカウンタのカウントを不変のままにする、第５項記載の方法。
（７）前記パイプラインが、前記デコード段に先行する複数の順次段を含み、前記命令バッファに前記フェッチされた命令を書き込むステップが、前記デコード段に先行する前記順次段の数より小さいか等しい数の命令を同時に記憶するよう動作しうる命令バッファに前記フェッチされた命令を書き込むステップを含む、第１項記載の方法。
【００２９】
（８）デコード段に先行する複数の順次段と、
順次段の数より小さいか等しい数の命令を同時に記憶するよう動作しうる限定命令バッファと、
該限定命令バッファにより受け取られる命令を記憶する記憶場所のアドレスを指示するカウントを記憶するカウンタを含むカウンタシステムであって、前記デコード段の状態に基づいて前記カウンタの前記カウントを調整するように動作しうるカウンタシステムと、を含み、
前記複数の順次段が、前記カウントにより指示される前記アドレスに前記命令をフェッチするように動作しうるフェッチユニットを含む、
プロセッサパイプライン。
【００３０】
（９）前記カウンタシステムが、前記デコード段が機能停止すれば前記カウンタの前記カウントを増加させ、前記デコード段が機能停止しなければ前記カウンタの前記カウントを不変のままにするように動作しうる、第８項記載のプロセッサパイプライン。
（１０）前記カウンタシステムが、前記デコード段が機能停止しなければ前記カウンタの前記カウントを減少させ、前記デコード段が機能停止すれば前記カウンタの前記カウントを不変のままにするように動作しうる、第８項記載のプロセッサパイプライン。
（１１）前記カウンタシステムが、マルチプレクサを含み、
該マルチプレクサが、前記デコード段の状態を示す制御信号を受け取るように動作しうる、第８項記載のプロセッサパイプライン。
（１２）前記マルチプレクサが、前記カウンタのカウントと前記カウンタの増加されたカウントとを受け取り、かつ、前記カウンタの前記カウントまたは前記カウンタの前記増加されたカウントを示す出力信号を発生するように動作しえ、前記出力信号が、前記デコード段の状態を示す前記制御信号に基づいている、
第１１項記載のプロセッサパイプライン。
【００３１】
（１３）本発明の１つの実施の形態によれば、デコード段を備えたパイプラインを有するプロセッサにおいて命令をバッファリングする方法は、デコード段の機能停止を検出するステップと、デコード段が機能停止状態でなくなるまでメモリ内の命令の前のフェッチを再実施するステップと、デコード段が機能停止状態でなくなった後に命令バッファに前記フェッチされた命令を書き込むステップとを含む。
【図面の簡単な説明】
【図１】本発明の教示によるコンピュータシステムのブロック図である。
【図２】パイプラインが機能停止をしない例において、図１のコンピュータシステムのプログラムメモリから得られる命令の図１に示されているパイプラインのさまざまな段に対する場所を示すタイミング図である。
【図３】パイプラインの間欠的な機能停止が生じる例において、図１のコンピュータシステムのプログラムメモリから得られる命令の図１に示されているパイプラインのさまざまな段に対する場所を示すタイミング図である。
【図４】図１に示されているプロセッサのプレフェッチ段およびフェッチ段の追加の詳細を示すブロック図である。
【符号の説明】
１２  プロセッサ
１４  メモリシステム
１６  プログラムメモリ
２０  パイプライン
２４  プレフェッチ段
２６  フェッチ段
２８  デコード段
５０  限定命令バッファ
５８  プログラムカウンタ
６０  マルチプレクサ
【図１】
0003798180.tif 000002
【図２】
0003798180.tif 000003
【図３】
0003798180.tif 000004
【図４】
0003798180.tif 000005