PG API 例 - 2021.2 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2021-10-22
Version
2021.2 日本語

Hello World

この例では、 MATLAB® コマンド シェルでコマンドを入力できる学習モードで PG API を実行します。

  1. 新しく学習セッションを始めるには、MATLAB コマンド コンソールで xBlock を実行します。
  2. 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 を使用してライブラリを読み込んでください。

ヒント: MATLAB コンソールに「adder」と入力すると、Model Composer により MATLAB コンソールに adder ブロックの簡単な説明が表示され、Simulink 図でブロックがハイライトされます。同様に、「a」、「b」、「s」と入力して、サブシステムの Inport および Ourpot をハイライトさせることもできます。

MACC

  1. 学習モードでこの例を実行します。新しく学習セッションを始めるには xBlock を実行します。
  2. 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 合成でこのように処理されます。

図 2. 乗算器ブロックの強制
注記: 例 1 で作成されたモデルを閉じていない場合、例 2 は untiltled1 という名前のモデルで作成されます。例 1 のモデルを閉じている場合は、untitled という名前でモデルが作成されます。
ヒント: PG API は、生成されたサブシステムのブロックや信号に関する情報を取得するための関数を提供します。次の各コマンドを実行した後、MATLAB コンソールの出力と、Simulink ダイアグラムの変化を確認します。

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 のコンストラクターに渡す必要があります。

  1. 最上位の 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 関数ファイル
  2. スクリプトで定義されたサブシステムをマスクするには、latency と nbits の 2 つのマスク パラメーターを追加します。
    図 4. latency パラメーターの追加
  3. サブシステムのマスク初期化に次の行を追加します。
    
    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. 最上位コンフィギュレーションの作成
  4. 次の図に示すようにマスク パラメーターを設定し、OK をクリックします。
    図 7. マスク パラメーターの追加

    次の図が生成されます。

    図 8. 生成される図
ヒント: MATLAB エディターで 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 で使用されます。