Main Content

MATLAB 式のパイプライン

coder.hdl.pipeline プラグマを使用して、MATLAB® 式用に生成された HDL コード内のパイプライン レジスタの配置と数を指定できます。

パイプライン レジスタを挿入して分散型パイプラン方式を有効にした場合、HDL Coder™ は自動的にパイプライン レジスタを移動してクリティカル パスを分割します。

MATLAB 式にパイプラインを使用する方法

MATLAB コード内の式の出力にパイプライン レジスタを挿入するには、coder.hdl.pipeline プラグマに式を配置します。レジスタの数を指定します。

パイプライン レジスタは、次のようにして生成された HDL コードに挿入できます。

  • 代入ステートメントの右側全体の出力。

    次のコードは、3 つのパイプライン レジスタを MATLAB 式 a + b * c の出力に挿入します。

        y = coder.hdl.pipeline(a + b * c, 3);
    
  • より長い MATLAB 式内の中間段階。

    次のコードは、より長い式 a + b * c 内で b * c の計算後に 5 つのパイプライン レジスタを挿入します。

        y = a + coder.hdl.pipeline(b * c, 5);
    
  • 複数のプラグマのインスタンスを入れ子にする。

    次のコードは、b * c の計算後に 5 つのパイプライン レジスタを挿入し、式 a + b * c 全体の出力に 2 つのパイプライン レジスタを挿入します。

        y = coder.hdl.pipeline(a + coder.hdl.pipeline(b * c, 5),2);
    

あるいは、複数のパイプライン レジスタではなく 1 つのパイプライン レジスタを挿入する場合は、プラグマ内の 2 番目の引数を省略できます。

y = coder.hdl.pipeline(a + b * c);
y = a + coder.hdl.pipeline(b * c);
y = coder.hdl.pipeline(a + coder.hdl.pipeline(b * c));

MATLAB 式におけるパイプライン使用の制限

メモ

MATLAB Function ブロック内の MATLAB コードを使用して MATLAB Datapath アーキテクチャを選択する場合、これらの制限は適用されません。

式の変数のいずれかが次である場合は、HDL Coder では MATLAB 式の出力にパイプライン レジスタを挿入することはできません。

  • ループ内にある。

  • 状態レジスタや RAM など、状態要素にマッピングする永続変数。

  • 関数の出力。たとえば、次のコードでは、y が含まれる式にパイプライン レジスタを追加することはできません。

    function [y] = myfun(x)
    y = x + 5;
    end

  • データ フィードバック ループの内部に存在する。たとえば、次のコードでは、変数 t または pvar が含まれる式をパイプライン化することはできません。

    persistent pvar;
    t = u + pvar;
    pvar = t + v;

coder.hdl.pipeline を使用して、単一の変数またはその他の NOP 式にパイプライン レジスタを挿入することはできません。パイプライン レジスタを関数の入力変数に挿入する方法の詳細については、端子レジスタを参照してください。

参考

関連するトピック