インテルのみ表示可能 — GUID: vrg1511996057567
Ixiasoft
3.1.4. Avalon® Streaming インターフェイス
Avalon® Streaming (Avalon ST) インターフェイスでは、データの単方向フローをサポートします。また、通常使用されるのは、高帯域幅および低レイテンシー・データを駆動するコンポーネントです。
ベクトル加算コンポーネント例のコーディングは、 Avalon® STインターフェイスを使用し、次のように行います。
struct int_v8 { int data[8]; }; component void vector_add( ihc::stream_in<int_v8>& a, ihc::stream_in<int_v8>& b, ihc::stream_out<int_v8>& c, int N) { for (int j = 0; j < (N/8); ++j) { int_v8 av = a.read(); int_v8 bv = b.read(); int_v8 cv; #pragma unroll 8 for (int i = 0; i < 8; ++i) { cv.data[i] = av.data[i] + bv.data[i]; } c.write(cv); } }
Avalon® STインターフェイスには、データバス、およびハンドシェイクのためのready信号とbusy信号があります。struct は、8つの整数をパックするように生成され、一度に8演算を並列処理して、他のインターフェイスの例と比較できます。同様に、ループカウントは8で除算されます。
次の図で示すGraph ViewerのFunction Viewは、この例をコンパイルしたときに生成されるものです。
図 4. Avalon® STインターフェイスでの vector_add コンポーネントのGraph Viewer Function View
他のバージョンのコンポーネント・サンプルとの主な違いは、メモリーがないことです。

ストリーミング・インターフェイスは、アップストリーム・ソースおよびダウンストリーム出力からストール可能です。インターフェイスがストール可能なため、ループの開始間隔 (II) の値は約1 (正確に1ではない ) です。コンポーネントで、アップストリームからのバブル (データフロー内のギャップ)またはダウンストリームからのstall信号の受け取りがない場合 、コンポーネントでは望ましいII = 1を達成します。
ストリーム・インターフェイスがストールしないことが分かっている場合は、このコンポーネントをさらに最適化することができます。このためには、 usesReady および usesValid ストリーム・パラメーターを活用します。
このコンポーネントのコンパイルは、 インテル® Quartus® Primeのコンパイルフローを使用して インテル® Arria® 10 デバイスをターゲットとする場合、その結果は次のQoRメトリックになります。
vector_add コンポーネントを Avalon® STインターフェイスに移動すると、ALM使用量、RAM使用量、およびコンポーネント・レイテンシーがさらに改善されます。コンポーネントIIが最適な状態になるのは、インターフェイスからのストールがない場合です。
QoR メトリック | ポインター | Avalon® MMマスター | Avalon® MMスレーブ | Avalon® ST |
---|---|---|---|---|
ALM | 15593.5 | 643 | 490.5 | 314.5 |
DSP | 0 | 0 | 0 | 0 |
RAM | 30 | 0 | 48 | 0 |
fMAX (MHz)2 | 298.6 | 472.37 | 498.26 | 389.71 |
レイテンシー (サイクル) | 24071 | 142 | 139 | 134 |
開始間隔 (II) (サイクル) | ~508 | 1 | 1 | 1 |
1QoRメトリックの計算に使用されたコンパイルフローでは、インテル Quartus Prime プロ・エディションのバージョン17.1を使用しています。 |
2fmax の測定値は1シードから計算しています。 |