xilinx.resource_analyzer は、Model Composer モデルと Vivado との間でリソース使用率データのクロスプローブを可能にする MATLAB クラスです。
Model Composer のリソース解析は、すべてのコンパイル ターゲットでサポートされています。System Generator トークンの Clocking タブにある Perform analysis ドロップダウン リストには、Vivado ツールの実行時間とリソース使用率の精度をトレードオフする 2 つのオプションがあります。Perform analysis の Post Synthesis または Post Implementation オプションを選択し、Generate ボタンをクリックすると、ネットリスト生成時に Vivado のリソース使用率情報が収集されます。ネットリストの生成が完了すると、この Vivado リソース使用率の結果にアクセスするため、xilinx.resource_analyzer クラスが使用されます。xilinx.resource_analyzer クラス オブジェクトは、Vivado リソース使用率データを処理して、Simulink モデルで使用されるリソース (ブロック RAM、DSP、レジスタ、LUT) の数だけでなく、モデル内のサブシステムおよび下位ブロックで使用されるリソースの数を表示します。
Vivado リソース使用率の結果と Model Composer モデルとのクロスプローブは、xilinx.resource_analyzer クラスの次の API 関数を使用して実現します。
関数名 | 説明 | 関数の引数 |
---|---|---|
xilinx.resource_analyzer | これはクラスのコンストラクターです。xilinx.resource_analyzer のコンストラクターを呼び出すと、そのクラスのオブジェクトが戻されます。 |
最初の引数はデザインのモデル名です。 2 番目の引数は、既に生成されているネットリスト ディレクトリへのパスです。 |
getVivadoStage | 戻り値は Post Synthesis または Post Implementation のいずれかです。これは、リソース解析を実行した後の Vivado デザイン段階です。 | 引数はありません。 |
getDevicePart | デザインがインプリメントされるデバイスのパーツ、パッケージ、スピード グレードを文字列で返します。 | 引数はありません。 |
getDeviceResource | ターゲットのザイリンクス デバイスで指定されたタイプのリソースの合計数を文字列で返します。 | (オプション) リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。 |
printDeviceResources | ターゲットのザイリンクス デバイスで使用可能なブロック RAM、DSP、レジスタ、および LUT の合計数を表示します。MATLAB のコンソールにカウントが表示されます。 | 引数はありません。 |
getCount | ブロックまたはサブシステムで使用されている特定のリソース タイプのカウントを返します。 |
(オプション) 最初の引数は、ブロックの Simulink ハンドルまたはパス名です。 (オプション) 2 番目の引数はリソース タイプです。 リソース タイプは、ブロック RAM、DSP、レジスタ、LUT のいずれかです。 |
ブロックまたはサブシステムで使用されている特定のリソース タイプのカウントを返します。 |
(オプション) 最初の引数は、ブロックまたはサブシステムの 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 クラスのデストラクターです。 | 引数はありません。 |
フィールド名 | 説明 |
---|---|
BRAM |
ブロックまたはサブシステムのブロック RAM リソースの数。 ブロック RAM は、次のようにカウントされます。
プリミティブのバリエーション (RAM36E1 や RAM36E2 など) もすべて同じ方法でカウントされます。 ブロック RAM の総数 = (RAMB36E の数) + (FIFO36E の数) + 0.5 (RAMB18E の数 + FIFO18E の数) |
DSPs | ブロックまたはサブシステムで使用される DSP48 リソースの数。 |
Registers | デザインにより使用されるフリップフロップおよびラッチの数を、デザイン モデル、特定のブロック、またはサブシステムで使用されるレジスタの数としてレポートします。 |
LUT | ブロックまたはサブシステムで使用されるすべての 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 – ターゲットのザイリンクス デバイスのパーツ名を取得
構文
string = resource_analyzer_obj.getDevicePart();
説明
デザインがターゲットにしているザイリンクス デバイスの名前を取得します。
例
//Get the Xilinx 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>);
説明
デザインがターゲットにしているザイリンクス デバイスに含まれる特定のタイプのリソース合計数を返します。
<resource_type> は次のとおりです。
- BRAMs: ブロック RAM および FIFO プリミティブ
- DSPs: DSP48 プリミティブ
- Registers: レジスタおよびフリップフロップ
- LUTs: すべての LUT タイプをまとめたもの
<resource_type> が指定されていない場合は、すべてのデバイス リソースを含む MATLAB 構造体が返されます。
例
//Determine the total number of Block RAMs in the Xilinx device
>> total_brams = res_obj.getDeviceResource('BRAMs')
total_brams =
445
//Determine the total number of Block RAMs, DSP blocks, Registers, and LUTs in the
//Xilinx device
>> total_resource_count = res_obj.getDeviceResource
total_resource_count =
BRAMs: '445'
DSPs: '840'
Registers: '407600'
LUTs: '203800'
printDeviceResources – ターゲット デバイスにおけるリソース数を出力
構文
resource_analyzer_obj.printDeviceResources();
説明
使用されているザイリンクス デバイスのすべてのタイプのリソースの数を出力します。MATLAB コンソールに出力値が表示されます。
例
//Print the number of all types of resources contained in the target Xilinx 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 のモデル ブロックは次のように表示されます。
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();