永続配列と dsp.Delay オブジェクトの RAM へのマッピング
永続配列と dsp.Delay オブジェクトをハードウェアの RAM にマッピングして、ターゲット デバイス上の使用面積を削減します。一般的な RAM マッピングの詳細については、Apply RAM Mapping to Optimize Areaを参照してください。
RAM マッピングの有効化
HDL ワークフロー アドバイザーの左側のペインで [HDL ワークフロー アドバイザー] 、 [HDL コード生成] をクリックします。その後、[最適化] タブをクリックします。
[永続配列変数を RAM にマッピング] を選択します。
[RAM マッピングのしきい値] を次のいずれかに設定します。
RAM にマッピングする永続配列、ユーザー定義 System object™ のプライベート プロパティ、または
dsp.Delayオブジェクトの最小 RAM サイズを指定する整数。RAM にマッピングするデータの形状を定義する 2 つのしきい値を指定する
MxNの形式の string。ここで、Mは遅延の長さ (遅延の場合) または配列サイズ (永続配列変数の場合)、Nはデータ型の語長またはビット幅です。両方のしきい値を設定すると、ターゲット ハードウェアのブロック RAM に効率的にマッピングされない遅延または永続配列が RAM マッピングの対象から除外されます。

永続配列と 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 のプライベート プロパティの値が外部入力に依存している。
たとえば、次のコードでは
bigarrayがuに依存していないため、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;RAM サイズが
RAMMappingThresholdの値以上である。RAM サイズはArray Size * Word Length * Complexityの積です。ここで、次のようになります。Array Sizeは配列内の要素数です。Word Lengthは、配列のデータ型を表すビット数です。Complexityは、複素数データ型の場合は 2、実数データ型の場合は 1 です。
RAM にマッピングする永続変数へのアクセスが、ループを展開しない限り、
forループなどのループ内にない。詳細については、coder.unrollを参照してください。RAM にマッピングする永続変数へのアクセスが、入れ子にされた
ifステートメントや入れ子にされたswitchステートメントなどの入れ子にされた条件付きステートメント内にない。
上記の条件のいずれかが満たされていない場合、永続配列またはユーザー定義 System object のプライベート プロパティは、HDL コード内のレジスタにマップされます。
dsp.Delay System Objects に対する RAM マッピングの要件
次の表は、dsp.Delay System object の RAM マッピングの動作について説明したものです。
| [永続配列変数を RAM にマッピング] オプション | マッピングの動作 |
|---|---|
オン | 次の条件がすべて真であれば、
これらの条件のいずれかが偽である場合は、 |
オフ |
|
RAM マッピングの比較
hdl.RAM オブジェクト、dsp.Delay オブジェクト、永続配列変数およびユーザー定義 System object のプライベート プロパティは RAM にマップできますが、異なる属性をもちます。次の表は、それらの違いをまとめたものです。
| 属性 | hdl.RAM オブジェクト | dsp.Delay オブジェクト | 永続配列および ユーザー定義 System object のプロパティ |
|---|---|---|---|
| RAM マッピングの条件 | 無条件で RAM にマッピング | 特定の条件で HDL コードで RAM にマッピング。dsp.Delay System Objects に対する RAM マッピングの要件を参照してください。 | 特定の条件で HDL コードで RAM にマッピング。永続配列と System object のプロパティに対する RAM マッピングの要件を参照してください。 |
| アドレスの生成と端子のマッピング | ユーザー指定 | 自動 | 自動 |
| アクセスのスケジューリング | ユーザー指定 | 自動的に推定 | 自動的に推定 |
| オーバークロック | なし | なし | アクセス スケジュールで必要な場合はローカル マルチレート。 |
| MATLAB® でのシミュレーションに対するレイテンシ | 0 | 0 | ローカル マルチレートで 2 サイクル、それ以外は 1 サイクル |
| RAM タイプ | ユーザー指定 | デュアル ポート | デュアル ポート |