(57)【要約】パイプラインアーキテクチャを有するディジタルプロセッサにおいて、命令を整列するための命令整列ユニットは、パイプライン段階ｎにおける命令キュー、現命令バッファおよび次命令バッファと、パイプライン段階ｎ＋１における整列命令バッファと、命令キャッシュまたは前記次命令バッファから前記現命令バッファに命令をロードするとともに、前記命令キャッシュまたは前記命令キューから前記次命令バッファに命令をロードするための命令フェッチ論理と、前記命令に包含される命令長情報に応答して前記現命令バッファおよび前記次命令バッファから前記整列命令バッファへの命令の転送を制御するための整列制御論理とを含む。整列制御論理は、命令をプリデコードして命令長情報を提供するためのプリデコーダと、前記命令長情報に応答して整列命令バッファへの命令の転送を制御するための現命令ポインタを生成するポインタ生成論理とを含む。
2007500404.tif 000002
【特許請求の範囲】
【請求項１】
パイプラインアーキテクチャを有するディジタルプロセッサにおいて、命令を整列するための命令整列ユニットであって、
パイプライン段階ｎにおける現命令バッファおよび次命令バッファ、
パイプライン段階ｎ＋１における整列命令バッファ、
メモリまたは前記次命令バッファから、前記現命令バッファに命令をロードするとともに、前記メモリから前記次命令バッファに命令をロードするための命令フェッチ論理、および
前記命令に包含される命令長情報に応答して前記現命令バッファおよび前記次命令バッファから前記整列命令バッファへの命令の転送を制御するための整列制御論理を含む、前記命令整列ユニット。
【請求項２】
現命令バッファ、次命令バッファおよび整列命令バッファは、それぞれ、複数の命令語を保持するためのレジスタを含むとともに、命令のそれぞれが、１つまたは２つ以上の命令語を含む、請求項１に記載の命令整列ユニット。
【請求項３】
整列制御論理は、命令長情報を提供する命令をプリデコードするためのプリデコーダ、前記プリデコード命令長情報を保持するための命令長レジスタであって、１つの命令長レジスタが現命令バッファにおける各レジスタに対応する、前記命令長レジスタと、前記命令長情報に応答して現命令バッファおよび、必要な場合には、次命令バッファから整列命令バッファへの命令の転送を制御するための現命令ポインタを生成する、ポインタ生成論理とを含む、請求項２に記載の命令整列ユニット。
【請求項４】
プリデコーダは、メモリからの命令をプリデコードする第１のプリデコーダ、および次命令レジスタ内の命令をプリデコードする第２のプリデコーダを含み、前記整列制御論理は、前記第１のプリデコーダの出力、前記第２のプリデコーダの出力、または命令長レジスタの出力を選択して、前記選択された命令長情報を命令長レジスタに供給する、マルチプレクサをさらに含む、請求項３に記載の命令整列ユニット。
【請求項５】
各命令長レジスタが、対応する命令語に対する有効ビットを含む、請求項４に記載の命令整列ユニット。
【請求項６】
プリデコーダおよび命令長レジスタが、パイプライン段階ｎに配置され、ポインタ生成論理が、パイプライン段階ｎ＋１に配置された、請求項３に記載の命令整列ユニット。
【請求項７】
ポインタ生成論理が、現命令ポインタに応答して命令長レジスタから次命令ポインタを選択するための次ポインタ選択論理、および前記次命令ポインタから現命令ポインタを選択する現ポインタ選択論理を含む、請求項３に記載の命令整列ユニット。
【請求項８】
現ポインタ選択論理が、次命令ポインタの低位ビットがゼロのときに設定される状態ビットを含む状態ラッチ、および前記状態ビットが設定されている場合に現命令ポインタとして前記次命令ポインタの上位ビットを選択する選択論理を含む、請求項７に記載の命令整列ユニット。
【請求項９】
ポインタ生成論理が、分岐命令に応答して新ポインタを現命令ポインタとして選択する、新ポインタ選択論理をさらに含む、請求項８に記載の命令整列ユニット。
【請求項１０】
ポインタ生成論理が、１組の値の各値が次命令ポインタおよび現命令ポインタの選択を制御するための１ビットによって表わされる、論理回路を使用する、請求項８に記載の命令整列ユニット。
【請求項１１】
ポインタ生成論理が、１組の値の各値が現命令バッファおよび次命令バッファから整列命令バッファへの命令の転送を制御する１ビットによって表わされる、論理回路をさらに使用する、請求項３に記載の命令整列ユニット。
【請求項１２】
現命令バッファおよび次命令バッファが一杯のときに、命令キューが、メモリからフェッチされた命令を保持する、請求項１に記載の命令整列ユニット。
【請求項１３】
パイプラインアーキテクチャを有するディジタルプロセッサにおいて、命令を整列する方法であって、
メモリまたは次命令バッファから現命令バッファに命令をロードすること、
前記現命令バッファが一杯である場合に、前記メモリから前記次命令バッファに命令をロードすること、および
前記命令に含まれている命令長情報に応答して、前記現命令バッファおよび前記次命令バッファから整列バッファへの命令の転送を制御することを含む、前記方法。
【請求項１４】
現命令バッファ、次命令バッファおよび整列命令バッファは、それぞれ、複数の命令語を保持するためのレジスタを含み、命令のそれぞれは、１つまたは２つ以上の命令語を含み、かつ前記現命令バッファおよび前記次命令バッファから整列命令バッファへの命令の転送を制御することが、前記現命令バッファおよび前記次命令バッファのレジスタから前記整列命令バッファのレジスタへの命令語の転送を制御することを含む、請求項１３に記載の方法。
【請求項１５】
命令の転送を制御することが、命令をプリデコードして命令長情報を提供すること、および前記命令長情報に応答して、現命令バッファおよび次命令バッファから整列命令バッファへの命令の転送を制御するための、現命令ポインタを生成することを含む、請求項１４に記載の方法。
【請求項１６】
現命令ポインタを生成することが、該現命令ポインタに応答して命令長情報から次命令ポインタを選択すること、および前記次命令ポインタから前記現命令ポインタを選択することを含む、請求項１５に記載の方法。
【請求項１７】
現命令ポインタを選択することが、次命令ポインタの低位ビットがゼロである場合に、前記次命令ポインタの高位ビットを前記現命令ポインタとして選択することを含む、請求項１６に記載の方法。
【請求項１８】
現命令ポインタを生成することが、分岐命令に応答して新ポインタを前記現命令ポインタとして選択することをさらに含む、請求項１７に記載の方法。
【請求項１９】
現命令バッファおよび次命令バッファから整列命令バッファへの命令の転送を制御することが、１組の値の各値が１ビットで表わされる、論理回路を使用することを含む、請求項１３に記載の方法。
【請求項２０】
現命令バッファおよび次命令バッファが一杯のときに、メモリからフェッチされる命令を命令キュー内に保持することをさらに含む、請求項１３に記載の方法。
【請求項２１】
パイプラインアーキテクチャを有するディジタルプロセッサにおける命令を整列するための命令整列ユニットであって、現命令バッファ、次命令バッファおよび整列命令バッファを含む前記命令整列ユニットにおける、整列制御論理であって、
第１のパイプライン段階において、命令長情報を提供する命令をプリデコードするプリデコーダ、および前記プリデコード命令を保持するための命令長レジスタ、ならびに
第２のパイプライン段階において、前記命令長情報に応答して、現命令バッファおよび、必要な場合には、次命令バッファから整列命令バッファへの命令の転送を制御するための現命令ポインタを生成するための、ポインタ生成論理を含む、前記整列制御論理。
【請求項２２】
命令長レジスタのそれぞれが、対応する命令語に対する有効ビットを含む、請求項２１に記載の整列制御論理。
【請求項２３】
ポインタ生成論理が、現命令ポインタに応答して、命令長レジスタから次命令ポインタを選択するための次ポインタ選択論理、および前記次命令ポインタから前記現命令ポインタを選択するための現ポインタ選択論理を含む、請求項２１に記載の整列制御論理。
【請求項２４】
現ポインタ選択論理が、次命令ポインタがゼロである場合に設定される状態ビットを含む状態ラッチ、および前記状態ビットが設定されている場合に、次命令ポインタの上位ビットを現命令ポインタとして選択する次ポインタ選択論理を含む、請求項２３に記載の整列制御論理。
【請求項２５】
ポインタ生成論理が、分岐命令に応答して新ポインタを現命令ポインタとして選択する新ポインタ選択論理をさらに含む、請求項２４に記載の整列制御論理。
【請求項２６】
ポインタ生成論理が、１組の値における各値が次命令ポインタおよび現命令ポインタの選択を制御するための１ビットによって表わされる、論理回路を使用する、請求項２４に記載の整列制御論理。
【請求項２７】
パイプラインアーキテクチャを有するディジタルプロセッサにおいて命令を整列する命令整列システムであって、
段階ｎにおける命令キュー、現命令バッファおよび次命令バッファ、
段階ｎ＋１における整列命令バッファ、
命令キャッシュまたは前記次命令バッファから前記現命令バッファに命令をロードするとともに、前記命令キャッシュまたは前記命令キューから前記次命令バッファに命令をロードするための命令フェッチ論理、および
前記命令に含まれた命令長情報に応答して、前記現命令バッファおよび前記次命令バッファから前記整列命令バッファへの命令の転送を制御するための整列制御論理を含む、前記命令整列システム。
【請求項２８】
現命令バッファ、次命令バッファおよび整列命令バッファは、それぞれ、複数の命令語を保持するためのレジスタを含み、命令のそれぞれは、１つまたは２つ以上の命令語を含む、請求項２７に記載の命令整列システム。
【請求項２９】
整列制御論理が、命令長情報を提供する命令をプリデコードするためのプリデコーダ、前記プリデコード命令長情報を保持するための命令長レジスタであって、１つの命令長レジスタが現命令バッファにおける各レジスタに対応する、前記命令長レジスタ、および前記命令長情報に応答して、現命令バッファから、および、必要な場合には、次命令バッファから整列命令バッファへの命令の転送を制御するための現命令ポインタを生成する、ポインタ生成論理とを含む、請求項２８に記載の命令整列システム。
【請求項３０】
プリデコーダは、命令キューからの命令をプリデコードする第１のプリデコーダ、および次命令レジスタ内の命令をプリデコードする第２のプリデコーダを含み、整列制御論理は、前記第１のプリデコーダの出力、前記第２のプリデコーダの出力、または命令長レジスタの出力を選択して、前記選択された命令長情報を命令長レジスタに供給する、マルチプレクサをさらに含む、請求項２９に記載の命令整列システム。
【請求項３１】
ポインタ生成論理が、現命令ポインタに応答して命令長レジスタから次命令ポインタを選択するための次ポインタ選択論理、および前記次命令ポインタから現命令ポインタを選択する現ポインタ選択論理を含む、請求項２９に記載の命令整列システム。
【請求項３２】
現ポインタ選択論理が、次命令ポインタの低位ビットがゼロのときに設定される状態ビットを含む状態ラッチ、および前記状態ビットが設定されている場合に現命令ポインタとして前記次命令ポインタの上位ビットを選択する選択論理を含む、請求項３１に記載の命令整列システム。
【請求項３３】
ポインタ生成論理が、分岐命令に応答して新ポインタを現命令ポインタとして選択する、新ポインタ選択論理をさらに含む、請求項３２に記載の命令整列システム。
【請求項３４】
ポインタ生成論理が、１組の値の各値が次命令ポインタおよび現命令ポインタの選択を制御するための１ビットによって表わされる、論理回路を使用する、請求項３２に記載の命令整列システム。
【請求項３５】
ポインタ生成論理が、１組の値の各値が現命令バッファおよび次命令バッファから整列命令バッファへの命令の転送を制御する１ビットによって表わされる、論理回路をさらに使用する、請求項２９に記載の命令整列システム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明はディジタルプロセッサに関し、より具体的には、命令キャッシュからフェッチされた可変長命令を整列させるため、および整列命令を命令デコーダに提供するための方法および装置に関する。
【０００２】
発明の背景
ディジタル信号コンピュータ、またはディジタル信号プロセッサ（ＤＳＰ）は、例えば、高速フーリエ変換、ディジタルフィルタ、画像処理、無線システムにおける信号処理、および音声認識などのディジタル信号処理応用に対する性能を最適化するように設計された、特殊目的コンピュータである。ディジタル信号プロセッサ応用は、通常は、リアルタイム動作、高い割込み速度および大規模な数値演算を特徴とする。さらに、ディジタル信号プロセッサ応用は、メモリアクセス動作が集中する傾向、および大量のデータの入出力を必要とする傾向がある。ディジタル信号プロセッサアーキテクチャは、通常、そのような演算を効率的に実行するために最適化されている。ディジタル信号プロセッサ応用に加えて、ＤＳＰは、マイクロコントローラ動作を実行することが要求されることが多い。マイクロコントローラ動作は、データの処理を伴うが、通常、大規模な演算を必要とすることはない。
【０００３】
ディジタル信号プロセッサは、パイプラインアーキテクチャを利用して、高性能を達成することができる。当該技術において知られているように、パイプラインアーキテクチャは、複数のパイプライン段階を含み、それぞれのパイプライン段階では、命令フェッチ、命令デコード、アドレス生成、演算動作、その他などの特定の動作が実行される。プログラム命令は、連続するクロックサイクルで、パイプライン段階を通過して進行し、いくつかの命令が、同時に、異なる完了段階に存在することができる。
【０００４】
コードのコンパクト性（compactness）のために、プロセッサの中には、異なる長さの命令をサポートするものがある。例えば、１つのプロセッサは、１６ビット命令、３２ビット命令および６４ビットビット命令をサポートする。メモリを可能な限りコンパクトにすることができるように、メモリ境界に関して、命令整列に対する制約はない。命令実行時に、命令は、通常、メモリから命令キャッシュに移動させられるが、この場合も、命令整列についての制約はない。すなわち、各命令キャッシュラインには、命令の長さに応じて、１つまたは２つ以上の命令を含めることができるとともに、命令は命令キャッシュラインを跨ぐことができる。命令キャッシュからの命令フェッチは、通常、キャッシュラインに整列される。したがって、命令デコーダに命令を出す以前に、命令キャッシュからフェッチされた命令を整列することが必要である。理想的な条件下では、クロックサイクル毎に命令デコーダに、整列命令を出さなくてはならない。
【０００５】
命令整列のための技法は、当該技術において知られている。しかしながら、従来技術の命令整列技法は、深いパイプラインを用いた（deeply pipelined）、高性能プロセッサに対して満足できる性能を提供していない。したがって、可変長命令を整列するための改良型の方法および装置が必要とされている。
【０００６】
発明の要約
本発明の第１の観点によれば、パイプラインアーキテクチャを有するディジタルプロセッサにおける、命令整列ユニットが提供される。この命令整列ユニットは、パイプライン段階ｎにおける現命令バッファ（current instruction buffer）および次命令バッファ（next instruction buffer）、パイプライン段階ｎ＋１における整列命令バッファ（aligned instruction buffer）、メモリまたは前記次命令バッファから、前記現命令バッファに命令をロードするとともに、前記メモリから前記次命令バッファに命令をロードするための命令フェッチ論理、および前記命令に包含される命令長情報に応答して前記現命令バッファおよび前記次命令バッファから前記整列命令バッファへの命令の転送を制御するための、整列制御論理を含む。現命令バッファ、次命令バッファおよび整列命令バッファには、それぞれ、命令語を保持するための複数のレジスタを含めることができる。各命令には、１つまたは２つ以上の命令語を含めることができる。
【０００７】
命令キューは、現命令バッファおよび次命令バッファが一杯である場合に、メモリからフェッチされる命令を保持することができる。命令整列ユニットに命令を提供するメモリは、通常、命令キャッシュである。
【０００８】
整列制御論理は、命令長（instruction length）情報を提供する命令をプリデコードするためのプリデコーダ、前記プリデコード命令長情報を保持するための命令長レジスタ、および前記命令長情報に応答して、現命令バッファから、および、必要な場合には、次命令バッファから整列命令バッファへの命令の転送を制御するための現命令ポインタを生成する、ポインタ生成論理を含む。プリデコーダには、メモリからの命令をプリデコードする第１のプリデコーダ、および次命令レジスタ内の命令をプリデコードする第２のプリデコーダを含めることができる。整列制御論理には、第１のプリデコーダの出力、第２のプリデコーダの出力、または命令長レジスタの出力を選択して、前記選択された命令長情報を命令長レジスタに供給する、マルチプレクサをさらに含めることができる。各命令長レジスタには、対応する命令語に対する有効ビットを含めることができる。プリデコーダおよび命令長レジスタは、パイプライン段階ｎに配置し、ポインタ生成論理は、パイプライン段階ｎ＋１に配置することができる。
【０００９】
ポインタ生成論理には、現命令ポインタに応答して命令長レジスタから次命令ポインタを選択するための次ポインタ選択論理、および次命令ポインタから現命令ポインタを選択する現ポインタ選択論理を含めることができる。現ポインタ選択論理には、次命令ポインタの低位ビットがゼロのときに設定される状態ビットを含む状態ラッチ、および前記状態ビットが設定されている場合に現命令ポインタとして前記次命令ポインタの上位ビットを選択する選択論理を含めることができる。ポインタ生成論理には、分岐命令に応答して、新ポインタを現命令ポインタとして選択する新ポインタ選択論理をさらに含めることができる。
【００１０】
ポインタ生成論理には、１組の値の各値が、次命令ポインタおよび現命令ポインタの選択を制御するための１ビットによって表わされる、論理回路を利用することができる。ポインタ生成論理には、１組の値の各値が、現命令バッファおよび次命令バッファから整列命令バッファへの命令の転送を制御する１ビットによって表わされる論理回路をさらに利用することができる。
【００１１】
本発明の別の観点によれば、パイプラインアーキテクチャを有するディジタルプロセッサにおいて、命令を整列するための方法が提供される。この方法は、メモリまたは次命令バッファから現命令バッファに命令をロードすること、前記現命令バッファが一杯である場合に、前記メモリから前記次命令バッファに命令をロードすること、および前記命令に含まれている命令長情報に応答して、前記現命令バッファおよび前記次命令バッファから整列バッファへの命令の転送を制御することを含む。
【００１２】
本発明のさらに別の観点によれば、パイプラインアーキテクチャを有するディジタルプロセッサにおける命令を整列するための、命令整列ユニットにおける整列制御論理が提供される。この命令整列ユニットは、現命令バッファ、次命令バッファおよび整列命令バッファを含む。整列制御論理は、第１のパイプライン段階において、命令長情報を提供する命令をプリデコードするプリデコーダ、および前記プリデコード命令を保持するための命令長レジスタ、ならびに第２のパイプライン段階において、前記命令長情報に応答して、現命令バッファおよび、必要な場合には、次命令バッファから整列命令バッファへの命令のロードを制御するための現命令ポインタを生成するための、ポインタ生成論理を含む。
【００１３】
本発明のさらに別の観点によれば、パイプラインアーキテクチャを有するディジタルプロセッサにおいて命令を整列するための、命令整列システムが提供される。この命令整列システムは、段階ｎにおける命令キュー、現命令バッファおよび次命令バッファ、段階ｎ＋１における整列命令バッファ、命令キャッシュまたは次命令バッファから現命令バッファに命令をロードし、命令キャッシュまたは命令キューから次命令バッファに命令をロードするための命令フェッチ論理、および前記命令に含まれた命令長情報に応答して、前記現命令バッファおよび次命令バッファから前記整列命令バッファへの命令の転送を制御するための整列制御論理を含む。
【００１４】
詳細な説明
本発明をより詳しく理解するために、参照により本明細書に組み入れてある、添付の図面を参照する。
ディジタル信号プロセッサ（ＤＳＰ）の一態様のブロック図を図１に示してある。ディジタル信号プロセッサは、計算コア１０およびメモリ１２を含む。計算コア１０は、ＤＳＰの中央プロセッサである。コア１０およびメモリ１２は、下記のパイプランアーキテクチャを有することができる。この態様において、コア１０は、命令フェッチユニット２０、命令デコードユニット２２、ロード／ストアユニット２４、実行ユニット３０およびシステムユニット３２を含み、システムユニット３２には分岐解消ユニット（branch resolution unit）を含めてもよい。
【００１５】
以下に、命令フェッチユニット２０および命令デコードユニット２２について考察する。ロード／ストアユニット２４はメモリ１２へのアクセスを制御する。メモリ読取りデータは、メモリ１２から実行ユニット３０内のレジスタファイルに転送されることができる。メモリ書込みデータは、実行ユニット３０内のレジスタファイルからメモリ１２に転送されることができる。命令フェッチユニットは、フェッチユニット２０における命令キャッシュミスの発生時に、メモリ１２にアクセスすることができる。システムユニット３２は、命令フェッチユニット２０に分岐解消情報を提供する。実行ユニット３０には、命令実行に必要な場合に、１つまたは２つ以上の加算器、乗算器、累算器、シフタ、その他を含めることができる。
【００１６】
命令フェッチユニット２０および命令デコードユニット２２の簡易ブロック図を図２に示してある。命令フェッチユニット２０には、ＰＣ（プログラムカウンタ）リダイレクト（redirect）ユニット４０、命令キャッシュ４２、命令キュー４４、命令整列ユニット４６および分岐予測器（branch predictor）５０を含めることができる。ＰＣリダイレクトユニット４０は、フェッチすべき命令のアドレスを特定する。プログラム命令は、命令キャッシュ４２からフェッチされて、整列ユニット４６によって整列される。必要な場合には、命令は命令キュー４４内に配置し、次いで、必要に応じて整列ユニット４６に供給される。整列命令は、命令デコーダ２２によってデコードされて、デコードされた命令は、ロード／ストアユニット２４に伝えられる（図１）。命令キャッシュミスが発生した場合には、メモリ１２において要求された命令にアクセスされる（図１）。正常なプログラムフロー中は、プログラムカウンタが増分されて順次命令アドレスを生成する。分岐予測器５０は、分岐命令を予測し、命令フェッチをリダイレクトして、性能に対する分岐命令の悪影響を制限する。分岐命令が実行された後に、分岐解消情報がシステムユニット３２から提供される（図１）。
【００１７】
計算コア１０は、好ましくはパイプラインアーキテクチャを備える。パイプラインアーキテクチャは、良く知られたアーキテクチャであり、そのコアは、同期して動作する一連の接続された段階を含み、命令実行は、連続クロックサイクルで連続パイプライン段階において実行される、一連の動作に分割される。したがって、例えば、第１の段階が命令フェッチを実行し、第２の段階が命令デコードを実行し、第３の段階がデータアドレス生成を実行し、第４の段階がデータメモリアクセスを実行し、第５の段階が特定の計算を実行することができる。パイプラインアーキテクチャの利点は、高い動作速度であり、それは複数の命令を、異なる命令が異なる完了段階にある状態で、同時に進行させることができるためである。ここで、図１に示すユニットのそれぞれには、１つまたは２つ以上のパイプライン段階を含めることができることが理解されるであろう。一例としてだけであるが、コンピュータコア１０には最大３０の段階を含めることができる。
【００１８】
この態様におけるディジタル信号プロセッサは、１６ビット、３２ビットおよび６４ビットの可変長命令を使用する。これらの命令は、メモリにパックして、メモリ空間の無駄を回避する。すなわち、可変長命令は、命令キャッシュ（ＩＣａｃｈｅ）４２における６４ビットラインにパックされる。各ＩＣａｃｈｅラインは、通常、４つの１６ビット語を含む。したがって、例えば１つのＩＣａｃｈｅラインには、４つの１６ビット命令、２つの３２ビット命令、１つの６４ビット命令、または異なる長さの命令の組合せを含めることができる。さらに、命令は、１６ビット語境界上のＩＣａｃｈｅラインを跨ぐこと、すなわち２つのＩＣａｃｈｅラインの間で命令を分割することが可能である。命令順序には制約がないので、ＩＣａｃｈｅライン内での、多数の命令長の組合せが可能である。ここで、これらの命令長、異なる命令長の数、ＩＣａｃｈｅライン内のビット数、およびＩＣａｃｈｅライン内の語サイズは、一例として挙げたにすぎず、本発明の範囲を限定するものではないことが理解されるであろう。
【００１９】
この態様における命令キャッシュは、６４ビットラインを提供する。命令整列システムは、ＩＣａｃｈｅラインから命令をアンパックして、理想的にはサイクル当たり１つの命令を命令デコーダ２２に供給する。場合によっては、サイクル当たり１つの命令を命令デコーダに提供することが不可能なことがある。そのような場合の例としては、２つのＩＣａｃｈｅラインに跨るターゲット命令への分岐である。完全なターゲット命令をフェッチするのに２サイクルが必要である。
【００２０】
本発明の一態様による命令整列システムの簡易ブロック図を図３に示してある。命令整列システム１００には、命令キュー４４および整列ユニット４６を含めることができる。命令整列システムの整列データパスは、命令キュー４４、現命令バッファ１１０、次命令バッファ１１２および整列命令バッファ１２０を含む。この態様においては、バッファ１１０、１１２、１２０の大きさは、それぞれ、６４ビットである。命令は、３：１ｍｕｘ（マルチプレクサ）１３０によって次命令バッファ１１２に供給され、この３：１ｍｕｘ１３０は、命令キャッシュ４２、命令キュー４４、および次命令バッファ１１２の出力のそれぞれから入力を受け取る。命令は、３：１ｍｕｘ１３２によって現命令バッファ１１０に供給され、この３：１ｍｕｘ１３２は、命令キャッシュ４２、次命令バッファ１１２および現命令バッファ１１０のそれぞれから入力を受け取る。命令フェッチ論理１３４は、以下に説明するように、現命令バッファ１１０、次命令バッファ１１２および命令キュー４４への命令の転送を制御する。バッファ１１０、１１２の出力は、それぞれ、ｍｕｘ１３２、１３３の入力に接続され、バッファの内容が２クロックサイクル以上保持されることを可能にする。
【００２１】
ｍｕｘ１４０は、現命令バッファ１１０からの入力および、必要な場合には、次命令バッファ１１２からの入力を選択して、整列命令を整列命令バッファ１２０に提供する。この態様においては、ｍｕｘ１４０は、図５に示して以下に説明するように構成された、４：１の６４ビットｍｕｘである。整列制御論理１５４は、以下に詳細を説明するように、命令整列を制御する。
【００２２】
命令整列システムは、ディジタル信号プロセッサのパイプラインアーキテクチャの一部であり、この態様においては、２つのパイプライン段階にわたって分布している。図２および３の態様において、命令キャッシュ４２は段階３にあり、命令キュー４４、次命令バッファ１１２および現命令バッファ１１０は段階４にあり、整列命令バッファ１２０はパイプラインの段階５にある。このパイプラインアーキテクチャによって、命令長情報を特定する命令のプリデコードが可能となり、この命令長情報は以下に示すように命令整列において使用される。
【００２３】
動作に際しては、ＩＣａｃｈｅ４２からフェッチされる命令は、現命令バッファ１１０が空の場合には、現命令バッファ１１０に配置される。現命令バッファ１１０が空でなく、かつ次命令レジスタ１１２が空である場合には、フェッチされた命令は、次命令バッファ１１２内に配置される。次命令バッファ１１２が空でない場合に、フェッチされた命令は、命令キュー４４に配置される。現命令バッファ１１０、次命令バッファ１１２および命令キュー４４への命令のロードは、命令フェッチ論理１３４によって制御される。整列制御論理１５４によってｍｕｘ１４０に供給される現命令ポインタは、現命令バッファ１１０における命令の最初の１６ビット語の場所を指示する。ポインタに基づいて、ｍｕｘ１４０は、現命令バッファ１１０から、そして必要な場合には、次命令バッファ１１２から命令を選択して、整列命令バッファ１２０に命令を供給する。
【００２４】
次に、命令整列の例について説明する。第１の例において、連続６４ビット命令が、現命令バッファ１１０から整列命令バッファ１２０に連続するサイクルで転送され、新命令が、ＩＣａｃｈｅ４２から現命令バッファ１１０にロードされる。
第２の例においては、１６ビット命令が、現命令バッファ１１０から整列命令バッファ１２０へ連続サイクルで転送され、新規にフェッチされた命令は、現命令バッファ１１０における１６ビット命令が使用されるまで、次命令バッファ１１２および命令キュー４４にロードされる。
【００２５】
第３の例においては、３２ビット命令に６４ビット命令が続く。この３２ビット命令および６４ビット命令の半分は、現命令バッファ１１０に保持され、６４ビット命令の後半部は、次命令バッファ１１２内に保持される。第１のクロックサイクルにおいて、３２ビット命令は、現命令バッファ１１０から整列命令バッファ１２０に転送され、現命令バッファ１１０の内容が現命令バッファ１１０に再ロードされる。第２のクロックサイクルにおいて、６４ビット命令の２つの１６ビット語が、現命令バッファ１１０から選択され、６４ビット命令の２つの１６ビット語が、次命令バッファ１１２から選択される。６４ビット命令の４つの１６ビット語は、整列命令バッファ１２０にロードされる。この場合に、ｍｕｘ１４０に供給された現命令ポインタは、現命令バッファ１１０内の第３番目の１６ビット語を指す。
【００２６】
命令長の異なる組合せが、現命令バッファ１１０および次命令バッファ１１２内で可能である。それぞれの場合に、ｍｕｘ１４０に供給されるポインタは、現命令バッファ１１０内における、現命令の最初の１６ビット語の場所を指示する。
【００２７】
命令整列システムのデータパスを、図４に図解して示してある。現命令バッファ１１０には、４つの１６ビットレジスタ１１０ａ、１１０ｂ、１１０ｃおよび１１０ｄを含めることができる。次命令バッファ１１２には、４つの１６ビットレジスタ１１２ａ、１１２ｂ、１１２ｃ、１１２ｄを含めることができる。整列命令バッファ１２０には、４つの１６ビットレジスタ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄを含めることができる。レジスタ１２０ａは、整列命令の、６３：４８ビットを保持し、レジスタ１２０ｂは４７：３２ビットを、レジスタ１２０ｃは３１：１６ビットを、レジスタ１２０ｄは１５：０ビットを保持する。上述のように、ｍｕｘ１４０は、この態様においては４：１の６４ビットｍｕｘである。ｍｕｘ１４０は、現命令ポインタに従って、４つの連続する１６ビット語を現命令バッファ１１０および次命令バッファ１１２から選択する。
【００２８】
作動に際して、ｍｕｘ１４０に供給される現命令ポインタは、現命令の最初の１６ビット語を含む、１６ビットレジスタ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄの内の１つを選択する。上述のように、この命令は、１６ビット、３２ビットまたは６４ビットの長さを有することができる。選択された命令は、整列命令バッファ１２０のレジスタ１２０ａにロードされた命令の下位１６ビット語と共に、整列命令バッファ１２０に提供される。すなわち、現命令バッファ１１０における６４ビット命令が、レジスタ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄから、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄへとそれぞれ転送される。別の例においては、現命令バッファ１１０のレジスタ１１０ｃ内の１６ビット命令が、ｍｕｘ１４０によって整列命令バッファ１２０のレジスタ１２０ａに転送される。別の例においては、現命令バッファ１１０のレジスタ１１０ｂで始まる３２ビット命令が、現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃから、それぞれ、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂへと転送される。さらに別の例においては、現命令バッファ１１０のレジスタ１１０ｃで始まる６４ビット命令が、現命令バッファ１１０のレジスタ１１０ｃ、１１０ｄおよび次命令バッファ１１２のレジスタ１１２ａ、１１２ｂから、それぞれ、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄへと転送される。整列ユニットは、命令デコーダに対して、「左寄せされた（left-justified）」とも呼ばれる、高位ビットに位置調整された命令を与える。
【００２９】
図５に命令整列システムをより詳細に示してある。命令キャッシュ（ＩＣａｃｈｅ）４２は、６４ビットラインＩＣａｃｈｅを、命令キュー４４、ｍｕｘ１３０、ｍｕｘ１３２、およびプリデコーダ１６０ａ、１６０ｂ、１６０ｃ、１６０ｄにそれぞれ与える。各ＩＣａｃｈｅラインは、４つの１６ビット命令語を含む。図に示すように、命令キュー４４の各エントリは、４つの１６ビットレジスタ４４ａ、４４ｂ、４４ｃ、４４ｄを含み、命令キュー４４は、図５の例においては７つのエントリを有する。書込みポインタは、命令キャッシュ４２から命令キュー４４への命令の書込みを制御する。命令キュー４４における各エントリに対するレジスタ４４ａ、４４ｂ、４４ｃ、４４ｄの出力は、ｍｕｘ１５０ａ、１５０ｂ、１５０ｃ、１５０ｄのそれぞれの入力に供給される。ｍｕｘ１５０ａ、１５０ｂ、１５０ｃ、１５０ｄに供給される読取りポインタは、命令キュー４４からのＩＣａｃｈｅラインの選択を制御する。４つの１６ビットｍｕｘとして構成することのできる、ｍｕｘ１３０は、ＩＣａｃｈｅ４２から、またはｍｕｘ１５０ａ、１５０ｂ、１５０ｃ、１５０ｄを介して命令キュー４４から、または次命令バッファ１１２の出力から、６４ビットラインを選択する。ｍｕｘ１３０の出力は、次命令バッファ１１２にロードされる。４つ１６ビットｍｕｘとして構成することのできる、ｍｕｘ１３２は、ＩＣａｃｈｅ４２から、または次命令バッファ１１２から、または現命令バッファ１１０の出力から、６４ビットラインを選択する。ｍｕｘ１３２の出力は、現命令バッファ１１０にロードされる。
【００３０】
ｍｕｘ１４０は、それぞれが４つの１６ビット入力を有する、ｍｕｘ１４０ａ、１４０ｂ、１４０ｃ、１４０ｄを含む。ｍｕｘ１４０ａは、現命令バッファ１１０のレジスタ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄからの入力を受け取る。ｍｕｘ１４０ｂは、現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃ、１１０ｄおよび次命令バッファ１１２のレジスタ１１２ａからの入力を受け取る。ｍｕｘ１４０ｃは、現命令バッファ１１０のレジスタ１１０ｃ、１１０ｄおよび次命令バッファ１１２のレジスタ１１２ａ、１１２ｂからの入力を受け取る。ｍｕｘ１４０ｄは、現命令バッファ１１０のレジスタ１１０ｄおよび次命令バッファ１１２のレジスタ１１２ａ、１１２ｂ、１１２ｃからの入力を受け取る。ｍｕｘ１４０ａ、１４０ｂ、１４０ｃ、１４０ｄは、現命令ポインタによって制御される。ｍｕｘ１４０ａ、１４０ｂ、１４０ｃ、１４０ｄの出力は、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂ、１２０ｃ、１２０ｄにそれぞれ供給される。
【００３１】
ＩＣａｃｈｅ４２から受け取るパックされた命令は、各命令の長さおよび各命令の最初の１６ビット語を指す命令ポインタを決定することによって整列される。この情報は、各１６ビット命令語において、命令長を表わすビットをプリデコードして、そのプリデコードされた命令長情報を次のパイプライン段階において命令整列を制御するのに使用することによって抽出される。
【００３２】
図５を再び参照すると、整列制御論理１５４は、命令長を判定するためのプリデコーダ、適当な命令長情報を選択するためのｍｕｘ、選択された命令長を保持するためのレジスタおよび命令長情報に応答して整列ポインタを生成するためのポインタ生成論理を含む。本発明の一態様において、命令長情報は、各命令の最初の１６ビット語の、ビット１５：１３および１１に含まれている。これらの命令ビットはパイプライン段階４において命令長を判定するためにプリデコードされる。この命令長情報は、パイプライン段階５において、命令整列を制御する命令ポインタの形態の制御信号を生成するのに使用される。
【００３３】
整列制御論理１５４は、プリデコーダ（Predecoder）１６０ａ、１６０ｂ、１６０ｃ、１６０ｄ、１７０ａ、１７０ｂ、１７０ｃ、１７０ｄを含む。図５に示すように、命令キャッシュ４２からの６４ビットラインにおける各１６ビット語のビット１５：１３および１１が、プリデコーダ１６０ａ、１６０ｂ、１６０ｃ、１６０ｄに供給される。同様に、次命令バッファ１１２のレジスタ１１２ａ、１１２ｂ、１１２ｃ、１１２ｄのビット１５：１３および１１は、プリデコーダ１７０ａ、１７０ｂ、１７０ｃ、１７０ｄにそれぞれ供給される。整列制御論理１５４は、３：１のｍｕｘ１８０ａ、１８０ｂ、１８０ｃ、１８０ｄおよび命令長（Instruction length）レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄをさらに含む。ｍｕｘ１８０ａは、プリデコーダ１６０ａ、１７０ａから、およびレジスタ１９０ａの出力からの入力を受け、命令長レジスタ１９０ａに命令長を供給する。ｍｕｘ１８０ｂは、プリデコーダ１６０ｂ、１７０ｂから、およびレジスタ１９０ｂの出力からの入力を受け、命令長レジスタ１９０ｂに命令長を供給する。ｍｕｘ１８０ｃは、プリデコーダ１６０ｃ、１７０ｃおよびレジスタ１９０ｃの出力からの入力を受け、命令長レジスタ１９０ｃに命令長を供給する。ｍｕｘ１８０ｄは、プリデコーダ１６０ｄ、１７０ｄから、およびレジスタ１９０ｄの出力からの入力を受け、命令長レジスタ１９０ｄに命令長を供給する。命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄは、ポインタ生成論理２００に命令長情報を供給する。
【００３４】
この態様において、各１６ビット語のビット１５：１３および１１は、以下の表１に従ってプリデコードされる。この態様においては、命令長情報は、各命令の最初の１６ビット語の、ビット１５：１３および１１に符号化されている。プリデコード出力は、各命令の長さを指示する。ｍｕｘ１８０ａ、１８０ｂ、１８０ｃ、１８０ｄは、次の命令の源に従って、ＩＣａｃｈｅ４２から、または次命令バッファ１１２から、または命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄの出力からのプリデコード値を選択する。選択された値は、命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄにロードされる。
【００３５】
【表１】
2007500404.tif 000003
【００３６】
整列制御ロジック１５４は、制御情報を処理するための回路をさらに含み、この回路には、有効ビット、状態ビットおよび分岐情報を含めることができる。図５に示すように、制御情報はＩＣａｃｈｅ４２に関連する制御バッファ２１０から命令キュー４４内のレジスタ２１２と、２：１ｍｕｘ２１６の第１の入力とに供給される。命令キュー４４のレジスタ２１２の出力は、ｍｕｘ２１４に供給され、ｍｕｘ２１４は命令キュー読取りポインタに応答して命令キュー４４内のエントリーの１つを選択する。ｍｕｘ２１４の出力は、ｍｕｘ２１６の第２の出力に供給される。ｍｕｘ２１６は、ｍｕｘ２１４を介して、制御バッファ２１０の出力、または命令キュー４４の出力を選択する。制御バッファ２１０からの制御情報も、３：１ｍｕｘ２２０の第１の入力と、プリデコーダ１６０ａ、１６０ｂ、１６０ｃ、１６０ｄとに供給される。ｍｕｘ２１６の出力は、ｍｕｘ２２０の第２の入力と、プリデコーダ１７０ａ、１７０ｂ、１７０ｃ、１７０ｄとに供給される。ｍｕｘ２２０の出力は制御レジスタ２２４に供給される。レジスタ２２４の出力は、ポインタ生成回路２００に供給され、ｍｕｘ２２０の第３の入力にフィードバックされる。ｍｕｘ２２０へのフィードバックパスは、レジスタ２２４の内容が２サイクル以上の間、保管される場合に使用される。
【００３７】
この制御情報は、各命令ラインにおける各１６ビット語に対する有効（valid）ビットを含む。これらの有効ビットは、Ｖ１６有効ビットと呼ばれ、分岐命令の場合における命令整列の制御を可能にする。例えば、取り上げられた分岐命令に続く、１つまたは２つ以上の命令を、無効としてマークすることができる。この態様においては、４つのＶ１６有効ビットが、各命令ラインに対して提供される。
図５に示すように、制御バッファ２１０からのＶ１６有効ビットは、プリデコーダ１６０ａ、１６０ｂ、１６０ｃ、１６０ｄの出力と組み合わされ、命令キュー４４からのＶ１６有効ビットは、プリデコーダ１７０ａ、１７０ｂ、１７０ｃ、１７０ｄの出力と組み合わされる。プリデコーダの出力およびＶ１６有効ビットは、ｍｕｘ１８０ａ、１８０ｂ、１８０ｃ、１８０ｄを介して、それぞれ命令長（Instruction length）レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄに供給される。
【００３８】
ポインタ生成論理２００の一態様の概略ブロック図を、図６に示してある。図のように、命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄは、プリデコードされた命令長情報を含む。各命令長レジスタは、命令長の可能な値のそれぞれに対して１ビット位置を含む。図６の態様において、各命令長レジスタは、１６ビット、３２ビットおよび６４ビット命令に対するビット位置を含む。さらに、各命令長レジスタはＺビットを含む。Ｚビットは、その１６ビット語に対応するＶ１６有効ビットからの有効ビットである。
【００３９】
図６を参照すると、命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄの出力は、４：１ｍｕｘの組、２５０、２５２、２５４、２５６、２５８、２６０、２６４に供給される。ｍｕｘは、規約に従って、低位入力を右側に、右から左に桁が増大するようにして示してある。ｍｕｘ２５０は、命令長レジスタ１９０ａ（低位入力）、１９０ｂ、１９０ｃ、１９０ｄ（上位入力）からのＺビットを受け取る。ｍｕｘ２５２は、その低位入力においてレジスタ１９０ａにおける１６ビット位置からの入力を受け取り、その他の３つの入力においてゼロを受け取る。ｍｕｘ２５４は、その低位入力においてレジスタ１９０ａにおける３２ビット位置からの入力を受け取り、その第２の入力においてレジスタ１９０ｂにおける１６ビット位置からの入力を、その残りの２つの入力においてゼロを受け取る。
【００４０】
ｍｕｘ２５６は、その下位入力においてゼロを、その第２の入力においてレジスタ１９０ｂの３２ビット位置のからの入力を、その第３の入力においてレジスタ１９０ｃの１６ビット位置からの入力を、その高位入力においてゼロを受け取る。ｍｕｘ２５８は、その下位入力においてレジスタ１９０ａの６４ビット位置からの入力を、その第２の入力においてゼロを、その第３の入力においてレジスタ１９０ｃの３２ビット位置からの入力を、その高位入力においてレジスタ１９０ｄの１６ビット位置からの入力を受け取る。ｍｕｘ２６０は、その下位入力においてゼロを、その第２の入力においてレジスタ１９０ｂの６４ビット位置のからの入力を、その第３の入力においてゼロを、その高位入力においてレジスタ１９０ｄの３２ビット位置からの入力を受け取る。ｍｕｘ２６２は、最初の２つの下位入力においてゼロを、その第３の入力においてレジスタ１９０ｃの６４ビット位置からの入力を、その高位入力においてゼロを受け取る。ｍｕｘ２６４は、その３つの低位入力においてゼロを、その高位入力においてレジスタ１９０ｄの６４ビットからの入力を受け取る。ｍｕｘ２５０〜２６４の出力は、以下に示すように、その４つの入力から、バス２７０上の現命令ポインタによって選択される。
【００４１】
１組の２：１ｍｕｘ２８０、２８２、２８４、２８６を使用して、分岐命令の発生時には新ポインタが選択される。４ビット新ポインタが、ｍｕｘ２８０、２８２、２８４、２８６の第１の入力に供給される。ｍｕｘ２８０の第２の入力にゼロが供給される。ｍｕｘ２５２、２５４、２５６の出力は、それぞれ、ｍｕｘ２８２、２８４、２８６の第２の入力に供給される。制御論理３９０からｍｕｘ２８０、２８２、２８４、２８６への選択入力は、ｍｕｘ２５２、２５４、２５６の出力または新ポインタの選択を制御する。新ポインタは、分岐命令に続く、非順序命令の最初の１６ビット語を指すことができる。ｍｕｘ２８０、２８２、２８４、２８６の出力は、それぞれ、単一ビットラッチ３００、３０２、３０４、３０６に供給される。ｍｕｘ２５８、２６０、２６２、２６４の出力は、それぞれ、単一ビットラッチ３１０、３１２、３１４、３１６に供給される。
【００４２】
ラッチ３００〜３０６および３１０〜３１６の出力は、次命令ポインタＮｘｔ＿ｐｔｒを表わす。この態様において、次命令ポインタは８ビットを有し、その１つが設定される。設定されるビットは、現命令バッファ１１０または次命令バッファ１１２における次命令の最初の１６ビット語の位置を表わす。次命令ポインタにおいて、ラッチ３０２、３０４、３０６の出力は、それぞれ、現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃ、１１０ｄに対応する（図５）。次命令ポインタの最下位ビットは、現命令バッファ１１０のレジスタ１１０ａに対応し、常にゼロである。レジスタ１１０ａは、現命令を保持することができるが、次命令は保持することはない。ｍｕｘ２５０の出力は選択された有効ビットを表わす。ラッチ３１０、３１２、３１４、３１６の出力は、それぞれ、次命令バッファ１１２のレジスタ１１２ａ、１１２ｂ、１１２ｃ、１１２ｄに対応する（図５）。したがって、例えば、ラッチ３４０の出力が１に設定されている場合には、次命令の最初の１６ビット語は、現命令バッファ１１０のレジスタ１１０ｃに位置する。同様に、ラッチ３１２の出力が設定されている場合には、次命令の最初の１６ビット語は、次命令バッファ１１２のレジスタ１１２ｂに位置する。
【００４３】
１組の２：１ｍｕｘ３２０、３２２、３２４、３２６を使用して、次命令ポインタの８ビットから現命令ポインタを選択する。特に、ラッチ３００、３０２、３０４、３０６の出力は、それぞれ、ｍｕｘ３２０、３２２、３２４、３２６の第１の入力に供給される。ラッチ３１０、３１２、３１４、３１６の出力は、それぞれ、ｍｕｘ３２０、３２２、３２４、３２６の第２の入力に供給される。ｍｕｘ３２０、３２２、３２４、３２６の出力は、現命令ポインタＣｕｒ＿ｐｔｒを表わす。この態様においては、現命令ポインタは、４ビットを有し、その１つが設定される。設定されるビットは、現命令バッファ１１０における現命令の最初の１６ビット語の位置を表わす。ｍｕｘ３２０、３２２、３２４、３２６の出力は、それぞれ、現命令バッファ１１０におけるレジスタ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄに対応する（図５）。
【００４４】
ｍｕｘ３２０、３２２、３２４、３２６は、ラッチ３４０からのシフトビットに応答して制御される。ラッチ３４０はＡＮＤゲート３４２によって設定される。ｍｕｘ２５２、２５４、２５６の出力は、ＡＮＤゲート３４２への入力を供給する。ＡＮＤゲート３４２は、次命令ポインタの最初の４ビットがすべてゼロとなる条件を検出する。この条件は、現命令バッファ１１０内のすべての命令が使用されるとともに、次命令の最初の１６ビット語が次命令バッファ１１２に位置するときに発生する（図５）。この場合には、シフトビットは設定されており、現命令ポインタは、ラッチ３１０、３１２、３１４、３１６の出力からとられ、これらは次命令ポインタの４つの高位ビットに対応する。同一のクロックサイクルにおいて、命令フェッチ論理１３４によって次命令バッファ１１２の内容が現命令バッファ１１０に転送され（図３）、次命令ラインが命令キュー４４または命令キャッシュ４２から次命令バッファ１１０に転送される。
【００４５】
深くパイプライン化されたプロセッサ、すなわち比較的大きな数のパイプライン段階を有するプロセッサは、非常に高性能をもたらすことができる。高性能を達成するために、高クロック速度が使用され、各パイプライン段階を通しての遅延が低減される。パイプライン段階毎の遅延の低減は、（所与のプロセス技術に対して）パイプライン段階を通しての最低速度経路、または限界経路に直列に接続されたゲートまたはその他の論理回路の数を低減することによって行われる。したがって、サイクル当たり２０のゲートを有するパイプライン段階は、回路の２０ゲートの通しての遅延は、最大クロック周波数において、１クロックサイクル未満であることを示す。クロック周波数が増大すると、パイプライン段階当たりの直列に接続されたゲートの数が減少する。結果として、処理回路は、直列に接続された少ないゲート数を用いる、複雑な動作を実行することが必要となる。
【００４６】
命令整列ユニットに適用されると、整列制御論理１５４は、高速で命令整列を実行する際、およびサイクル当たり１命令を命令デコーダ２２に配信する際の限界経路となる。一態様において、パイプライン段階は、サイクル当たり１１ゲートに制限されている。すなわち、パイプライン段階において、４つのプリデコーダ１６０ａ〜１６０ｄおよび１７０ａ〜１７０ｄ、ならびにｍｕｘ１８０ａ〜１８０ｄは直列に１１ゲートに限定されている。同様に、パイプライン段階５におけるポインタ生成論理２００は、直列に１１ゲートに限定される。
【００４７】
必要な性能を達成するために、整列制御論理１５４は、各命令の命令長ビットをプリデコードした後に、いわゆる「ワンホット（one-hot）」論理回路を利用する。ワンホット論理回路において、１組の値における各値は、符号化ビットによってその組の値を表わすのと対照的に、１ビットで表わされる。すなわち、例えば、現命令ポインタは、ある命令の最初の１６ビット語を含む、４つのレジスタ１１０ａ、１１０ｂ、１１０ｃまたは１１０ｄの内の１つを指し、これによって４つの可能な値を有する。ワンホット論理によれば、現命令ポインタは、４ビットを有し、その１つは、現命令の最初の１６ビット語を含むレジスタを示すようにアサートされている（この例においては論理１に設定されている）。現命令ポインタの４つの可能な値を、２つの符号化ビットによって表わすこともできるが、デコード回路が必要となり、整列制御論理における遅延を付加することになる。
【００４８】
同様に、ポインタ生成論理２００は、８ビットの次命令ポインタを利用し、この場合に、１ビットが、レジスタ１１０ａ、１１０ｂおよびレジスタ１１２ａ〜１１２ｄのそれぞれを表わす。次命令ポインタの１ビットラインは、次命令の最初の１６ビット語を指示するようにアサートされている。ワンホット論理は、符号化を利用する従来型論理回路と比較して、一般に、より多くの並列の論理回路を必要とするが、必要な直列の論理回路は少ない。しかしながら、ワンホット論理回路は、従来型論理回路と比較して、比較的低いパイプライン段階遅延を達成する。図６を参照すると、ｍｕｘ２５０〜２６４は、バス２７０のワンホット現命令ポインタによって制御される。同様に、図５のｍｕｘ１３０、１３２、１４０は、ワンホット命令ポインタによって制御されて、低遅延かつ高速度の動作を達成する。
【００４９】
本発明の一態様による命令整列の例を図７および図８Ａ〜８Ｅを参照して説明する。図７は、命令キャッシュ４２における４つの命令ラインを示し、各ＩＣａｃｈｅラインは、４つの１６ビット語を含む。第１のＩＣａｃｈｅライン４００は、１６ビット命令Ｉ０、Ｉ１および３２ビット命令Ｉ２の１６ビット語を含む。ＩＣａｃｈｅライン４００における１番目の１６ビット語は無効である可能性がある。ＩＣａｃｈｅライン４００の直後の第２のＩＣａｃｈｅライン４０２は、３２ビット命令Ｉ２の２番目の１６ビット語および６４ビット命令Ｉ３における最初の３つの１６ビット語を含む。ＩＣａｃｈｅライン４０２の直後の、第３のＩＣａｃｈｅライン４０４は、６４ビット命令Ｉ３、３２ビット命令Ｉ４および１６ビット命令Ｉ５の４番目の１６ビット語を含む。ＩＣａｃｈｅライン４０４の直後の、第４のＩＣａｃｈｅライン４０６は、１６ビット命令Ｉ６、Ｉ７、Ｉ８、Ｉ９を含む。明白なように、３２ビット命令Ｉ２は、ＩＣａｃｈｅラインの４００と４０２とを跨ぎ、６４ビット命令Ｉ３は、ＩＣａｃｈｅラインの４０２と４０４とを跨ぐ。命令はＩＣａｃｈｅライン４２にパックされて、デコードの前に整列を必要とする。
【００５０】
ＩＣａｃｈｅライン４００、４０２、４０４を整列する際の、整列ユニットの動作を図８Ａ〜８Ｅに示してある。ここで図８Ａを参照すると、クロックサイクル１における整列ユニットの状態が示されている。現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃ、１００ｄは、それぞれ、１６ビット命令Ｉ０、Ｉ１および３２ビット命令Ｉ２の１番目の１６ビット語を含む。次の命令バッファ１１２は、サイクル１において空である。現命令バッファ１１０に対応する、先にプリデコードされた命令長は、命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄに格納される。命令長レジスタ１９０ｂ、１９０ｃは、１６ビット命令を指示し、命令長レジスタ１９０ｄは３２ビット命令を指示する。現命令ポインタＣｕｒ＿ｐｔｒは、整列およびデコードのために、現命令すなわち１６ビット命令Ｉ０を含む、現命令バッファ１１０のレジスタ１１０ｂを指す。次命令ポインタＮｘｔ＿ｐｔｒは、整列およびデコードのために、次命令すなわち１６ビット命令Ｉ１を含む、現命令バッファ１１０のレジスタ１１０ｃを指す。現命令ポインタは、現命令バッファ１１０のレジスタ１１０ｂにおける１６ビット命令Ｉ０を、整列命令バッファ１２０のレジスタ１２０ａに転送させる。
【００５１】
図８Ｂを参照すると、クロックサイクル２における整列ユニットの状態を示してある。現命令バッファ１１０は、継続して１６ビット命令Ｉ０、Ｉ１および３２ビット命令Ｉ２の１番目の１６ビット語を保持する。命令Ｉ２における２番目の１６ビット語および６４ビット命令Ｉ３における最初の３つの１６ビット語は、それぞれ、次命令バッファ１１２のレジスタ１１２ａ、１１２ｂ、１１２ｃ、１１２ｄ中に転送されている。命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄの内容は、クロックサイクル１の場合と同じままであり、それは現命令バッファ１１０の内容が同じままであるからである。現命令ポインタＣｕｒ＿ｐｔｒは、次いで、現命令バッファ１１０のレジスタ１１０ｃにおける、１６ビット命令Ｉ１を指し、次命令ポインタＮｘｔ＿ｐｔｒは、現命令バッファ１１０のレジスタ１１０ｄにおける３２ビット命令Ｉ２を指す。現命令ポインタは、現命令バッファ１１０のレジスタ１１０ｃにおいて１６ビット命令Ｉ１を、整列命令バッファ１２０のレジスタ１２０ａに転送させる。
【００５２】
次に図８Ｃを参照すると、クロックサイクル３における整列ユニットの状態を示してある。現命令バッファ１１０は、継続して１６ビット命令Ｉ０、Ｉ１および３２ビット命令Ｉ２の１番目の１６ビット語を保持する。次命令バッファ１１２は、継続して、３２ビット命令Ｉ２の２番目の１６ビット語および６４ビット命令Ｉ３の最初の３つの１６ビット語を保持する。命令長レジスタ１９０ａ、１９０ｂ、１９０ｃ、１９０ｄの内容は、クロックサイクル１および２のときと同じままである。現命令ポイントＣｕｒ＿ｐｔｒは、現命令バッファ１１０のレジスタ１１０ｄを指し、このレジスタは３２ビット命令Ｉ２の１番目の１６ビット語を含む。次命令ポインタＮｘｔ＿ｐｔｒは、次命令バッファ１１２のレジスタ１１２ｂを指し、このレジスタは６４ビット命令Ｉ３の１番目の１６ビット語を含む。命令Ｉ２の１番目の１６ビット語は、現命令バッファ１１０のレジスタ１１０ｄから整列命令バッファ１２０のレジスタ１２０ａに転送され、命令Ｉ２の２番目の１６ビット語は、次命令バッファ１１２のレジスタ１１２ａから、整列命令バッファ１２０のレジスタ１２０ｂに転送される。
【００５３】
図８Ｃにおいて、次命令ポインタＮｘｔ＿ｐｔｒの最初の４ビットは、現在命令バッファ１１０に対応し、すべてゼロである。これによって、次命令ポインタの４つの高位ビットが、ｍｕｘ３２０、３２２、３２４、３２６によって次のクロックサイクルにおける現命令ポインタとして選択されように、シフトラッチ３４０（図６）が設定される。さらに、次命令バッファ１１２の内容は、次のクロックサイクルにおいて現命令バッファ１１０中に転送される。
【００５４】
次に図８Ｄを参照すると、クロックサイクル４における整列ユニットの状態を示してある。ＩＣａｃｈｅライン４０２は、次命令バッファ１１２から現命令バッファ１１０へ転送されており、ＩＣａｃｈｅライン４０４は、次命令バッファ１１２に転送されている。したがって、現命令バッファ１１０は、３２ビット命令Ｉ２の２番目の１６ビット語および６４ビット命令Ｉ３の最初の３つの１６ビット語を含む。次命令バッファ１１２は、６４ビット命令Ｉ３の最後の１６ビット語、３２ビット命令Ｉ４の２つの１６ビット語、および１６ビット命令Ｉ５を含む。命令長レジスタ１９０ａの内容は、レジスタ１１０ａが命令Ｉ２の２番目の１６ビット語を含むので、「ドントケア（don't care）」条件を表わす。この態様においては、各命令の１番目の１６ビット語だけが、命令長情報を含んでいる。
【００５５】
命令長レジスタ１９０ｂは、６４ビット命令を指示し、レジスタ１９０ｃ、１９０ｄは「ドントケア」条件を表わす。現命令ポインタＣｕｒ＿ｏｔｒは、現命令バッファ１１０のレジスタ１１０ｂを指し、これレジスタは、６４ビット命令の１番目の１６ビット語を含む。次命令ポインタＮｘｔ＿ｐｔｒは、次命令バッファ１１２のレジスタ１１２ｂを指し、このレジスタは３２ビット命令Ｉ４の１番目の１６ビット語を含む。命令Ｉ３の最初の３つの１６ビット語は、それぞれ、現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃ、１１０ｄから、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂ、１２０ｃに転送される。さらに命令Ｉ３の４番目の１６ビット語は、次命令バッファ１１２のレジスタ１１２ａから整列命令バッファ１２０のレジスタ１２０ｄに転送される。
【００５６】
図８Ｄにおいて、次命令ポインタＮｘｔ＿ｐｔｕの最初の４ビットは、再びすべてゼロである。これによって、次命令ポインタの４つの高位ビットが、ｍｕｘ３２０、３２２、３２４、３２６によって、次のクロックサイクルでの現命令ポインタとして選択されるように、シフトラッチ３４０が設定される。さらに、次命令バッファ１１２の内容は、次のクロックサイクルで現命令バッファ１１０中に転送される。
【００５７】
図８Ｅを参照すると、クロックサイクル５における整列ユニットの状態を示してある。ＩＣａｃｈｅライン４０４は、次命令バッファ１１２から現命令バッファ１１０に転送されており、ＩＣａｃｈｅライン４０６は次命令バッファ１１２に転送されている。命令長レジスタ１９０ｂは、３２ビット命令を指示し、命令長レジスタ１９０ｄは、１６ビット命令を指示する。現命令ポインタＣｕｒ＿ｐｔｒは、現命令すなわち３２ビット命令Ｉ４を整列とデコードのために含む、現命令バッファ１１０のレジスタ１１０ｂを指す。次命令ポインタＮｘｔ＿ｐｔｒは、次命令すなわち１６ビット命令Ｉ５を整列とデコードのために含む、現命令バッファ１１０のレジスタ１１０ｄを指す。現命令ポインタによって、現命令バッファ１１０のレジスタ１１０ｂ、１１０ｃにおける３２ビット命令Ｉ４が、それぞれ、整列命令バッファ１２０のレジスタ１２０ａ、１２０ｂに転送される。
【００５８】
整列ユニットは、このようにして動作を継続し、分岐命令または停止条件がない場合に、サイクル当たり１つの命令を命令デコーダに提供する。
図６に示す、ポインタ生成論理２００の動作は、図８Ａ〜８Ｅの例を参照して理解することができる。図８Ａの例において、現命令ポインタＣｕｒ＿ｐｔｒは、レジスタ１１０ｂおよび対応する命令長レジスタ１９０ｂを指す。したがって、図６におけるバス２７０上で現命令ポインタは、ｍｕｘ２５０〜２６４のそれぞれの２番目の入力を選択し、それによって命令長レジスタ１９０ｂを選択する。命令長レジスタ１９０ｂは、１６ビットの命令長を指示する。命令長レジスタ１９０ｂにおける１６ビット位置は、ｍｕｘ２５４の２番目の入力に供給されるので、ｍｕｘ２５４は、次命令ポインタに論理１を与える。ｍｕｘ２５２および２５６〜２６４は、次の命令ポインタに論理ゼロを提供するが、この理由は、ｍｕｘの２番目の入力が論理ゼロに固定されているため、または命令長レジスタ１９０ｂにおける選択された位置が論理ゼロであるためのいずれかである。結果として、次命令ポインタＮｘｔ＿ｐｔｒはレジスタ１１０ｃを指す。
【００５９】
図８Ｂにおいて、現命令ポインタＣｕｒ＿ｐｔｒは、レジスタ１１０ｃおよび対応する命令長レジスタ１９０ｃを指す。バス２７０上の現命令ポインタは、ｍｕｘ２５０〜２６４のそれぞれの３番目の入力を選択し、それによって命令長レジスタ１９０ｃを選択する。命令長レジスタ１９０ｃにおける１６ビット位置は、論理１に設定されるので、ｍｕｘ２５６は次命令ポインタに論理１を与え、次命令ポインタはレジスタ１１０ｄを指す。
【００６０】
図８Ｃを参照すると、現命令ポインタＣｕｒ＿ｐｔｒは、レジスタ１１０ｄおよび命令長レジスタ１９０ｄを指している。この場合に、命令長レジスタ１９０ｄは、３２ビットの命令長を指示している。バス２７０上の現命令ポインタは、ｍｕｘ２５０〜２６４のそれぞれの高位入力を選択し、それによって命令長レジスタ１９０ｄを選択する。命令長レジスタ１９０ｄにおける３２ビット位置は論理１に設定されているので、ｍｕｘ２６０は、次命令ポインタに論理１を与え、次命令ポインタはレジスタ１１２ｂを指す。
【００６１】
最後に、図８Ｄを参照すると、現命令ポインタＣｕｒ＿ｐｔｒは、レジスタ１１０ｂおよび命令長レジスタ１９０ｂを指している。この場合に、命令長レジスタ１９０ｂは、６４ビットの命令長を指示している。バス２７０上の現命令ポインタは、ｍｕｘ２５０〜２６４のそれぞれの２番目の入力を選択し、それによって命令長レジスタ１９０ｂを選択する。命令長レジスタ１９０ｂにおける６４ビット位置は、論理１に設定されているので、ｍｕｘ２６０は、次命令ポインタに論理１を与え、次命令ポインタはレジスタ１１２を指す。ｍｕｘ２５２〜２６４は、現命令に対応する命令長情報を利用して、次命令の１番目の１６ビット語の位置を判定する。
【図面の簡単な説明】
【００６２】
【図１】パイプラインアーキテクチャを有するディジタルプロセッサのブロック図である。
【図２】図１に示す、フェッチユニットおよびデコードユニットの簡易ブロック図である。
【図３】本発明による命令整列システムの一態様の簡易ブロック図である。
【図４】命令整列ユニットのデータ経路のより詳細なブロック図である。
【図５Ａ】命令整列データ経路および整列制御論理のより詳細なブロック図である。
【図５Ｂ】命令整列データ経路および整列制御論理のより詳細なブロック図である。
【図６】図５のポインタ生成論理の概略ブロック図である。
【図７】命令キャッシュの４つのラインの例を示す概略図である。
【図８Ａ】図７に示す命令キャッシュラインを処理する際の、５つの連続クロックサイクルに対するポインタ生成論理の動作を説明する図である。
【図８Ｂ】図７に示す命令キャッシュラインを処理する際の、５つの連続クロックサイクルに対するポインタ生成論理の動作を説明する図である。
【図８Ｃ】図７に示す命令キャッシュラインを処理する際の、５つの連続クロックサイクルに対するポインタ生成論理の動作を説明する図である。
【図８Ｄ】図７に示す命令キャッシュラインを処理する際の、５つの連続クロックサイクルに対するポインタ生成論理の動作を説明する図である。
【図８Ｅ】図７に示す命令キャッシュラインを処理する際の、５つの連続クロックサイクルに対するポインタ生成論理の動作を説明する図である。
【図１】
2007500404.tif 000004
【図２】
2007500404.tif 000005
【図３】
2007500404.tif 000006
【図４】
2007500404.tif 000007
【図５Ａ】
2007500404.tif 000008
【図５Ｂ】
2007500404.tif 000009
【図６】
2007500404.tif 000010
【図７】
2007500404.tif 000011
【図８Ａ】
2007500404.tif 000012
【図８Ｂ】
2007500404.tif 000013
【図８Ｃ】
2007500404.tif 000014
【図８Ｄ】
2007500404.tif 000015
【図８Ｅ】
2007500404.tif 000016
【国際調査報告】
2007500404.tif 000017
2007500404.tif 000018
2007500404.tif 000019