FPGA開発日記

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

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

developer.arm.com

developer.arm.com

プロトコル層のトランザクションの種類

プロトコル層のトランザクションは以下のような種類が定義されている。

  • 読み込み要求
    • ReadNoSnp, ReadNoSnpSep
    • ReadOnce.
    • ReadOnceCleanInvalid.
    • ReadOnceMakeInvalid.
    • ReadClean.
    • ReadNotSharedDirty.
    • ReadShared.
    • ReadUnique.
    • ReadPreferUnique.
    • MakeReadUnique.
  • データレス
    • CleanUnique.
    • MakeUnique.
    • Evict.
    • StashOnceUnique, StashOnceSepUnique.
    • StashOnceShared, StashOnceSepShared.
    • CleanShared.
    • CleanSharedPersist.
    • CleanSharedPersistSep.
    • CleanInvalid.
    • MakeInvalid.
  • 書き込み
    • WriteNoSnpPtl, WriteNoSnpFull, WriteNoSnpZero.
    • WriteUniquePtl, WriteUniqueFull, WriteUniqueZero.
    • WriteUniquePtlStash, WriteUniqueFullStash.
    • WriteBackPtl, WriteBackFull.
    • WriteCleanFull.
    • WriteEvictFull, WriteEvictOrEvict.
  • Combined Write
    • WriteNoSnpPtlCleanSh, WriteNoSnpPtlCleanInv, WriteNoSnpPtlCleanShPerSep.
    • WriteNoSnpFullCleanSh, WriteNoSnpFullCleanInv, WriteNoSnpFullCleanShPerSep.
    • WriteUniquePtlCleanSh, WriteUniquePtlCleanShPerSep.
    • WriteUniqueFullCleanSh, WriteUniqueFullCleanShPerSep.
    • WriteBackFullCleanSh, WriteBackFullCleanInv, WriteBackFullCleanShPerSep.
    • WriteCleanFullCleanSh, WriteCleanFullCleanShPerSep.
  • アトミック
    • AtomicStore.
    • AtomicLoad.
    • AtomicSwap.
    • AtomicCompare. Other
    • DVMOp.
    • PrefetchTgt.
    • PCrdReturn.
  • スヌープ
    • SnpOnceFwd.
    • SnpOnce.
    • SnpStashUnique.
    • SnpStashShared.
    • SnpCleanFwd.
    • SnpClean.
    • SnpNotSharedDirtyFwd.
    • SnpNotSharedDirty.
    • SnpSharedFwd.
    • SnpShared.
    • SnpUniqueFwd.
    • SnpUnique.
    • SnpPreferUniqueFwd.
    • SnpPreferUnique.
    • SnpUniqueStash.
    • SnpCleanShared.
    • SnpCleanInvalid.
    • SnpMakeInvalid.
    • SnpMakeInvalidStash.
    • SnpQuery.
    • SnpDVMOp.

RNがHNに対してトランザクションを発行し、それをSNに対して転送するという連携になっていることが分かる。では、これらがどのように関連付けられているかを確認していく。

例えば以下の図では、RN-Fが読み込みリクエストを送信し、ICNがそれを受け取る。ICNはしかるべきルーティングを行った後にSlaveに対してリクエストを転送する。Slaveはデータの読み込み処理を行った後レスポンスを返し、ICNはRN-Fにそれを転送するという流れになる。

CHIプロトコルでは、システム内の各ノードIDが必要となる。RNおよびHNはアドレスとターゲットのノードを関連付けるためのSAM(System Address Map)が存在している。RNのSAMは物理アドレスをHNのIDに変換し、HNのSAMは物理アドレスをSNのIDに変換する機能を持っている。

f:id:msyksphinz:20210811003756p:plain

  1. RN0はRN0内部のSAMを使用してHN0のターゲットIDに向けてリクエストを送信する
    • インターコネクトはノードIDを再マップしない
  2. HN0は内部のSAMを探索しターゲットとなるSNを決定する
  3. SN0はリクエストを受け取り、データレスポンスを送信する
    • データレスポンスパケットはReturnNIDリクエストから得られるTgtIDを含んでいる
  4. RN0はSN0からデータレスポンスを受け取る
  5. 必要であればRN0はHN0のTgtIDの付いたCompAckを明史、パケットのトランザクションを終了する

これらの転送を行うためのノード間の転送については、チャネルを用いて行われる。

f:id:msyksphinz:20210811003808p:plain