Hello World
この例では、 MATLAB® コマンド シェルでコマンドを入力できる学習モードで PG API を実行します。
- 新しく学習セッションを始めるには、MATLAB コマンド コンソールで
xBlock
を実行します。 -
MATLAB コマンド コンソールに次の 3 つのコマンドを入力し、
untitled'
という名前の新しいモデルの中にSubsystem
という名前の新しいサブシステムを作成します。[a, b] = xInport('a', 'b'); s = xOutport('s'); adder = xBlock('AddSub', struct('latency', 1), {a, b}, {s});
図 1. サブシステムの例
上記のコマンドにより、Simulink Inport を 2 つ (a
および b
) 含むサブシステムが作成されます。加算ブロックのレイテンシは 1 で、Simulink Outport は s
です。この 2 つの Inport により加算ブロックが実行され、さらにこの加算ブロックによりサブシステムの出力ポートが実行されます。AddSub
パラメーターは xbsIndex_r4 ライブラリ内の AddSub ブロックを参照します。ブロックへの完全パスが指定されていない場合は、デフォルトで xBlock
により xbsIndex_r4
およびビルトイン ライブラリが検索されます。xBlock
を使用する前に、ライブラリを読み込む必要があります。xBlock
を呼び出す前に、load_system
を使用してライブラリを読み込んでください。
adder
」と入力すると、Model Composer により MATLAB コンソールに adder ブロックの簡単な説明が表示され、Simulink 図でブロックがハイライトされます。同様に、「a
」、「b
」、「s
」と入力して、サブシステムの Inport および Ourpot をハイライトさせることもできます。MACC
- 学習モードでこの例を実行します。新しく学習セッションを始めるには
xBlock
を実行します。 -
MATLAB コンソール ウィンドウに次のコマンドを入力して、新しいサブシステムに積和関数を作成します。
[a, b] = xInport('a', 'b'); mac = xOutport('mac'); m = xSignal; mult = xBlock('Mult', struct('latency', 0, 'use_behavioral_HDL', 'on'), {a, b}, {m}); acc = xBlock('Accumulator', struct('rst', 'off', 'use_behavioral_HDL', 'on'), {m}, {mac});
Model Composer にビヘイビアー HDL の生成を指示することにより、2 つのブロックが 1 つの DSP48 ブロックに配置されます。現時点では、乗算器ブロックを強制的に組み合わせに指定した場合にのみ、Vivado 合成でこのように処理されます。
untiltled1
という名前のモデルで作成されます。例 1 のモデルを閉じている場合は、untitled
という名前でモデルが作成されます。
mult_ins = mult.getInSignals
mult_ins{1}
mult_ins{2}
src_a = mult_ins{1}.getSrc
src_a{1}
m_dst = m.getDst
m_dst{1}
m_dst{1}.block
マスクが適用されたサブシステムでの MACC
特定のサブシステムを PG API で生成し、そのサブシステムのマスク パラメーターから PG API にパラメーターを渡す必要がある場合は、PG API をプロダクション モードで実行し (物理的な M 関数ファイルが必要)、その関数を xBlock
のコンストラクターに渡す必要があります。
- 最上位の PG API M 関数ファイル
MACC_sub.m
を次の行で作成します。function MACC_sub(latency, nbits) [a, b] = xInport('a', 'b'); mac = xOutport('mac'); if latency <= 0 error('latency must be positive'); elseif latency == 1 a_in = a; b_in = b; else [a_in, b_in] = xSignal; dblock1 = xBlock('Delay', struct('latency', latency - 1, 'reg_retiming', 'on'), {a}, {a_in}); block2 = xBlock('Delay', struct('latency', latency - 1, 'reg_retiming', 'on'), {b}, {b_in}); end m = xSignal; mult = xBlock('Mult', struct('latency', 0, 'use_behavioral_HDL', 'on'), {a_in, b_in}, {m}); acc = xBlock('Accumulator', struct('rst', 'off', 'n_bits', nbits, 'use_behavioral_HDL', 'on'), {m}, {mac});
図 3. 最上位 PG API の M 関数ファイル - スクリプトで定義されたサブシステムをマスクするには、latency と nbits の 2 つのマスク パラメーターを追加します。 図 4. latency パラメーターの追加
- サブシステムのマスク初期化に次の行を追加します。
config.source = str2func('MACC_sub'); config.toplevel = gcb; xBlock(config, {latency, nbits});
プロダクション モードでは、
xBlock
コンストラクターの最初の引数はコンフィギュレーションの MATLAB 構造体であり、ソース フィールドと最上位フィールドが含まれている必要があります。ソース フィールドは M 関数を指す関数ポインターで、最上位フィールドは Simulink サブシステムを指定する文字列です。最上位フィールドが 1 の場合、untitled という名前のモデルが作成され、そのモデルの中にサブシステムが作成されます。図 5. nbits パラメーターの追加または、MATLAB 構造体の呼び出しを使用して最上位のコンフィギュレーションを作成することもできます。
xBlock(struct('source', str2func(MACC_sub), 'toplevel', gcb),{latency, nbits});
OK をクリックします。
次のサブシステムが表示されます。
図 6. 最上位コンフィギュレーションの作成 - 次の図に示すようにマスク パラメーターを設定し、OK をクリックします。 図 7. マスク パラメーターの追加
次の図が生成されます。
図 8. 生成される図
MACC_sub.m
を開き、関数をデバッグします。デフォルトでは、xBlock
コンストラクターにより最後に自動レイアウトが実行されます。ブロックが追加されるたびに自動レイアウトを確認する必要がある場合は、次のように最上位の xBlock
を呼び出します。
config.source = str2func('MACC_sub');
config.toplevel = gcb;
config.debug = 1;
xBlock(config, {latency, nbits});
コンフィギュレーション構造体のデバッグ フィールドを 1 に設定することで、PG API はデバッグ モードで実行され、操作を実行するたびに自動レイアウトが実行されます。
xBlock
コンストラクターにはキャッシュ メカニズムがあります。依存するファイルのリストをセル配列で指定し、最上位コンフィギュレーションの depend
フィールドにこのリストを使用します。depend リストのファイルが変更されたり、最上位関数に渡された引数リストが変更されたりすると、サブシステムが再生成されます。MACC_sub にキャッシュ機能が必要な場合は、最上位の xBlock を次のように呼び出します。
config.source = str2func('MACC_sub');
config.toplevel = gcb;
config.depend = {'MACC_sub.m'};
xBlock(config, {latency, nbits});
コンフィギュレーション構造体の depend フィールドはセル配列です。配列の各要素はファイル名です。p ファイル名または M ファイル名を指定できます。接頭辞なしに名前を指定することもできます。パス最初にあるものが xBlock
で使用されます。