図1は、一実施形態に従ったシングルコアスカラープロセッサを図示する。シングルコアプロセッサ100はスカラー中央処理装置(CPU)110を含み、スカラーCPU110は、別個のレベル1命令キャッシュ(L1I)111及びレベル1データキャッシュ(L1D)112に結合される。中央処理装置コア110は、既知のように構成され得、典型的に、レジスタファイル、整数算術論理ユニット、整数積算器、及びプログラムフロー制御ユニットを含み得る。シングルコアプロセッサ100は、命令とデータの両方を持つレベル2組み合わせ命令/データキャッシュ(L2)113を含む。好ましい実施形態において、スカラー中央処理装置(CPU)110、レベル1命令キャッシュ(L1I)111、レベル1データキャッシュ(L1D)112、及びレベル2組み合わせ命令/データキャッシュ(L2)113は、単一の集積回路上に形成される。
好ましい実施形態において、この単一の集積回路はまた、電力制御回路121等の補助回路、エミュレーション/トレース回路122、DST(design for test)PBIST(programmable built-in self-test)回路123、及びクロッキング回路124を含む。メモリコントローラ131が、CPU110の外部として、単一集積回路100上に集積され得る。
CPU110は、定義されたデータに対してデータ処理演算を実施するように、プログラム制御下で動作する。CPU110を制御するプログラムは、デコーディング及び実行の前にフェッチされなければならない複数の命令で構成される。シングルコアプロセッサ100は複数のキャッシュメモリを含む。図1は、第1のレベルキャッシュのペアを図示する。レベル1命令キャッシュ(L1I)111は、CPU110によって用いられる命令をストアする。CPU110は、最初に、レベル1命令キャッシュ121から任意の命令にアクセスすることを試みる。レベル1データキャッシュ(L1D)112は、CPU110によって用いられるデータをストアする。CPU110は、最初に、レベル1データキャッシュ112から任意の必要とされるデータにアクセスすることを試みる。2つのレベル1キャッシュ(L1I 111、及びL1D 112)は、レベル2統合キャッシュ(L2)113によってバックアップされている。レベル1命令キャッシュ111又はレベル1データキャッシュ112に対するキャッシュミスがった場合、要求された命令又はデータが、レベル2統合キャッシュ113から探される。要求された命令又はデータがレベル2統合キャッシュ113にストアされている場合は、その命令又はデータは、中央処理装置コア110に供給するために、要求しているレベル1キャッシュに供給される。当業者には周知のように、要求された命令又はデータは、使用を迅速にするために、要求しているキャッシュとCPU110の両方に同時に供給され得る。
レベル2統合キャッシュ113は、更に、メモリコントローラ131を介して、より高いレベルのメモリシステムに結合される。メモリコントローラ131は、外部メモリ(図1に図示されない)にアクセスすることによって、レベル2統合キャッシュ113におけるキャッシュミスを取り扱う。メモリコントローラ131は、キャッシャビリティ判定、エラー検出及び訂正、アドレス翻訳等など、全てのメモリ中心の機能を取り扱う。シングルコアプロセッサ100は、マルチプロセッサシステムの一部であり得る。その場合、メモリコントローラ131は、プロセッサ間のデータ転送を取り扱い、プロセッサ間のキャッシュコヒーレンスを維持する。
図2は、別の実施形態に従ったデュアルコアプロセッサを図示する。デュアルコアプロセッサ200は、別個のレベル1命令キャッシュ(L1I)211及びレベル1データキャッシュ(L1D)212に結合される第1のCPU210、及び別個のレベル1命令キャッシュ(L1I)221及びレベル1データキャッシュ(L1D)212に結合される第2のCPU220を含む。中央処理装置210及び220は、好ましくは、図1に図示されるCPU110と同様に構成される。デュアルコアプロセッサ200は、4個のレベル1キャッシュ(L1I 211、L1D 212、L1I 221、及びL1D 222)全てをサポートする、単一の共有されたレベル2組み合わせ命令/データキャッシュ(L2)231を含む。好ましい実施形態において、CPU210、レベル1命令キャッシュ(L1I)211、レベル1データキャッシュ(L1D)212、CPU220、レベル1命令キャッシュ(L1I)221、レベル1データキャッシュ(L1D)222、及びレベル2組み合わせ命令/データキャッシュ(L2)231が、単一の集積回路上に形成される。この単一の集積回路は、好ましくは、電力制御回路245等の補助回路、エミュレーション/トレース回路116、DST(design for test)PBIST(programmable built-in self-test)回路117、及びクロッキング回路118を含む。この単一の集積回路はまたメモリコントローラ251を含み得る。
図3及び図4は、それぞれ図1及び図2に示されるものと類似のシングルコアプロセッサ及びデュアルコアプロセッサを図示する。図3及び図4は、ベクトル中央処理装置が示されている点で、図1及び図2とは異なる。下記に更に詳細を説明するように、シングルコアベクトルプロセッサ300はベクトルCPU310を含む。デュアルコアベクトルプロセッサ400は、2つのベクトルCPU410及び420を含む。ベクトルCPU310、410、及び420は、対応するスカラーCPU110、210、及び220に比較して、一層幅広いデータパスオペレーショナルユニット、及び一層幅広いデータレジスタを含む。
ベクトルCPU310、410、及び420は更に、ストリーミングエンジン313(図3)、及びストリーミングエンジン413及び423(図5)を含むという点で、対応するスカラーCPU110、210、及び220とは異なる。ストリーミングエンジン313、413、及び423は類似である。ストリーミングエンジン313は、データをレベル2統合キャッシュ313(L2)からベクトルCPU310に転送する。ストリーミングエンジン413は、データをレベル2統合キャッシュ431からベクトルCPU410に転送する。ストリーミングエンジン423は、データをレベル2統合キャッシュ431からベクトルCPU420に転送する。好ましい実施形態に従って、各ストリーミングエンジン313、413、及び423は、最大2つのデータストリームを管理する。
各ストリーミングエンジン313、413、及び423は、一定の制約された状況においてデータを転送する。ストリームは特定のタイプのエレメントのシーケンスで構成される。ストリーム上で動作するプログラムは、データを順次読み出し、各エレメント上で順に動作する。ストリームは全て、下記の基本的な特性を有する。ストリームデータは、適切に定義された、時間における開始と終了を有する。ストリームデータは、ストリームにわたって固定のエレメントサイズ及びタイプを有する。ストリームデータは、エレメントの固定のシーケンスを有する。このように、プログラムはストリーム内をランダムに探すことはできない。ストリームデータは、アクティブの間は読み出し専用である。プログラムは、ストリームから読み出している間は、同時にストリームに書き込みできない。一旦、ストリームが開始されると、ストリーミングエンジンは、アドレスを計算し、定義されたデータタイプをレベル2統合キャッシュからフェッチし、ゼロ拡張、符号拡張等のデータタイプマニピュレーション、マトリックス転位等のデータエレメントソーティング/スワッピングを実施し、データをCPU内のプログラムされた実行ユニットに直接的に送達する。ストリーミングエンジンは、このように、正常に動作するデータ上でのリアルタイムのデジタルフィルタリング演算のために有用である。ストリーミングエンジンは、対応するCPUからこれらのメモリフェッチタスクを解放して、他の処理機能を可能にする。
ストリーミングエンジンは下記利点を提供する。多次元メモリアクセスを可能にする。機能ユニットに対して利用可能な帯域幅を増大させる。ストリームバッファがL1Dキャッシュ及びL2キャッシュをバイパスし得るので、キャッシュミスストール(詰まり)の数を最小化する。ループにおいて維持する必要のあるスカラー演算の数を低減する。アドレスポインタを管理する。他の計算のためのアドレス生成命令スロット及び.Dユニットを自動的に解放するアドレス生成を取り扱う。
図5は、CPUの一実施形態の構成を図示する。特に注釈がない場合は、本明細書は、スカラーCPU及びベクトルCPUの両方に適用される。CPUは、複数の実行ユニット、乗算ユニット511(.M)、相関ユニット512(.C)、算術ユニット513(.L)、算術ユニット514(.S)、ロード/ストアユニット515(.D)、分岐ユニット516(.B)、及びプレディケーションユニット517(.P)を含む。これらの実行ユニットの動作及び関係を以下に詳細に説明する。
乗算ユニット511は、主として乗算を実施する。乗算ユニット511は、最大2個のダブルベクトルオペランドをアクセプトし、最大1個のダブルベクトル結果を生成する。乗算ユニット511は、8ビットから64ビットの乗算演算の精度を備える種々の整数乗算演算、種々の正規及び複素ドット積演算、及び種々の浮動小数点乗算演算、ビットワイズ論理演算、ムーブ、並びに、加算及び減算を行うように構成可能な命令である。図5に図示されるように、乗算ユニット511は、4個の同時16ビット×16ビットの乗算のためのハードウェアを含む。乗算ユニット511は、下記に説明する様式で、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、及び共有の.M及びC.ローカルレジスタ523ファイルにアクセスし得る。フォワーディングマルチプレクサ530は、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、対応するストリーミングエンジン、及び乗算ユニット511の間のデータ転送を調停する。
相関ユニット512(.C)は、最大2つのダブルベクトルオペランドをアクセプトし、最大1つのダブルベクトル結果を生成する。相関ユニット512は、これらの主要演算をサポートする。WCDMA「Rake」及び「Search」命令のサポートにおいて、相関ユニット512は、クロックサイクル毎に、最大512個の2ビットPN×8ビットI/Q複素乗算を実施する。相関ユニット512は、クロックサイクル毎に、最大512個のSAD(Sum-of-Absolute-Difference)を実施する、8ビット及び16ビットのSAD計算を実施する。相関ユニット512は、水平加算及び水平最小/最大命令を実施する。相関ユニット512は、ベクトルパーミュート(permutes)命令を実施する。相関ユニット512は、8個の256ビット幅の制御レジスタを含む。これらの制御レジスタは、或る相関ユニット命令の演算を制御するように用いられる。相関ユニット512は、下記に説明する様式で、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、及び共有.M及びC.ローカルレジスタファイル523にアクセスし得る。フォワーディングマルチプレクサ530は、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、対応するストリーミングエンジン、及び相関ユニット512の間のデータ転送を調停する。
CPU500は、算術ユニット513(.L)及び算術ユニット514(.S)の2つの算術ユニットを含む。算術ユニット513及び算術ユニット514の各々は、最大2つのベクトルオペランドをアクセプトし、1つのベクトル結果を生成する。コンピュートユニットは、これらの主要演算をサポートする。算術ユニット513及び算術ユニット514は、8ビットから64ビットまでわたる精度で種々のSIMD(single-instruction-multiple-data)固定小数点算術演算を実施する。算術ユニット513及び算術ユニット514は、結果をプレディケートレジスタファイル526(下記に詳細を説明する)に直接書き込む、種々の、ベクトル比較及び最小/最大命令を実施する。これらの比較には、A=B、A>B、A≧B、A<B、及びA≦Bが含まれる。比較が真であると、プレディケートレジスタ内の対応するビット位置に1ビットがストアされる。比較が偽であると、プレディケートレジスタ内の対応するビット位置に0がストアされる。ベクトル比較命令は、バイト(8ビット)データを前提とし、従って、32個のシングルビット結果を生成する。算術ユニット513及び算術ユニット514は、下記に説明されるように、指定されたプレディケートレジスタを用いて種々のベクトル演算を実施する。算術ユニット513及び算術ユニット514は、半精度(16ビット)、単精度(32ビット)から倍精度(64ビット)までわたる精度で、種々のSIMD浮動小数点算術演算を実施する。算術ユニット513及び算術ユニット514は、種々のアルゴリズム及び関数を迅速化するための特殊な命令を実施する。算術ユニット513及び算術ユニット514は、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、共有.L及び.Sローカルレジスタファイル524、及びプレディケートレジスタファイル526にアクセスし得る。フォワーディングマルチプレクサ530は、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、対応するストリーミングエンジン、及び算術ユニット513、514の間のデータ転送を調停する。
ロード/ストアユニット515(.D)は、主としてアドレス計算に用いられる。ロード/ストアユニット515は、最大64ビットのスカラーオペランドをアクセプトするように拡張され、最大64ビットのスカラー結果を生成する。ロード/ストアユニット515は、他のユニット上のワークロードを低減するように、スワッピング、ロード及びストアデータ上でのパック、アンパック等のデータマニピュレーションを実施するための付加的ハードウェアを含む。ロード/ストアユニット515は、各クロックサイクルに1つのロード又はストア要求を、44ビットの物理アドレスと共に、レベル1データキャッシュ(L1D)に送り出し得る。ロード又はストアデータ幅は、32ビット、64ビット、256ビット、又は512ビットであり得る。ロード/ストアユニット515は、64ビットSIMD算術演算、64ビットビットワイズ論理演算、及びスカラー及びベクトルロード及びストアデータマニピュレーション、の主要演算をサポートする。ロード/ストアユニット515は、好ましくは、48ビット仮想アドレスから44ビット物理アドレスへのアドレス翻訳を実施するためのマイクロTLB(table look-aside buffer)ブロックを含む。ロード/ストアユニット515は、後述する様式で、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、及び.Dローカルレジスタファイル525にアクセスし得る。フォワーディングマルチプレクサ530は、グローバルスカラーレジスタファイル521、グローバルベクトルレジスタファイル522、対応するストリーミングエンジン、及びロード/ストアユニット515の間のデータ転送を調停する。
分岐ユニット516(.B)は、分岐アドレスを計算し、分岐予測を実施し、予測の結果に応じて制御フローを変更する。
プレディケーションユニット517(.P)は、ベクトルプレディケーションレジスタ上で基本演算を実施する小型制御ユニットである。プレディケーションユニット517は、ベクトルプレディケーションレジスタ526への直接アクセスを有する。プレディケーションユニット517は、AND、ANDN、OR、XOR、NOR、BITR、NEG、SET、BITCNT(ビットカウント)、RMBD(一番右のビット検出))、BIT Decimate and Expand等のプレディケーションレジスタ上で異なるビット演算を実施する。
図6は、グローバルスカラーレジスタファイル521を図示する。16個の独立した64ビット幅のスカラーレジスタがある。グローバルスカラーレジスタファイル521の各レジスタは、32ビットスカラーデータ(レジスタA0~A15 601と称する)又は64ビットのスカラーデータ(レジスタEA0~EA15 611と称する)として読み出され得る。しかしながら、書き込みは常に64ビットであり、必要に応じ、最大64ビットになるようにゼロ拡張される。全ての機能ユニットの全てのスカラー命令が、グローバルスカラーレジスタファイル521に対して読み出し又は書き込みし得る。命令タイプはデータサイズを決定する。グローバルスカラーレジスタファイル521は、サイズが8ビットから64ビットまでわたるデータタイプをサポートする。また、ベクトル命令が、ベクトルの上位192ビットデータが無視されて、64ビットのグローバルスカラーレジスタ521に書き込み得る。ベクトル命令はまた、グローバルスカラーレジスタファイル511から64ビットデータを読み出し得る。この場合、オペランドは、入力ベクトルを形成するために、上位192ビットにおいてゼロ拡張される。
図7は、グローバルベクトルレジスタファイル522を図示する。16個の独立した256ビット幅のベクトルレジスタがある。グローバルベクトルレジスタファイル522の各レジスタは、32ビットスカラーデータ(レジスタX0~X15 701と称する)、64ビットのスカラーデータ(レジスタEX0~EX15 711と称する)、256ビットベクトルデータ(レジスタVX0~VX15 721と称する)、又は512ビットのダブルベクトルデータ(DVX0~DVX12と称するが、図示せず)として読み出され得る。この実施形態において、乗算ユニット511及び相関ユニット512のみがダブルベクトル命令を実行し得る。全ての機能ユニットの全てのベクトル命令が、グローバルベクトルレジスタファイル522に対して読み出し又は書き込みし得る。また、任意の機能ユニットの任意のスカラー命令が、読み出し又は書き込みのために、グローバルベクトルレジスタファイル522レジスタの下位32又は64ビットにアクセスし得る。命令タイプはデータサイズを決定する。
図8は、ローカルベクトルレジスタファイル523を図示する。16個の独立した256ビット幅のベクトルレジスタがある。ローカルベクトルレジスタファイル523の各レジスタは、32ビットスカラーデータ(レジスタM0~M15 701と称する)、64ビットのスカラーデータ(レジスタEM0~EM15 711と称する)、256ビットベクトルデータ(レジスタVM0~VM15 721と称する)、又は512ビットダブルベクトルデータ(DVM0~DVM7と称するが、図示せず)として読み出され得る。この実施形態において、乗算ユニット511及び相関ユニット512のみがダブルベクトル命令を実行し得る。全ての機能ユニットの全てのベクトル命令が、ローカルベクトルレジスタファイル523に対して書き込みし得る。乗算ユニット511及び相関ユニット512の命令のみが、ローカルベクトルレジスタファイル523から読み出しし得る。命令タイプはデータサイズを決定する。
乗算ユニット511は、ダブルベクトル(512ビットデータ)上で動作し得る。乗算ユニット511は、グローバルベクトルレジスタファイル521及びローカルベクトルレジスタファイル523から、ダブルベクトルデータを読み出し、グローバルベクトルレジスタファイル521及びローカルベクトルレジスタファイル523にダブルベクトルデータを書き込み得る。レジスタ指定DVXx及びDVMxは、下記のように、グローバルベクトルレジスタファイル521及びローカルベクトルレジスタファイル523にマッピングされる。
各ダブルベクトル指定は、グローバルベクトルレジスタ522か又はローカルベクトルレジスタ523における、対応する近隣ベクトルレジスタのペアにマッピングする。指定DVX0~DVX7は、グローバルベクトルレジスタ522にマッピングする。指定DVM0~DVM7は、ローカルベクトルレジスタ523にマッピングする。
ローカルベクトルレジスタファイル524は、ローカルベクトルレジスタファイル523に類似する。16個の独立した256ビット幅のベクトルレジスタがある。ローカルベクトルレジスタファイル524の各レジスタは、32ビットスカラーデータ(レジスタL0~L15 701と称する)、64ビットのスカラーデータ(レジスタEL0~EL15 711と称する)、又は256ビットベクトルデータ(レジスタVL0~VL15 721と称する)として読み出され得る。全ての機能ユニットの全てのベクトル命令が、ローカルベクトルレジスタファイル524に対して書き込みし得る。算術ユニット513及び算術ユニット514の命令のみが、ローカルベクトルレジスタファイル524から読み出しし得る。
図9は、ローカルレジスタファイル525を図示する。16個の独立した64ビット幅のレジスタがある。ローカルレジスタファイル525の各レジスタは、32ビットスカラーデータ(レジスタD0~D15 701と称する)、又は64ビットのスカラーデータ(レジスタED0~ED15 711と称する)として読み出され得る。全ての機能ユニットの全てのスカラー及びベクトル命令が、ローカルレジスタファイル525に対して書き込みし得る。ロード/ストアユニット515の命令のみが、ローカルレジスタファイル525から読み出しし得る。また、任意のベクトル命令が、結果のベクトルの上位192ビットデータが無視されて、ローカルレジスタファイル525に64ビットデータを書き込むことができる。任意のベクトル命令はまた、64ビットローカルレジスタファイル525レジスタから64ビットデータを読み出すことができる。リターンデータは、入力ベクトルを形成するために、上位192ビットにおいてゼロ拡張される。ローカルレジスタファイル525のレジスタは、ロード/ストアユニット515の64ビット算術論理命令のためのストアデータとして又はソースとしてではなく、ロード/ストア命令におけるアドレスとしてのみ用いられ得る。
図10は、プレディケートレジスタファイル517を図示する。プレディケートレジスタファイル517に16個のレジスタ32ビットレジスタがある。プレディケートレジスタファイル517は、何れかの算術によって実行されるベクトル比較演算の結果を含み、ベクトル選択命令及びベクトルプレディケーテッドストア命令によって用いられる。また、特殊命令のスモールサブセットが、プレディケートレジスタから直接的に読み出し、演算を実施し、プレディケートレジスタへ直接的にライトバックし得る。また、グローバルレジスタファイル(521及び522)とプレディケートレジスタファイル517との間で値を転送できる命令がある。プレディケートレジスタファイル517とローカルレジスタファイル(523、524、及び525)との間の転送はサポートされていない。プレディケーションレジスタ(P0~P15と称する)の各ビットは、ベクトルデータのバイトを制御する。ベクトルが256ビットであるので、プレディケートレジスタの幅は、256/8=32ビットに等しい。プレディケートレジスタファイルは、ベクトル比較の結果をストアするために、ベクトル比較演算によって書き込まれ得る。
CPU110、210、220、310、410、又は420等のCPUは、命令パイプライン上で動作し得る。この命令パイプラインは、サイクル毎に、命令を7個の実行ユニット(乗算ユニット511、相関ユニット512、算術ユニット513、算術ユニット514、ロード/ストアユニット515、分岐ユニット516、及びプレディケーションユニット517)に提供するように、最大9個の並列32ビットスロットをディスパッチし得る。命令は、更に後述するように、パックされた固定長のフェッチされた命令である。全ての命令は、フェッチ及びデコードのために同数のパイプラインフェーズを必要とするが、様々な数の実行フェーズを必要とする。
図11は、プログラムフェッチフェーズ1110、ディスパッチ及びデコードフェーズ1110、及び実行フェーズ1130のパイプラインフェーズを図示する。プログラムフェッチフェーズ1110は、全ての命令に対して3つのステージを含む。ディスパッチ及びデコードフェーズは、全ての命令に対して3つのステージを含む。実行フェーズ1130は、命令に応じて1から4個のステージを含む。
フェッチフェーズ1110は、プログラムアドレス生成ステージ1111(PG)、プログラムアクセスステージ1112(PA)、及びプログラムレシーブステージ1113(PR)を含む。プログラムアドレス生成ステージ1111(PG)の間、プログラムアドレスがCPUにおいて生成され、読み出し要求がレベル1命令キャッシュL1Iのためのメモリコントローラに送信される。プログラムアクセスステージ1112(PA)の間、レベル1命令キャッシュL1Iは、要求を処理し、そのメモリ内のデータにアクセスし、CPU境界にフェッチパケットを送信する。プログラムレシーブステージ1113(PR)の間、CPUはフェッチパケットを登録する。
命令は、常に、一度にフェチされた16語である。図12は、このフェッチパケットを図示する。図12は、シングルフェッチパケットの16個の命令1201~1216を図示する。フェッチパケットは、512ビット(16ワード)境界上で整合される。個々の命令の実行は、各命令におけるpビットによって部分的に制御される。pビットは、好ましくは、命令のビット0である。pビットは、命令が別の命令と並列に実行するか否かを決定する。pビットは、下位から上位アドレスへスキャンされる。命令のpビットが1の場合、次に続く命令が、その命令Iと並列に(同じサイクルにおいて)実行される。命令のpビットが0である場合、次に続く命令は、その命令の後のサイクルで実行される。並列に実行する全ての命令が、実行パケットを構成する。実行パケットは、最大9個の命令を含み得る。実行パケットにおける各命令は、異なる機能ユニットを使用しなければならない。実行パケットは、最大9個の32ビット幅スロットを含み得る。スロットは、自己自足の(self-contained)命令であり得るか、又は直前の命令によって特定された一定フィールドを拡張し得る。スロットは、同じフェッチパケット内の命令に適用するように、条件付きコードとして用いられ得る。フェッチパケットは、最大2個の一定拡張スロット、及び1つの条件コード拡張スロットを含み得る。
最大11個の個別の命令スロットがあるが、スケジューリング制約によって並列スロット最大数である9個に制限される。最大9個のスロットは、下記のように共有される。
乗算ユニット511、相関ユニット512、算術ユニット513、算術ユニット514、ロード/ストアユニット515、プレディケートユニット517と共有される分岐ユニット516、第1の一定拡張、第2の一定拡張、及び条件コード拡張と共有されるユニットレス命令。実行パケットにおける最後の命令は、0に等しいpビットを有する。
CPU及びレベル1命令キャッシュL1Iパイプラインは、互いから結合解除され得る。レベル1命令キャッシュL1Iからのフェッチパケットリターンは、レベル1命令キャッシュL1Iにおいてヒットがあるか否か等の外部状況に応じて、異なる数のクロックサイクルを取り得る。従って、プログラムアクセスステージ1112(PA)は、他のステージにおけるように1クロックではなく、幾つかのクロックサイクルを取り得る。
ディスパッチ及びデコードフェーズ1110は、適切な実行ユニットステージ1121(DS)、命令プリデコードステージ1122(D1)、及び命令デコード、オペランド読み出しステージ1222(D2)に対する命令ディスパッチを含む。適切な実行ユニットステージ1121(DS)に対する命令ディスパッチの間、フェッチパケットは、実行パケットに分けられ、適切な機能ユニットにアサインされる。命令プリデコードステージ1122(D1)の間、ソースレジスタ、宛先レジスタ、及び関連するパスは、機能ユニットにおける命令の実行のためにデコードされる。命令デコードの間、オペランド読み出しステージ1222(D2)では、レジスタファイルからのオペランド読み出しと共に、より詳細なユニットデコードが行われる。
実行フェーズ1130は、実行ステージ1131~1135(E1~E5)を含む。異なるタイプの命令は、それらの実行を完了させるために異なる数のこれらのステージを必要とする。パイプラインのこれらのステージは、CPUサイクル境界でのデバイス状態の理解において重要な役割を果たす。
実行1ステージ1131(E1)の間、命令に対する条件が評価され、オペランドが動作される。図11に図示されるように、実行1ステージ1131は、ストリームバッファ1141から、及び概略的に1142として示されるレジスタファイルの1つから、オペランドを受け取り得る。ロード及びストア命令では、アドレス生成が実施され、アドレス変更がレジスタファイルに書き込まれる。分岐命令では、PGフェーズにおける分岐フェッチパケットが影響される。図11に図示されるように、ロード及びストア命令は、本明細書では概略的にメモリ1151として示されるメモリにアクセスする。単一サイクル命令では、宛先レジスタファイルに結果が書き込まれる。これは、命令に対する任意の条件が真として評価されると仮定している。条件が偽として評価される場合、命令は、如何なる結果も書き込むことはなく、又は、実行1ステージ1131の後に任意のパイプライン演算を有する。
実行2ステージ1132(E2)の間、ロード命令がアドレスをメモリに送る。ストア命令がアドレス及びデータをメモリに送る。結果を飽和する単一サイクル命令は、飽和が起こると、制御状態レジスタ(CSR)にSATビットを設定する。2サイクル命令では、結果が宛先レジスタファイルに書き込まれる。
実行3ステージ1133(E3)の間、データメモリアクセスが行われる。結果を飽和する任意の乗算命令は、飽和が起こると、制御状態レジスタ(CSR)にSATビットを設定する。3サイクル命令では、結果が宛先レジスタファイルに書き込まれる。
実行4ステージ1134(E4)の間、ロード命令が、データをCPU境界に運ぶ。4サイクル命令では、結果が宛先レジスタファイル書き込まれる。
実行5ステージ1135(E5)の間、ロード命令がデータをレジスタに書き込む。これは、メモリ1151から実行5ステージ1135への入力と共に図11に概略的に図示される。
図13は、例示の実施形態によって用いられる命令の命令コーディングの例を図示する。各命令は、32ビットで構成され、個別に制御可能な機能ユニット(乗算ユニット511、相関ユニット512、算術ユニット513、算術ユニット514、ロード/ストアユニット515)の1つの演算を制御する。ビットフィールドは、次のように定義される。クレッグフィールド及びzビットは、条件付き命令において用いられるオプションのフィールドである。これらのビットは、条件付き命令が、プレディケートレジスタ及び条件を識別するために用いられる。zビット(ビット28)は、プレディケートレジスタにおいて、プレディケーションがゼロに基づくか又は非ゼロに基づくかを示す。z=1の場合、テストはゼロに等しいことに対するものである。z=0の場合、テストは非ゼロに対するものである。クレッグ=0及びz=0のケースは、常に真として扱われ、無条件の命令実行を可能にする。クレッグフィールド及びzフィールドは、命令において表2に示されるようにエンコードされる。
なお、zビットの列における「z」は、上述のゼロ/非ゼロ比較選択を指し、「x」は、ドントケア(don’t care)状態を指す。このコーディングは、16グローバルスカラーレジスタのサブセットのみをプレディケートレジスタとして特定し得る。この選択は、命令コーディングにおいてビットを保持するために成される。なお、無条件の命令は、これらのオプションのビットを有さない。無条件の命令では、これらのビット(28~31)は、好ましくは付加的オペコードビットとして用いられる。しかしながら、必要に応じ、実行パケットが、同じ実行パケットにある命令のための4ビットクレッグ/zフィールドを含む一意の32ビット条件コード拡張スロットを含み得る。表3は、そのような条件コード拡張スロットのコーディングを示す。
このように、条件コード拡張スロットは、同じ実行パケットにおいてクレッグ/zビットが特殊な機能ユニットにアサインされるのと同じ様式でデコードされたビットを特定する。
特殊ベクトルプレディケート命令は、ベクトル演算を制御するために、指定されたプレディケートレジスタを用いる。この実施形態において、全てのこれらのベクトルプレディケート命令は、バイト(8ビット)データ上で動作する。プレディケートレジスタの各ビットは、データの対応するバイト上でSIMD演算が成されるか否かを制御する。プレディケートユニット517の演算は、複数のベクトル比較に基づく様々な複素ベクトルSIMD演算を可能にする。例えば、2つの比較を用いてレンジ判定を行うことができる。候補ベクトルが、第1のデータレジスタ内にパックされた最小限のレンジを有する第1のベクトル参照と比較される。候補ベクトルの第2の比較が、第2のデータレジスタ内にパックされた最大限のレンジを有する第2の参照ベクトルと比較される。2つの結果のプレディケートレジスタの論理的組み合わせが、候補のベクトルの各データ部分がレンジ内かレンジ外かを判定するためのベクトル条件付き演算を可能にし得る。
dstフィールドは、命令結果の宛先として、対応するレジスタファイルにおけるレジスタを特定する。
src2フィールドは、第2のソースオペランドとして、対応するレジスタファイルにおけるレジスタを特定する。
src1/cstフィールドは、命令オペコードフィールド(ビット2~12、及び付加的に、無条件の命令のためにビット28~31)に応じて幾つかの意味を有する。第1の意味は、対応するレジスタファイルのレジスタを第1のオペランドとして特定する。第2の意味は即値定数である。命令タイプに応じて、これは、符号なし整数として扱われ、特定されたデータ長にゼロ拡張されるか、又は、符号付き整数として扱われ、特定されたデータ長に符号拡張される。
オペコードフィールド(全ての命令に対してビット2~12、及び付加的に、無条件の命令に対してビット28~31)は、命令のタイプを特定し、適切な命令オプションを指定する。これは、機能ユニット及び実施される演算の指定を含む。後述する命令オプションを除き、オペコードの詳細な説明は本記載の範囲に限定されない。
pビット(ビット0)は実行パケットをマークする。pビットは、後に続く命令と並列に実行するか否かを決定する。pビットは、下位アドレスから上位アドレスへスキャンされる。現在の命令に対してp=1の場合、次の命令が現在の命令と並列に実行する。現在の命令に対してp=0の場合、次の命令は現在の命令の後のサイクルにおいて実行する。並列に実行する全ての命令は、実行パケットを構成する。実行パケットは、最大8個の命令を含み得る。実行パケットにおける各命令は、異なる機能ユニットを用いなければならない。
相関ユニット512、及び算術ユニット513及び514は、しばしば、SIMD(single instruction multiple data)モードで動作する。このSIMDモードでは、2つのオペランドからパックされたデータに同じ命令が適用される。各オペランドは、所定のスロットに配置される複数のデータエレメントを持つ。SIMD演算は、データ境界においてキャリー制御によって可能にされる。そのようなキャリー制御は、種々のデータ幅上での演算を可能にする。
図14はキャリー制御を図示する。ANDゲート1401が、オペランド幅算術論理ユニット内のビットNのキャリー出力を受け取る(算術ユニット513及び514に対して256ビット、相関ユニット512に対して512ビット)。ANDゲート1401はまた、後述されるキャリー制御信号を受け取る。ANDゲート1401の出力は、オペランド幅算術論理ユニットのビットN+1のキャリー入力に供給される。ANDゲート1401等のANDゲートは、あり得るデータ境界における全ビットペア間に配置される。例えば、8ビットデータに対して、そのようなANDゲートは、ビット7と8、ビット15と16、ビット23と24の間等となる。そのようなANDゲートの各々は、対応するキャリー制御信号を受け取る。データサイズが最小である場合、各キャリー制御信号は0であり、隣接するビット間のキャリー送信を効果的にブロックする。選択されたデータサイズが両方の算術論理ユニットセクションを必要とする場合、対応するキャリー制御信号は1である。下記の表4は、8ビット、16ビット、32ビット、64ビット、又は128ビットのセクションに分けられ得る、算術ユニット513及び514において用いられるような256ビット幅オペランドのケースに対するキャリー制御信号の例を図示する。最上位ビットのキャリー出力の制御は必要ないので、31個のキャリー制御信号のみが必要とされる。
当分野では、2の整数乗(2N)であるデータサイズ上で演算することが典型的である。しかしながら、このキャリー制御技術は、2の整数乗に限定されない。当業者であれば、どのようにしてこの技術を他のデータサイズ及び他のオペランド幅に適用するか理解するであろう。
図15は、本発明を適用し得るコンピュートクラスタ1500を図示する。コンピュートクラスタ1500は、好ましくは、単一の集積回路において具現化される。コンピュートクラスタ1500は、6個のデュアルコアユニット1510、1520、1530、1540、1550、及び1560を含む。各デュアルコアユニット1510、1520、1530、1540、1550、及び1560は、図2において200で図示されるようなスカラーデュアルコアユニット、又は、図4において図示される400等のベクトルデュアルコアユニットであり得る。典型的なデュアルコア1510は、第1のCPU0 1511、第2のCPU1 1512を含み、その各々が、別個のL1I及びL1Dキャッシュ、共有レベル2(L2)キャッシュ1513、電力制御回路1514及びその他のサポート回路1514を含む。6個のデュアルコアユニット1510、1520、1530、1540、1550、及び1560は、マルチコア共有メモリコントローラ1570に接続される。マルチコア共有メモリコントローラ1570は、MSMCコア1571、システムオンチップ(SOC)インタフェース1572、電力回路1573、及び種々の標示されていないサポート回路を含む。マルチコア共有メモリコントローラ1570は、コンピュートクラスタ1500とシステムメモリとの間のインタフェースとして働き、レベル3(L3)キャッシュ、外部インタフェース等を含み得る。マルチコア共有メモリコントローラ1570は、コンピュートクラスタ1500の種々のパーツをL3 SRAM/キャッシュと相互接続する。標示されていないサポート回路は、SOC毎に必要なL3 SRAM、クロック、DFT(Ddesign for test)、電力管理、及びSOCモジュールとインタフェースするために必要な集積ロジックを統合する。
デュアルコア1510、1520、1530、1540、1550、及び1560は、マルチコアバスアーキテクチャ(MBA)を介して、MSMC 1570と相互接続される。MBAプロトコルは、従来の通信ハンドシェイクをクレジットシステムで置き換える。MBAクレジットシステムは、スレーブの、利用可能なクレジットの数をトラッキングすることによってトランザクションをアクセプトする能力を、マスターが正確にトラッキングするためのメカニズムを提供する。
マスターからスレーブに送られる各トランザクションは、マスターが少なくとも1つのクレジットを使うことを必要とする。クレジットは、マスターに、特定のタイプのトランザクションを送る権利を与える有限のリソースである。一般的に、クレジットは、トランザクションが、スレーブによって受け取られると常駐することになるスレーブにおける物理ストレージ位置を表す。
マスターは、所有しているクレジットの総数を正確にトラッキングすることが必要である。各トランザクションに対して、少なくとも1つのクレジットがマスターによって使われ(spend)、その結果、利用可能なクレジットの数が減少する。マスターが所与のクレジットタイプに対して、全ての利用可能なクレジットを使った場合、マスターは、そのクレジットタイプを必要とするトランザクションを送ることはできない。マスターが、トランザクションによって必要とされるより少ないクレジットを保有することもあり得る。特殊なタイプの利用可能なクレジットは、スレーブにおいて利用可能なデータバッファの数をトラッキングし得る。マスターは、必要とされるクレジットのタイプ及び数が不足しているトランザクションを開始することはできない。エージェントが、書き込み量を、保証されているスレーブ容量に対応する利用可能なクレジットタイプ及び数に限定するように、トランザクションを限定し得る。
スレーブは、クレジットタイプに対応する物理リソースがフリーにされると、マスターにクレジットをリターンバックしなければならない。このように、マスターはクレジットを使い、スレーブがクレジットをリターンする。システムにおけるクレジットの総数は固定され、それが閉鎖システムである。クレジットタイプに対するトランザクションタイプのマッピングは、実装依存であり、MBAプロトコルによって特定されない。
MBAプロトコルにおいてつくられるクレジットシステムは、マスターとスレーブとの間の交渉を変化させて、より高い性能、より高い稼働インタフェースをつくる。従来のハンドシェイクは、トランザクションをアクセプト及び処理する前に、スレーブがトランザクションを肯定応答することを必要とするので、そのようなトランザクションが、肯定応答を待っている間、バスをブロックし得る。従来の通信ハンドシェイクにおいて、マスターは、スレーブがトランザクションをアクセプトすることが可能か否かを知らないし、知る必要がない。マスターは、トランザクションをバス上に置き、要求をアサートする。スレーブは、肯定応答をアサートすることによって準備が整う任意の時点で、コマンドをアクセプトし得る。
クレジットシステムは、スレーブのトランザクションをアクセプトする能力をマスターがトラッキングすることを可能にし、そのため、ハンドシェイクから肯定応答が取り除かれる。マスターが各クレジットタイプに対して利用可能なクレジットの数をトラッキングするので、マスターは、スレーブによってアクセプトされることを保証されているトランザクションのみを送信する。
クレジットは、スレーブにおける物理リソースを表す有限のリソースである。クレジットは、マスターによって各トランザクションに対して使われる。クレジットは、スレーブが、クレジットタイプに関連する物理リソースをフリーにするために充分にトランザクションを処理すると、スレーブからマスターにリターンされなければならない。クレジットのリターンは、スレーブにおいて進行中のトランザクション処理の後、成され、このアクションをクリティカルパスから取り除く。これとは逆に、従来のハンドシェイクは、トランザクションを処理するために、クリティカルパスにスレーブ肯定応答を置く。
MBAクレジットシステムには、従来の通信ハンドシェイクに比べて2つの重要な利点がある。第1の利点は、トランザクションが、正確に1つのサイクルの間、通信チャネルを占有することである。これは、単一のトランザクションが、スレーブからの肯定応答を待っている間、チャネルをブロックすることを防止する。この結果、特に、同じ物理チャネルが複数の仮想又は物理マスターによって共有されているとき、スループットが一層高い通信チャネルとなる。第2の利点は、トランザクションを送信するための要件としての肯定応答信号を除去することによって、マスターからスレーブへトランザクションを送信するために必要とされる通信ハンドシェイクが短縮されることである。これはトランザクションをマスターからスレーブへ通信することの全体のレイテンシを削減し、その結果、より高性能な通信となる。
マルチコアバスアーキテクチャ(MBA)は、マルチプロセッサプラットフォームにおけるデバイス間の内部通信のために設計された、高性能なポイントツーポイント単一方向バスプロトコルである。MBAプロトコルは下記の特性を有する。MBAプロトコルは、ポイントツーポイントである。正確に2つのエージェントが別個のトランザクションによって通信する。一方のエージェントがマスターとして機能し、他方のエージェントがスレーブとして機能する。単一のマスターと複数のスレーブとの間のブロードキャストはサポートされていない。MBAプロトコルは単一方向性である。コマンドトランザクションが、マスターによってのみ開始され得る。スレーブは、コマンドトランザクションを開始しない可能性があり得る。応答トランザクションは、第2の、ミラーリングされたインタフェース上で開始される。MBAプロトコルはノンブロッキングである。マスターによって発っせられたトランザクションは、単一サイクルにおいてスレーブによってアクセプトされなければならない。バス上のストールしているトランザクションに対する対策はない。MBAプロトコルはクレジットベースである。各トランザクションが、関連するクレジット及びクレジットタイプを有する。マスターは、トランザクションを開始し得る前に、適切なクレジットを有さなければならない。適切なクレジットタイプのクレジットの所有によって、スレーブがそのトランザクションをアクセプトすることが保証される。
プロトコルにおけるデバイス及びそれらの挙動を正確に識別するために、本明細書を通して、次の用語が用いられる。
エージェント:本明細書で定義されるMBAプロトコルを用いて通信する単一デバイス又はロジックコントローラ。
エージェントペア:MBAプロトコルを用いて通信する2つのエージェント。
トランザクション:マスターからスレーブへのデータの転送を伴う可能性もあり、伴わない可能性もある、2つのエージェントであるマスターとスレーブとの間の読み出し、書き込み、又はメッセージ通信。
マスター:トランザクションを開始するエージェント。
スレーブ:マスターによって開始されるトランザクションを受け取るエージェント。
コアサイド:両方のエージェントが、(例えば、キャッシュ階層において)ハードウェアキャッシュを有し得る場合の、トランザクションにおいてCPUコアに近い方のエージェント。
ファーサイド:両方のエージェントが、例えばキャッシュ階層において、ハードウェアキャッシュを有する場合の、トランザクションにおいてCPUコアから遠い方のエージェント。
データフェーズ:トランザクションデータチャネル(TDC)上で単一サイクルにおいて転送されるデータの単一のビート。
データ転送:単一did[11:0]に対するデータフェーズの完全な集合。最終データフェーズは、dlast信号のアサートによって示される。
データウィンドウ:ddata[CFG:0]信号の幅によって決定されるようなデータ転送の最大サイズ。デフォルトの幅は512ビットである。
コマンドトランザクション:2つのエージェントの間でシーケンスを始めるトランザクションのタイプ。コマンドトランザクションが、一意のcid[11:0]によって区別され、データの転送を伴う可能性もあり、伴わない可能性もある。
応答トランザクション:2つのエージェントの間でシーケンスを完了するトランザクションのタイプ。応答トランザクションは、コマンドID(cid[11:0])によって、前に開始されたコマンドトランザクションとマッチングされ、データの転送を伴う可能性もあり、伴わない可能性もある。
書き込み応答:書き込みコマンドトランザクションのためのシーケンスを完了する書き込み応答チャネル(WRC)上の専用応答。
トランザクションシーケンス:ペアにされたインタフェーストポロジーを用いる2つのエージェント間の完全なプロトコルレベル通信。シーケンスは、一方のエージェントによって開始されるコマンドトランザクションで始まり、他方のエージェントからの応答トランザクションか又は書き込み応答のいずれかによって完了する。
クレジット:マスターに、単一トランザクションを発する権利を与える単一原子単位。アクセプトの肯定応答を必要とせずに、スレーブが単一サイクルにおいてアクセプトすることを保証する。クレジットはクレジットタイプによって分類される。クレジットは、マスターによって保有され、使われる。クレジットは、充分な処理が成された後にスレーブによってリターンされ、それによって、マスターは同一クレジットタイプの新しいトランザクションを開始し得る。
クレジットタイプ:使われる又はリターンされるクレジットの種類を識別するためにマスターによって用いられるクレジットの、総称的に定義されるが特定的に実装される分類。クレジットタイプは、典型的に、スレーブエージェントにおける特定の物理リソースに関連する。マスターに対して利用可能なリソースの個々に割り当て可能なスロットの数は、そのクレジットタイプに対する利用可能なクレジットの数に正確に等しい。マスター及びスレーブは、各総称的なクレジットタイプの厳密な定義において合意を有さなければならない。
クレジットカウント:使われるべき、マスターにとって利用可能な所与のクレジットタイプのクレジットの現在の数。
クレジットスぺンド:トランザクション属性チャネル(TAC)上の有効なトランザクションを識別するcvalid信号のアサート、及びccredit[CFG:0]信号上の1つ又は複数の有効なクレジットタイプのアサートを介して、TAC上でトランザクションを開始するアクション。マスターは、クレジットスぺンドが許可される前に、各関連するクレジットタイプに対して少なくとも1つのクレジットを有さなければならない。マスターは、各クレジットスぺンドに対して関連するクレジットタイプを1つ減らさなければならない。クレジットスぺンドは、暗示的なコマンドレディを備えるコマンド要求と等価である。下記に説明するように、複数の異なるタイプのクレジットがあり得る。クレジットスぺンドは、トランザクションに対応するクレジットタイプのものでなければならない。また、クレジットスぺンドは、トランザクションをサポートするために充分な数のクレジットを含まなければならない。このように、データ転送の場合において、マスターによって費やされるクレジットの数は、データ長、及び受け取り側のスレーブのバッファ容量に対応し得る。
クレジットリターン:前のクレジットスぺンドに応答して、スレーブからマスターにクレジットをリターンするアクション。マスターは、クレジットリターンに応答して、関連するクレジットタイプを増加させる。
クレジットリミット:リセットの際、マスターに対して利用可能な特定のクレジットタイプに対するクレジットの最大数。クレジットリミットは、第1のクレジットリターンを受け取る前にマスターによって開始され得る個々のクレジットスぺンドアクションの最大数を表す。
チャネル:トランザクションを記述すること又はデータを転送すること等の、共通の目的を集合的に果たすインタフェース上の信号の集合。
クレジットされた(credited)チャネル:クレジットを用いるチャネル。これには、クレジットスぺンド及びクレジットリターンの両方のためのシグナリングが含まれる。
キャッシャビリティドメイン:それに対して割り当てが可能であることをトランザクションが指示し得る、潜在的にキャッシュ階層の異なるレベルにあるキャッシュの集合である。
シェアラビリティドメイン:潜在的にキャッシュ階層の異なるレベルにあるキャッシュの集合である。これを備えると、コヒーレントなトランザクションが、コヒーレンスプロトコルの規則に従うことを期待される。
MBAプロトコルは、好ましくは、エージェントがMESIハードウェアキャッシュコヒーレンスプロトコルを実装するためのシグナリングサポートを提供する。サポートされたトランザクションタイプ及び応答状態信号は、ACEとして知られるARM AXIコヒーレンス拡張に基づく。コヒーレンスプロトコルは、データを変更する前にキャッシュライン精度で排他的所有権を執行することによって、同じシェアラビリティドメインにおけるキャッシュがコヒーレントなままであるように規定する。コヒーレンスプロトコルの完全な取り扱いは本明細書の範囲外であるが、ここでは、MBAプロトコルにおいて用いられるコヒーレンスシグナリングのための背景を提供するために概要を示す。
標準MESIキャッシュコヒーレンスプロトコルは、キャッシュラインのための4つの状態、即ち、変更、排他的、共有、及び無効、を提供する。
変更:変更された状態を有するキャッシュラインであり、メインメモリに対して変更されている。このキャッシュラインは、同じシェアラビリティドメインにおいて、他のどのキャッシュにも存在しない。
排他的:排他的状態を有するキャッシュラインであり、メインメモリに対して変更されていないが、このキャッシュラインは、同じシェアラビリティドメインにおいて、他のどのキャッシュにも存在しない。
共有:共有状態を有するキャッシュラインであり、メインメモリに対して変更されていない。このキャッシュラインは、同じシェアラビリティドメインにおいて、他のキャッシュに存在し得る。
無効:無効状態を有するキャッシュラインであり、キャッシュに存在しない。そのようなキャッシュラインにストアされた如何なるデータも無効であり、アクセスされるべきではない。
プロトコルにおけるキャッシュコヒーレンスサポートは、トランザクション間に複数の依存関係を導入することを必要とする。例えば、コヒーレントReadCleanトランザクションの結果、1つ又は複数のCleanSharedスヌープトランザクションが生成し得、このCleanSharedスヌープトランザクションは、ReadCleanトランザクションの適法な完了の前に完了しなければならない。このケースでは、ReadCleanは、完了するためにCleanSharedに依存する。ACE仕様は、AXIプロトコルに対するコヒーレンス拡張に関連する多くのそのような依存関係を詳述している。
依存関係は、一つのトランザクションが別のトランザクションが完了するまで、ブロックしなければならない場合のような、ブロッキングシナリオをつくる。また、コヒーレントトランザクションの順も、ブロッキングシナリオをつくる。例えば、オーバーラップするアドレスに対する2つのコヒーレント書き込みトランザクションは、何らかの方式で順序付けされなければならない。一方の書き込みトランザクションが他方によってブロックされる。
デッドロックは、解消できない相互依存関係が存在する状態である。これは、依存性グラフにおけるループと考えることもできる。システムデッドロックを防止するために、ブロッキング規則が確立されなければならない。MBAプロトコルにおける全てのトランザクションが、ブロッキングトランザクションか又はノンブロッキングトランザクションのいずれかとして分類され得る。
ブロッキングトランザクションは、下記の全てにより特徴付けられる。ブロッキングトランザクションは、1つ又は複数のスヌープコマンドトランザクションを生成することを許可されている。ブロッキングトランザクションは、完了するために、スヌープコマンドトランザクションの完了に依存することを許可されている。ブロッキングトランザクションは、完了するために、ノンブロッキングトランザクションの完了に依存することを許可されている。ブロッキングトランザクションは、完了するために、ブロッキングトランザクションの完了に依存することを許可されている。
ノンブロッキングトランザクションは、下記の全てにより特徴付けられる。ノンブロッキングトランザクションは、スヌープコマンドトランザクションを生成することを許可されていない。ノンブロッキングトランザクションは、スヌープコマンドトランザクションの完了に依存することを許可されている。ノンブロッキングトランザクションは、ブロッキングトランザクションの完了に依存することを許可されていない。ノンブロッキングトランザクションは、ノンブロッキングトランザクションの完了に依存することを許可されている。
後述の表6は、MBAプロトコルにおける各トランザクションを、ブロッキング又はノンブロッキングとして識別する。
単一のMBAインタフェースが、3つの別個のチャネルに分割され、それらは、マスターからスレーブへの単一方向データフローを備える完全なトランザクションのために共に動作する。3つのMBAインタフェースチャネルは、要約すると次のようになる。トランザクション属性チャネル(TAC)は、マスターからスレーブへの単一のトランザクションのための全ての属性を特定するクレジットされたチャネルである。トランザクションデータチャネル(TDC)は、マスターからスレーブへのデータ転送に用いられるクレジットされない(non-credited)チャネルである。各TDCは、TAC上で前に又は同時に開始されたトランザクションにマッチングするIDを含む。書き込み応答チャネル(WRC)は、スレーブに書き込み応答を送るために、マスターによって用いられるクレジットされたチャネルである。各WRCは、ペアにされたインタフェーストポロジーにおける反対側のTAC上で前に開始されたトランザクションにマッチングするIDを含む。
図16は、単一のMBAインタフェースのための各チャネルに対する信号方向を図示する。図16は、マスターエージェント1610及びスレーブエージェント1620を含む。データフロー1611によって示されるように、マスターエージェント1610は、スレーブエージェント1620にシグナリングする。マスターエージェント1610は、TAC 1612、TDC 1613、及びWRC 1614を介して、信号をスレーブ1620に送信する。
図17は、ペアにされたインタフェーストポロジー(PIT)における各チャネルを図示する。完全なトランザクションシーケンスを実施するために、エージェントペアは、ミラーリングされたペア構成の2つの別個のMBAインタフェースを用いて通信しなければならない。これは対インタフェースと称される。対インタフェースは、2つのエージェント間で双方向のデータ転送をサポートする。図17は、コアサイドエージェント1710及びファーサイドエージェント1720を図示する。コアサイドエージェント1710は、CPUコアに近い方のエージェントである。ファーサイドエージェント1720は、CPUコアから遠い方のエージェントである。対インタフェーストポロジーにおいて、一方のエージェントは常にコアサイドエージェントであり、他方のエージェントは常にファーサイドエージェントである。
第1のインタフェースは、データフロー1711によって示されるように、ファーサイドエージェント1720に対するコマンド及び応答トランザクションの両方を開始するために、コアサイドエージェント1710によって用いられる。これらのトランザクションでは、コアサイドエージェント1710はマスターであり、ファーサイドエージェント1720はスレーブである。コアサイドエージェント1710は、TAC 1712、TDC 1713、及びWRC 1714を介して、信号をファーサイドエージェント1720に送信する。
第2の、ミラーリングされたインタフェースは、データフロー1721によって示されるように、コアサイドエージェント1710に対するコマンド及び応答トランザクションの両方を開始するために、ファーサイドエージェント1720によって用いられる。ファーサイドエージェント1720は、TAC 1722、TDC 1723、及びWRC 1724を介して、信号をコアサイドエージェント1710に送信する。
図18は、別の例示の対インタフェーストポロジー(PIT)における各チャネルを図示する。図18は、コアサイドエージェント1810及びファーサイドエージェント1820を図示する。下記の図18は、対インタフェーストポロジーを示す。この例では、読み出しシーケンスが示される。コアサイドエージェント1810は、マスターとして機能しながら、インタフェース上で読み出し演算を開始する。そのような読み出し演算は、コアサイドエージェント1810からファーサイドエージェント1820へのデータ転送を必要としない。このように、このシーケンスに対して、トランザクションデータチャネル(TDC)がコアサイドエージェント1810によって用いられない。データフロー1811に従って、コアサイドエージェント1810は、マスターとして、TAC 1712を介して、信号をファーサイドエージェント1820に送信する。トランザクションシーケンスを完了するために、ファーサイドエージェント1820は、マスターとして(データフロー1821に従って)TAC 1822を介して読み出し応答トランザクションを開始し、読み出されたデータをTDC 1823上に供給する。
対インタフェーストポロジーは、各エージェントが、コマンド及び応答トランザクションの両方を開始することを許可し、必要に応じ他のエージェントにデータを転送する。データフローは、マスターからスレーブへの単一の方向に制約される。この理由により、各エージェントは、1つのインタフェース上でマスターとして機能し、第2のミラーリングされたインタフェース上でスレーブとして機能する。
トランザクション属性チャネル(TAC)は、単一のクレジットされたトランザクションを開始するために必要な全ての属性を特定するクレジットされたチャネルである。トランザクション属性を形成する全てのTAC信号は、正確に1サイクルの間にマスターによってアサートされ、同じサイクルにおいてスレーブによってアクセプトされなければならない。TAC上でのトランザクションの開始は、クレジットの使用を必要とする。クレジットの使用は、スレーブが、トランザクションをアクセプトするために内部物理リソース内にスペースを有することを保証する。結果として、スレーブは、TAC上でアサートされたあらゆる新しいトランザクションをアクセプトすることを要求される。
マスターは、利用可能なクレジットによってのみ制限されるが、サイクル毎に新たなトランザクションを開始し得る。トランザクションは、データの転送を必要とする可能性も、必要としない可能性もある。TAC上で開始されたトランザクションがデータの転送を必要とする場合、トランザクションデータチャネル(TDC)が用いられる。
cvalidのアサートと共に、マスターによって使われる全てのクレジットは、ccredit[CFG:0]信号によって決定されるクレジットタイプを有する。トランザクションがハードウェアリソースから成功裏に除去されると、スレーブは、creturn[CFG:0]信号を用いて、同じタイプのクレジットをマスターにリターンバックしなければならない。各インタフェースに対して全てのTAC信号が必要とされるわけではない。表5は、好ましい実施形態に従った、トランザクション属性チャネル信号を列挙する。
信号cvalid、ccredit、cid、ctype、cmstid、cdata、cpriority、及びcsbandは、全てのトランザクションにおいて用いられ得る。信号caddress、cmemtype、cpable、ccinner、ccouter、csdomain、cbytecnt、cemudbg、及びcsecureは、コマンドトランザクションにおいてのみ用いられ得る。信号ccoh、cdirty、cstatus、及びctraceは、応答トランザクションにおいてのみ用いられ得る。信号creturnは、クレジットリターントランザクションにのみ用いられ得る。
下記は、トランザクション属性チャネル上の上述された信号の説明である。表5に記載されるように、幾つかの信号は必要として指定され、幾つかは任意として指定される。チャネルがインタフェース上に存在する場合、必要とされる信号が存在しなければならない。構成にわたって全チャネルが除去される場合、必要/任意の指定は適用可能ではない。
cvalid信号は、TAC上の有効なトランザクションの存在を識別する。0はトランザクションがないことを示す。1は有効なトランザクションがバス上にあることを示す。
ccredit[CFG:0]信号は、このトランザクションによってクレジットが使われていることを識別するビットベクトルである。利用可能なクレジットタイプの数、及び従って、この信号の幅は、構成オプションである。好ましい実施形態において、MBAプロトコルは、ジェネリック整数クレジットタイプを定義する。クレジットタイプは、ゼロから漸増的に番号が付される符号なしの整数である。creturn[CFG:0]信号の幅は、ccreditの幅にマッチングしなければならない。トランザクション属性チャネル(TAC)上のトランザクションの存在を示すようにcvalidがアサートされるとき、ccreditは、アサートされた少なくとも1つのビットと共に非ゼロ値を1にキャリーする必要がある。複数のクレジットが、単一のトランザクションと共に使われ得る。これはccreditビットベクトルにおいて複数のビットをアサートすることによって達成される。マスター及びスレーブによるクレジットタイプの解釈及び物理リソースへのマッピングは、実装固有である。
caddress[47:0]信号は、現在のトランザクションに対する開始アドレスを識別する。アドレスは、仮想アドレス、物理アドレス、又は他の任意の中間アドレス表現であり得る。アドレスは、整合及び非整合トランザクションの両方に対するトランザクションのための開始バイトを特定する。この信号は、マスターがコマンドトランザクションを開始するインタフェース上で必要とされる。
cmstid[11:0]信号は、このトランザクションを開始するシステムマスターを一意的に識別する。cmstid信号は、正確なセキュリティ保護チェックを可能にするために、現在のマスターの外で発するトランザクションに対して正確に伝搬されるべきである。
cid[11:0]信号は、現在のトランザクションを一意的に識別する。コマンドトランザクションがcidを確立する。トランザクションデータチャネル(TDC)上の対応するデータ転送は、did[11:0]信号を介してcid信号をミラーリングする。後続の応答トランザクション及び書き込み応答は、cid及びwid[11:0]信号を介してcidをミラーリングする。
ctype[5:0]信号は、現在のトランザクションのタイプを識別する。表6は、6ビットctype信号の好ましいデコーディングを列挙する。トランザクションタイプは、トランザクションのカテゴリを識別する3つの最上位ビット、及びカテゴリ内の特定のタイプを識別する3つの最下位ビットを用いてエンコードされる。
他のあり得る全てのコーディングは予備であり、好ましい実施形態において用いられていない。
cmemtype[1:0]信号は、仮想メモリ翻訳によって決定されるように、所与のトランザクションアドレスに対するメモリタイプを識別する。3つのサポートされたメモリタイプは、異なる挙動上の意味を有する。00のコーディングは、デバイスメモリタイプを示す。01のコーディングは、通常のライトバックキャッシュメモリタイプを示す。10のコーディングは、通常のライトスルーキャッシュメモリタイプを示す。11のコーディングは予備であり、好ましい実施形態において用いられていない。
cpable信号は、仮想メモリ翻訳によって決定されるように、トランザクションアドレスがプリフェッチ可能か否かを識別する。プリフェッチ可能とマークされたメモリ領域は、ハードウェアプリフェッチストリームの開始に貢献し得る。0は、プリフェッチ不可能を示す。1はプリフェッチ可能を示す。
ccinner[1:0]信号タイプは、仮想メモリ翻訳によって決定されるように、トランザクションアドレスに対する内部キャッシャビリティドメインに対応するキャッシュ割り当て属性を識別する。
ccouter[1:0]信号は、仮想メモリ翻訳によって決定されるように、トランザクションアドレスに対する外部キャッシャビリティドメインに対応するキャッシュ割り当て属性を識別する。
キャッシュ階層(レベル1、レベル2、レベル3キャッシュ等)は、内部ドメインと外部ドメインの、2つの相互に排他的なキャッシャビリティドメインに分けられる。キャッシュ割り当てポリシーは、各ドメインに対して別個に確立され、仮想メモリ翻訳によってストアされるメモリ属性において記録される。内部キャッシャビリティドメインは、CPUに最も近いキャッシュ、典型的にレベル1及びレベル2キャッシュ、を含む。外部キャッシャビリティドメインは、内部ドメインにおいてキャッシュを含まず、最終レベルキャッシュ等の内部ドメインを超えるキャッシュを含む。内部及び外部キャッシュドメインの解釈は実装依存であり、幾つかの実装は両ドメインを同一として取り扱うことを選択し得る。
表7は、同一であるccinner及びccouterのコーディングを列挙する。
csdomain信号は、仮想メモリ翻訳によって決定されるように、トランザクションに対する、シェアラビリティドメイン、内部、又は外部を識別する。シェアラビリティドメインは、このトランザクションに対してコヒーレントに維持されなければならないキャッシュを識別する。
内部及び外部の2つのシェアラビリティドメインがある。2つのドメインは、相互排他的ではない。外部ドメインは、内部ドメインにおいてキャッシュを含む。内部共有ドメインは、CPUに最も近いキャッシュ、典型的にレベル1及びレベル2キャッシュ、を含む。外部共有ドメインは、最終レベルキャッシュ等の内部ドメインを超えるものに加えて、内部ドメインにおけるキャッシュを含む。内部及び外部共有ドメインの解釈は実装依存であり、幾つかの実装は、両ドメインを同一として取り扱うことを選択し得る。0は内部共有ドメインを示す。1は外部共有ドメインを示す。csdomainは、シェアラブルトランザクションに対してのみ有効である。csdomain信号は、ReadNoSnoop及びWriteNoSnoopトランザクションタイプに対して無視される。
ccoh[1:0]信号は、読み出し応答又はスヌープ応答トランザクションに対するコヒーレンス状態情報を識別する。コヒーレンス状態情報は、開始側マスターに、キャッシュラインの最終コヒーレント状態を通知するために用いられる。読み出し応答トランザクションでは、ccohは、読み出しが完了したときに、割り当てキャッシュにおけるラインのコヒーレント状態を示す。スヌープ応答トランザクションでは、ccohは、スヌープが完了したときに、スヌープされたキャッシュにおけるラインのコヒーレント状態を示す。表8は、ccohの有効なエンコーディングを列挙する。
cdirty信号は、この応答トランザクションに関連するキャッシュラインデータ転送が、メインメモリに対してダーティか又はクリーンかを識別する。cdirty信号は、スヌープ側のマスターに、スヌープ応答データがメインメモリにライトバックされる必要があるか否かを示すために用いられる。cdirty信号は、オプションで、SharedDirty MESI状態を実装するために、読み出し演算と共に用いられ得る。cdirty信号は、応答トランザクションにのみ適用し、コマンドトランザクションに対する意味を搬送せず、コマンドトランザクションに対して、0に関連付けられなければならない。0のcdirty信号は、キャッシュラインデータ転送がメインメモリに対して、変更されていないことを示す。1のcdirty信号は、キャッシュラインデータ転送がメインメモリとは異なることを示す。これは、このキャッシュラインが、今後どこかの時点で、メインメモリにライトバックされなければならないことを示す。
cdata信号は、このトランザクションが、関連するデータ転送を伴うか否かを識別する。読み出し演算は、読み出し演算がデータ転送を含まないので、この信号をアサートすることはない。後続の読み出し応答トランザクションは、cdata信号をアサートし得る。0のcdata信号は、トランザクションが転送データを含まないことを示す。1のcdat2信号は、トランザクションが関連データを含むことを示す。従って、書き込みコマンドトランザクションは、cdata=1をアサートすることが必要とされる。読み出し応答トランザクションは、cstatus[1:0]において示される状態に関係なく、cdata=1をアサートすることが必要とされる。
cbytecnt[6:0]信号は、トランザクションの総サイズを識別する。最大の適法サイズは128バイトである。全てゼロのcbytecntは、128バイトトランザクションを示す。cbytecntのこのコーディングは、スヌープ及びビクティムトランザクションに対して必要とされる。そうでない場合、cbytecnt信号の数は、データ転送バイトの数に等しい。ゼロサイズのトランザクションは、cbytecnt信号によって指定することができない。しかしながら、書き込みトランザクションは、如何なるバイトも変更しない書き込みトランザクションを実施するために、TDC上のdbyten[CFG:0]信号をゼロ設定し得る。
cstatus[1:0]信号は、応答トランザクションに対するトランザクション完了状態を識別する。この信号は、応答トランザクションに対してのみ有効であり、コマンドトランザクションに対して無視される。表9は、有効なエンコーディングを列挙する。
ctrace[3:0]信号は、読み出し応答トランザクションに対するトレース情報を識別する。この情報は、エミュレーション/デバッグアーキテクチャによって用いられる。トレース情報は、トランザクションがサービスされたメモリ階層におけるレベルを記録する。トレース情報は、トランザクションの成功/失敗状態とは関係なく記録される。成功/失敗状態は、cstatus[1:0]信号においてキャプチャされる。信号エンコーディングは、エミュレーション/デバッグアーキテクチャ仕様によって指定されたものにマッチングするように定義される。表10は、有効なエンコーディングを列挙する。
cemudbg信号は、現在のトランザクションを、エミュレーショントランザクションか又は非エミュレーショントランザクションとして識別する。0のcemudbg信号は、通常の非エミュレーショントランザクションを示す。1のcemudbg信号は、エミュレーショントランザクションを示す。
csecure信号は、現在のトランザクションのセキュリティレベルを識別する。0のcsecure信号は、非セキュアトランザクションを示す。1のcsecure信号は、セキュアトランザクションを示す。
cpriv[1:0]信号は、現在のトランザクションの特権レベルを識別する。表11は、有効なエンコーディングを列挙する。
cpriority[2:0]信号は、現在のトランザクションの優先レベルを識別する。この信号は、トランザクションを仲裁するためにスレーブによって用いられる。下位の数値は、より高い優先度を示す。従って、000のcpriority[2:0]信号は、最高優先度を示し、111のcpriority[2:0]信号は、最低優先度を示す。
csband[CFG:0]信号は、応答上でミラーリングされないオプションのユーザー定義サイドバンド信号である。この信号はオプションであり、その解釈は実装固有である。csband信号は、トランザクション属性チャネル(TAC)によってのみ用いられ、トランザクションシーケンス演算の一部としてミラーバックされる必要がない。
cmsband[CFG:0]信号は、応答上でミラーリングされなければならないオプションのユーザー定義サイドバンド信号である。この信号はオプションであり、その解釈は実装固有である。コマンドトランザクションのためのcmsband信号は、トランザクションシーケンス演算の一部として応答トランザクションがアサートされるとき、同じ値を用いてミラーリングされなければならない。
creturn[CFG:0]信号は、それに対してこのサイクルで単一のクレジットがリターンされる、クレジットタイプを識別する。利用可能なクレジットタイプの数、従って、この信号の幅は、構成オプションである。MBAプロトコルは、ジェネリック整数クレジットタイプを定義する。マスター及びスレーブによるクレジットタイプの解釈は、実装固有である。creturn信号幅は、候補となり得るクレジットタイプの数に正確にマッチングする。creturn信号は、インタフェース上で使用されている各クレジットタイプに対して1ビットを備えるビットベクトルとして解釈される。creturn信号の各ビットは、各サイクルでスレーブによって独立してアサートされ得る。creturn信号における任意のビット上の1の値は、そのタイプの単一のクレジットのスレーブからマスターへのリターンを示す。或るサイクルでcreturn信号における複数のビットがアサートされる場合、信号においてアサートされた各ビットに対して、1つのクレジットがスレーブからマスターにリターンされる。インタフェース上の各クレジットタイプに対して、スレーブからマスターに、各サイクルで最大1つのクレジットがリターンされ得る。
トランザクションデータチャネル(TDC)は、トランザクション属性チャネル(TAC)上で開始されるトランザクションに対して、マスターからスレーブへのデータ転送を実施するために用いられる、クレジットされないチャネルである。TDCは、TACとは独立してマスターされる。これらの2つのチャネルは、TACに存在するcid[11:0]信号、及びTDCに存在するdid[11:0]信号を介してリンクされる。データ転送は、1つ又は複数のデータフェーズに分割される。TDC上の信号は、各データフェーズに対して正確に1つのサイクルの間、マスターによってアサートされ、同じサイクルにおいてスレーブによってアクセプトされなければならない。
TDC上のデータ転送内の個々のデータフェーズは、厳密に線形順に成される必要があるが、連続したサイクルで成される(例えば、バーストする)必要はない。データフェーズの間の空サイクルが、TDC上で許可される。単一のトランザクションの最終データフェーズは、dlast信号のアサートによって示される。TDCの全体的な利用を改善するために、データ転送内のデータフェーズが厳密に線形順に生じる限り、マスターは異なるトランザクションからのデータフェーズをインターリーブし得る。データウィンドウのサイズ、及び従ってddata信号は、64、128、256、512ビット幅に構成可能である。デフォルトは512ビットである。各データフェーズは、dbyten[CFG:0]信号によって指示されるように、データウィンドウの全体か又は一部のいずれかを転送し得る。各インタフェースに対して、全てのTDC信号が必要とされるわけではない。表12は、トランザクションデータチャネルの信号を列挙する。
表12のサイズの列では、CFGは、この信号が構成可能であることを示す。括弧内の数字は、ビットでのデフォルトサイズである。dword、dparity、及びdedc信号のサイズは、ddata信号のサイズから導き出される。dword信号の幅は、構成されたデータウィンドウサイズ、及び128バイト(1024ビット)の最大データ転送の両方に基づいて決定される。最大データ転送サイズは、データウィンドウのサイズに関係なく、128バイトで固定される。
dvalid信号は、トランザクション属性チャネル(TAC)上の同じサイクルか又は前のサイクルのいずれかにおいて開始されたトランザクションに対する、TDC上の有効なデータフェーズの存在を識別する。0のdvalid信号は、現サイクルにデータがないことを示す。1のdvalid信号は、現サイクルが有効データを含むことを示す。
did[11:0]信号は、現在のデータ転送に対応するTACトランザクションを一意的に識別する。異なるデータ転送に対するデータフェーズがインターリーブされ得るが、did信号はデータ転送における全てのデータフェーズに対して同じでなければならない。
dtype信号は、データ転送が、コマンドに対応するか又は応答トランザクションに対応するかを識別する。この情報は、同じマスターがdmstid[11:0]及びdid[11:0]の両方を共有する、コマンド及び応答データ転送を一意的に区別するために必要である。0のdtype信号は、現トランザクションがコマンドトランザクションであることを示す。1のdtype信号は、現トランザクションが応答トランザクションであることを示す。
dlast信号は、現在のデータ転送が、現在のバストランザクションの最後のデータであるか否かを識別する。現在のバストランザクションのデータは、データバスの利用可能なライン上で送信するには大き過ぎる可能性がある。この場合、データは、複数のサイクルにおいて転送される。0のdlast信号は、現トランザクションが最後のデータ転送ではないことを示す。1のdlast信号は、現トランザクションが最後のデータ転送であることを示す。
dstatus[1:0]は、現在のデータ転送に対するデータ状態を識別する。この信号は、応答トランザクションに対してのみ適用可能であり、書き込みコマンドトランザクションに対して無視される。この信号は、データ転送における各データフェーズに対して別個にアサートされる。この信号は、データ転送における各データフェーズに対して同じである必要はない。これにより、各データフェーズに対して別個の状態をリターンするために、細分化された読み出しリターンが可能となる。dstatus信号は、表9に列挙されたcstatus信号と同じコーディングを有する。
dbyten[CFG:0]信号は、現在のデータフェーズに対するddata[CFG:0]ウィンドウにおける有効バイトレーンを識別する。ddata[CFG:0]バス上の全ての有効バイトは、dbytenビットベクトルの対応するビットにおいて1によって識別される。全てゼロのdbytenは、現在のデータフェーズにおいて有効データが転送されていないことを示す。dbyten信号は、書き込みコマンドトランザクションに対する書き込みbytenか、又は読み出しリターン/スヌープリターントランザクションに対する読み出しbytenのいずれかとして働き得、dvalidがアサートされた全てのサイクルに対して有効である必要がある。dbyten信号が、連続する1の間にゼロを有する、ギャッピー(gappy)データフェーズが、書き込みコマンドトランザクションに対してサポートされる。これは、キャッシュトランザクションに対する、書き込みバッファフラッシュ及び部分的ライン書き込みを意図している。dbyten信号はオプションである。dbyten信号が存在しない場合、全てのバイトレーンは、データ転送における各データフェーズに対して有効であると仮定される。
ddata[CFG:0]信号は、現在のデータフェーズに対するデータを識別する。データバイトは、アドレスによって固定バイトレーンに整合させられ、全てのデータが、dbyten[CFG:0]ビットベクトルによってクオリファイされる。非整合データ又はギャッピーデータ(例えば、書き込みマージデータ)は、dbyten[CFG:0]ビットベクトルにおける必要なビットを設定することによって示される。
dword[CFG:0]信号は、現在のデータフェーズが適用するデータ転送全体におけるデータウィンドウを識別する。データウィンドウのサイズより大きいデータ転送は、複数のデータフェーズを必要とし得る。dword信号は、現在のddata[CFG:0]及びdbyten[CFG:0]信号が適用するデータウィンドウを識別するために用いられる。データ転送は線形順に成される必要がある。従って、dword信号は、データ転送を通して単調増加される必要がある。dword信号は、データ転送における継続的なデータフェーズにおいて値を減少させることができない。マスターからの細分化された読み出しリターンが、より幅の狭いダウンストリームデータバスに遭遇すると、その結果、dwordは、データウィンドウの境界に達するまで、複数のデータフェーズに対して一貫した値を持つ。dword信号は、現在のデータフェーズにおけるどのデータバイトがデータ転送全体におけるどのデータウィンドウに対応するのかを一意的に区別することができないので、データウィンドウにわたるデータフェーズは許可されない。
dmstid[11:0]信号は、このデータ転送が所属するトランザクションを開始したマスターを一意的に識別する。dmstidは、トランザクション属性チャネル(TAC)上の元のトランザクションのcmstidにマッチングしなければならない。
dlast信号は、所与のdid[11:0]に対するデータ転送の最終データフェーズを識別する。
dparity[CFG:0]信号は、現在のddata[CFG:0]ウィンドウに対するパリティを識別する。パリティは、32ビットサブライン毎に、ddataのXORリダクションとしてコンピュートされる。表13は、最大512ビットのデータウィンドウに対するdparity信号のエンコーディングを列挙する。
細分化されたデータ転送は、複数のデータフェーズを介して、全データウィンドウを転送し得る。細分化されたデータ転送における各データフェーズについて、dbyten[CFG:0]は、転送されている総データウィンドウのサブセットを特定し得る。各データフェーズは、全データウィンドウ上でdparityを計算しなければならず、ゼロにされたdbytenビットに対応するデータバイトをゼロ設定する。これにより、スレーブが、各データフェーズからの中間dparity値の継続的なXORを実施することによって、全データウィンドウに対する正しいdparity値を再構成することが可能になる。
dedc[CFG:0]信号は、現在のデータフェーズに対するエラー検出/訂正ハミング及びパリティ情報を識別する。dedc信号は、それぞれ256ビットデータ精度で計算された、2つの10ビットフィールドで構成される。各10ビットフィールドは、9ビットハミングシンドローム及び単一の全パリティビットで構成される。表14は、dedc信号のエンコーディングを列挙する。
dedc信号は、データウィンドウが256ビットより小さく構成されるインタフェース上では用いることができない。
図19は、dedc信号のエンコーディングのためのロジックを図示する。データ1910は、データ[511:256]及びデータ[255:0]の2つの部分に分けられる。ハミング生成器1931は、既知の技術に従って、データ1910のデータ[511:256]を受け取り、ハミングデータの9ビットを形成する。この9ビットは、データ1920のdedc[18:10]となる。パリティXORリダクション1932は、データビットデータ[511:256]、及びハミング生成器1931からのハミングデータの9ビットの組み合わせ排他的ORを形成する。この単一のXORビットは、データ1920のdedc[19]になる。ハミング生成器1933は、既知の技術に従って、データ1910のデータ[255:0]を受け取り、ハミングデータの9ビットを形成する。この9ビットは、データ1920のdedc[8:0]となる。パリティXORリダクション1934は、データビットデータ[255:0]、及びハミング生成器1933からのハミングデータの9ビットの組み合わせ排他的ORを形成する。この単一のXORビットは、データ1920のdedc[9]となる。
細分化されたデータ転送は、複数のデータフェーズを介して、全データウィンドウを転送し得る。細分化されたデータ転送における各データフェーズに対して、dbyten[CFG:0]は、転送されている総データウィンドウのサブセットを特定し得る。各データフェーズは、全データウィンドウ上でdedcを計算しなければならず、ゼロにされたdbytenビットに対応するデータバイトをゼロ設定する。これによって、スレーブが、各データフェーズから中間のdedc値の継続的なXORを実施することによって、全データウィンドウに対する正しいdedc値を再構成することが可能になる。
dsband[CFG:0]信号は、ユーザー定義サイドバンド信号である。この信号はオプションであり、その解釈は実装固有である。dsband信号は、トランザクションデータチャネル(TDC)によってのみ用いられる。
書き込み応答チャネル(WRC)は、ペアにされたインタフェーストポロジーに対する反対側MBAインタフェース上の、前に開始された書き込みコマンドトランザクションに対して、スレーブに書き込み状態をリターンするためにマスターによって用いられるクレジットされたチャネルである。WRC上の書き込み応答の開始は、クレジットの使用を必要とする。WRC信号は、正確に1サイクルの間マスターによってアサートされ、それらがアサートされたサイクルにおいて、スレーブによってアクセプトされなければならない。各書き込み状態は、元の書き込みコマンドトランザクションのcid[11:0]にマッチングするwid[11:0]信号によって一意的に識別される。書き込み応答が成功裏に処理されると、wreturn信号を用いて、スレーブによって書き込み応答クレジットがマスターにリターンされなければならない。書き込み応答に対する必要がない場合、チャネル全体が除外され得るが、チャネルが存在する場合、WRC上の全ての信号が必
要とされる。
wmstid[11:0]信号は、WRC上の唯一のオプションの信号である。インタフェースが書き込みコマンドトランザクションをサポートするか否かに応じて、書き込み応答チャネル全体が存在するように又は存在しないように構成され得る。
wvalid信号は、有効な書き込み応答の存在を示す。0は書き込み応答が存在しないことを示す。1は現在のサイクルに対する有効な書き込み応答を示す。
wid[11:0]信号は、これがそれに対する書き込み応答である、元のTACトランザクションを一意的に識別する。widは、元の書き込みコマンドトランザクションのcidにマッチングしなければならない。
wstatus[1:0]信号は、書き込みトランザクションの状態を識別する。wstatus信号は、表9に列挙されたcstatusと同じコーディングを有する。
wmstid[11:0]信号は、これがそれに対する応答である、書き込みコマンドトランザクションを発したシステムマスターを識別する。wmstidは、書き込みコマンドトランザクションの元のcmstidにマッチングしなければならない。
wreturn信号は、書き込み応答クレジットのリターンを示す。0は書き込み応答クレジットリターンが存在しないことを示す。1は現在のサイクルに対する有効な書き込み応答クレジットリターンを示す。
MBAプロトコルは、複数のトランザクションタイプを定義する。トランザクションは、コマンドと応答の2つの基本的なカテゴリにグループ分けされる。両方のトランザクションカテゴリが、プロトコルによってサポートされる全てのトランザクションの説明と共に以下に記載される。
コマンドトランザクションが、データの転送を伴う可能性もあり、伴わない可能性もある、2つのエージェント間のトランザクションシーケンスを開始する。シーケンスは、次の2つの方式の1つにおいて完了する。1つは、反対側MBAインタフェースの書き込み応答チャネル(WRC)上で他方のエージェントによって開始される書き込み応答であり、もう1つは、反対側MBAインタフェースのトランザクション属性チャネル(TAC)上で他方のエージェントによって開始される応答トランザクション、及びそのトランザクションデータチャネル(TDC)上での関連するデータ転送である。全てのコマンドトランザクションは、一意のcid[11:0]を特定しなければならない。cidは、同じインタフェース上の同じマスターによって開始される如何なるアクティブシーケンスにおいても使用されない可能性がある。書き込みコマンドトランザクションは、マスターからスレーブへのデータの転送を必要とする。書き込みコマンドシーケンス以外の全てのシーケンスは、反対側MBAインタフェース上で他方のエージェントによって開始される応答トランザクションによって完了する。
コマンドトランザクションは、デマンド、スヌープ、メッセージ、及びメンテナンスの4個のカテゴリに分類される。表16は、デマンドカテゴリにおけるコマンドトランザクションタイプを列挙する。表16における全てのコマンドは、ACE等価トランザクションに対応する。マスターの列は、各トランザクションタイプに対して予期される開始側を示す。シーケンス完了の列は、コマンドトランザクションによって開始されたシーケンスを完了させるための必要とされる応答を示す。
ReadNoSnoopコマンドは、非コヒーレント読み出し演算である。この読み出し演算は、コヒーレンスプロトコルに参加せず、スヌープトランザクションを生成しない。ReadNoSnoopトランザクションは、cmemtype[1:0]、ccinner[1:0]、及びccouter[1:0]信号の値に応じて、キャッシュ割り当てとなる可能性とならない可能性がある。
ReadOnceコマンドは、開始側マスターにおけるキャッシュ内に割り当てないコヒーレント読み出し演算である。
ReadCleanコマンドは、開始側マスターにおけるキャッシュ内に割り当てるコヒーレント読み出し演算である。開始側マスターは、共有状態においてラインを要求するが、ファーサイド構成要素は排他的状態においてアクセスをグラントし得る。
ReadUniqueコマンドは、開始側マスターにおけるキャッシュ内に割り当てるコヒーレント読み出し演算である。開始側マスターは、排他的状態においてラインを要求し、ラインは排他的状態においてグラントされなければならない。
WriteNoSnoopコマンドは、非コヒーレント書き込み演算である。この書き込み演算は、コヒーレンスプロトコルに参加せず、スヌープトランザクションを生成しない。
WriteUniqueコマンドは、全キャッシュラインより小さい可能性のあるサイズを有するコヒーレント書き込み演算である。トランザクションアドレスに対するキャッシュラインは、開始側マスターにおけるキャッシュに存在してはならない。
WriteLineUniqueコマンドは、全キャッシュラインに等しくなければならないサイズを有するコヒーレント書き込み演算である。このトランザクションアドレスに対するキャッシュラインは、開始側マスターのキャッシュに存在してはならない。
WriteCleanコマンドは、開始側マスターのキャッシュにおいてラインがクリーン状態で保持される、場合によってはコヒーレントなビクティム書き込みトランザクションである。
ライトバックコマンドは、開始側マスターにおけるキャッシュにおいてラインが保持されない、場合によってはコヒーレントなビクティム書き込みトランザクションである。
表17は、スヌープカテゴリにおけるコマンドトランザクションタイプを列挙する。ACE等価トランザクションは、SnoopReadOnce、ReadOnce、SnoopReadShared、ReadShared、SnoopCleanShared、CleanShared、SnoopCleanInvalid、CleanInvalid、及びSnoopMakeInvalid、MakeInvalidである。
SnoopReadOnceコマンドは、スヌープされたキャッシュの状態を変更しない、非キャッシング読み出しスヌープコマンドである。スヌープされたキャッシュにおいてラインが存在する場合、データはリターンされなければならない。
SnoopReadSharedコマンドは、完了の際、スヌープされたキャッシュラインを共有状態に移動させることを必要とする、キャッシング読み出しスヌープコマンドである。スヌープされたキャッシュにラインが存在する場合、データは、スヌープ応答トランザクションと共にリターンされなければならない。
SnoopCleanSharedコマンドは、完了の際、スヌープされたキャッシュラインをクリーン状態に移動させることを必要とする、キャッシング読み出しスヌープコマンドである。スヌープされたキャッシュにおいてラインが存在する場合、データは、スヌープ応答トランザクションと共にリターンされなければならない。
SnoopCleanInvalidコマンドは、完了の際、スヌープされたキャッシュラインを無効な状態に移動することを必要とする、キャッシング読み出しスヌープコマンドである。スヌープされたキャッシュにおいてラインが存在する場合、データは、スヌープ応答トランザクションと共にリターンされなければならない。
SnoopMakeInvalidコマンドは、完了の際、スヌープされたキャッシュラインを無効な状態に移動することを必要とする、キャッシングスヌープコマンドである。データは、スヌープ応答トランザクションと共にリターンされることはない。
表18は、メッセージカテゴリにおけるコマンドトランザクションタイプを列挙する。DVM Operatationコマンド、DVM Syncコマンド、及びDVM Completerコマンドは、ACE等価トランザクションを有する。CacheWarmコマンド、CacheWarmNotifyコマンド、及びEvictコマンドは、ACE等価を有さない。メッセージコマンドトランザクションは、データの転送を含むことはなく、従って、トランザクションデータチャネル(TDC)の使用を必要としない。
CacheWarmコマンドは、そのキャッシュ内に所与のアドレスを割り当てるようにReadClean演算の割り当てを開始することをスレーブエージェントに要求するメッセージである。MMUからのみ決定され得るメモリタイプ及びメモリ属性に対応するトランザクション属性チャネル(TAC)属性は、CacheWarmトランザクションから後続のReadClean演算にミラーリングされなければならない。CacheWarmトランザクションは、キャッシュラインをプリフェッチするために、システムによって用いられる。メッセージ応答トランザクションは、ReadClean演算が開始された後、開始され得る。
CacheWarmNotifyコマンドは、そのキャッシュ内に所与のアドレスを割り当てるようにReadClean演算の割り当てを開始することをスレーブエージェントに要求するメッセージである。MMUからのみ決定され得るメモリタイプ及びメモリ属性に対応するトランザクション属性チャネル(TAC)属性は、CacheWarmトランザクションから後続のReadClean演算にミラーリングされなければならない。ReadClean演算に対して、読み出し応答トランザクションが受け取られると、スレーブエージェントは、CacheWarm演算の完了を示すために、WriteNoSnoopメッセージコマンドトランザクションを開始しなければならない。
Evictコマンドは、所与のアドレスが開始側マスターにおけるキャッシュから除去された(無効化された)ことの、場合によってはコヒーレントなキャッシュ状態通知である。
メンテナンスコマンドトランザクションは、メンテナンスドメインによって区別される2つの特徴がある。2つのメンテナンスドメインは、ポイントオブユニフィケーション(POU)とポイントオブコヒーレンス(POC)である。ポイントオブユニフィケーションは、命令とデータキャッシュとが一体化されるポイントである。これは、典型的に第2レベルキャッシュである。ポイントオブコヒーレンスは、所与のコヒーレンスドメインにおける全てのコヒーレントマスターが、変更されたデータをライトバックしなければならないポイントであり、それによって、同じコヒーレンスドメインにおける他のコヒーレントマスターが変更されたデータを見ることができるようにするためのポイントである。これは典型的に最終レベルキャッシュである。
CleanSharedPOUコマンドは、キャッシュラインが変更された状態に保たれる場合、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブユニフィケーションまでの所与のキャッシュラインをライトアウトすることを要求する、キャッシュメンテナンス演算である。CleanSharedPOUトランザクションは、スレーブエージェントとコアとの間の全てのキャッシュに伝播されなければならないが、この伝搬は、SnoopCleanSharedコマンドトランザクションを介して成され得る。
CleanInvalidPOUコマンドは、キャッシュラインが変更された状態に保たれる場合、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブユニフィケーションまでの所与のキャッシュラインをライトアウトすることを要求する、キャッシュメンテナンス演算である。また、全てのキャッシュは、キャッシュラインを無効化しなければならない。CleanInvalidPOUトランザクションは、コアに近い方のキャッシュに伝播されなければならないが、この伝搬は、SnoopCleanInvalidコマンドトランザクションを介して成され得る。
MakeInvalidPOUコマンドは、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブユニフィケーションまでの所与のキャッシュラインを無効化することを要求する、キャッシュメンテナンス演算である。MakeInvalidPOUトランザクションは、コアに近い方のキャッシュに伝搬されなければならないが、この伝搬は、SnoopMakeInvalidコマンドトランザクションを介して成され得る。
CleanSharedPOCコマンドは、キャッシュラインが変更された状態に保たれる場合、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブコヒーレンスまでの所与のキャッシュラインをライトアウトすることを要求する、キャッシュメンテナンス演算である。CleanSharedPOCトランザクションは、スレーブエージェントとコアとの間の全てのキャッシュに伝播されなければならないが、この伝搬は、SnoopCleanSharedコマンドトランザクションを介して成され得る。
CleanInvalidPOCコマンドは、キャッシュラインが変更された状態に保たれる場合、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブコヒーレンスまでの所与のキャッシュラインをライトアウトすることを要求する、キャッシュメンテナンス演算である。また、全てのキャッシュは、キャッシュラインを無効化しなければならない。CleanInvalidPOCトランザクションは、コアに近い方のキャッシュに伝搬されなければならないが、この伝搬は、SnoopCleanInvalidコマンドトランザクションを介して成され得る。
MakeInvalidPOCコマンドは、コアからスレーブエージェントまでの全てのキャッシュに、ポイントオブコヒーレンスまでの所与のキャッシュラインを無効化することを要求する、キャッシュメンテナンス演算である。MakeInvalidPOCトランザクションは、コアに近い方のキャッシュに伝搬されなければならないが、この伝搬は、SnoopMakeInvalidコマンドトランザクションを介して成され得る。
応答トランザクションは、2つのエージェント間のトランザクションシーケンスを完了するために用いられる。応答トランザクションは、元のコマンドトランザクションのcid[11:0]にマッチングする必要がある。応答トランザクションは、データの転送に関連する可能性も、しない可能性もある。表20は、応答トランザクションタイプを列挙する。ACE等価トランザクションは、読み出し応答がRRESPであり、スヌープ応答がCR、CUであり、メッセージ応答及びメンテナンス応答コマンドに対してACE等価がない。マスターの列は、各トランザクションタイプに対する予期される開始側を示す。
読み出しシーケンスを完了するために、読み出し応答トランザクションが必要とされる。読み出し応答トランザクションは、常にデータ転送を含む。失敗状態を示すcstatus[1:0]値を有する読み出し応答トランザクションは、それでもなお、cdata信号をアサートし、ゼロにされたデータをリターンしなければならない。成功を示すcstatus[1:0]値を有する読み出し応答トランザクションは、トランザクションデータチャネル(TDC)上にデータ転送を含まなければならない。
スヌープシーケンスを完了するために、スヌープ応答トランザクションが必要とされる。スヌープ応答トランザクションは、データ転送を含む可能性も、含まない可能性もある。失敗状態を示すcstatus[1:0]値を有するスヌープ応答トランザクションは、cdata信号をディアサートし得、トランザクションデータチャネル(TDC)の使用を防止し得る。成功を示すcstatus[1:0]値を有するスヌープ応答トランザクションは、トランザクションデータチャネル(TDC)上にデータ転送を含まなければならない。
メッセージシーケンスを完了するために、メッセージ応答トランザクションが必要とされる。メッセージ応答トランザクションは、データ転送を含むことはない。
メンテナンスシーケンスを完了するために、メンテナンス応答トランザクションが必要とされる。メンテナンス応答トランザクションは、データ転送を含むことはない。
応答トランザクションは、トランザクション属性チャネル(TAC)上の対応するcstatus[1:0]信号をアサートすることによってエラー状態を示す。読み出し応答トランザクションは、読み出し演算を処理するように試みている間、エラーの発生に関係なく、1のcdata信号をアサートする必要がある。
アドレス及び保護エラーは、典型的に、スレーブがエンドポイント読み出しアクセスを実施する前に検出される。この場合、それでもなお、データ転送が読み出し応答トランザクションと共に成されなければならない。データ転送を伴う全読み出し応答トランザクションは、次のように起こり得る。1のcdata信号が、トランザクション属性チャネル(TAC)上でトランザクションを用いてアサートされなければならない。cstatus[1:0]信号は、発生したエラーがある場合はその種類を示す。これは、アドレスエラー及び保護エラーであり得る。データ転送がトランザクションデータチャネル(TDC)上で成されなければならない。データ転送のサイズは、元の読み出し演算のcbytecnt[6:0]に等しくなければならない。ddata[CFG:0]信号は、セキュリティホールを回避するために、全てゼロに設定されなければならない。このセキュリティホールは、読み出しアクセスの間に、場合によっては読み出し応答トランザクションが開始された後に起こり得る、非コレクタブルビットエラー等のこの信号エラー上で前にレジスタされたデータのサンプリングを可能にし得る。1つ又は複数のデータフェーズが転送された後にエラーが発生する場合、データ転送は完了しなければならず、エラーのあるデータフェーズに対してddata[CFG:0]を全てゼロに設定することに加え、dstatus[1:0]信号上の対応するエラー種類をアサートすることによって、エラーのあるデータフェーズが示されなければならない。
全てのMBAトランザクションは、クレジットの使用を介して動作する。トランザクション属性チャネル(TAC)上で開始されるトランザクション、及び書き込み応答チャネル(WRC)上で開始される書き込み応答は、少なくとも1つのクレジットの使用を必要とする。クレジットは、マスターによって所有及び使われ、その後、スレーブによってリターンされる。書き込み応答クレジットは、1種類のみを有し、より詳細な分類は必要ない。トランザクションクレジットは、複数のクレジットタイプに組織化される。例示の実施形態の多くの実装は、クレジットタイプをスレーブ上の物理リソースによって分類する。
全てのトランザクションでは、ccredit[CFG:0]信号は、使われているクレジットのタイプを示す。例示の実施形態は、クレジットタイプの固定数を定義する必要がなく、クレジットタイプの固定された意味も定義する必要がない。特定の実装によって、MBAインタフェース上の利用可能なクレジットタイプの数、並びに各クレジットタイプに関連する意味が構成される。
クレジットされたチャネルに対するクレジットハンドシェイクは、非常にシンプルであり、クレジットスぺンドの後、クレジットリターン、という時間的形式に従う。マスターは、cvalidをアサートすること、及び、ccredit[CFG:0]ビットベクトルにおいて1つ又は複数のビットをアサートすることによって、1つ又は複数のクレジットを使う。対応するスレーブは、同じサイクル上でトランザクションをアクセプトする。これは強制的である。マスターが使うためのクレジットを有する場合、これは、スレーブがトランザクションをアクセプトしなければならないことを示す。スレーブは、トランザクションを完了し、その後、トランザクションによって用いられた1つ又は複数のリソースをフリーにする。リソースをフリーにすると、スレーブは、creturn[CFG:0]ビットベクトルにおける対応するビットをアサートすることによって、クレジットをマスターにリターンする。その後、マスターは後の使用のためにクレジットを有する。
図20は、トランザクション属性チャネル(TAC)に対するシンプルなクレジットハンドシェイクを図示する。図20において、2001は、マスター及びスレーブを両方制御するクロック信号である。マスターは、トランザクションを開始させるために、1クロックサイクルの間アクティブなcvalid信号2002を生成する。また、マスターは、同じ1つのクロックサイクルの間に、ccredit信号A2003を生成する。このccredit信号A2003は、現在のトランザクション上で使われているタイプクレジットを示す。例示の実施形態に従い、マスターが使うためのクレジットを有する場合、スレーブは、トランザクションをアクセプトしなければならない。このように、スレーブは、トランザクションをアクセプトし、不確定時間2010を演算する。アクセプトされたトランザクションによって必要とされる処理が完了すると、スレーブは、creturn信号A2004を介してクレジットをリターンする。このcreturn信号A2004は、好ましくは、1クロックサイクルの長さを有する。
例示の実施形態において、クレジットされたチャネル上でのクレジットリターンアクションに対して、クレジットスぺンドの1対1のマッピングがある。同時期に同じチャネル上で進行中の複数のクレジットハンドシェイクがあり得る。マスターは、所有するクレジットの数を常に把握する責任を持つ。各クレジットスぺンドアクションが、マスターにおけるクレジットカウントを1だけ減少させる。各クレジットリターンアクションが、マスターにおけるクレジットカウントを1だけ増加させる。
クレジットスぺンド及びクレジットリターンアクションは、同じ又は異なるクレジットタイプに対する異なるハンドシェイクに対して、クレジットされた同じチャネル上でインターリーブされ得る。
図21は、同じチャネル上のインターリーブされるクレジットハンドシェイクを図示する。図21において、2101は、マスター及びスレーブの両方を制御するクロック信号である。マスターは、第1のトランザクションを開始するために、1クロックサイクル2111の間、アクティブのcvalid信号2102を生成する。また、マスターは、同じクロックサイクル2111の間、ccredit信号A2103を生成する。このccredit信号A2003は、現在のトランザクション上で使われているクレジットのタイプを示す。2クロックサイクル2112の間、マスターは、ccredit信号B2103を送信し、その後ccredit信号A2103が続く。これらのccredit信号は、2クロックサイクルのcvalid信号2102の期間内にある。マスターが、スレーブからのクレジットリターンの前に、第2のccredit信号A2103を送信したことに留意されたい。これは、マスターが元々、タイプAクレジットを少なくとも2つ有していた場合にのみ起こる。これは、スレーブが、第1のそのようなトランザクションを完了する前に、タイプAの第2の要求をアクセプトするための容量を有していることを必要とする。スレーブは、このようにして、第1のトランザクションタイプAをアクセプトする。第1のアクセプトされたトランザクションによって要求される処理が完了すると、スレーブは、時間2113の間に、creturn信号A2104を介してクレジットをリターンする。このcreturn信号A2104は、好ましくは1クロックサイクルの長さを有する。第2のアクセプトされたトランザクション(タイプB)及び第3のアクセプトされたトランザクション(タイプA)によって要求される処理が完了すると、スレーブは、時間2114の間に、creturn信号A+B2104を介して、2つのクレジットをリターンする。好ましい実施形態において、クレジットリターンは、チャネル上で用いられる各クレジットタイプに対して1ビットを備えるビットベクトルとしてエンコードされ得る。タイプA及びタイプBの両方に対してビットを設定することで、単一のクレジットリターン信号が両方のクレジットタイプをリターンすることが可能となる。
図17は、ペアにされたインタフェーストポロジー(PIT)における各チャネルを図示する。完全なトランザクションシーケンスを実施するために、エージェントペアが、ミラーリングされたペア構成の2つの別個のMBAインタフェースを用いて通信しなければならない。これは、ペアにされたインタフェースと称される。ペアにされたインタフェースは2つのエージェント間の双方向のデータ転送をサポートする。エージェントAとBの間の全てのクレジットされたシーケンスは、クレジットされた非書き込みシーケンス、クレジットされた書き込みシーケンス、及びクレジットされたDVMシーケンス、の3つの形式の1つに従う。
図22は、クレジット非書き込みシーケンスにおけるステップを図示する。そのようなクレジット非書き込みシーケンスは、コアサイドエージェント1710がTAC 1712上でタイプA0のクレジットスぺンドを始めること(ステップ2201)で開始する。ステップ2202で、ファーサイドエージェント1720が、タイプA0のクレジットリターンをTAC 1722上でコアサイドエージェント1710に送信する。これは、ファーサイドエージェント1720が初期コマンドトランザクション(ステップ2201)によって占有された物理リソースをクリアにすると成される。クレジットリターンに関連するトランザクションIDはない。ステップ2203で、ファーサイドエージェント1720は、新しい応答トランザクションを開始し、TAC 1722上でクレジットタイプB1の単一のクレジットを使う。この応答トランザクションのIDは、元のID(ステップ2201)にマッチングしなければならない。ステップ2204で、ファーサイドエージェント1720は、TDC 1723上で、1つ又は複数のデータフェーズのオプションのデータ転送を実施する。データ転送がステップ2203におけるクレジットスぺンドに該当するので、このアクションに対してクレジットは必要とされない。TAC 1722とTDC 1723が異なるチャネルなので、TDC 1723上でのデータ転送の初期フェーズが、ステップ2203におけるクレジットスぺンドと同時に起こり得る。図22は、複数のデータ転送を有する例を図示する。ステップ2205において、コアサイドエージェント1710は、リターンクレジットタイプBの単一のクレジットを、TAC 1712上でファーサイドエージェント1720にリターンする。これは、コアサイド1710が、リターントランザクションによって占有された物理リソースをクリアする(ステップ2203)と起こる。クレジットリターンに関連するトランザクションIDはない。
読み出し演算、スヌープ演算、メッセージシーケンス、及びメンテナンスシーケンスの5つのクレジットされた非書き込みシーケンスタイプがある。表21は、ペアにされたインタフェーストポロジーにおける、図11に図示されたステップに対する適法なトランザクションタイプ及びデータ転送を列挙する。
図23は、クレジットされた書き込みコマンドシーケンスの一般的な形式を図示する。クレジットされた書き込みシーケンスは、シーケンスが完了する様式によって、上述のクレジットされた非書き込みシーケンスから差別化される。クレジットされた書き込みシーケンスは、書き込み応答チャネル(WRC)上での書き込み状態で完了する。トランザクションID及びクレジットタイプは、クレジットの性質、及びシーケンスにわたるIDフローを示すために、自由裁量による象徴的な名を用いて示され、それ以外はMBAインタフェース又はプロトコル内で如何なる意味も持たない。
クレジットされた書き込みシーケンスは、コアサイドエージェント1710がTAC 1711上でタイプA5の単一クレジットを使うステップ2301で開始する。これは、コアサイド1710が、ファーサイドエージェント1720が書き込みのデータを扱えることを確実にしなければならないので、図22のステップ2201のクレジットタイプA0とは異なる。従って、異なるクレジットタイプが必要とされる。ステップ2301において、コアサイドエージェント1710は、書き込みコマンドトランザクションに対して、TDC 1712上の1つ又は複数のデータフェーズのデータ転送を実施する。このアクションに対してクレジットは必要とされない。このデータ転送は、ステップ2301におけるクレジットスぺンドに該当する。TAC 1711とTDC 1712は異なるチャネルであるので、TDC 1712上のデータ転送の初期フェーズが、ステップ2201におけるクレジットスぺンドと同時に起こり得る。図22は、複数のデータ転送を有する例を図示する。ステップ2303において、ファーサイドエージェント1720は、タイプA5の単一クレジットをTAC 1722上でコアサイドエージェント1710にリターンバックする。これは、ファーサイドエージェント1720が、コマンドトランザクションによって占有された物理リソースをクリアにする(ステップ2301)と起こる。このクレジットリターンに関連するトランザクションIDはない。WRC 1724上で書き込みコマンドトランザクションの処理が完了すると、ステップ2304において、ファーサイドエージェント1720が書き込み応答を開始する。IDは、元のIDにマッチングしなければならない。書き込み応答は、専用の書き込み応答クレジットタイプの使用を必要とする。ステップ2304において、コアサイドエージェント1710は、WRC 1714を介して、単一の書き込み応答クレジットをファーサイドエージェント1720にリターンする。これは、ファーサイドエージェント1710によって送られた書き込み応答がコアサイドエージェント1710によって消費されると成される。書き込み応答クレジットリターンに関連するトランザクションID又は明示的なクレジットタイプはない。
下記は、例示のクレジットされたDVMシーケンスのステップである。この例は、相互接続として機能するファーサイドエージェントと、キャッシュマスターとして機能するコアサイドエージェントとの間の挙動を説明する。この例において、コアサイドエージェント1710/キャッシュマスターは、表では説明されていない、システムにおける別のキャッシュマスターからの相互接続に対して開始されたDVM-Operationに応答している。DVMシーケンスには、DVM Operation、DVM sync、及びDVM Completeの3つの部分がある。
DVM Operationは、ファーサイドエージェント1720が、新しいDVM-Operationコマンドトランザクションシーケンスを開始することで始まる。これは、適切なタイプの単一クレジットを使うことを含む。コアサイドエージェント1710は、コアサイドエージェント1710が、コマンドトランザクションによって占有された物理リソースをクリアにすると、そのタイプの単一クレジットをファーサイドエージェント1720にリターンバックすることによって応答する。このクレジットリターンに関連するトランザクションIDはない。コアサイドエージェント1710は、次に、DVM-Operationの受け取りを確認するために、ファーサイドエージェント1720に対して、クレジットされたトランザクションとしてのメッセージ応答を開始する。コアサイドエージェント1710は、元のDVM-OperationからのIDを用いる。ファーサイドエージェント1720は、メッセージ応答によって用いられるタイプにマッチングする単一クレジットをリターンする。クレジットリターンに関連するトランザクションIDはない。
その後、ファーサイドエージェント1720は、新しいDVM-Syncコマンドトランザクションシーケンスを開始し、適切な単一クレジットを使う。この例において、同じマスターからの全てのDVMトランザクションは、同じクレジットタイプを用いる。コアサイドエージェント1710は、対応するタイプA6の単一クレジットを、ファーサイドエージェント1720にリターンする。これは、コアサイドエージェント1710がコマンドトランザクションによって占有された物理リソースをクリアにすると成される。クレジットリターンに関連するトランザクションIDはない。次に、コアサイドエージェント1710は、DVM-Syncの受け取りを確認するために、ファーサイドエージェント1720へのメッセージ応答を、クレジットされたトランザクションにおいて開始する。コアサイドエージェント1710は、元のDVM-SyncトランザクションからのIDを用いる。ファーサイドエージェント1720は、メッセージ応答によって用いられるタイプにマッチングする単一のクレジットタイプをリターンする。このクレジットリターンに関連するトランザクションIDはない。
コアサイドエージェント1710は、新しいDVM-Completeコマンドトランザクションシーケンスを開始し、適切なタイプの単一クレジットを使う。ファーサイドエージェント1720は、そのタイプの単一クレジットをコアサイドエージェント1710にリターンバックする。これは、ファーサイドエージェント1720がコマンドトランザクションによって占有された物理リソースをクリアにすると成される。クレジットリターンに関連するトランザクションIDはない。ファーサイドエージェント1720は、DVM-Completeの受け取りを確認するために、エージェントBへの、メッセージ応答のクレジットされたトランザクションを開始する。元のDVM-SyncからのIDが用いられる。コアサイドエージェント1710は、メッセージ応答によって用いられるタイプにマッチングする単一クレジットをリターンする。このクレジットリターンに関連するトランザクションIDはない。
リセットの際、インタフェース上の各クレジットタイプに対するクレジットカウントは、静的インタフェース構成によって決定されるクレジットリミットタイオフ(tieoff)値にリセットされる。各クレジットタイプに対して、このリミットは、対応するトランザクションをサービスするスレーブリソースに対応する。
トランザクションは、caddress[47:0]、cmstid[11:0]、及びcid[11:0]のトランザクションプロパティに基づいてMBAプロトコルにおいて順序付けられている。オプションのcmstid信号を含まないMBAインタフェースでは、順序付け規則の目的で、全てのトランザクションに対して一定のcmstidが仮定される。caddress及びcbytecntによって決定されるように、同じバイトの1つ又は複数上で2つのトランザクションが動作する場合、トランザクションは、オーバーラップするアドレスを有すると定義される。2つのエージェント間のクレジットされた非書き込みシーケンスは、図22に示されるように順序付けされる。2つのエージェント間のクレジットされた書き込みシーケンスは、図23に示されるように順序付けされる。
複数のシーケンスが、同じMBAのペアにされたインタフェース上でインターリーブされ得る(図17)。単一シーケンスに対する順序付け規則は有効なままであり、別個のシーケンスに対するシーケンスステップは、任意の順にインターリーブされ得る。マスターが、全てがデータ転送を含む複数のトランザクションを送っている場合、マスターは、単一シーケンスの規則が順守される限り、任意の順序で、異なるトランザクション間で、TDC上でデータフェーズをインターリーブし得る。
マスターエージェントに対する順序付け規則は、次のように要約される。データ転送を含む任意のトランザクションに対して、第1のTDCDATAフェーズは、同じサイクルにおいて開始され得るが、TACに先行することはできない。データ転送における全てのデータフェーズは、アドレスに基づいて単調増加順に起こらなければならない。マスターは、任意の単一データ転送内のデータフェーズが、アドレスに基づいて単調増加順に開始される限り、トランザクション属性チャネル(TAC)上で発行されるトランザクションに対して任意の順で、トランザクションデータチャネル(TDC)データフェーズをインターリーブし得る。マスターは、応答トランザクション又は書き込み状態のいずれかが、前のcmstid/cidペアに対して受け取られるまで、同じcmstid[11:0]及びcid[11:0]の組み合わせで、同じMBAインタフェース上で複数のコマンドトランザクションを開始してはならない。
スレーブエージェントに対する順序付け規則は、次のように要約される。スレーブは、同じcmstidとオーバーラップするアドレスに対する全てのブロッキングトランザクションを、ccreditか又はcidかに関係なく、それらが受け取られた順で完了しなければならない。スレーブは、同じcmstidとオーバーラップするアドレスに対する全てのノンブロッキングトランザクションを、ccreditか又はcidかに関係なく、それらが受け取られた順で完了しなければならない。スレーブが、同じcmstidとオーバーラップするアドレスに対するノンブロッキングトランザクションを受け取った後に、ブロッキングトランザクションを受け取る場合、スレーブは、2つのトランザクションを、ccreditか又はcidに関係なく、それらが受け取られた順で完了しなければならない。ブロッキングトランザクションは、同じcmstidとオーバーラップするアドレスに対するノンブロッキングトランザクションをバイパスしてはならない。スレーブが、同じcmstidとオーバーラップするアドレスに対するブロッキングトランザクションを受け取った後に、ノンブロッキングトランザクションを受け取る場合、スレーブは、それらを受け取った順でトランザクションを完了することを必要としない。ノンブロッキングトランザクションは、同じcmstidとオーバーラップするアドレスに対するブロッキングトランザクションをバイパスすることを許可される。スレーブは、ccredit、cmstid、又はcidにかかわらず、任意の順で、非オーバーラップするアドレスを用いてトランザクションを完了し得る。
コアサイドエージェントは、メモリのシェアラブル領域に対するトランザクションに対する正確性を保証するために、下記の規則に従わなければならない。コアサイドエージェントは、ccredit、cmstid、又はcidに関係なく、オーバーラップするアドレスに対する、スヌープコマンドトランザクション及び読み出し応答トランザクションの順を維持しなければならない。
ファーサイドエージェントは、メモリのシェアラブル領域に対するトランザクションの正確性を保証するために、下記の規則に従わなければならない。ファーサイドエージェントが、コアサイドエージェントに対してスヌープコマンドトランザクションを開始し、その後、オーバーラップするアドレスを備えるブロッキングコマンドトランザクションを受け取る場合、ファーサイドエージェントは、コアサイドエージェントからスヌープ応答トランザクションを受け取り、処理するまで、ブロッキングコマンドトランザクションを処理してはならない。
マスターは、cmstid/cidペアに対して、応答トランザクション又は書き込み状態のいずれかが受け取られるまで、同じcmstid[11:0]及びcid[11:0]の組み合わせを備える同じMBAインタフェース上で複数のコマンドトランザクションを開始してはならない。
マルチコアバスアーキテクチャ(MBA)プロトコルの導入は、全てのコマンドの特徴(読み出し、書き込み、コヒーレンス、メッセージ)、並びに応答を含む全てのトランザクションタイプに対して、同じ物理チャネルを共有する新規の技術を含む。トランザクション属性チャネル(TAC)及びトランザクションデータチャネル(TDC)の2つのチャネルは、トランザクションタイプに関係なく、全てのトランザクション属性及びデータを送信するために用いられる。書き込みコマンド、読み出し応答、コヒーレンス応答のどれに対するか等、単一方向におけるデータフローに対する幅に関係なく、単一のデータバスのみが必要とされる。
図24は、図17に図示されるコアサイドエージェント1710又はファーサイドエージェント1720等の、エージェント2400のブロック図である。図24は、MBAにおける最小の信号ワイヤの使用を図示する。バックエンドプロセス2401は、エージェントに対する全ての回路及びシステムを表す。これは、内部キャッシュを備えるCPU、メモリ、制御可能な周辺機器等を含み得る。この例において、バックエンドプロセス2401は、発信トランザクション及びクレジットリターンに対して使われる、クレジットカウンタ2402にストアされたバスクレジットのトラッキング(増加及び減少)を含むバスプロトコルを扱う。
図24はまた、バックエンドプロセス2401に接続された読み出し/書き込みメモリ2403を図示する。読み出し/書き込みメモリ2403は、例示の実施形態において考慮される、制御された演算のタイプを表す。図24に図示された例において、バックエンドプロセス2401は、バストランザクションに従って、読み出し/書き込みメモリ2403から読み出し又は読み出し/書き込みメモリ2403に書き込み得る。バックエンドプロセス2401は、出力デバイスへ又は入力デバイスからなど、単一方向のデータフローを制御し得る。
バックエンドプロセス2401は、この例におけるマスターサイド2410及びスレーブサイド2420を含む上述のMBAを介して通信する。他の実現可能な構成を更に以下に説明する。
マスターサイド2410は、マスター属性チャネル2411、マスターデータチャネル2412、及びマスター書き込み応答チャネル2413を含む。エージェント2400は、バス2414を介して通信する、上述の表5に列挙されたcvalid、ccredit、cid、ctype、及びcdata等の全ての信号上で、マスター属性チャネル2411を用いる。エージェント2400は、バス2415を介して通信する、上述の表12に列挙したdvalid、did、dtype、dlast、及びddataなどの全ての信号上で、マスターデータチャネル2412を用いる。エージェント2400は、バス2416を介して通信する、上述の表15に列挙したwvalid、wid、及びwstatus等のすべての信号上で、マスター書き込み応答チャネル2413を用いる。
スレーブサイド2420は、スレーブ属性チャネル2421、スレーブデータチャネル2422、及びスレーブ書き込み応答チャネル2423を含む。エージェント2400は、バス2424を介して通信する、上述の表5に列挙したようなcreturn信号上で、スレーブ属性チャネル2421を用いる。エージェント2400は、バス2425を介して通信する、上述の表12に列挙したdvalid、did、dtype、dlast、及びddata等の信号全ての上で、スレーブデータチャネル2412を用いる。エージェント2400は、バス2426を介して通信する、上述の表15に列挙したようなwreturn信号上で、スレーブ書き込み応答チャネル2423を用いる。
図24は、マスター及びスレーブデバイスの両方として動作するために必要とされる全てのパーツを含むエージェント2400を図示する。MBAにおいて、エージェントは、しばしば、両方の役目において動作する。例えば、外部メモリエージェントと通信するエージェントは、マスターとスレーブの両方として機能する必要があり得る。マスターとして、そのようなエージェントは、読み出し又は書き込みを始めるためにクレジットを使い、読み出し又は書き込み開始アドレス、及びデータ長を供給し、トランザクションが書き込みである場合はデータを供給し、及びクレジットリターンを受け取る必要がある。スレーブとして、そのようなエージェントは、クレジットをアクセプトし、読み出しトランザクションに応答してメモリによって供給されるデータをアクセプトし、及びクレジットをリターンする必要がある。この例は、2方向のデータフローを想定している。この例は、一般的に、図24において示したパーツ全てを必要とする。
図24のパーツ全てよりも必要とするパーツが少ない他の例もある。出力デバイス等の書き込み専用周辺機器に結合されるエージェントを想定する。そのようなエージェントは、書き込みを始めるためにクレジットを使い、必要に応じて書き込み開始アドレス及びデータ長を供給し、書き込みデータを供給し、及びクレジットリターンを受け取る必要がある。また、そのようなエージェントは、書き込み応答を書き込み専用周辺機器に生成し得る。書き込み専用周辺機器はデータをリターンしないであろうし、そのため、そのようなエージェントは、バストランザクションを制御する必要もないであろうため、スレーブデバイスである必要がないであろう。そのようなエージェントは、マスター属性チャネル2411、マスターデータチャネル2412、及びマスター書き込み応答チャネル2423を必要とし得る。
入力デバイス等の読み出し専用周辺機器に結合されるエージェントの別の例を考える。そのようなエージェントは、読み出しを始めるためにクレジットを使い、クレジットリターンを受け取る必要がある。そのようなエージェントは、クレジットをアクセプトし、読み出しトランザクションに応答してメモリにより供給されるデータをアクセプトし、及びクレジットをリターンするために、スレーブとして動作する必要がある。そのようなエージェントは、マスター属性チャネル2412、スレーブ属性チャネル2421、スレーブデータチャネル2422、及びスレーブ書き込み応答チャネル2423を必要とし得る。このエージェントは、マスターデータチャネル2412又はマスター書き込み応答チャネル2413を必要としない。
他の解決策が、異なるコマンドタイプ間で幾つかの信号を共有し得る(例えば、読み出し及び書き込みが、アドレスピンを共有し得る)。典型的に、これらの他の解決策は、読み出しデータと書き込みデータとを分離する。これは、512ビット及びそれ以上などの大きなデータ幅でのワイヤ輻輳の最大の原因である。MBAプロトコルは、トランザクションタイプに関係なく、同じピンを横切って全てのトランザクションを送信し、その結果、最大のワイヤ共有と最小の物理的オーバーヘッドを達成する。
MBAプロトコルは、マスターからスレーブへトランザクションを送るためにトランザクション属性チャネル(TAC)及びトランザクションデータチャネル(TDC)の2つのチャネルしか必要としない。TACは、アドレス、メモリ属性、及びトランザクションタイプを含む、全てのトランザクション属性を送信する。TDCは、データを1つ又は複数のフェーズにおいて送信する。全てのトランザクションタイプが同じ2つのチャネルを用いるので、例示の実施形態は、全範囲の異なるトランザクションタイプを送信するために、最小数の物理的ワイヤしか必要としない。
MBAプロトコルによって提供されるチャネル共有は、結果として、大きな相互接続に対して物理的ワイヤ輻輳を有意に減少させ、複数のマスターを備えるスレーブデバイスを達成する。これは、面積及び電力を低減させ、性能を向上させ、物理的閉鎖に対する設計サイクルを短縮するという結果をもたらす。