Main Content

永続配列と dsp.Delay の RAM へのマッピング

RAM マッピングを有効にする方法

  1. HDL ワークフロー アドバイザーで [MATLAB から HDL へのワークフロー][コード生成][最適化] タブを選択します。

  2. [永続配列変数を RAM にマッピング] オプションを選択します。

  3. [RAM マッピングのしきい値] を、RAM にマップする永続配列、ユーザー定義 System object™ のプライベート プロパティまたは dsp.Delay の最小サイズ (ビット単位) に設定します。

永続配列と System object のプロパティに対する RAM マッピングの要件

次の表では、永続配列とユーザー定義 System object のプライベート プロパティに対する RAM マッピング動作の概要を説明します。

[永続配列変数を RAM にマッピング] の設定マッピングの動作

オン

RAM にマップします。制限事項は、RAM マッピングの制限を参照してください。

オフ

生成された HDL コードのレジスタにマップします。

RAM マッピングの制限

RAM マッピングを有効にした場合、次の条件がすべて満たされたときに、永続配列またはユーザー定義 System object のプライベート プロパティがブロック RAM にマップされます。

  • それぞれの読み取りまたは書き込みアクセス権限が、単一の要素のみを対象としている。たとえば、部分行列のアクセスおよび配列のコピーはできません。

  • アドレスの計算ロジックが読み取りに依存しない。たとえば、配列から読み取られたデータを使用した読み取りまたは書き込みアドレスの計算はできません。

  • 永続変数またはユーザー定義 System object のプライベート プロパティに循環依存がある場合、0 に初期化される。たとえば、2 つの永続変数 A と B がある場合、A が B に依存し、B が A に依存していれば循環依存があります。

  • アクセスが条件付きステートメント内の場合、条件付きステートメントは簡単な論理式 (&&||~) または関係演算子のみを使用している。たとえば、次のコードの r1 は RAM にマッピングされません。

    if (mod(i,2) > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

    関数を呼び出す条件などの複雑な条件は、それらを一時変数へ代入し、その一時変数を条件付きステートメント内で使用するように書き換えます。たとえば、r1 を RAM にマッピングするには、前述のコードを次のように書き換えます。

    temp = mod(i,2);
    if (temp > 0)
        a = r1(u);
    else
        r1(i) = u;
    end 

  • 永続配列またはユーザー定義 System object のプライベート プロパティの値が外部入力に依存している。

    たとえば、次のコードでは bigarrayu に依存していないため、RAM にマッピングされません。

    function z = foo(u)
    
    persistent cnt bigarray
    if isempty(cnt)
        cnt = fi(0,1,16,10,hdlfimath);
        bigarray = uint8(zeros(1024,1));
    end
    z = u + cnt;
    idx = uint8(cnt);
    temp = bigarray(idx+1);
    cnt(:) = cnt + fi(1,1,16,0,hdlfimath) + temp;
    bigarray(idx+1) = idx; 

  • RAMSizeRAMMappingThreshold の値以上である。RAMSize は、NumElements * WordLength * Complexity の積です。

    • NumElements は配列内の要素数です。

    • WordLength は、配列のデータ型を表すビット数です。

    • Complexity は、基本データ型が複素数である配列の場合 2、それ以外では 1 です。

  • RAM にマッピングする永続変数へのアクセスが、ループを展開しない限り、for ループなどのループ内に存在しない。詳細については、coder.unroll を参照してください。

  • RAM にマッピングする永続変数へのアクセスが、入れ子にされた if ステートメントや入れ子にされた switch ステートメントなどの入れ子にされた条件付きステートメント内に存在しない。

上記の条件のいずれかが満たされていない場合、永続配列またはユーザー定義 System object のプライベート プロパティは、HDL コード内のレジスタにマップされます。

dsp.Delay System Objects に対する RAM マッピングの要件

次の表は、dsp.Delay System object のマッピングの動作をまとめています。

[永続配列変数を RAM にマッピング] オプションマッピングの動作

オン

次の条件がすべて真であれば、dsp.Delay System object はブロック RAM にマッピングされます。

  • Length プロパティが 4 より大きい。

  • InitialConditions プロパティが 0。

  • 遅延入力データ型が次のいずれかである。

    • 浮動小数点データ型ではない実数スカラー。

    • 浮動小数点ではない実数部と虚数部をもつ複素数スカラー。

    • 各要素が浮動小数点ではない実数スカラーまたは複素数スカラーであるベクトル。

  • RAMSize[RAM マッピングのしきい値] の値以上である。

    • RAMSize は、Length * InputWordLength の積です。

    • InputWordLength は、入力データ型を表すビット数です。

これらの条件のいずれかが偽である場合は、dsp.Delay System object は HDL コードでレジスタにマッピングされます。

オフ

dsp.Delay System object は生成される HDL コードでレジスタにマッピングされます。