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