xilinx.resource_analyzer - 2024.1 日本語

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

Document ID
UG1483
Release Date
2024-05-30
Version
2024.1 日本語

xilinx.resource_analyzer は、Model Composer モデルと Vivado との間でリソース使用率データのクロスプローブを可能にする MATLAB クラスです。

Model Composer のリソース解析は、すべてのコンパイル ターゲットでサポートされています。Model Composer Hub ブロックの Clocking タブにある Perform analysis ドロップダウン リストには、Vivado ツールの実行時間とリソースの使用量データの精度をトレードオフする 2 つのオプションがあります。Perform analysisPost Synthesis または Post Implementation オプションを選択し、Generate ボタンをクリックすると、ネットリスト生成時に Vivado リソース使用率情報が収集されます。ネットリストの生成が完了した後この Vivado リソース使用率の結果にアクセスするには、xilinx.resource_analyzer クラスを使用します。xilinx.resource_analyzer クラス オブジェクトは、Vivado リソース使用率データを処理して、Simulink モデルで使用されるリソース (ブロック RAM、DSP、レジスタ、LUT) の数だけでなく、モデル内のサブシステムおよび下位ブロックで使用されるリソースの数を表示します。

Vivado リソース使用率の結果と Model Composer モデルとのクロスプローブは、xilinx.resource_analyzer クラスの次の API 関数を使用して実現します。

表 1. xilinx.resource_analyzer クラスの関数
関数名 説明 関数の引数
xilinx.resource_analyzer これはクラスのコンストラクターです。xilinx.resource_analyzer コンストラクターを呼び出すと、そのクラスのオブジェクトが返されます。

最初の引数はデザインのモデル名です。

2 番目の引数は、既に生成されているネットリスト ディレクトリへのパスです。

getVivadoStage 戻り値は Post Synthesis または Post Implementation のいずれかです。リソース解析を実行した後の Vivado デザイン段階を示します。 引数はありません。
getDevicePart デザインがインプリメントされるデバイスのパーツ、パッケージ、スピード グレードを文字列で返します。 引数はありません。
getDeviceResource ターゲットの AMD デバイスで指定されたタイプのリソースの合計数を文字列で返します。 (オプション) リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。
printDeviceResources ターゲットの AMD デバイスで使用可能なブロック RAM、DSP、レジスタ、および LUT の合計数を表示します。MATLAB のコンソールにカウントが表示されます。 引数はありません。
getCount ブロックまたはサブシステムで使用されている特定のリソース タイプのカウントを返します。

(オプション) 最初の引数は、ブロックの Simulink ハンドルまたはパス名です。

(オプション) 2 番目の引数はリソース タイプです。リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。

print ブロックまたはサブシステムで使用されている特定のリソース タイプのカウントを返します。

(オプション) 最初の引数は、ブロックまたはサブシステムの Simulink ハンドルまたはパス名です。

(オプション) 2 番目の引数はリソース タイプです。リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。

getDistribution

次の 3 つの値を返します。

MATLAB 構造体の配列。配列の各要素は、引数のサブシステムのすぐ下にあるブロックまたはサブシステムの名前を含む構造体で、そのサブブロックやサブシステムで使用されているリソース タイプとリソース数のキー/値ペアが含まれます。

引数で指定されたブロックまたはサブシステムで使用されるリソース数。

ブロックとサブシステムの両方で使用されるリソース数。

最初の引数は、ブロックまたはサブシステムの Simulink ハンドルまたはパス名です。

2 番目の引数はリソース タイプです。リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。

getErrorMessage クラス コンストラクターやその他の API 関数の呼び出しにエラーがあった場合、エラー メッセージの文字列を返します。 引数はありません。
highlight Simulink モデルで、指定されたブロックまたはサブシステムを黄色、枠を赤でハイライトします。 ブロックの Simulink ハンドルまたはパス名をハイライトします。
unhighlight Simulink モデルで、現在ハイライトされているブロックのハイライトを解除します。 (オプション) ブロックの Simulink ハンドルまたはパス名のハイライトを解除します。
delete xilinx.resource_analyzer クラスのデストラクターです。 引数はありません。
表 2. MATLAB 構造体のリソース データ
フィールド名 説明
BRAMs

