永続配列と 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 タイプ | ユーザー指定 | デュアル ポート | デュアル ポート |