パケットの最初の 32 ビット ワードはパケット ヘッダーで、次の表に示すビット フィールドで構成されています。
ビット | フィールド |
---|---|
4 ~ 0 | パケット ID |
11 ~ 5 |
7'b0000000
|
14 ~ 12 | パケット タイプ |
15 |
1'b0
|
20 ~ 16 | ソース行 |
27 ~ 21 | ソース列 |
30 ~ 28 |
3'b000
|
31 | ビット [30:0] の奇数パリティ |
パケット ID は、配線要件に基づいてコンパイラにより割り当てられます。パケット タイプには、任意の 3 ビット パターンを使用でき、パケットのタイプを特定するために挿入できます。ソース行および列は、パケットの送信元の AI エンジン タイル座標です。プログラマブル ロジック (PL) から送信されるパケットのソース行および列は、-1、-1 です。
各パケットの先頭に適切なパケット ヘッダーを作成して送信するのは、ユーザーの責任です。受信側では、データを読み出す前に、パケット ヘッダーを受信してデコードする必要があります。
AI エンジン カーネルのパケット ヘッダーをアセンブルまたは逆アセンブルするには、次の操作を使用できます。
void writeHeader(output_pktstream *str, unsigned int pcktType, unsigned int ID);
void writeHeader(output_pktstream *str, unsigned int pcktType, unsigned int ID, bool tlast);
uint32 getPacketid(input_pktstream *w, int index);
uint32 getPacketid(output_pktstream *w, int index);
writeHeader
API は、パケット ヘッダーを指定のパケット ID およびパケット タイプと共にアセンブルします。ソース行および列は、この API が実行される AI エンジン タイルの座標を使用して自動的に挿入されます。
getPacketid
API は、コンパイラで割り当てられたパケット ID を、入力または出力パケット ストリーム データ構造でクエリします。index 引数は、グラフ仕様の分割または結合分岐エッジを示します。
重要:
writeHeader()
および getPacketid()
API は、PL カーネルではサポートされません。重要:
generateHeader
API は廃止予定で、writeHeader
に置き換えられています。詳細は、明示的パケット スイッチング を参照してください。