ブロックまたはサブシステムのブロック RAM リソースの数。

ブロック RAM は、次のようにカウントされます。
  • RAMB36E: ブロック RAM 1 個
  • RAMB36E: ブロック RAM 1 個
  • RAMB18E: ブロック RAM 0.5 個
  • FIFO18E: ブロック RAM 0.5 個

プリミティブのバリエーション (RAM36E1 や RAM36E2 など) もすべて同じ方法でカウントされます。

ブロック RAM の総数 = (RAMB36E の数) + (FIFO36E の数) + 0.5 (RAMB18E の数 + FIFO18E の数)

DSPs ブロックまたはサブシステムで使用される DSP48 リソースの数。
Registers デザインにより使用されるフリップフロップおよびラッチの数を、デザイン モデル、特定のブロック、またはサブシステムで使用されるレジスタの数としてレポートします。
LUTs ブロックまたはサブシステムで使用されるすべての LUT タイプのリソースの数。

xilinx.resource_analyzer – xilinx.resource_analyzer クラス オブジェクトを構築

構文
resource_analyzer_obj = 
xilinx.resource_analyzer('<name_of_the_model>','<path_to_netlist_directory>');
説明

xilinx.resource_analyzer コンストラクターを呼び出すと、そのクラスのオブジェクトが返されます。

最初の引数は、Model Composer のモデル名です。クラスのコンストラクターを呼び出す前に、モデルを開いておく必要があります。

2 番目の引数には、ネットリスト ディレクトリへの絶対パスまたは相対パスを指定します。netlist ディレクトリの読み取り権限が必要です。

xilinx.resource_analyzer クラスの API 関数にアクセスするには、次のようにクラスのオブジェクトを使用します。特定の API 関数の詳細を取得するには、MATLAB コマンド プロンプトで次のように入力します。

help xilinx.resource_analyzer.<API_function>
//Construct class. Must give the model name and absolute or relative path to the 
//target directory

>> res_obj = xilinx.resource_analyzer('test_decimator', './netlist_for_resource_analysis')

res_obj = 

Resources used by: test_decimator
BRAMs => 0.5
DSPs => 1
Registers => 273
LUTs => 153

getVivadoStage – リソース解析の Vivado デザイン段階を取得

構文
string = resource_analyzer_obj.getVivadoStage();
説明
Vivado でリソース解析が実行され、データが収集された後の Vivado デザイン段階が返されます。戻り値は、Post Synthesis または Post Implementation のいずれかです。
//Determine Vivado stage when resource data was collected

>> design_stage = res_obj.getVivadoStage()

design_stage =

Post Synthesis

getDevicePart – ターゲットの AMD デバイスのパーツ名を取得

構文
string = resource_analyzer_obj.getDevicePart();
説明
デザインがターゲットにしている AMD デバイスの名前を取得します。
//Get the AMD part in which you will implement your design

>> part_name = res_obj.getDevicePart()

part_name =

xc7k325tfbg676-3

getDeviceResource – ターゲット デバイスにおけるリソース数を取得

構文
total_resource_count = resource_analyzer_obj.getDeviceResource(<resource_type>);
説明
デザインがターゲットにしている AMD デバイスに含まれる特定のタイプのリソース合計数を返します。

resource_type は次のとおりです。

  • BRAMs: ブロック RAM および FIFO プリミティブ
  • DSPs: DSP48 プリミティブ
  • Registers: レジスタおよびフリップフロップ
  • LUTs: すべての LUT タイプをまとめたもの

resource_type が指定されていない場合は、すべてのデバイス リソースを含む MATLAB 構造体が返されます。

//Determine the total number of Block RAMs in the AMD device

