pktmerge
と pktsplit
を接続することで、複数のストリーム間で配線を共有させることができます。pktsplit
に接続された pktmerge
を介してバッファーが転送される場合、各 pktmerge.in[i]
は対応する pktsplit.out[i]
に配線されます。pktmerge
の入次数は pktsplit
の出次数と等しくなければなりません。グラフ コードは次のとおりです。for (int i=0; i<WAYS; i++) {
connect<>(plioIn[i].out[0], kOut[i].in[0]);
connect<>(kOut[i].out[0], merge.in[i]);
connect<>(split.out[i], kIn[i].in[0]);
connect<>(kIn[i].out[0], plioOut[i].in[0]);
}
connect<> (merge.out[0], split.in[0]);
グラフは次のように表示されます。図 1. pktmerge と pktsplit 間のグラフ表示
パケット分割および結合のサイズ
現在のところ、最大で 32 のストリームのパケット スイッチングがサポートされています。最大 32 対 1 の pktmerge
および 1 対 32 の pktsplit
がサポートされています。大規模な fanout
/fanin
(16/32 ストリーム) でパケット スイッチングを使用すると、リソースの面でコストがかかり、デザインでこれらを使用する場合は注意が必要です。
推奨: 不必要にパケットを分割し、その直後に再結合することはお勧めしません。これにより、配線ソリューションの複雑性が増すことになります。
パケット分割および結合のブロードキャスト
ストリームが
pktmerge
から pktsplit
を通過するとき、pktsplit
からのブロードキャストがサポートされます。たとえば、pktmerge.in[i]
は、対応する複数のデスティネーションにブロードキャストされ、そこから pktsplit.out[i]
に接続されます。次に、merge.in[WAYS-1]
が split.out[WAYS-1]
および split.out[WAYS]
にブロードキャストされるコード例を示します。for (int i=0; i<WAYS; i++) {
connect<>(plioIn[i].out[0], kOut[i].in[0]);
connect<>(kOut[i].out[0], merge.in[i]);
connect<>(split.out[i], kIn[i].in[0]);
connect<>(kIn[i].out[0], plioOut[i].in[0]);
}
connect<>(split.out[WAYS-1], kIn[WAYS].in[0]);
connect<>(kIn[WAYS].out[0],plioOut[WAYS].in[0]);
connect<> (merge.out[0], split.in[0]);
グラフは次のように表示されます。
図 2. ブロードキャストを使用する pktmerge と pktsplit 間のグラフ表示