(57)【特許請求の範囲】
【請求項１】
アドレス変換の方法であって、
第１のアドレスドメインにおけるメモリアクセスの第１のアドレスを受け取ることと、
前記第１のアドレスに線形に続く複数の予測される順次メモリアクセスの指示を受け取ることと、
複数のアドレス変換エントリをメモリ管理ユニットにストアすることであって、各アドレス変換エントリが、前記第１のアドレスドメインの第１の所定の数の最上位アドレスビットと、対応するアドレスページに対する第２のアドレスドメインの第２の所定の数の最上位アドレスビットとを含む、前記メモリ管理ユニットにストアすることと、
前記メモリ管理ユニットにストアされた前記アドレス変換エントリのサブセットをマイクロ変換ルックアサイドバッファにストアすることと、
前記第１のアドレスに対応する第１のアドレス変換エントリについて前記マイクロ変換ルックアサイドバッファを探すことと、
前記第１のアドレス変換エントリが前記マイクロ変換ルックアサイドバッファにストアされていない場合に、前記メモリ管理ユニットから前記第１のアドレス変換エントリを呼び出し、前記呼び出された第１のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアすることと、
前記第２のアドレスドメインの前記第２の所定の最上位アドレスビットを前記第１のアドレス変換エントリの前記第１のアドレスドメインの前記第１の所定の最上位アドレスビットで置換することにより、前記第１のアドレス変換エントリに従って前記第１のアドレスを前記第２のアドレスドメインにおける第２のアドレスに変換することと、
前記第１のアドレスと前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示とから、前記複数の予測される順次メモリアクセスの最後の予測される順次メモリアクセスが、前記第１のアドレス変換エントリに続く次のアドレス変換エントリに対応するかを判定することと、
前記複数の予測される順次メモリアクセスの前記最後の予測される順次メモリアクセスが、前記第１のアドレス変換エントリに続く次のアドレス変換エントリに対応する場合に、前記次のアドレス変換エントリについて前記マイクロ変換ルックアサイドバッファを探すことと、
前記次のアドレス変換エントリが前記マイクロ変換ルックアサイドバッファにストアされていない場合に、前記メモリ管理ユニットから前記次のアドレス変換エントリを呼び出し、前記呼び出された次のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアすることと、
を含む、方法。
【請求項２】
請求項１に記載のアドレス変換の方法であって、
前記第１のアドレスドメインにおける前記メモリアクセスが命令フェッチであり、
前記方法が、
条件付き分岐命令が分岐を採るか、分岐を採らないかを予測することと、
前記第１のアドレスと、採られると予測される次の順次条件付き分岐命令との間のアドレスロケーションの数に応じて、前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示を判定することと、
を含む、方法。
【請求項３】
請求項１に記載のアドレス変換の方法であって、
前記第１のアドレスドメインにおける前記メモリアクセスが連続する命令のフェッチパケットの命令フェッチであり、
前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示がフェッチパケットの数である、方法。
【請求項４】
請求項３に記載のアドレス変換の方法であって、
前記複数の予測される順次メモリアクセスの最後の予測される順次メモリアクセスが前記次のアドレス変換エントリに対応するかを判定することが、
前記フェッチパケットの数に前記フェッチパケットのサイズを乗算して積を形成することと、
前記積を前記第１のアドレスに加算してアドレスの和を形成することと、
前記アドレスの和が前記次のアドレス変換エントリに対応するかを判定することと、
を含む、方法。
【請求項５】
請求項４に記載のアドレス変換の方法であって、
前記アドレスの和が前記次のアドレス変換エントリに対応するかを判定することが、前記第１のアドレス変換エントリの現在のページサイズの指示を受け取ることを含む、方法。
【請求項６】
請求項１に記載のアドレス変換の方法であって、
メモリアドレスのサブセットに対するデータをキャッシュに一時的にストアすることと、
前記第１のアドレスに対応するデータに対するメモリアクセスの各々受信される第１のアドレスについて前記キャッシュを探すことと、
前記キャッシュが前記第１のアドレスに対応するデータをストアしている場合に、前記キャッシュから前記第１のアドレスに対してメモリアクセスを行うことと、
前記キャッシュが前記第１のアドレスに対応するデータをストアしていない場合に、
前記第１のアドレス変換エントリに従って前記第１のアドレスを前記第２のドメインにおける第２のアドレスに変換することを含んで、前記第１のアドレスに対応する前記データを前記メモリから呼び出し、
前記第１のアドレスに対応する前記呼び出されたデータを前記キャッシュにストアし、
その後、前記キャッシュから前記第１のアドレスに対して前記メモリアクセスを行うことと、
を更に含み、
前記第１のアドレス変換エントリを前記メモリ管理ユニットから呼び出すことと、前記第１のアドレス変換エントリが前記マイクロ変換ルックアサイドバッファにストアされていない場合に前記呼び出された第１のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアすることとが、前記キャッシュが前記第１のアドレスに対応するデータをストアしていない場合にのみ実行される、方法。
【請求項７】
請求項６に記載のアドレス変換の方法であって、
前記第１のアドレスドメインにおける前記メモリアクセスが命令フェッチであり、前記第１のアドレスドメインにおける前記メモリアクセスが連続する命令のフェッチパケットの命令フェッチであり、前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示がフェッチパケットの数であり、
前記方法が、
前記第１のアドレスにフェッチパケットを加算することによって第１の次のパケットアドレスを生成することと、
前の次のパケットアドレスにフェッチパケットサイズを順次加算することによって次のフェッチアドレスのシーケンスを生成することと、
各次のパケットアドレスにおいて命令をプリフェッチすることと、
を更に含む、方法。
【請求項８】
請求項７に記載のアドレス変換の方法であって、
各次のパケットアドレスにおいて命令をプリフェッチすることが、
前記次のパケットアドレスに対応する命令に対する各次のパケットアドレスについて前記キャッシュを探すことと、
前記キャッシュが前記次のパケットアドレスに対応する命令をストアしていない場合に、
前記第１のアドレス変換エントリに従って前記次のパケットアドレスを前記第２のアドレスドメインにおける第３のアドレスに変換することを含んで、前記次のパケットアドレスに対応する前記データをメモリから呼び出し、
各次のパケットアドレスに対応する前記呼び出された命令を前記キャッシュにストアすることと、
を含む、方法。
【請求項９】
請求項１に記載のアドレス変換の方法であって、
前記次のアドレス変換エントリを前記メモリ管理ユニットから呼び出すことが、
前記第１のアドレスを前記メモリ管理ユニットに供給することと、
前記第１のアドレスに対応するアドレス変換エントリを前記メモリ管理ユニットから呼び出すことと、
前記メモリ管理ユニットからの前記呼び出されたアドレス変換エントリを前記マイクロ変換ルックアサイドバッファに前記第１のアドレスに対応する指示とともに戻すことであって、それにより、前記マイクロ変換ルックアサイドバッファが順序付けられていない呼び出されたアドレス変換エントリを適切にストアし得る、前記戻すことと、
を含む、方法。
【請求項１０】
アドレス変換を用いるデータ処理装置であって、
命令制御下でデータに対してデータ処理演算を実施する中央処理装置であって、第１のアドレスドメインにおける対応する第１のアドレスでのメモリアクセスと、各メモリアクセスについて前記第１のアドレスに線形に続く複数の予測される順次メモリアクセスの指示とを生成する、前記中央処理装置と、
複数のアドレス変換エントリをストアするメモリ管理ユニットであって、各アドレス変換エントリが、前記第１のアドレスドメインの第１の所定数の最上位アドレスビットと、対応するアドレスページについて第２のアドレスドメインの対応する第２の所定数の最上位アドレスビットとを含む、前記メモリ管理ユニットと、
前記中央処理装置と前記メモリ管理ユニットとに接続されるアドレス変換ユニットと、
を含み、
前記アドレス変換ユニットが、前記複数のアドレス変換エントリのサブセットをストアするマイクロ変換ルックアサイドバッファを含み、
前記アドレス変換ユニットが、
現在の第１のアドレスに対応する第１のアドレス変換エントリについて前記マイクロ変換ルックアサイドバッファを探すことと、
前記第１のアドレス変換エントリが前記マイクロ変換ルックアサイドバッファにストアされていない場合に、前記メモリ管理ユニットから前記第１のアドレス変換エントリを呼び出し、前記呼び出された第１のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアし、前記アドレス変換エントリの前記第１のアドレスドメインの前記第１の所定の最上位ビットの代わりに前記第２のアドレスドメインにおける前記第２の所定の最上位ビットで置換することによって前記第１のアドレス変換エントリに従って前記第１のアドレスを第２のアドレスドメインにおける第２のアドレスに変換することと、
によって、前記中央処理装置からのメモリアクセスを前記第１のアドレスドメインから第２のアドレスドメインに変換するように動作可能であり、
前記アドレス変換ユニットが、
前記複数の予測される順次メモリアクセスの最後の予測される順次メモリアクセスが前記第１のアドレス変換エントリに続く次のアドレス変換エントリに対応するか否かを前記第１のアドレスと前記複数の予測される順次メモリアクセスの前記指示とから判定し、
前記複数の予測される順次メモリアクセスの前記最後の予測される順次メモリアクセスが次のアドレス変換エントリに対応する場合に、前記次のアドレス変換エントリについて前記マイクロ変換ルックアサイドバッファを探し、
前記次のアドレス変換エントリが前記マイクロ変換ルックアサイドバッファにストアされていない場合に、前記メモリ管理ユニットから前記次のアドレス変換エントリを呼び出し、前記呼び出された次のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアする、
ように動作可能である、装置。
【請求項１１】
請求項１０に記載のアドレス変換を用いるデータ処理装置であって、
前記第１のアドレスドメインにおける前記メモリアクセスが命令フェッチであり、
前記中央処理装置が分岐予測ユニットを含み、
前記分岐予測ユニットが、
条件付き分岐命令が分岐を採るか、分岐を採らないかの予測をストアし、
前記第１のアドレスと、採られるように予測される次の順次条件付き分岐命令との間のアドレスロケーションの数に応じて、前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示を計算する、
ように動作可能である、装置。
【請求項１２】
請求項１０に記載のアドレス変換を用いるデータ処理装置であって、
前記中央処理装置が、複数の機能ユニットを含む超長命令語中央処理装置であり、
前記第１のアドレスドメインにおける前記メモリアクセスが、連続する命令のフェッチパケットの命令フェッチであり、
前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示が、フェッチパケットの数である、装置。
【請求項１３】
請求項１２に記載のアドレス変換を用いるデータ処理装置であって、
前記アドレス変換ユニットが、
前記フェッチパケットの数を受け取る第１の入力と、前記フェッチパケットのサイズを受け取る第２の入力と、積を形成する出力とを有する乗算器と、
前記乗算器の前記出力に接続される第１の入力と、前記第１のアドレスを受け取る第２の入力と、アドレスの和を形成する出力とを有する加算器と、
前記加算器の前記出力に接続される第１の入力を有し、前記アドレスの和が前記次のアドレス変換エントリに対応するか否かを判定する、ページ境界検出ユニットと、
を更に含む、装置。
【請求項１４】
請求項１３に記載のアドレス変換を用いるデータ処理装置であって、
前記ページ境界検出ユニットが、前記第１のアドレス変換エントリの現在のページのサイズの指示を受け取る第２の入力を更に有する、装置。
【請求項１５】
請求項１０に記載のアドレス変換を用いるデータ処理装置であって、
メモリアドレスのサブセットについてのデータを一時的にストアするキャッシュを更に含み、
前記キャッシュが、
前記第１のアドレスに対応するデータに対するメモリアドレスの各々受信される第１のアドレスについて探し、
前記キャッシュが前記第１のアドレスに対応するデータをストアしている場合に、前記キャッシュから前記第１のアドレスに対して前記メモリアクセスを行い、
前記キャッシュが前記第１のアドレスに対応するデータをストアしていない場合に、前記アドレス変換ユニットが前記第１のアドレス変換エントリに従って前記第１のアドレスを前記第２のアドレスドメインにおける前記第２のアドレスに変換することを含んで、メモリから前記第１のアドレスに対応する前記データを呼び出し、前記第１のアドレス変換エントリに対応する前記呼び出されたデータをストアし、その後、前記キャッシュから前記第１のアドレスに対して前記メモリアクセスを行う、
ように動作可能であり、
前記アドレス変換ユニットが、前記第１のアドレス変換エントリを前記メモリ管理ユニットから呼び出し、前記キャッシュが前記第１のアドレスに対応するデータをストアしていない場合にのみ、前記呼び出された第１のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファにストアする、ように動作可能である、装置。
【請求項１６】
請求項１５に記載のアドレス変換を用いるデータ処理装置であって、
前記中央処理装置が、連続する命令のフェッチパケットの命令フェッチを前記メモリアクセスとして生成し、前記第１のアドレスに線形に続く前記複数の予測される順次メモリアクセスの前記指示としてフェッチパケットの数を生成し、
前記アドレス変換ユニットが、
前記フェッチパケット数が初期的にロードされ、メモリサイクル毎に減分される、フェッチパケットカウントレジスタと、
前記中央処理装置に接続されて前記第１のアドレスを受け取る第１の入力と、第２の入力と、出力と、ゼロカウントユニットに接続されてゼロカウント指示を受け取る制御入力とを有するマルチプレクサと、
前記フェッチパケットカウントレジスタに接続され、前記フェッチパケットカウントレジスタのカウントがゼロかどうかのゼロカウント指示を生成するゼロカウントユニットであって、前記ゼロカウント指示が、前記マルチプレクサの前記制御入力に接続され、ゼロの指示の際に前記マルチプレクサの前記第１の入力を選択し、非ゼロの指示の際に前記マルチプレクサの前記第２の入力を選択する、前記ゼロカウントユニットと、
フェッチパケットサイズの指示を受け取る第１の入力と、前記マルチプレクサの前記出力に接続される第２の入力と、アドレスの和を生成する出力とを有する加算器であって、前記出力が前記マルチプレクサの前記第２の入力に接続され、前記アドレスの和がキャッシュプリフェッチ要求を生成する、前記加算器と、
を更に含む、装置。
【請求項１７】
請求項１６に記載のアドレス変換を用いるデータ処理装置であって、
前記キャッシュが、
前記キャッシュプリフェッチアドレスに対応するデータに対する各々受信されるキャッシュプリフェッチアドレスについて探し、
前記キャッシュが前記キャッシュプリフェッチアドレスに対応するデータをストアしていない場合に、前記アドレス変換ユニットが前記第１のアドレス変換エントリに従って前記キャッシュプリフェッチアドレスを前記第２のアドレスドメインにおける第３のアドレスに変換することを含んで、前記メモリから前記キャッシュプリフェッチアドレスに対応する前記データを呼び出し、
前記キャッシュプリフェッチアドレスに対応する前記呼び出されたデータをストアする、
ように更に動作可能である、装置。
【請求項１８】
請求項１０に記載のアドレス変換を用いるデータ処理装置であって、
前記メモリ管理ユニットが、前記呼び出された第１のアドレス変換エントリを前記マイクロ変換ルックアサイドバッファに前記第１のアドレスに対応する指示とともに戻すように更に動作可能であり、
前記マイクロ変換ルックアサイドバッファが、前記呼び出された第１のアドレス変換エントリを前記第１のアドレスに対応するロケーションにストアし、そのため、前記マイクロ変換ルックアサイドバッファが、順序付けられていない呼び出されたアドレス変換エントリを適切にストアし得る、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してデジタルデータ処理に関し、より具体的には、アドレス変換に関する。
【背景技術】
【０００２】
仮想メモリをサポートするプロセッサでは、ＣＰＵによって提供される仮想アドレスは物理アドレスに変換されなければならない。これは、典型的に、メモリ管理ユニット（ＭＭＵ）によって実現される。ＭＭＵは、典型的に、ＭＭＵにストアされるアドレス変換エントリのキャッシュとしてμＴＬＢ（マイクロ変換ルックアサイドバッファ）を用いる。このようなアドレス変換エントリは、典型的に、メモリページに基づいて編成される。ＣＰＵによって要求されるどの仮想アドレスも、メモリアクセスのためμＴＬＢ／ＭＭＵによって物理アドレスに変換される必要がある。これは、典型的に、ページ境界で実施される。一連のプログラムフェッチが境界をクロスし次のページにフェッチする場合、次のアドレス変換エントリが、仮想アドレス−物理アドレス変換のために必要とされる。この次のアドレス変換エントリがμＴＬＢにない場合、ＭＭＵから要求されなければならない。この変換データフェッチは、ＭＭＵにおけるページ変換及びページテーブルウォークレイテンシに従って、数十から数百サイクルを要し得る。
【発明の概要】
【０００３】
例示実施形態において、このようなプログラムフェッチに対するページミス変換レイテンシが隠される。説明される例では、ＣＰＵによってアクセスが要求されるときはいつも、Ｌ１Ｉキャッシュコントローラが、仮想アドレスとフェッチパケットカウントとの加算がページ境界をクロスするか否かのアプリオリルックアップを行う。アクセスがページ境界をクロスする場合、Ｌ１Ｉキャッシュコントローラは、第１のページとともに第２のページ変換を要求する。これにより、Ｌ１Ｉキャッシュコントローラが第２のページ要求を処理し始めるのを待たずに、μＴＬＢへの要求がパイプライン化される。これは、第２のページ変換要求の決定性プリフェッチになる。第２のページについての変換情報が、Ｌ１Ｉキャッシュコントローラに局所的にストアされ、アクセスがページ境界をクロスするときに用いられる。
【０００４】
説明される例では、デジタル信号プロセッサ（ＤＳＰ）、プログラムキャッシュメモリコントローラ（Ｌ１Ｉコントローラ）、及びＣＰＵからＬ１Ｉキャッシュへのインターフェースが、仮想アドレス及びその仮想アドレスからのフェッチパケット数を提供する。アクセスされるこのフェッチパケット数は、概して、分岐予測アーキテクチャに基づく。Ｌ１Ｉキャッシュコントローラは、仮想アドレスとフェッチパケットカウントの和をアンロールして対応するフェッチパケット要求にし、これらのフェッチパケットをＬ１Ｉキャッシュにプリフェッチする。典型的な従来のＤＳＰ  Ｌ１Ｉキャッシュコントローラでは、Ｌ１Ｉキャッシュは、仮想的にインデックスされ、仮想的にタグ付けされたキャッシュである。Ｌ２キャッシュに出るいかなるＬ１Ｉキャッシュミス要求（仮想アドレス）も、物理アドレスに変換され、Ｌ２キャッシュに対して要求されなければならない。
【０００５】
Ｌ１Ｉキャッシュコントローラは、また、最後に推定されるフェッチが変換テーブルにおける第２のページを指すかを判定する。第２のページを指す場合、Ｌ１Ｉキャッシュコントローラは、次のページ変換テーブルエントリをそれが必要とされる前に要求する。典型的に、この新しいページ変換テーブルエントリは、プログラムフェッチアドレスが次のページにクロスするときに、終了しているか、又は進行中である。これにより、第２のページにおける命令をフェッチするためのレイテンシが低減される。
【図面の簡単な説明】
【０００６】
【図１】一実施形態に従ったシングルコアスカラプロセッサを図示する。
【０００７】
【図２】別の実施形態に従ったデュアルコアスカラプロセッサを図示する。
【０００８】
【図３】さらなる実施形態に従ったシングルコアベクトルプロセッサを図示する。
【０００９】
【図４】さらなる実施形態に従ったデュアルコアベクトルプロセッサを図示する。
【００１０】
【図５】ＣＰＵの一実施形態の構造を図示する。
【００１１】
【図６】グローバルスカラレジスタファイルを図示する。
【００１２】
【図７】グローバルベクトルレジスタファイルを図示する。
【００１３】
【図８】乗算及び相関機能ユニットによって共有されるローカルベクトルレジスタファイルを図示する。
【００１４】
【図９】ロード／ストアユニットのローカルレジスタファイルを図示する。
【００１５】
【図１０】プレディケートレジスタファイルを図示する。
【００１６】
【図１１】好ましい実施形態に従った中央処理装置のパイプラインフェーズを図示する。
【００１７】
【図１２】単一フェッチパケットの１６個の命令を図示する。
【００１８】
【図１３】命令の命令コーディングの例を図示する。
【００１９】
【図１４】例示実施形態に従ったＳＩＭＤ演算に対するキャリー制御を図示する。
【００２０】
【図１５】主要部分を図示する。
【００２１】
【図１６】仮想アドレスから物理アドレスへの変換を図示する。
【００２２】
【図１７】例示実施形態に従ったアドレスアンロールユニットの実施形態を図示する。
【００２３】
【図１８】例示実施形態に従ったページ境界クロスユニットの実施形態を図示する。
【００２４】
【図１９】演算を概略的に図示する。
【発明を実施するための形態】
【００２５】
図１は、一実施形態に従ったシングルコアスカラプロセッサを図示する。シングルコアプロセッサ１００は、個別のレベル１命令キャッシュ（Ｌ１Ｉ）１１１及びレベル１データキャッシュ（Ｌ１Ｄ）１１２に結合されるスカラ中央処理装置（ＣＰＵ）１１０を含む。中央処理装置コア１１０は、当技術分野で周知のように構築され得、典型的に、レジスタファイル、整数算術論理ユニット、整数乗算器、及びプログラムフロー制御ユニットを含み得る。シングルコアプロセッサ１００は、命令及びデータの両方を保持するレベル２組合せ命令／データキャッシュ（Ｌ２）１１３を含む。好ましい実施形態において、スカラ中央処理装置（ＣＰＵ）１１０、レベル１命令キャッシュ（Ｌ１Ｉ）１１１、レベル１データキャッシュ（Ｌ１Ｄ）１１２、及びレベル２組合せ命令／データキャッシュ（Ｌ２）１１３は、単一集積回路に形成される。
【００２６】
好ましい実施形態において、この単一集積回路は更に、電力制御回路１２１、エミュレーション／トレース回路１２２、試験容易化設計（ＤＳＴ）プログラマブル内蔵自己試験（ＰＢＩＳＴ）回路１２３、及びクロッキング回路１２４などの補助回路を含む。メモリＣＰＵ１１０の外部にあり、おそらくは単一集積回路１００に集積されるのは、コントローラ１３１である。
【００２７】
ＣＰＵ１１０は、定義されるデータに対してデータ処理演算を実施するため、プログラム制御下で動作する。ＣＰＵ１１０を制御するプログラムは、復号及び実行の前にフェッチされなければならない命令で構成される。シングルコアプロセッサ１００は複数のキャッシュメモリを含む。図１は、一対の第１のレベルのキャッシュを図示する。レベル１命令キャッシュ（Ｌ１Ｉ）１１１は、ＣＰＵ１１０によって用いられる命令をストアする。ＣＰＵ１１０は、まず、レベル１命令キャッシュ１１１からの任意の命令へのアクセスを試みる。レベル１データキャッシュ（Ｌ１Ｄ）１１２は、ＣＰＵ１１０によって用いられるデータをストアする。ＣＰＵ１１０は、まず、レベル１データキャッシュ１１２からの任意の要求されるデータへのアクセスを試みる。これら２つのレベル１キャッシュ（Ｌ１Ｉ  １１１及びＬ１Ｄ  １１２）は、レベル２統合キャッシュ（Ｌ２）１１３によってバックアップされる。レベル１命令キャッシュ１１１への又はレベル１データキャッシュ１１２へのキャッシュミスの事象において、要求された命令又はデータは、レベル２統合キャッシュ１１３から捜される。要求された命令又はデータがレベル２統合キャッシュ１１３にストアされている場合、この命令又はデータは、中央処理装置コア１１０への供給のため、要求元のレベル１キャッシュに供給される。当技術分野で既知のように、要求された命令又はデータは、その使用を速めるために要求元キャッシュ及びＣＰＵ１１０に同時に供給され得る。
【００２８】
レベル２統合キャッシュ１１３はさらに、より高レベルのメモリシステムにメモリコントローラ１３１を介して結合される。メモリコントローラ１３１は、外部メモリ（図１には示さず）にアクセスすることによって、レベル２統合キャッシュ１１３におけるキャッシュミスを扱う。メモリコントローラ１３１は、キャッシュ可能性の決定、エラー検出及び補正、アドレス変換など、すべてのメモリ中枢機能を扱う。シングルコアプロセッサ１００は、マルチプロセッサシステムの一部とし得る。この場合、メモリコントローラ１３１は、プロセッサ間のデータ転送を扱い、プロセッサ間のキャッシュコヒーレンスを維持する。
【００２９】
図２は、別の実施形態に従ったデュアルコアプロセッサを図示する。デュアルコアプロセッサ２００は、個別のレベル１命令キャッシュ（Ｌ１Ｉ）２１１及びレベル１データキャッシュ（Ｌ１Ｄ）２１２に結合される第１の中央処理装置（ＣＰＵ）２１０、並びに、個別のレベル１命令キャッシュ（Ｌ１Ｉ）２２１及びレベル１データキャッシュ（Ｌ１Ｄ）２２２に結合される第２のＣＰＵ２２０を含む。中央処理装置２１０及び２２０は、好ましくは、図１において図示するＣＰＵ１１０に類似して構築される。デュアルコアプロセッサ２００は、４つのすべてのレベル１キャッシュ（Ｌ１Ｉ  ２１１、Ｌ１Ｄ  ２１２、Ｌ１Ｉ  ２２１、及びＬ１Ｄ  ２２２）をサポートする、単一の共有レベル２組合せ命令／データキャッシュ（Ｌ２）２３１を含む。好ましい実施形態において、ＣＰＵ２１０、レベル１命令キャッシュ（Ｌ１Ｉ）２１１、レベル１データキャッシュ（Ｌ１Ｄ）２１２、ＣＰＵ２２０、レベル１命令キャッシュ（Ｌ１Ｉ）２２１、レベル１データキャッシュ（Ｌ１Ｄ）２２２、及びレベル２組合せ命令／データキャッシュ（Ｌ２）２３１は、単一集積回路に形成される。この単一集積回路は、好ましくは、電力制御回路２４５、エミュレーション／トレース回路１１６、試験容易化設計（ＤＳＴ）プログラマブル内蔵自己試験（ＰＢＩＳＴ）回路１１７、及びクロッキング回路１１８などの補助回路も含む。この単一集積回路は、メモリコントローラ２５１も含み得る。
【００３０】
図３及び図４は、図１及び図２に各々示したものに類似するシングルコア及びデュアルコアプロセッサを図示する。図３及び図４は、ベクトル中央処理装置を示す点で図１及び図２と異なる。下記でさらに説明するように、シングルコアベクトルプロセッサ３００はベクトルＣＰＵ３１０を含む。デュアルコアベクトルプロセッサ４００は、２つのベクトルＣＰＵ４１０及び４２０を含む。ベクトルＣＰＵ３１０、４１０、及び４２０は、対応するスカラＣＰＵ１１０、２１０、及び２２０に比して、広いデータパス動作ユニット及び広いデータレジスタを含む。
【００３１】
ベクトルＣＰＵ３１０、４１０、及び４２０はさらに、ストリーミングエンジン３１３（図３）並びにストリーミングエンジン４１３及び４２３（図４）を含む点で、対応するＣＰＵ１１０、２１０、及び２２０と異なる。ストリーミングエンジン３１３、４１３、及び４２３は類似している。ストリーミングエンジン３１３は、レベル２統合キャッシュ３１３（Ｌ２）からベクトルＣＰＵ３１０にデータを転送する。ストリーミングエンジン４１３は、レベル２統合キャッシュ４３１からベクトルＣＰＵ４１０にデータを転送する。ストリーミングエンジン４２３は、レベル２統合キャッシュ４３１からベクトルＣＰＵ４２０にデータを転送する。好ましい実施形態に従って、各ストリーミングエンジン３１３、４１３、及び４２３は最大２つのデータストリームを管理する。
【００３２】
各ストリーミングエンジン３１３、４１３、及び４２３は、或る制限された状況においてデータを転送する。ストリームは、特定のタイプの要素のシーケンスで構成される。ストリームに対して動作するプログラムは、データを順次読み出し、各要素に対し順に動作する。どのストリームも下記の基本的特性を有する。ストリームデータは、時間的に明確な始まり及び終わりを有する。ストリームデータは、ストリームを通じて固定の要素サイズ及びタイプを有する。ストリームデータは、要素の固定シーケンスを有する。そのため、プログラムはストリーム内でランダムに捜すことができない。ストリームデータは、アクティブである間、読み出し専用である。プログラムは、ストリームを読み出しながら同時にストリームに書き込むことはできない。ストリームが開かれると、ストリーミングエンジンは、アドレスを計算し、定義されたデータタイプをレベル２統合キャッシュからフェッチし、ゼロ拡張、符号拡張、マトリックス移項等のデータ要素ソーティング／スワッピングなど、データタイプ操作を実施し、データをＣＰＵ内のプログラムされた実行ユニットに直接的に搬送する。このように、ストリーミングエンジンは、「良好に機能する」データに対するリアルタイムのデジタルフィルタリング演算に有用である。ストリーミングエンジンは、これらのメモリフェッチタスクを対応するＣＰＵから解放し、その他の処理機能を可能にする。
【００３３】
ストリーミングエンジンは、下記の利点を提供する。ストリーミングエンジンは、多次元メモリアクセスを可能にする。ストリーミングエンジンは、機能ユニットに利用可能な帯域幅を広げる。ストリーミングエンジンは、キャッシュミスによるストール数を最小限にする。これは、ストリームバッファがＬ１Ｄキャッシュ及びＬ２キャッシュをバイパスし得るからである。ストリーミングエンジンは、維持すべきループにおいて必要とされるスカラ演算数を減少させる。ストリーミングエンジンは、アドレスポインタを管理する。ストリーミングエンジンは、アドレス生成に対処して、自動的にアドレス生成命令スロット及び．Ｄユニットを他の計算に解放する。
【００３４】
図５は、ＣＰＵの一実施形態の構造を示す。特に記載がない限り、この説明はスカラＣＰＵ及びベクトルＣＰＵのいずれにもあてはまる。ＣＰＵは、乗算ユニット５１１（．Ｍ）、相関ユニット５１２（．Ｃ）、算術ユニット５１３（．Ｌ）、算術ユニット５１４（．Ｓ）、ロード／ストアユニット５１５（．Ｄ）、分岐ユニット５１６（．Ｂ）、及び予測ユニット（．Ｐ）の、複数の実行ユニットを含む。これらの実行ユニットの動作及び関係を以下で詳述する。好ましい実施形態に従って、図５のＣＰＵは、命令サイクル毎に１６個の命令のプログラムフェッチパケットをフェッチする超長命令語（ＶＬＩＷ）ＣＰＵである。下記で説明するように、これらの命令は、各命令サイクルの間、複数の実行ユニットによって並列に実行され得る。
【００３５】
乗算ユニット５１１は主として乗算を実施する。乗算ユニット５１１は、最大２つのダブルベクトルオペランドを受け、最大１つのダブルベクトル結果を生成する。乗算ユニット５１１は、下記の演算を実施するように構成可能な命令である。即ち、８ビットから６４ビットまでの乗算演算の精度での、様々な整数乗算演算、様々な正規及び複素ドット積演算、及び様々な浮動小数点乗算演算、ビット単位論理演算、移動、並びに加算及び減算である。図５において図示するように、乗算ユニット５１１は、４つの同時１６ビット×１６ビット乗算のためのハードウェアを含む。乗算ユニット５１１は、以下に述べる方式で、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、並びに共有．Ｍ及び．Ｃローカルレジスタファイル５２３にアクセスし得る。転送マルチプレクサ５３０が、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、対応するストリーミングエンジン、及び乗算ユニット５１１の間のデータ転送を調停する。
【００３６】
相関ユニット５１２（．Ｃ）は、最大２つのダブルベクトルオペランドを受け、最大１つのダブルベクトル結果を生成する。相関ユニット５１２はこれらの主要演算をサポートする。ＷＣＤＭＡの「レーキ」及び「サーチ」命令を裏付けるものとして、相関ユニット５１２は、クロックサイクル当たり最大５１２個の２ビットＰＮ×８ビットＩ／Ｑ複素乗算を実施する。相関ユニット５１２は、８ビット及び１６ビットの差分絶対値和（ＳＡＤ）計算を実施して、クロックサイクル当たり最大５１２個のＳＡＤを実施する。相関ユニット５１２は、水平加算及び水平最小／最大命令を実施する。相関ユニット５１２は、ベクトル置換命令を実施する。相関ユニット５１２は、８個の２５６ビット幅制御レジスタを含む。これらの制御レジスタは、或る相関ユニット命令の演算を制御するために用いられる。相関ユニット５１２は、以下に述べる方式で、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、並びに共有．Ｍ及び．Ｃローカルレジスタファイル５２３にアクセスし得る。転送マルチプレクサ５３０は、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、対応するストリーミングエンジン、及び相関ユニット５１２の間のデータ転送を調停する。
【００３７】
ＣＰＵ５００は、２つの算術ユニット、算術ユニット５１３（．Ｌ）及び算術ユニット５１４（．Ｓ）、を含む。算術ユニット５１３及び算術ユニット５１４は各々、最大２つのベクトルオペランドを受け、最大１つのベクトル結果を生成する。これらの計算ユニットはこれらの主要演算をサポートする。算術ユニット５１３及び算術ユニット５１４は、様々な単一命令複数データ（ＳＩＭＤ）固定小数点算術演算を８ビットから１６ビットまでの精度で実施する。算術ユニット５１３及び算術ユニット５１４は、様々なベクトル比較及び最小／最大命令を実施し、様々なベクトル比較及び最小／最大命令は、結果をプレディケートレジスタファイル５２６（下記でさらに説明する）に直接書き込む。これらの比較には、Ａ＝Ｂ、Ａ＞Ｂ、Ａ≧Ｂ、Ａ＜Ｂ、及びＡ≦Ｂが含まれる。比較が肯定である場合、プレディケートレジスタ内の対応するビット位置において１ビットがストアされる。比較が否定である場合、プレディケートレジスタ内の対応するビット位置において０がストアされる。ベクトル比較命令はバイト（８ビット）データを想定し、そのため、３２個のシングルビット結果を生成する。算術ユニット５１３及び算術ユニット５１４は、以下で説明するように、指定されたプレディケートレジスタを用いて様々なベクトル演算を実施する。算術ユニット５１３及び算術ユニット５１４は、様々なＳＩＭＤ浮動小数点算術演算を、半精度（１６ビット）、単精度（３２ビット）、又は倍精度（６４ビット）で実施する。算術ユニット５１３は及び算術ユニット５１４は、様々なアルゴリズム及び機能のスピードを上げるために特殊化された命令を実施する。算術ユニット５１３は及び算術ユニット５１４は、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、共有．Ｌ及び．Ｓローカルレジスタファイル５２４、及びプレディケートレジスタファイル５２６にアクセスし得る。転送マルチプレクサ５３０は、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、対応するストリーミングエンジン、並びに算術ユニット５１３及び５１４間のデータ転送を調停する。
【００３８】
ロード／ストアユニット５１５（．Ｄ）は主としてアドレス計算に用いられる。ロード／ストアユニット５１５は、６４ビットまでのスカラオペランドを受けるように拡張され、６４ビットまでのスカラ結果を生成する。ロード／ストアユニット５１５は、他のユニットに対する作業負荷を低減するために、ロード及びストアデータに対して、スワッピング、パック、及びアンパックなどのデータ操作を実施するため付加的なハードウェアを含む。ロード／ストアユニット５１５は、クロックサイクル毎に１つのロード又はストア要求を４４ビット物理アドレスとともにレベル１データキャッシュ（Ｌ１Ｄ）に送り得る。ロード又はストアデータ幅は、３２ビット、６４ビット、２５６ビット、又は５１２ビットとし得る。ロード／ストアユニット５１５は、これらの主要演算、即ち、６４ビットＳＩＭＤ算術演算、６４ビットビット単位論理演算、並びに、スカラ及びベクトルのロード及びストアデータ操作、をサポートする。ロード／ストアユニット５１５は、好ましくは、４８ビット仮想アドレスから４４ビット物理アドレスへのアドレス変換を実施するためにマイクロＴＬＢ（テーブルルックアサイドバッファ）ブロックを含む。ロード／ストアユニット５１５は、以下に述べる方式で、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、及び．Ｄローカルレジスタファイル５２５にアクセスし得る。転送マルチプレクサ５３０は、グローバルスカラレジスタファイル５２１、グローバルベクトルレジスタファイル５２２、対応するストリーミングエンジン、及びロード／ストアユニット５１５間のデータ転送を調停する。
【００３９】
分岐ユニット５１６（．Ｂ）は、分岐アドレスを計算し、分岐予測を実施し、この予測の結果に応じて制御フローを変更する。
【００４０】
プレディケートユニット５１７（．Ｐ）は、ベクトルプレディケートレジスタに対して基本的演算を実施する小型制御ユニットである。プレディケートユニット５１７は、ベクトルプレディケートレジスタ５２６への直接的アクセスを有する。プレディケートユニット５１７は、プレディケートレジスタに対して、ＡＮＤ、ＡＮＤＮ、ＯＲ、ＸＯＲ、ＮＯＲ、ＢＩＴＲ、ＮＥＧ、ＳＥＴ、ＢＩＴＣＮＴ（ビットカウント）、ＲＭＢＤ（右端ビット検出（rightmost bit detect））、ＢＩＴ  Ｄｅｓｉｍａｔｅ及びＥｘｐａｎｄなど、異なるビット演算を実施する。
【００４１】
図６は、グローバルスカラレジスタファイル５２１を図示する。１６個の独立した６４ビット幅スカラレジスタがある。グローバルスカラレジスタファイル５２１の各レジスタは、３２ビットスカラデータ（レジスタＡ０〜Ａ１５  ６０１として指定される）又は６４ビットのスカラデータ（レジスタＥＡ０〜ＥＡ１５  ６１１として指定される）として読み出され得る。ただし、書き込みは常に６４ビットであり、必要な場合、６４ビットまで埋めるためにゼロ拡張される。すべての機能ユニットのすべてのスカラ命令が、グローバルスカラレジスタファイル５２１に対して読出し又は書込みし得る。命令タイプによりデータサイズが決まる。グローバルスカラレジスタファイル５２１は、８ビットから６４ビットまでのサイズのデータタイプをサポートする。ベクトル命令は６４ビットグローバルスカラレジスタ５２１にも書込みし得るが、ベクトルの上位１９２ビットデータは破棄される。ベクトル命令はまた、グローバルスカラレジスタファイル５２１から６４ビットデータを読み出しし得る。この場合、オペランドは、入力ベクトルを形成するため、上位１９２ビットにおいてゼロ拡張される。
【００４２】
図７は、グローバルベクトルレジスタファイル５２２を図示する。１６個の独立した２５６ビット幅ベクトルレジスタがある。グローバルベクトルレジスタファイル５２２の各レジスタは、３２ビットスカラデータ（レジスタＸ０〜Ｘ１５  ７０１として指定される）、６４ビットのスカラデータ（レジスタＥＸ０〜ＥＸ１５  ７１１として指定される）、２５６ビットベクトルデータ（レジスタＶＸ０〜ＶＸ１５  ７２１として指定される）、又は５１２ビットダブルベクトルデータ（ＤＶＸ０〜ＤＶＸ１５として指定される、図示せず）として読み出され得る。この実施形態において、乗算ユニット５１１及び相関ユニット５１２のみがダブルベクトル命令を実行し得る。すべての機能ユニットのすべてのベクトル命令が、グローバルベクトルレジスタファイル５２２に対して読出し又は書込みし得る。任意の機能ユニットの任意のスカラ命令も、読出し又は書込みのために、グローバルベクトルレジスタファイル５２２の下位３２又は６４ビットにアクセスし得る。命令タイプによりデータサイズが決まる。
【００４３】
図８は、ローカルベクトルレジスタファイル５２３を図示する。１６個の独立した２５６ビット幅ベクトルレジスタがある。ローカルベクトルレジスタファイル５２３の各レジスタは、３２ビットスカラデータ（レジスタＭ０〜Ｍ１５  ７０１として指定される）、６４ビットのスカラデータ（レジスタＥＭ０〜ＥＭ１５  ７１１として指定される）、２５６ビットベクトルデータ（レジスタＶＭ０〜ＶＭ１５  ７２１として指定される）、又は５１２ビットダブルベクトルデータ（ＤＶＭ０〜ＤＶＭ１５として指定される、図示せず）として読み出され得る。この実施形態において、乗算ユニット５１１及び相関ユニット５１２のみがダブルベクトル命令を実行し得る。すべての機能ユニットのすべてのベクトル命令が、ローカルベクトルレジスタファイル５２３に書込みし得る。乗算ユニット５１１及び相関ユニット５１２の命令のみが、ローカルベクトルレジスタファイル５２３から読出しし得る。命令タイプによりデータサイズが決まる。
【００４４】
乗算ユニット５１１は、ダブルベクトル（５１２ビットデータ）に対して動作し得る。乗算ユニット５１１は、グローバルベクトルレジスタファイル５２２及びローカルベクトルレジスタファイル５２３からダブルベクトルデータを読み出し得、グローバルスカラレジスタファイル５２１及びローカルベクトルレジスタファイル５２３にダブルベクトルデータを書き込みし得る。レジスタ指定ＤＶＸｘ及びＤＶＭｘが、グローバルスカラレジスタファイル５２１及びローカルベクトルレジスタファイル５２３に下記のようにマッピングされる。
【表１】
0006718454.tif 000002
0006718454.tif 000003
【００４５】
各ダブルベクトル指定は、グローバルベクトルレジスタ５２２又はローカルベクトルレジスタ５２３における隣接ベクトルレジスタの対応する一対にマッピングする。指定ＤＶＸ０〜ＤＶＸ７は、グローバルベクトルレジスタ５２２にマッピングする。指定ＤＶＭ０〜ＤＶＭ７はローカルベクトルレジスタ５２３にマッピングする。
【００４６】
ローカルベクトルレジスタファイル５２４はローカルベクトルレジスタファイル５２３に類似している。１６個の独立した２５６ビット幅ベクトルレジスタがある。ローカルベクトルレジスタファイル５２４の各レジスタは、３２ビットスカラデータ（レジスタＬ０〜Ｌ１５  ７０１として指定される）、６４ビットのスカラデータ（レジスタＥＬ０〜ＥＬ１５  ７１１として指定される）、又は２５６ビットベクトルデータ（レジスタＶＬ０〜ＶＬ１５  ７２１として指定される）として読み出され得る。すべての機能ユニットのすべてのベクトル命令が、ローカルベクトルレジスタファイル５２４に書込みし得る。算術ユニット５１３及び算術ユニット５１４の命令のみが、ローカルベクトルレジスタファイル５２４から読出しし得る。
【００４７】
図９はローカルレジスタファイル５２５を図示する。１６個の独立した６４ビット幅レジスタがある。ローカルレジスタファイル５２５の各レジスタは、３２ビットスカラデータ（レジスタＤ０〜Ｄ１５  ７０１として指定される）又は６４ビットのスカラデータ（レジスタＥＤ０〜ＥＤ１５  ７１１として指定される）として読み出され得る。すべての機能ユニットのすべてのスカラ及びベクトル命令が、ローカルレジスタファイル５２５に書込みし得る。ロード／ストアユニット５１５の命令のみが、ローカルレジスタファイル５２５から読出しし得る。任意のベクトル命令も６４ビットデータをローカルレジスタファイル５２５に書き込みし得るが、結果ベクトルの上位１９２ビットデータは廃棄される。また、任意のベクトル命令が、６４ビットデータを６４ビットローカルレジスタファイル５２５のレジスタから読み出しし得る。戻りデータは、入力ベクトルを形成するため、上位１９２ビットにおいてゼロ拡張される。ローカルレジスタファイル５２５のレジスタは、ストアデータとして又はロード／ストアユニット５１５の６４ビット算術及び論理命令のためのソースとしてではなく、ロード／ストア命令におけるアドレスとしてのみ用いられ得る。
【００４８】
図１０はプレディケートレジスタファイル５１７を図示する。プレディケートレジスタファイル５１７には１６個の３２ビットレジスタがある。プレディケートレジスタファイル５１７は、いずれかの算術によって実行されるベクトル比較演算からの結果を含み、ベクトル選択命令及びベクトルプレディケートストア命令によって用いられる。また、特殊命令の小サブセットが、プレディケートレジスタから直接的に読出しし得、演算を実施し得、プレディケートレジスタに直接的に書込み戻しし得る。グローバルレジスタファイル（５２１及び５２２）とプレディケートレジスタファイル５１７との間で値を転送し得る命令もある。プレディケートレジスタファイル５１７とローカルレジスタファイル（５２３、５２４、及び５２５）との間の転送はサポートされない。プレディケートレジスタ（Ｐ０〜Ｐ１５として指定される）の各ビットが、ベクトルデータのバイトを制御する。ベクトルは２５６ビットなので、プレディケートレジスタの幅は２５６／８＝３２ビットに等しい。プレディケートレジスタファイルは、ベクトル比較の結果をストアするため、ベクトル比較算によって書き込まれ得る。
【００４９】
ＣＰＵ１１０、２１０、２２０、３１０、４１０、又は４２０などのＣＰＵが、命令パイプライン上で動作する。この命令パイプラインは、サイクル毎に７個の実行ユニット（乗算ユニット５１１、相関ユニット５１２、算術ユニット５１３、算術ユニット５１４、ロード／ストアユニット５１５、分岐ユニット５１６、及びプレディケートユニット５１７）に命令を提供するように、最大９個の並列３２ビットスロットにディスパッチ（dispatch）し得る。命令は、以下でさらに説明する固定長のパックされるフェッチ命令である。すべての命令はフェッチ及び復号に対して同じ数のパイプラインフェーズを必要とするが、可変数の実行フェーズを必要とする。
【００５０】
図１１は、下記のパイプラインフェーズを図示する。即ち、プログラムフェッチフェーズ１１１０、ディスパッチ及び復号フェーズ１１２０、並びに、実行フェーズ１１３０である。プログラムフェッチフェーズ１１１０は、すべての命令に対して３つの段階を含む。ディスパッチ及び復号フェーズは、すべての命令に対して３つの段階を含む。実行フェーズ１１３０は、命令に応じて１〜４個の段階を含む。
【００５１】
フェッチフェーズ１１１０は、プログラムアドレス生成段階１１１１（ＰＧ）、プログラムアクセス段階１１１２（ＰＡ）、及びプログラム受信段階１１１３（ＰＲ）を含む。プログラムアドレス生成段階１１１１（ＰＧ）の間、ＣＰＵにおいてプログラムアドレスが生成され、読出し要求がレベル１命令キャッシュＬ１Ｉのためのメモリコントローラに送られる。プログラムアクセス段階１１１２（ＰＡ）の間、レベル１命令キャッシュＬ１Ｉは、この要求を処理し、そのメモリ内のデータにアクセスし、フェッチパケットをＣＰＵ境界に送る。プログラム受信段階１１１３（ＰＲ）の間、ＣＰＵはこのフェッチパケットを登録する。
【００５２】
命令は、常に、一度に、フェッチされる１６個のワードである。図１２はこのフェッチパケットを図示する。図１２は、単一フェッチパケットの１６個の命令１２０１〜１２１６を図示する。フェッチパケットは、５１２ビット（１６ワード）境界で整列される。個々の命令の実行は、各命令におけるｐビットによって部分的に制御される。このｐビットは、好ましくは、命令のビット０である。このｐビットにより、この命令が別の命令と並列に実行されるかが決まる。このｐビットは下位アドレスから上位アドレスにスキャンされる。命令のｐビットが１である場合、次の後続の命令はその命令Ｉと並列に（その命令Ｉと同じサイクルにおいて）実行される。命令のｐビットが０である場合、次の後続の命令はこの命令後のサイクルにおいて実行される。並列に実行するすべての命令が、或る実行パケットを構成する。実行パケットは最大９個の命令を含み得る。実行パケットにおける各命令は、異なる機能ユニットを用いなければならない。実行パケットは、最大９個の３２ビット幅スロットを含み得る。スロットは、自蔵命令であり得、又は、直前の命令によって特定される定数フィールドを拡張し得る。スロットは、同じフェッチパケット内の命令に適用するように条件付きコードとして用いられ得る。フェッチパケットは、最大２つの定数拡張スロット及び１つの条件コード拡張スロットを含み得る。
【００５３】
最大１１個の別個の命令スロットがあるが、スケジューリング制約により並列スロットの最大数は９個に制限される。これら最大９個のスロットは下記のように共有される。
【００５４】
即ち、乗算ユニット５１１、相関ユニット５１２、算術ユニット５１３、算術ユニット５１４、ロード／ストアユニット５１５、プレディケートユニット５１７と共有される分岐ユニット５１６、第１の定数拡張、第２の定数拡張、及び、条件コード拡張と共有されるユニットなし命令である。実行パケットにおける最後の命令は、０に等しいｐビットを有する。
【００５５】
ＣＰＵ及びレベル１命令キャッシュＬ１Ｉパイプラインは、互いからデカップリングされる。レベル１命令キャッシュＬ１Ｉから戻るフェッチパケットは、レベル１命令キャッシュＬ１Ｉにおいてヒットがあるか否かなどの外部状況に応じて、異なる数のクロックサイクルを取り得る。従って、プログラムアクセス段階１１１２（ＰＡ）は、他の段階と同様、１サイクルクロックの代わりにいくつかのクロックサイクルを取り得る。
【００５６】
ディスパッチ／復号フェーズ１１２０は、適切な実行ユニットへの命令ディスパッチ段階１１２１（ＤＳ）、命令事前復号段階（Ｄ１）、及び、命令復号・オペランド読出し段階１２２２（Ｄ２）を含む。適切な実行ユニットへの命令ディスパッチ段階１１２１（ＤＳ）の間、フェッチパケットは、実行パケットに分割され、適切な機能ユニットに割り当てられる。命令事前復号段階１１２２（Ｄ１）の間、機能ユニットにおける命令の実行のため、送出元レジスタ、宛先レジスタ、及び関連経路が復号される。命令復号の間、オペランド読出し段階１２２２（Ｄ２）のより詳細なユニットの復号が、レジスタファイルからのオペランド読出しとともに成される。
【００５７】
実行フェーズ１１３０は、実行段階１１３１〜１１３５（Ｅ１〜Ｅ５）を含む。異なるタイプの命令が、それらの実行を完了するために、異なる数のこれらの段階を必要とする。パイプラインのこれらの段階は、ＣＰＵサイクル境界でのデバイス状態の理解に重要な役割を果たす。
【００５８】
実行１段階１１３１（Ｅ１）の間、命令の状態が評価され、それに対してオペランドが動作される。図１１において図示するように、実行１段階１１３１は、ストリームバッファ１１４１と、１１４２として概略的に示すレジスタファイルの１つとからオペランドを受け取り得る。ロード及びストア命令の場合、アドレス生成が実施され、アドレス改変がレジスタファイルに書き込まれる。分岐命令の場合、ＰＧフェーズにおける分岐フェッチパケットが影響を受ける。図１１において図示するように、ロード及びストア命令は、ここではメモリ１１５１として概略的に示すメモリにアクセスする。単一サイクル命令の場合、結果が宛先レジスタファイルに書き込まれる。これは、命令についての任意の状態が真と評価されると仮定している。或る状態が偽と評価される場合、命令は、いかなる結果も書き込まないか、又は、実行１段階１１３１後にいかなるパイプライン演算も有さない。
【００５９】
実行２段階１１３２（Ｅ２）の間、ロード命令がアドレスをメモリに送る。ストア命令が、アドレス及びデータをメモリに送る。結果を飽和させる単一サイクル命令が、飽和が生じた場合に、制御状態レジスタ（ＣＳＲ）においてＳＡＴビットを設定する。２サイクル命令の場合、結果が宛先レジスタファイルに書き込まれる。
【００６０】
実行３段階１１３３（Ｅ３）の間、データメモリアクセスが実施される。結果を飽和させる任意の乗算命令が、飽和が生じた場合に、制御状態レジスタ（ＣＳＲ）においてＳＡＴビットを設定する。３サイクル命令の場合、結果が宛先レジスタファイルに書き込まれる。
【００６１】
実行４段階１１３４（Ｅ４）の間、ロード命令がデータをＣＰＵ境界に運ぶ。４サイクル命令の場合、結果が宛先レジスタファイルに書き込まれる。
【００６２】
実行５段階１１３５（Ｅ５）の間、ロード命令がデータをレジスタに書き込む。これは、図１１においてメモリ１１５１から実行５段階１１３５への入力とともに概略的に示されている。
【００６３】
図１３は、命令の命令コーディングの例を図示する。各命令は、３２ビットで構成され、個々に制御可能な機能ユニット（乗算ユニット５１１、相関ユニット５１２、算術ユニット５１３、算術ユニット５１４、ロード／ストアユニット５１５）の１つの動作を制御する。ビットフィールドを下記のように定義する。ｃｒｅｇフィールド及びｚビットは、条件付き命令で用いられる任意選択のフィールドである。これらのビットは、プレディケートレジスタ及び条件を識別するために条件付き命令に用いられる。ｚビット（ビット２８）は、プレディケートがプレディケートレジスタにおいてゼロ又は非ゼロに基づいているかを示す。ｚ＝１の場合、ゼロと等しいかどうかがテストされる。ｚ＝０の場合、非ゼロかどうかがテストされる。無条件命令実行を可能にするために、ｃｒｅｇ＝０及びｚ＝０の場合を常に真と扱う。表２に示すように、ｃｒｅｇフィールド及びｚフィールドは、命令において符号化される。
【表２】
0006718454.tif 000004
0006718454.tif 000005
【００６４】
ｚビット列の「ｚ」は、上述のゼロ／非ゼロ比較選択を指し、「ｘ」はドントケア状態であることに留意されたい。このコーディングでは、１６個のグローバルスカラレジスタのサブセットをプレディケートレジスタとして単に指定している。この選択は、命令コーディングにおいてビットをとっておくために成されている。無条件命令はこれらの任意選択ビットを有さないことに留意されたい。無条件命令の場合、これらのビット（２８〜３１）は好ましくは付加的なオペコードビットとして用いられる。ただし、必要とされる場合、実行パケットが、同じ実行パケットにある命令のための４ビットｃｒｅｇ／ｚフィールドを含む、固有の３２ビット条件コード拡張スロットを含み得る。表３は、このような条件コード拡張スロットのコーディングを示す。
【表３】
0006718454.tif 000006
【００６５】
このように、条件コード拡張スロットは、同じ実行パケットにおいてｃｒｅｇ／ｚビットが特定の機能ユニットに割り当てられるのと同じ方式で復号されるビットを指定する。
【００６６】
特殊ベクトルプレディケート命令は、ベクトル演算を制御するために、指定されたプレディケートレジスタを用いる。この実施形態において、すべてのこれらのベクトルプレディケート命令は、バイト（８ビット）データ上で動作する。プレディケートレジスタの各ビットは、データの対応するバイトに対してＳＩＭＤ演算が実施されるかを制御する。プレディケートユニット５１７の動作により、２つ以上のベクトル比較に基づく様々な複合ベクトルＳＩＭＤ演算が可能になる。例えば、２つの比較を用いて範囲決定が成され得る。候補ベクトルが、第１のデータレジスタ内にパックされた範囲の最小値を有する第１のベクトル基準と比較される。候補ベクトルの第２の比較が、第２のデータレジスタ内にパックされた範囲の最大値を有する第２の基準ベクトルとの間で成される。これら２つの得られたプレディケートレジスタの論理的な組合せにより、候補ベクトルの各データ部分が範囲内であるか又は範囲外であるかを判定するベクトル条件付き演算が可能になり得る。
【００６７】
ｄｓｔフィールドは、対応するレジスタファイルにおけるレジスタを、命令結果の宛先として特定する。
【００６８】
ｓｒｃ２フィールドは、対応するレジスタファイルにおけるレジスタを、第２の送出元オペランドとして特定する。
【００６９】
ｓｒｃ１／ｃｓｔフィールドは、命令オペコードフィールド（ビット２〜１２、及び無条件命令の場合には付加的にビット２８〜３１）に応じていくつかの意味を有する。第１の意味は、対応するレジスタファイルのレジスタを第１のオペランドとして特定する。第２の意味は即値定数である。命令タイプに応じて、これは、符号なし整数及び特定されたデータ長まで拡張されるゼロとして扱われるか、又は、符号付き整数及び特定されたデータ長まで拡張される符号として扱われる。
【００７０】
オペコードフィールド（すべての命令に対してビット２〜１２、及び無条件命令の場合には付加的にビット２８〜３１）は、命令のタイプを特定し、適切な命令オプションを指定する。これは、機能ユニット及び実施される演算の指定を含む。
【００７１】
ｐビット（ビット０）は実行パケットをマーキングする。ｐビットは、命令が後続の命令と並列に実行されるかどうかを決める。ｐビットは、下位アドレスから上位アドレスにスキャンされる。現在の命令に対してｐ＝１の場合、次の命令は現在の命令と並列に実行される。現在の命令に対してｐ＝０の場合、次の命令は現在の命令後のサイクルにおいて実行される。並列に実行されるすべての命令が、或る実行パケットを構成する。実行パケットは最大８個の命令を含み得る。実行パケットにおける各命令は、異なる機能ユニットを用いなければならない。
【００７２】
相関ユニット５１２並びに算術ユニット５１３及び５１４は、単一命令複数データ（ＳＩＭＤ）モードで動作することがある。このＳＩＭＤモードでは、同じ命令が、２つのオペランドからのパックされたデータに適用される。各オペランドは、所定のスロットに配置される複数のデータ要素を保持する。ＳＩＭＤ演算は、データ境界におけるキャリー制御によって可能になる。このようなキャリー制御により、可変データ幅上での演算が可能となる。
【００７３】
図１４はキャリー制御を示す。ＡＮＤゲート１４０１が、オペランド幅算術論理ユニット内のビットＮ（算術ユニット５１３及び５１４の場合は２５６ビット、相関ユニット５１２の場合は５１２ビット）のキャリー出力を受け取る。ＡＮＤゲート１４０１はまた、後にさらに説明するキャリー制御信号を受け取る。ＡＮＤゲート１４０１の出力は、オペランド幅算術論理ユニットのビットＮ＋１のキャリー入力に供給される。ＡＮＤゲート１４０１などのＡＮＤゲートは、あり得るデータ境界における各ビット対間に配置される。例えば、８ビットデータの場合、このようなＡＮＤゲートは、ビット７とビット８の間、ビット１５とビット１６の間、ビット２３とビット２４の間等にある。このようなＡＮＤゲートは各々、対応するキャリー制御信号を受け取る。データサイズが最小の場合、各キャリー制御信号は０であり、隣接ビット間のキャリー送信が効果的に遮断される。選択されたデータサイズが両方の算術論理ユニットセクションを必要とする場合、対応するキャリー制御信号は１である。下記の表４は、算術ユニット５１３及び５１４で用いられるものなど、８ビット、１６ビット、３２ビット、６４ビット、又は１２８ビットのセクションに分割され得る２５６ビット幅オペランドの場合の例示のキャリー制御信号を示す。最上位ビットのキャリー出力の制御は必要とされず、そのため、３１個のキャリー制御信号のみが必要とされる。
【表４】
0006718454.tif 000007
【００７４】
当技術分野では、２の整数乗（２Ｎ）であるデータサイズに対して動作することが典型的である。ただし、このキャリー制御技術は２の整数乗に限定されない。当業者であれば、この技術を他のデータサイズおよび他のオペランド幅にどのように適用するかが理解されよう。
【００７５】
例示実施形態は、多くの命令フェッチに対するページミス変換レイテンシを隠す。例示実施形態において、ＣＰＵによってアクセスが要求されるときはいつも、Ｌ１Ｉコントローラは、仮想アドレスとフェッチパケットカウントとの加算がページ境界をクロスするかどうかのアプリオリルックアップを行う。アクセスがページ境界をクロスする場合、Ｌ１Ｉキャッシュコントローラは、第２のページ変換エントリを第１のページエントリとともに要求し、そのため、Ｌ１Ｉキャッシュコントローラが第２のページ要求を処理し始めるのを待たずに、μＴＬＢへの要求がパイプライン化される。これは、第２のページ変換要求の決定性プリフェッチになる。第２のページについてのアドレス変換情報が、Ｌ１Ｉキャッシュコントローラに局所的にストアされ、アクセスがページ境界をクロスするときに用いられる。
【００７６】
好ましい実施形態において、μＴＬＢからＭＭＵへの要求がパイプライン化される。μＴＬＢ要求がパイプライン化されるか否かで、この方式は、何らかのページミス変換レイテンシを隠す。これにより、プログラムメモリキャッシュ性能が大幅に改善される。
【００７７】
図１５は主要部分を図示する。図１５では、図示を簡略化するため、図１のスカラシングルコアの例から参照数字を用いる。例示の実施形態が、図１〜図４において図示した例の任意のもので実施され得る。特に、例示の実施形態は、図２及び図４において図示されたデュアルプロセッサの例で実施され得、デュアルプロセッサ間でレベル２統合キャッシュが共有される。中央処理装置（ＣＰＵ）１１０が、レベル１命令キャッシュ（Ｌ１Ｉ）１１１に結合される。レベル１命令キャッシュＬ１Ｉはさらに、図１において図示されたメモリコントローラ１３１に対応するメモリ管理ユニット（ＭＭＵ）１３１に、及び、Ｌ２キャッシュ１１３に接続される。図１５は、Ｌ１Ｉキャッシュ１１１の一部として含まれるマイクロテーブルルックアサイドバッファ（μＴＬＢ）１５０１を図示する。図１５は、ＣＰＵ１１０とＬ１Ｉキャッシュ１１１との間で渡される信号、即ち、仮想アドレス１５１１、フェッチパケットカウント１５１２、及びフェッチパケット１５１３、を図示する。図１５は、Ｌ１Ｉキャッシュ１１１とＭＭＵ１３１との間の双方向データフローを図示し、このデータフローは、ページ変換エントリ要求１５２１及びページ変換エントリ１５２２を含む。図１５は、Ｌ１Ｉキャッシュ１１１とＬ２キャッシュ１１３との間で渡される信号、即ち、物理アドレス１５３１及びデータ１５３２、を図示する。
【００７８】
仮想アドレスから物理アドレスへの変換は、図１６において示されるように動作する。この例では、ＣＰＵ１１０は仮想アドレスを用いて動作する。Ｌ１Ｉキャッシュ１１１も仮想アドレスを用いる。Ｌ２キャッシュ１１３は物理アドレスを用いる。ＣＰＵ１１０からＬ２キャッシュ１１３へのアクセスは、仮想アドレスから物理アドレスへのアドレス変換を経なければならない。例示を見やすくするために、Ｌ１Ｉキャッシュ１１１の一部が省略されていることに留意されたい。
【００７９】
命令の別のフェッチパケットが必要とされると、ＣＰＵ１１０は、必要とされたフェッチパケットの仮想アドレス１５１１を供給する。マルチプレクサ１６１１が、仮想アドレス１５１１をＬ１ＩタグＲＡＭ１６１２に供給する。Ｌ１ＩタグＲＡＭ１６１２は、仮想アドレス１５１１を、どのアドレスがキャッシュされるか示すタグと比較する。ヒット／ミスユニット１６１３が、仮想アドレスが、キャッシュされたデータにアクセスするか（ヒット）、又はキャッシュされたデータにアクセスしないか（ミス）を判定する。Ｌ１Ｉキャッシュ１１１は、その性質上、ＣＰＵ１１０によって用いられ得るすべてのプログラム命令を含み得ない。Ｌ１Ｉキャッシュ１１１は、これらのプログラム命令の限定サブセットをストアする。時間的及び空間的局所性原理に従って、プログラム命令をストアするメモリロケーションへのＣＰＵアクセスは、メモリロケーションと同じメモリロケーション及びその近傍へのアクセスとなりやすい。要求されたフェッチパケットがＬ１Ｉキャッシュ１１１にストアされるとヒット／ミスユニット１６１３が判定する場合、このフェッチパケットは、Ｌ１Ｉキャッシュ１１１データメモリ（図示せず）からフェッチパケット１５１３（図１５）を介してＣＰＵ１１０に供給される。
【００８０】
要求されたフェッチパケットがＬ１Ｉキャッシュ１１１にストアされないとヒット／ミスユニット１６１３が判定すると、このフェッチパケットはＬ２キャッシュ１１３から要求される。Ｌ１Ｉキャッシュ１１１は仮想的にタグ付けされ、Ｌ２キャッシュ１１３は物理的にタグ付けされるので、これはアドレス変換を要求する。同時に、仮想アドレス１５１１がＬ１ＩタグＲＡＭ１６１２に供給され、仮想アドレスはマルチプレクサ１６２１を介してμＴＬＢ１５０１にも供給される。アドレス変換は、典型的に、仮想アドレスの最上位ビット、及び物理アドレスの対応する最上位ビットのテーブルを用いて実施される。この例では、正しいアドレス対が検出されると、アドレス変換は、最上位仮想アドレスビットを最上位物理アドレスビットに置換する。仮想アドレスの最下位ビットが物理アドレスの最下位ビットと同じであることが典型的である。この例では、仮想アドレス／物理アドレス変換テーブルがＭＭＵ１３１にストアされる。また、Ｌ１Ｉキャッシュ１１１は、アドレス変換テーブルエントリの一部をキャッシュの様にストアするμＴＬＢ１５０１を含む。アドレス変換が成される場合、要求された仮想アドレス１５１１は、μＴＬＢ１５０１にストアされたアドレス変換テーブルエントリと比較される。仮想アドレス１５１１がμＴＬＢ１５０１内のテーブルエントリと合致すると、合致したテーブルエントリが現在のページ変換１６２３におけるアドレス変換に用いられる。このようなμＴＬＢヒットがあると、現在のページ変換１６２３は、単一サイクルでアドレス変換を実施する。仮想アドレス１５１１がμＴＬＢ１５０１内のいかなるテーブルエントリとも合致しない場合、これらのアドレス変換パラメータはＭＭＵ１３１からフェッチされなければならない。μＴＬＢ１５０１は、仮想アドレス１５１１のためのページ変換エントリ要求１５２１をＭＭＵ１３１に送信する。このフェッチを実施するために、ページ変換及びＭＭＵにおけるページテーブルウォークレイテンシによっては、数十又は数百サイクルが必要とされることがある。ＭＭＵ１３１は、対応するアドレス変換エントリを見つけ、このエントリ１５２２をμＴＬＢ１５０１に戻す。μＴＬＢ１５０１はこの新たにフェッチされた変換エントリをストアし、典型的に、μＴＬＢ１５０１に現在ストアされているエントリを放出して余地を作る。現在のページ変換１６２３は、新たにストアされた変換エントリを用いてアドレス変換を実施する。アドレス変換に続いて、物理アドレスは、Ｌ２ユニットへの物理アドレス要求１６３１を介してＬ２キャッシュ１１３に渡される。この要求は、Ｌ１Ｉキャッシュ１１１におけるキャッシュミスを示すヒット／ミスユニット１６１３次第であることに留意されたい。Ｌ２キャッシュ１１３への物理アドレスの供給は、ヒット／ミスユニット１６１３がヒットを示す場合は要求されない。これは、このヒットが、メモリアクセスがＬ１Ｉキャッシュ１１１から成され得ることを示すからである。
【００８１】
図１６は、μＴＬＢ１５０１におけるミスの際に生じるレイテンシを低減するためのさらなる改良を示す。この技術では、情報を用いて、生じ得るマイクロ変換ルックアサイドテーブルミスを、このミスが生じる前に予測する。各命令フェッチに対して、ＣＰＵ１１０は、フェッチアドレスと、アクセスされるべきフェッチパケットの予測数とを生成する。アクセスされるべきフェッチパケットのこの予測数は、分岐ユニット５１６における分岐予測論理に基づく。
【００８２】
分岐予測は、パイプライン化されたプロセッサにおける条件付き分岐命令を扱う問題に対処する。パイプライン化は命令演算を扱う方法である。プログラムされた演算は、次の命令をフェッチし、この命令を復号し、オペランドにアクセスし、演算を実施し、結果をストアすることを必要とする。パイプライン化されたプロセッサは、命令を実行する異なる態様に専念する異なるハードウェアを有する。このタスク分割により、アセンブリラインの様な演算が可能となる。そのため、典型的に、パイプラインにおいて様々な終了段階で同時に複数の命令があり得る。進行中の命令をこのように分散させると、実行している条件付き分岐命令において遅延が生じ得る。命令実行は、通常、メモリロケーションを通して線形に進む。条件付き分岐命令は、何らかの現在の機械状態に基づいて、この線形の進行から逸脱する。レジスタにストアされるデータ又は状態ビットの状態などの、この機械状態は、典型的に、未知であるか、又は条件付き分岐命令に先立って知られ得る。多くの場合、この機械状態はちょうど計算された値である。条件付き分岐が採られる場合、プログラムフローが変化する。これは、パイプラインにおける進行中の複数の命令が誤った命令であることを意味する。簡単な解決法は、進行中のこれらの不正確な命令を中止し、正確に分岐宛先においてパイプラインの始まりを再開することである。命令フローにおけるこの中断をパイプラインヒットと呼ぶ。
【００８３】
分岐予測は、このようなパイプラインヒットの数を最小化するために用いられる。分岐ユニット５１６は、条件付き分岐が採られるか否かの予測を行う。命令フェッチシーケンスは、この予測された経路を辿る。条件付き分岐命令が正しく予測される場合、プログラムフローの中断又はパイプラインヒットはない。不正確な予測に対するパイプラインヒットは、予測なしで採られる分岐に対するパイプラインヒットと同じである。分岐予測は静的又は動的とし得る。静的な予測の例は、条件付き分岐命令の前に分岐宛先まで短距離である場合は分岐が常に採られることを予測すること、及びすべての他の採られない分岐を予測することである。これは、短い後方分岐が、反復的に実行され得るループの末尾から先頭までである、という理論に基づいている。動的な分岐予測は、この条件付き分岐命令の履歴を考慮に入れる。分岐が最後の１０００回に採られる場合、この条件付き分岐が実行されて、分岐がこの場合に採られることが妥当であると予測される。この条件付き採命令の最後の４つの場合が、分岐が採られた、採られなかった、採られる、採られない場合、一方の予測（採られる／採られない）は他方と同じくらい良好である。動的な分岐予測は、静的な分岐予測より良好に入れ子ループを扱い得る。
【００８４】
分岐予測は、典型的に、プログラムコードにおいて、それが実行されるときに遭遇する各条件付き分岐命令のメモリアドレスをストアする。これにより、分岐ユニット５１６は、それが遭遇した条件付き分岐を認識し得る。条件付き分岐命令アドレスに関連するのは、採られた／採られなかった分岐予測、及び動的分岐予測で用いられる任意の分岐履歴である。この分岐予測情報は、常に、プログラムコードのかなり小さな部分に限定される。これは、分岐ユニット５１６内のメモリ及び回路の量の制限によるものである。ただし、現在の命令メモリロケーション、及び分岐予測に因るプログラムコード内の予測される経路に基づいて、分岐ユニット５１６は、分岐が採られると予測される前に、現在のフェッチパケットアクセスの後で用いられるべき線形に辿る命令又は命令フェッチパケットの想定数を決定し得る。この数はフェッチパケットカウント５１２である。
【００８５】
図１６は、フェッチパケットのこの予測数１５１２の２つの使用を示す。アドレスアンロールユニット１６１４が、線形シーケンスにおける各フェッチパケットのアドレスを決定する。図１７は、アドレスアンロールユニット１６１４の実施形態を図示する。仮想アドレス１５１１がアドレスアンロールユニット１６１４に供給されると、マルチプレクサ１７０１が、この初期仮想アドレスをアドレスレジスタ１７０２に供給する。アドレスレジスタ１７０２は、次のメモリサイクルまでこのアドレスをストアする。続くメモリアクセスサイクルで、加算器１７０３が、アドレスレジスタ１７０２の内容及びフェッチパケットサイズ入力を加算する。このフェッチパケットサイズ入力は、フェッチパケットのアドレスビットでのサイズである。好ましい実施形態において、このフェッチパケットサイズは１６命令に固定される。好ましい実施形態において、命令は４バイトの３２ビットである。好ましい実施形態において、メモリはバイト単位でアドレス可能であり、各アドレスロケーションは８ビット／１バイトに対応する。そのため、アドレスビットでのフェッチパケットサイズは１６×４＝４８である。アドレスレジスタ１７０２とフェッチパケットサイズの和は、次のフェッチパケットのアドレスである。マルチプレクサ１６１１が、このアドレスをＬ１ＩタグＲＡＭ１６１２に供給する。Ｌ１ＩタグＲＡＭ１６１２は、アドレスアンロールユニット１６１４からの次のフェッチパケットアドレスを、次のアドレスがキャッシュされるかを決めるタグと比較する。ヒット／ミスユニット１６１３は、このアドレスがキャッシュされる（ヒット）か、キャッシュされないか（ミス）を示す。次のフェッチパケットアドレスがＬ１Ｉキャッシュ１１１にある場合（ヒット）、何の動作も必要とされない。次のフェッチパケットアドレスがＬ１Ｉキャッシュ１１１内にない場合（キャッシュミス）、Ｌ１Ｉキャッシュ１１１は命令プリフェッチコマンドを生成する。次のフェッチパケットアドレスは、マルチプレクサ１６２１を介してμＴＬＢ１５０１に結合される。少なくとも初期に、次のフェッチパケットのアドレスは初期仮想アドレス１５１１と同じページにあり、μＴＬＢ１５０１ヒットが生じる。現在のページ変換１６２３は、アドレス変換を実施し、対応する物理アドレスを、Ｌ２ユニットへの物理アドレス要求１６３１を介してＬ２キャッシュ１１３に供給する。次のフェッチパケットのアドレスが初期ページに続くページにヒットする場合、次のページ変換ユニット１６２４が、次のアドレス変換エントリが例示実施形態に従ってプリフェッチされている場合には、アドレス変換を実施する。いずれの場合も、これはＬ１ＩキャッシュミスをＬ２キャッシュ１１３に渡してメモリアクセスを行う。
【００８６】
アドレスレジスタ１７０２の初期仮想アドレス１５１１での初期的ロードに続いて、マルチプレクサ１７０１は、入力を切り替えてちょうど増分されたアドレスをロードする。次のメモリサイクルの間、加算器１７０３は、別の次のフェッチパケットアドレスを生成する。この新たな次のフェッチパケットアドレスは上述のように扱われる。カウントレジスタ１７０４には、初期的に、フェッチパケットカウント１５１２がロードされる。カウントレジスタ１７０４は、メモリアクセスサイクル毎に減分される。カウントレジスタ１７０４がゼロまで減分されたとゼロ検出ユニット１７０５が判定すると、マルチプレクサ１７０１へのイネーブルされた入力が切り替わって仮想アドレス１５１１に戻る。そのため、アドレスアンロールユニット１６１４は、メモリアドレスを介する線形進行の予測された終わりまで、初期アドレスに続く各フェッチパケットに対するアドレスを生成する。これにより、すべてのこれらのフェッチパケットのプリフェッチが、フェッチパケットがＬ１Ｉ  １１１にストアされる一致又はそれをＬ２キャッシュ１１３から要求することのいずれかによって可能になる。
【００８７】
フェッチパケットの予測数１５１２の第２の使用は、アドレス変換においてページ境界がクロスすることを検出することに関わる。ページ境界クロスユニット１６２２は、現在のフェッチアドレスにおいて始まるフェッチパケットの予測数がページ変換テーブルにおけるページ境界をクロスするかどうかを判定する。当技術分野で周知のように、アドレス変換は、仮想アドレス及び物理アドレスにおいて等しい最下位ビットの数に対応するサイズを有するメモリページ上で行われる。現在のフェッチアドレスは、アドレス変換テーブルの１つのページを指す。最後の予測されたフェッチパケットの終端アドレスは、同じページ又はそれに続くページを指す。
【００８８】
図１８は、ページ境界クロスユニット１６２２を図示する。乗算器１８０１が、上述のように求められたフェッチパケットサイズにフェッチパケットカウント１５１２を乗算する。加算器１８０２が、この積をＣＰＵ１１０からの仮想アドレス１５１１に加算する。これにより、メモリを介する線形進行における最後のフェッチパケットのアドレスが計算される。ページ検出ユニット１８０３が、この最後のフェッチパケットのアドレス、及び現在のページサイズの指示を受け取る。当技術分野では、アドレス変換は固定又は可変サイズのページに基づき得ることが知られている。ページ検出ユニット１８０３は、最後のフェッチパケットのアドレスが仮想アドレス１５１１の同じページにあるか又は次のページにあるかを判定する。ページ境界クロスユニット１６２２がページ境界クロスを示す場合、マルチプレクサ１６２１は、初期仮想アドレスのページに続くページにアクセスするため、信号をμＴＬＢ１５０１に供給する。このアドレスのヒットの際、μＴＬＢ１５０１は、ヒット／ミスユニット１６１３がキャッシュミスを示すか否か、次のページ変換１６２４からＬ２キャッシュ１１３にＬ２ユニットへの物理アドレス要求１６３１を介して物理アドレスを提示する。ヒット／ミスユニット１６１３がＬ１Ｉキャッシュ１１１におけるヒットを示す場合、Ｌ２キャッシュ１１３へのいかなるアクセスも必要とされない。
【００８９】
ページ境界クロスユニット１６２２からの次のページが、μＴＬＢ１５０１におけるいかなるテーブルエントリとも合致しない場合、次のページ変換パラメータがＭＭＵ１３１からフェッチされなければならない。このような場合、次のページのアドレスがページ変換エントリ要求１５２１を介してＭＭＵ１３１に渡される。ＭＭＵ１３１は、対応するアドレス変換エントリを見つけ、このエントリをページ変換エントリ１５２２を介してμＴＬＢ１５０１に戻す。μＴＬＢ１５０１は、この新たにフェッチされたアドレス変換エントリをストアし、典型的に、μＴＬＢ１５０１に現在ストアされているエントリを放出して余地を作る。これにより、次のページに対するアドレス変換エントリがμＴＬＢ１５０１にストアされる。命令フェッチがこの次のページに達すると、μＴＬＢ１５０１においてヒットが生じる。次のページ変換１６２４はアドレス変換を実施する。アドレス変換に続き、物理アドレスが、Ｌ２ユニットへの物理アドレス要求１６３１を介してＬ２キャッシュ１１３に渡される。この要求はＬ１Ｉキャッシュ１１１におけるキャッシュミスを示すヒット／ミスユニット１６１３次第であることに留意されたい。
【００９０】
上述のように、好ましい実施形態において、μＴＬＢ１５０１からＭＭＵ１３１への要求はパイプライン化される。また、好ましくは、ＭＭＵ１３１からμＴＬＢ１５０１に戻るページ変換エントリ１５２２は、μＴＬＢ１５０１からＭＭＵ１３１に送られるページ変換エントリ要求１５２１と同じ順である必要はない。好ましい実施形態において、ＭＭＵ１３１とμＴＬＢ１５０１との間のインターフェースは、複数の要求を同時に（パイプライン化して）扱い得る。ＭＭＵ１３１の編成により、異なるページテーブルエントリに対してレイテンシを異ならせることができる。ＭＭＵ１３１は、好ましくは、戻されたページ変換エントリ１５２２に対応するページ変換エントリ要求１５２１を追跡する。これにより、μＴＬＢ１５０１は、戻されたページ変換エントリ１５２２を、対応するページ変換エントリ要求１５２１と合致させ得る。これにより、μＴＬＢ１５０１は、順序付けられていない戻されたページ変換エントリ１５２２を扱い得る。
【００９１】
図１９は演算を概略的に図示する。ＣＰＵ１１０は、命令フェッチアドレス１５１１及びフェッチパケット数１５１２を生成する。この例では、フェッチアドレス１５１１は、メモリマップ１９０１におけるページＡ１９１１を指す。図１９において示されるように、命令フェッチアドレス１５１１及びフェッチパケット数１５１２は、予測されたメモリアクセスがページＡ１９１１とページＢ１９１２との間のページ境界をクロスするようになっている。この決定の際、μＴＬＢ１５０１は、ページＡ１９１１及びページＢ１９１２の両方についてのページ変換エントリを要求する。これは、プログラムコードを介する経路がページ境界をクロスする場合、その新たなページ（ページＢ１９１２）に対するページ変換テーブルエントリがμＴＬＢ１５０１にすでにストアされていることを意味する。この新たなページに対するページ変換テーブルエントリをフェッチするためのレイテンシは、この早いフェッチによって隠される。
【００９２】
例示の実施形態は、プログラムがページミスを生じさせるか否かを、分岐予測論理からアクセスされるべき所定数のフェッチパケットから決定する。このような検出の際、μＴＬＢ１５０１は、ミスを生じさせる予期されたページアクセスに対するページ変換テーブルエントリを要求する。このように、このページ変換テーブルエントリは、ＣＰＵ１１０が次のページにおけるフェッチパケットに実際にアクセスする前に要求される。ページ変換テーブルエントリフェッチは、これを行うのに長い時間を要し得る。また、このページ変換テーブルエントリフェッチを完了するための時間は、ＣＰＵ１１０に見えないように高度に可変とし得る。そのため、μＴＬＢ１５０１に対するミスが予測される状況下では、早い要求が有利である。このように、例示の実施形態において、予想されたページ境界のクロスの検出と、ＣＰＵ１１０命令要求に対応する実際のページ境界のクロスとの間のμＴＬＢ１５０１ミスレイテンシの一部が隠される。また、例示の実施形態は、予期されたページミスが生じるアドレスにおいて命令をプリフェッチし得る。このように、ページミスを生成するフェッチパケットは、実際のページミスの前に入手され得る。
【００９３】
アクセス予測が不正確であり、プログラムが第２のページにアクセスしない場合、例示の実施形態は、不要なページ変換テーブルエントリフェッチを実施する。これによりシステム性能が損なわれるとは予期されない。第２のページへの不正確なアクセス予測は、概して、不正確に予測されるプログラム分岐で生じ得る。このような場合、プログラムは、典型的に、元のアクセスページ及び次のページとは異なるページに分岐する。このような分岐によって生じるページミスがあり得る。第２のページ変換テーブルエントリの不要なフェッチは、不正確に予測された分岐ページミスと無関係であり得る。従って、例示の実施形態において、典型的に、不正確な分岐予測の場合でも性能が損なわれない。
【００９４】
置換方法の差異により、μＴＬＢに１５０１はＬ１Ｉ  １１１にストアされるすべてのプログラム命令に対してページ変換テーブルエントリをストアしないことがあることに留意されたい。そのため、特定の命令アクセスが、Ｌ１Ｉヒット／ミスとμＴＬＢ１５０１の次のページのヒット／ミスとの４つの組合せのいずれかを生成することが可能となる。表５に、好ましい実施形態において採られるアクションを列挙する。
【表５】
0006718454.tif 000008
0006718454.tif 000009
【００９５】
例示の実施形態において、命令プリフェッチは任意選択である。Ｌ１Ｉキャッシュ１１１におけるミスを点検することにより、概して、必要とされる時間が短くなり、μＴＬＢ１５０１におけるページエントリミスを点検するよりも変動が小さくなることが予期される。そのため、ページ変換テーブルエントリプリフェッチに関して命令プリフェッチの必要が小さくなる。
【００９６】
例示の実施形態は、第２のページ変換エントリが最終的にμＴＬＢから要求されるかどうかを判定し、この第２のページに属する第１のアドレスがＬ１Ｉキャッシュコントローラによって要求される前にこのページ変換エントリをプリフェッチする。そのため、第２のページ変換エントリフェッチのミスレイテンシの一部又は全部が隠される。これにより、ストールサイクルが低減され、ＣＰＵのＩＰＣ（サイクル当たりの命令）実行メトリックが改善される。
【００９７】
例示の実施形態を、図５において図示した好ましい実施形態の超長命令語（ＶＬＩＷ）ＣＰＵに従ってフェッチパケットに適用可能として説明したが、例示の実施形態は、サイクル毎に単一命令をフェッチするＣＰＵにも同様に適用可能である。この際、ＣＰＵの分岐予測ハードウェアからのフェッチパケット数は命令の数となる。これはフェッチパケット内の命令の数が１だからである。
【００９８】
例示の実施形態を、仮想アドレスを物理アドレスに変換する好ましい実施形態に関連して説明したが、例示の実施形態は、物理アドレスから仮想アドレスへの反対の変換にも同様に適用可能である。例示の実施形態により、ページ境界のクロスが予測される場合の第１のアドレスドメインから第２のアドレスドメインへの変換が増強され得る。
【００９９】
例示の実施形態を命令フェッチに関連して説明した。命令フェッチは、概略パターンがないデータフェッチと異なり、通常、線形に行われる。命令フェッチの場合、データフェッチの場合よりもページ境界のクロスを予測することがより容易であると予期される。そうではあるが、或る限定された状況において、例示の実施形態はデータフェッチに有用であり得る。
【図１】
0006718454.tif 000010
【図２】
0006718454.tif 000011
【図３】
0006718454.tif 000012
【図４】
0006718454.tif 000013
【図５】
0006718454.tif 000014
【図６】
0006718454.tif 000015
【図７】
0006718454.tif 000016
【図８】
0006718454.tif 000017
【図９】
0006718454.tif 000018
【図１０】
0006718454.tif 000019
【図１１】
0006718454.tif 000020
【図１２】
0006718454.tif 000021
【図１３】
0006718454.tif 000022
【図１４】
0006718454.tif 000023
【図１５】
0006718454.tif 000024
【図１６】
0006718454.tif 000025
【図１７】
0006718454.tif 000026
【図１８】
0006718454.tif 000027
【図１９】
0006718454.tif 000028