>> total_brams = res_obj.getDeviceResource('BRAMs')

total_brams =

445

//Determine the total number of Block RAMs, DSP blocks, Registers, and LUTs in the
//AMD device

>> total_resource_count = res_obj.getDeviceResource

total_resource_count = 

    BRAMs: '445'
     DSPs: '840'
Registers: '407600'
     LUTs: '203800'

printDeviceResources – ターゲット デバイスにおけるリソース数を出力

構文
resource_analyzer_obj.printDeviceResources();
説明
使用されている AMD デバイスのすべてのタイプのリソースの数を出力します。MATLAB コンソールに出力値が表示されます。
//Print the number of all types of resources contained in the target AMD device

>> res_obj.printDeviceResources()

BRAMs => 445
DSPs => 840
Registers => 407600
LUTs => 203800

getCount – サブシステムまたはブロックのリソース使用率を取得

構文
<block_resource_count> = resource_analyzer_obj.getCount(<blockID>,<resource_type>);
説明
指定されたサブシステムまたはブロックで使用されている特定のタイプのリソース総数を返します。

blockID には、サブシステムまたはブロックの Simulink ハンドルまたはパス名 (階層名) を指定します。

resource_type は次のとおりです。

  • BRAMs: ブロック RAM および FIFO プリミティブ
  • DSPs: DSP48 プリミティブ
  • Registers: レジスタおよびフリップフロップ
  • LUTs: すべての LUT タイプをまとめたもの

resource_type が指定されていない場合は、すべてのデバイス リソースを含む MATLAB 構造体が返されます。

// Return register resource utilization for Simulink block with pathname
// test_decimator/addr_gen

>> regs_in_block = res_obj.getCount('test_decimator/addr_gen', 'Registers')

ans =

         105
//Return resource utilization for the entire Simulink model

>> total_resource_count = res_obj.getCount()

Resources used by: test_decimator
BRAMs => 0.5
DSPs => 1
Registers => 273
LUTs => 153

print – サブシステムまたはブロックで使用されるリソースをすべて取得

構文
resource_analyzer_obj.print(<blockID>);
説明
サブシステムまたはブロックで使用されているすべてのリソース (ブロック RAM、レジスタ、DSP、および LUT すべて) を、キーと値のペアで出力します。MATLAB コンソールにリソースが表示されます。

<blockID> (Simulink ハンドルまたはパス名) を入力すると、指定されたブロックまたはサブシステムで使用されるすべてのリソースが MATLAB コンソールに表示されます。

blockID 引数を指定しない場合は、最上位デザインで使用されているすべてのリソースが MATLAB コンソールに表示されます。

// Print resource utilization for Simulink subsystem with pathname
// test_decimator/addr_gen

>> res_obj.print('test_decimator/subsystem1')
Resources used by: test_decimator/subsystem1
BRAMs => 0.5
DSPs => 1
Registers => 49
LUTs => 97

//Print resource utilization for the entire Simulink model

>> res_obj.print()
Resources used by: test_decimator
BRAMs => 0.5
DSPs => 1
Registers => 273
LUTs => 153

getDistribution - 指定されたサブシステムの下にある各ブロックおよびサブシステムで使用されているリソースのタイプ別の数を取得

構文
[<distribution_array>, <self_count>, <total_count>] = 
resource_analyzer_obj.getDistribution(<blockId>, <resource_type>)
説明

引数として指定したサブシステムのすぐ下にある各ブロックおよびサブシステムで使用される指定のリソース タイプの数を返します。

戻り値には次の 3 つがあります。

  • MATLAB 構造体の配列。配列の各要素は、引数のサブシステムのすぐ下にあるブロックまたはサブシステムの名前を含む構造体で、そのサブブロックやサブシステムで使用されているリソース タイプとリソース数のキー/値ペアが含まれます。
  • 引数で指定されたブロックまたはサブシステムで使用されるリソース数。
  • ブロックとサブシステムの両方で使用されるリソース数。

