ストリーミング
ストリーミングとは
"ストリーミング" とは、HDL Coder™ で行われる面積の最適化の 1 つです。ベクトル データ パスがスカラー データ パス (または、小さいサイズの複数のベクトル データ パス) に変換されます。既定では、HDL Coder によってベクトル計算のために "完全なパラレル" の実装が生成されます。たとえば、コード ジェネレーターはベクトル和を複数の加算器として実現し、単一のクロック サイクル内で並列実行します。この方法では、多数のハードウェア リソースが必要とされる可能性があります。ストリーミングを使用すれば、データを少数の共有ハードウェア リソースに多重化することで、生成されるコードでチップ面積を節約できます。
サブシステムの "ストリーミング係数" を指定することで、このサブシステム内でリソースを共有する度合いを制御できます。ストリーミング係数 (Nst
) とサブシステムのデータ パスの幅 (Vdim
) の比が 1:1 の場合、HDL Coder によって完全なスカラーのデータ パスが実装されます。ストリーミング係数が 0 (既定値) の場合は、ベクトル計算に対して完全に並列な実装 (共有なし) が生成されます。
サブシステムの最大のベクトル次元とサンプルレートが分かっている場合は、サブシステムで使用可能なストリーミング係数と結果のサンプルレートを計算できます。ただし、要求したストリーミング係数が数学的に可能であっても、サブシステムではストリーミングに関する他の条件も満たさなければなりません。
既定では、ストリーミングの最適化を適用すると、元のレイテンシを維持したまま面積を最適化した実装を生成するために、HDL Coder によって共有ハードウェア リソースがオーバーサンプリングされます。ストリーミングされたデータ パスが基本レートよりも遅いレートで動作している場合、コード ジェネレーターによってデータ パスが基本レートで実装されます。またオーバーサンプリング比はターゲット ハードウェアのクロック制約を満たすように制限できます。詳細は、クロックレート パイプラインを参照してください。
検証モデルを生成して、最適化した DUT の出力が元の DUT で生成される結果に対してビットトゥルーであるかどうかの検証に使用できます。検証モデルの詳細は、生成されたモデルと検証モデルを参照してください。
ストリーミングの指定
UI からストリーミングを指定するには、以下を行います。
[アプリ] タブで、[HDL Coder] を選択します。[HDL コード] タブが表示されます。サブシステム、モデル参照、または MATLAB Function ブロックを選択して、[HDL ブロック プロパティ] をクリックします。[StreamingFactor] フィールドに、ストリーミングするリソースの数を入力します。
メモ
MATLAB Function ブロックの場合、[StreamingFactor] を指定するには、[HDL ブロック プロパティ] ダイアログ ボックスで、ブロックの HDL アーキテクチャを
MATLAB Datapath
に設定しなければなりません。サブシステム、モデル参照、または MATLAB Function ブロックを右クリックして、[HDL コード] 、 [HDL ブロック プロパティ] を選択します。[StreamingFactor] フィールドに、ストリーミングするリソースの数を入力します。
コマンド ラインでは、次の例のように、関数 hdlset_param
を使用して StreamingFactor
を設定できます。
modelname = 'sfir_fixed' dut = 'sfir_fixed/symmetric_fir'; open_system(modelname) hdlset_param(dut,'StreamingFactor', 4);
ストリーミング係数とサンプル時間の決定方法
特定のサブシステムでストリーミング係数が Nst
、最大ベクトル次元が Vdim
の場合、結果として生成される、ストリーミングされるサブシステムのデータ パスは次のいずれかになります。
Vdim
>Nst
の場合は、幅Vstream
= (Vdim
/
Nst
)。Nst
>Vdim
の場合は、幅Vstream
= (Nst
/Vdim
)。スカラー。
元のデータ パスが、基本サンプル時間と等しいサンプル時間 S
で動作していた場合、ストリーミングされたサブシステムは次のサンプル時間で動作します。
Vdim
>Nst
の場合は、S / Nst
。Nst
>Vdim
の場合は、S / Vdim
。
元のデータ パスが基本サンプル時間 Sbase
より長いサンプル時間 S
で動作していた場合、ストリーミングされたサブシステムはサンプル時間 Sbase
/ Oversampling
で動作します。ストリーミングされたサンプル時間は、元のサンプル時間 S
とは無関係です。
ストリーミングをサポートするブロックの決定
HDL Coder は、ストリーミング用のブロックを多数サポートしています。ストリーミングに対応していないブロックを含むサブシステムのストリーミング コードの生成を開始すると、これらのブロックは回避され、それらのブロックのストリーミングを行わないコードが生成されます。
HDL Coder でモデル参照にストリーミングによる最適化を適用することはできません。
ストリーミング サブシステムの要件
ストリーミングを適用する前に、ストリームされるサブシステムに対して一連のチェックが HDL Coder により行われます。以下の場合に、サブシステムはストリーミングできます。
ベクトルの幅
Vdim
がストリーミング係数Nst
で割り切れるか、ストリーミング係数がベクトルの幅で割り切れる。サブシステムへのすべての入力が、同じベクトル サイズを持つ。入力が異なるベクトル サイズを持つ場合、サブシステム階層をフラット化することで、サブシステムをストリーミングできる。階層をフラット化するときは、ストリーミング最適化が異なるベクトル サイズを持つ領域を特定し、その領域についてストリーミング グループを作成する。これらのグループは、ベクトル サイズから推測された、異なるストリーミング係数を持つ。
ストリーミング レポート
ストリーミング情報をレポートで見るには、各サブシステムまたはモデル参照のコードを生成する前に、最適化レポートを有効にします。このレポートを有効にするには、[HDL コード] タブで、[レポート オプション] を選択して、[最適化レポートを生成] を選択します。
[ストリーミングおよび共有] セクションで最適化レポートを生成すると、ストリーミング最適化の効果が分かります。ストリーミングに失敗した場合、診断メッセージと、ストリーミングが失敗する原因となった問題のブロックがレポートに示されます。要求したストリーミング係数を実装できないときは、HDL Coder はストリーミングを行わないコードを生成します。
ストリーミングに成功した場合、推測された [StreamingFactor] と、以下を指定する表がレポートに示されます。
グループ: ストリーミング グループに属する Simulink® ブロックのグループの固有のグループ ID。
推定されるストリーミング係数: [HDL ブロック プロパティ] で指定する [ストリーミング係数] を使用して HDL Coder によって推定されるストリーミング係数。
Simulink モデルおよび生成されたモデル内のストリーミング グループに属するブロックのグループを確認するには、レポートで [ストリーミング グループと診断を強調表示] のリンクをクリックします。