FPGA開発日記

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

Western Digitalが拡充するOff-Chip向けのTileLink仕様"OmniXtend"

Western DigitalがTileLinkをオフチップ間通信に使用するための仕様"OmniXtend"を発表している。 少し資料を読んでみることにした。

github.com

TileLinkはチップ内のバスプロトコルとして定義されているけれども、このプロトコルを崩すことなくOff-Chip通信に使用することを考える。

Chip-to-Chipの具体的な対象リンクとしてはいくつか考えられるが、

  • TileLink Parallel Link : FPGAの拡張ポートなど。32-bitの双方向GPIOなどを考える。
  • TileLink Ethernet Link : TileLinkのプロトコルEthernetに変換することを考える。この時、シリアライゼーション、デシリアライゼーションについて考える必要がある。

OmniXtendのキモは、複数のチャネルから構成されるTileLinkのプロトコルをどのようにしてEthernetなどの物理レイヤにマッピングするか、というところである。このため、OmniXtendにはTileLinkのメッセージをエンコードする仕様が含まれている。 ここでは、32ビットのサイズにシリアライズ・デシリアライズすることを考える。

TileLinkのメッセージエンコーディングの方法としては、TileLinkのチャネルは5つあるものを以下のようにエンコードする。これは32ビットにエンコードした場合のヘッダである。

  Position Width   Name        Description
    31:16   16     Source      TileLink transaction ID
    15:13    3     Domain      Ordering domain ID
    12: 9    4     Size        Logarithm of number of bytes in transaction
     8: 6    3     Param       Parameter
     5: 3    3     Opcode      Operation code, identifies type of message
     2: 0    3     Format      Channel number 0-5 (A-F)

そして、"Format"フィールドの構成は以下の通り。どのチャネルの情報を転送するかをヘッダのこの位置で指定する。

    Format  Message Format
        0   Channel A
        1   Channel B
        2   Channel C
        3   Channel D
        4   Channel E
        5   Channel F (Credits)
        6   Reserved (User)
        7   Reserved (Escape)

そして、Channel-AからChannel-Eまでエンコーディングの方法が決められており、チャネルのコマンドに応じて転送するビットフィールドや転送する順番が決められている。

フローコントロールについては、TileLinkのChannel-A - Channel-Eに追加してChannel-Fを追加し、フローコントロール専用の信号を転送している。以下のフォーマットでCreditが送信される。

    Channel F Single-Parcel Header Format

  Position Width   Name        Description
    31:27    5     ECredit     Credit for E channel
    26:22    5     DCredit     Credit for D channel
    21:17    5     CCredit     Credit for C channel
    16:12    5     BCredit     Credit for B channel
    11: 7    5     ACredit     Credit for A channel
     6: 3    4     Zero        0
     2: 0    3     Format=5    Channel number 0-5 (A-F)