永続変数と永続配列の RAM へのマッピング
永続変数を使用してレジスタをモデル化し、永続配列変数を使用して RAM をモデル化できます。
永続変数の RAM へのマッピング
永続変数を使用してレジスタをモデル化できます。たとえば、MATLAB® アルゴリズムの複数回の呼び出しの間で状態を保持するには永続変数を使用します。
永続変数を使用する前に、そのサイズと型を指定するステートメントで初期化しなければなりません。永続変数の初期化には、定数値と変数のいずれかを使用できます。以下に例を示します。
% Initialize with a constant persistent p; if isempty(p) p = fi(0,0,8,0); end
% Initialize with a variable initval = fi(0,0,8,0); persistent p; if isempty(p) p = initval; end
定数として評価される論理式を使用して、永続変数が初期化済みであるかどうかをテストします。論理式を使用すると、テスト用に生成された HDL コードおよび高位合成 (HLS) コードがリセット処理の一環として 1 回だけ実行されるようになります。
1 つの論理式で複数の変数を初期化することもできます。以下に例を示します。
% Initialize with variables initval1 = fi(0,0,8,0); initval2 = fi(0,0,7,0); persistent p; if isempty(p) x = initval1; y = initval2; end
メモ
永続変数を初期化しないと、生成コードに余分なセンチネル変数が追加されることがあります。これらのセンチネル変数により、ハードウェアの効率性が低下する場合があります。
永続配列の RAM へのマッピング
生成される HLS コードで永続的な MATLAB 配列変数を RAM にマッピングするには、RAM マッピング最適化を使用します。この最適化を行わないと、配列変数はコード ジェネレーターでレジスタにマッピングされます。RAM マッピングは面積の最適化の 1 つで、ターゲット ハードウェアで設計が占める面積を減らします。
HDL コード生成のための永続配列変数の RAM へのマッピングについては、永続配列と dsp.Delay オブジェクトの RAM へのマッピングを参照してください。
RAM マッピングの有効化
HDL ワークフロー アドバイザーで [HLS コード生成] タスクを選択して、[最適化] タブをクリックします。
[永続配列変数を RAM にマッピング] を選択します。
[RAM マッピングのしきい値] を RAM にマッピングする最も小さい永続配列のサイズ (ビット数) に設定します。
次の表に、[永続配列変数を RAM にマッピング] パラメーターを使用する場合について、永続配列に対する RAM マッピングの動作を示します。
パラメーター設定 | マッピングの動作 |
---|---|
オン | 生成される HLS コードで RAM にマッピングされます。 |
オフ | 生成される HLS コードでレジスタにマッピングされます。 |
制限と考慮事項
サイズ (ビット数) が [RAM マッピングのしきい値] 以上である大きな永続配列は RAM にマッピングされます。このサイズ (ビット数) は方程式
NumElements
*WordLength
で判定されます。ここで次のようになります。NumElements
は配列内の要素数です。WordLength
は、配列のデータ型を表すビット数です。
HLS コード生成中に生成される
ml.tcl
メタデータ ファイルに RAM 変数のリストが格納されています。このメタデータ ファイルがプロジェクト作成時に Stratus HLS ツールで読み取られ、それらの変数が RAM にマッピングされます。[ブロック RAM を初期化] をオフにすると、初期値がゼロである RAM 変数は
initialize_ram_vars()
メソッドの内部で初期化されません。RAM 変数の初期値が非ゼロであれば、それらの RAM 変数はいずれも [ブロック RAM を初期化] の値に関係なく
initialize_ram_vars()
メソッドの内部で初期化されます。合成ツールを
[Xilinx Vitis HLS]
に設定した場合は、[永続配列変数を RAM にマッピング] の値および関連設定の値がコード ジェネレーターで無視されます。生成される HLS コード内の配列に応じて、合成時に適切なメモリ タイプがツールで自動的に選択されます。