blockID には、サブシステムまたはブロックの Simulink ハンドルまたはパス名 (階層名) を指定します。blockID が指定されていない場合は、最上位モジュールとみなされます。

resource_type は次のとおりです。

  • BRAMs: ブロック RAM および FIFO プリミティブ
  • DSPs: DSP48 プリミティブ
  • Registers: レジスタおよびフリップフロップ
  • LUTs: すべての LUT タイプをまとめたもの
// Return Register resource distribution for Simulink block with pathname
// test_decimator. This is top level of the design

>> [res_dist, self, total] = res_obj.getDistribution ('test_decimator','Registers')

res_dist = 

1x8 struct array with fields:

    Name
    Hier_Name
    Count


self =

         119


total =

         273
//Return resource utilization for the entire Simulink model

>> total_resource_count = res_obj.getCount()

Resources used by: test_decimator
BRAMs => 0.5
DSPs => 1
Registers => 273
LUTs => 153

getErrorMessage – エラー メッセージを取得

構文
result = resource_analyzer_obj.getErrorMessage();
説明

クラス コンストラクターやその他の API 関数の呼び出しにエラーがあった場合、エラー メッセージの文字列を返します。

//Determine if there was an error in the xilinx.resource_analyzer constructor
//or in any of the API functions

>> err_msg = res_obj.getErrorMessage()

err_msg =

     ''

highlight– デザインのサブシステムおよびブロックをハイライト

構文
resource_analyzer_obj.highlight(<blockId>)
説明

この API は、Simulink モデルのブロックをハイライトします。Model Composer モデルでハイライトされたブロックは、黄色で表示され、枠は赤で表示されます。このコマンドでブロックをハイライトしても、現在ハイライトされているほかのブロックのハイライトは解除されないので、繰り返し使用して複数のブロックをハイライトできます。

ブロックまたはサブシステムの <blockID> (Simulink ハンドルまたはパス名) を入力すると、Simulink モデルで指定されたブロックまたはサブシステムがハイライトされます。ブロック/サブシステムがハイライトされると、最上位までのすべての親サブシステムもハイライトされます。highlight の引数に最上位モジュールのハンドルを指定すると、ブロックはハイライトされませんが、Simulink モデルの表示が最上位に変わり、すべてのブロックとサブシステムが最上位に表示されます。

//Highlight Simulink block with pathname fixed_point_IIR/IIR Filter Subsystem/Mult1

>> res_obj.highlight('test_decimator/addr_gen/AddSub1')

ハイライトされた Model Composer のモデル ブロックは次のように表示されます。

図 1. HDL モデル ブロック

unhighlight –デザインのサブシステムおよびブロックのハイライトを解除

構文
resource_analyzer_obj.unhighlight(<blockId>)
説明

この API は、Simulink モデルで現在ハイライトされているブロックのハイライトを解除します。ハイライトを解除すると、Model Composer モデルのブロックは元の色で表示されるようになります。

ブロックまたはサブシステムの blockID (Simulink ハンドルまたはパス名) を入力すると、Simulink モデルで指定されたブロックまたはサブシステムのハイライトが解除されます。ブロック/サブシステムのハイライトが解除されると、最上位までのすべての親サブシステムのハイライトも解除されます。

blockID 引数が指定されない場合は、現在ハイライトされているすべてのブロックとサブシステムのハイライトが解除されます。

//Unhighlight Simulink block with pathname test_decimator/addr_gen/Register4

>> res_obj.unhighlight('test_decimator/addr_gen/Register4')


//Unhighlight all Simulink blocks that are currenly highlighted

>> res_obj.unhighlight();

delete – xilinx.resource_analyzer クラス オブジェクトを削除

構文
resource_analyzer_obj.delete();
説明

xilinx.resource_analyzer クラスのデストラクターです。

//Delete xilinx.resource_analyzer object, i.e., res_obj

>> delete(res_obj);

または

>> res_obj.delete();