Cache Stashing (続き)
DataPullメカニズム
DataPull メカニズムは、Snoop レスポンスを通して Read リクエストを暗示する方法である。 DataPull は、他のスヌープには適用されず、Snoop Requestを隠すことにのみ適用される。
DataPull リクエストを受け取るRN-Fは、DataPull を使うか、別のRead Requestを送るかを選択できる。 RN-FがDataPullを要求しないことを選択した場合、RN-Fはスヌープに応答し、キャッシュ・ラインを取得するために後でRead Requestを送ることができる。
DataPull で許可されるすべてのSnoopレスポンスについては、AMBA 5 CHIアーキテクチャ仕様を参照のこと。
このセクションでは、DataPull メカニズムを利用するRF-Fが、Stashingトランザクションの一部としてデータを受け取るプロセスについて説明する。DataPull の完全なトランザクションフローは以下の通りである:
1. HN-FはStashing Snoopを発行し、Snoop FlitのDoNotDataPull フィールドを0 に設定する。 これは、RN-FのスタッシュターゲットがDataPullを要求できることを示す。
2. DoNotDataPull = 0を受信したRN-Fは、そのSnoop応答でDataPull を要求することを選択できる。 この例では、RN-FはDataPull を要求することを選択する。
3. RN-Fは、応答フリットに2つのフィールドを設定することにより、DataPullを要求する:
- DataPull フィールドは1に設定される。
- DBIDフィールドには、読み取りデータを返すために使用される
TxnIDが入力される。
4. RN-Fは読み取りデータを受信する。
5. RN-F は HN-F に CompAck メッセージを発行する。

この図では、システム例には以下が含まれる:
- リクエストを発行する1つのRN-D
- Stash TargetとしてRN-Fが1人
- HN-F
- SN-F
この例における完全なトランザクションフローは以下の通りである:
- RN-Dは
StashOnceUniqueRequestをHN-Fに発行する。StashNIDフィールドの値は、RN-F1が Stash Target であることを示す。 - HN-FはStash Requestを受け入れる。
- HN-Fは以下を発行する:
- SN-F への
ReadNoSnpRequest SnpStashUniqueSnoopをRN-F1へ
- SN-F への
- HN-FはRN-DにCompletion応答を送信する。
- RN-F1はStash Hintを受け入れる。
- RN-F1は
SnpStashUniqueにSnpResp_I_Read DataPullリクエストで応答する。SnpResp_I_Read応答は暗黙のRead Requestをシグナリングする。DBIDフィールドはトランザクションIDをYとして設定する。 - SN-F はキャッシュ・ラインを HN-F に返す。
- HN-Fはキャッシュ・ラインをRN-F1に転送する:
TxnID = Yである。DBID = Z
- RN-F1は、
TxnID = Zの完了確認応答をHN-Fに発行する。

この例では
- 1台のRN-Dノード
- 2つのRN-Fノード RN-F1とRN-F2。 RN-F2は、Stash Requestが送信されたときにキャッシュ・ラインを保持する。
- 1つのHN-Fノード
この例のトランザクションの流れは以下の通りである:
1. RN-DはWriteUniquePtlStash リクエストをHN-Fに発行する。 スタッシュターゲットはRN-F1である。
2. HN-FはStash Requestを受け入れる。
3. HN-FはDBIDResp をRN-Dに返す。
4. HN-FはRN-F2に対してSnpCleanInvalid Snoopを生成する。 これは、RN-F2がキャッシュ・ラインと、SnpUniqueStash を隠し場所ターゲットRN-F1に保持しているからである。
5. RN-F2はキャッシュ・ラインを無効にする。
6. RN-F2 は Dirty データを含む Snoop Response を HN-F に返す。
7. RN-F1 は暗黙の Read Request で Snoop Response を発行する。 DBIDフィールドは、隠しデータのTxnID をY として設定する。
8. HN-FはSnoops応答を受信する。
9. HN-FはRN-Dに完了応答を発行する
10. RN-DはStash Requestの書き込みデータをHN-Fに送る。 HN-Fは書き込みデータとSnoop応答からのデータの両方を持つ。 HN-Fはキャッシュ・ラインに新しいデータを作成する。
11. NH-Fはキャッシュ・ラインの所有権をRN-F1に送る。 応答フィールドは以下の通りである:
TxnID = YDBID = Z
12. RN-F1はCompAck レスポンスをTxnID = Zで送信する。