FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AMBA5 の CHI (Coherence Hub Interface)についての調査 (3. トランザクション例)

developer.arm.com

developer.arm.com

いくつかの例に分けてCHIのトランザクションの例を見ていく。

まず、トランザクションには2種類ある。

  • DMT : Direct Memory Transfer
    • スレーブノードはリクエストノードに対して直接データを転送することを許す
  • DCT : Direct Cache Transfer
    • 他のRN-Fノードはリクエストノードに対して直接データを転送することを許す
  • DWT : Direct Write-data Transfer
    • RNノードがスレーブノードに直接データを転送することを許可する

DMTの場合の転送例を見てみる。

  1. REQチャネルに対して以下のSnoopable Readリクエストを送信する
    • ReadClean
    • ReadNotSharedDirty
    • ReadShared
    • ReadUnique
    • ReadPreferUnique
    • MakeReadUnique
  2. ICNはREQチャネルを通じてReadNoSnpリクエストをSNに対して送信する
  3. SNは読み込みデータと、該当する転送レスポンスレスポンスを、CompDataオペコードを使用してリクエスタにRDATチャネルを通じて返答する
  4. トランザクションリクエストにExpCompAckビットが設定されているため、RequestはAcknowledegementを返さなrければならならい。CompAckオペコードを使用してトランザクションが完了したことを通知しなければならない。
f:id:msyksphinz:20210812003022p:plain

DMTでのトランザクションには以下の制限が存在する

  • リクエスターはTxnIDを、すべてのTxnIDが返ってきた後にのみ再利用することができる
  • HomeノードはDMTリクエストが、SN-Fに送信する際に以下のことが適用されていることを確認できるまで待たなければならない。
    • スヌープリクエストを送信する必要がない
    • スヌープリクエストが送信されると、キャッシュラインのDirtyコピーが含まれたスヌープレスポンスが返答される
    • スヌープレスポンスが一部Dirtyなキャッシュラインのコピーを返した場合、DMTは一部分のデータがSN-Fに転送され、その書き込みリクエストが完了する。
    • スヌープがForwardingタイプのスヌープリクエストであった場合、キャッシュラインがリクエスターにフォワードされない。

次に、DCTの場合の転送方法を見てみる。

  1. REQチャネルに対して以下のSnoopable Readリクエストを送信する
    • ReadClean
    • ReadNotSharedDirty
    • ReadShared
    • ReadUnique
    • ReadPreferUnique
    • MakeReadUnique
  2. ICNはSnp[*]FwdリクエストをSNPチャネルを通じてRN-Fノードに対して送信する
  3. RN-FはDATチャネルを通じて関連するトランザクションレスポンスをCompDataオペコードとともにRNに対して送信する。
  4. RN-FはSnpRespFwdedレスポンスをICNに対してSRSPチャネルを通じて送信し、読み込みデータがリクエスタに送信されたことを通知する。
  5. トランザクションリクエストExpCompAckビットが設定されているため、リクエスタはCompAckオペコードを用いてSRSPチャネル上でAcknowlegdementを送信する必要がある。
f:id:msyksphinz:20210812003039p:plain

DMTでもDCTでもない場合の転送方法は以下の通りとなる。

  1. REQチャネルに対して以下のSnoopable Readリクエストを送信する
    • ReadClean
    • ReadNotSharedDirty
    • ReadShared
    • ReadUnique
    • ReadPreferUnique
    • MakeReadUnique
  2. Completerは読み込みデータと関連するトランザクションリクエストをCompDataオペコードとともにRDATチャネルを通じて転送する。
  3. Acknowlegdementを転送する。
f:id:msyksphinz:20210812003106p:plain
  • ReadNoSnp : 他のマスタにスヌープが必要ない場合に使用する。データはReadNoSnpを用いてスレーブノードから転送される。
  • ReadOne, ReadOnceCleanInvalid, ReadOnceMakeInvalid : 他のマスタによりスヌーピングが必要だが、リクエスタが自身のキャッシュラインに割り当てられていない場合に使用する。