FPGA開発日記

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

キャッシュコヒーレンスを管理するバスプロトコルの勉強 (1. ACE / CHI / TileLinkの比較)

ACE / CHI / TileLinkの違い

  • ACEはAXI4にコヒーレンス機能を拡張した比較的シンプルなプロトコルで、小~中規模SoC向け。
  • CHIはACEの次世代規格で、大規模・高性能SoCを視野に入れ、ディレクタリベースのコヒーレンスやNoC対応などスケーラビリティや柔軟性に優れる。
  • TileLinkはRISC-Vエコシステムを中心にオープンソースで発展しているプロトコルで、フリーかつ柔軟性が高く、規模を問わず幅広く使われる。ライセンスフリーであり、カスタムSoC開発の敷居が低く、多様な設計アプローチに対応可能。

各チャネルと構成については、こっちにまとめた。

ACEについて

ACE (AXI Coherency Extensions) は、AXI4 をベースとしてマルチコア環境でのキャッシュ・コヒーレンスを実現するために追加のチャネルや信号を定義した仕様となっている。具体的には、

  1. 新たなチャネルの追加(スヌープチャネル)
    • AR/R/AW/W/Bのチャネルに加えて
    • The snoop address (AC)チャネルの追加
      • 他コアやキャッシュコントローラへの「このアドレスのキャッシュラインをどのように扱っているか確認させてほしい」といったスヌープ要求を送る。
      • CleanShared, MakeInvalidなど、相手キャッシュラインをどう扱うかを指示するコマンドを含む。
    • The snoop response (CR)チャネルの追加
      • ACチャネルでのスヌープ要求に対する応答を返す。
      • キャッシュラインの状態(Modified, Shared など)や書き戻し要否、データ返却の必要性などを伝達。
    • The snoop data (CD)チャネル
      • スヌープの結果、キャッシュから“書き戻し”が必要になった場合などに、実際の「データ」を転送する。
      • 通常の Read Data (Rチャネル) とは別扱いで、キャッシュコヒーレンス専用のデータ転送を行う。
  2. コヒーレントアクセスを示すための追加信号・トランザクション種別

    • ACEでは、単なる「リード/ライト」だけではなく、キャッシュラインの状態(Modified、Shared、Invalid など)をどう扱うか を明示するトランザクション種別が存在する。例えば、
    • ReadOnce
      • 読み出した後はキャッシュに保持しない(または保持しても他コアとの整合性を取る必要がある)
    • ReadClean
      • 読み込み時、対象ラインを他キャッシュとの共有可能状態とする
    • MakeUnique
      • 書き込みを行う前に、そのラインを自コア専用(Unique)にする
  3. バリア命令やメモリ属性の扱い

    • コヒーレンスに関連した順序制御(バリア)やメモリ属性(キャッシュ可能領域/非コヒーレント領域)を明示的に管理。

ACEが変更するチャネル信号

ACEをサポートするためには、AXIに加えて以下の信号を追加する必要がある。

  • AR Channel
    • ARSNOOP[3:0]
      • どのようなコヒーレントリードを行うかを示すフィールドとなる。
      • ARSNOOP フィールドによって、この読み取りがどのようなコヒーレント動作を伴うのか をインターコネクトや他のコアへ知らせる。
    • ARDOMAIN[1:0]
      • ARDOMAIN は、アクセス対象が属するシェアリングドメイン(Shareability Domain)を指定する フィールドとなる。
      • 「どの範囲のコア/エージェントとコヒーレンスを取るか」や「どこまで共有とみなすか」を識別するために使用する
        • Non-shareable (NSH)
          • 他コアとは共有しない領域。単一コアで使うデータならキャッシュコヒーレンスを考えなくてよい。
        • Inner Shareable (ISH)
          • いわゆる近い距離(L1/L2キャッシュ間や同一クラスター内)での共有領域とみなす。
        • Outer Shareable (OSH)
          • L3キャッシュや複数クラスター間など、やや大きい範囲での共有。
        • System Shareable (SY)
          • システム全体(すべてのコア/アクセラレータ)で共有する。
      • ARBAR[1:0]
        • ARBAR は、バリア(Barrier)属性に関するフィールドとなる。
        • AXI/ACE には、メモリアクセスの順序制御バリア命令を扱う仕組みがあり、ARBAR では「どのレベルのバリアなのか」を指定する。
  • AW Channel
    • AWSNOOP[2:0] : ARSNOOPと同一。ただしコマンドは異なる。
    • AWDOMAIN[1:0] : ARDOMAINと同一。
    • AWBAR[1:0]: ARBARと同一。
    • AWUNIQUE:
    • 「この書き込みトランザクションは“Unique”な操作である」ことを示すための信号。
    • “Unique” とは、他コア(キャッシュ)と共有せず、排他的にキャッシュラインを取得して書き込みを行う ことを意味する。
  • R Channel
    • RRESP[3:2]: Read操作に対するキャッシュのコヒーレンス状態を示したビット。RRESP[3]がIsSharedで、RRESP[2]がPassDirtyを示す。

ACE / CHI / TileLink の動作比較