xilinx.analyzer は、Model Composer モデルと AMD Vivado™ のタイミング パスの間のインターフェイスを提供する MATLAB® クラスです。
Model Composer のタイミング解析は、すべてのコンパイル ターゲットでサポートされています。Model Composer Hub ブロックの Clocking タブにある Perform analysis ドロップダウン リストには、総実行時間と Vivado タイミング データの精度をトレードオフする 2 つのオプションがあります。Perform analysis で Post Synthesis または Post Implementation オプションを選択し、Generate ボタンをクリックすると、ネットリスト生成時に Vivado タイミング パス情報が収集されます。Vivado タイミング パス情報にアクセスするには、xilinx.analyzer クラスを使用します。xilinx.analyzer クラスのオブジェクトにより、Vivado タイミング パスが処理され、ワーストのスラック値を持つ 50 個のパスが検出されます。これらのタイミング パスは、スラックの値が大きい順に並べ替えられ、アナライザー オブジェクトに保存されます。
Vivado タイミング パスと Model Composer モデルとのクロスプローブには、xilinx.analyzer クラスの次の API 関数を使用します。
関数名 | 説明 | 関数の引数 |
---|---|---|
xilinx.analyzer |
これはクラスのコンストラクターです。 xilinx.analyzer コンストラクターを呼び出すと、そのクラスのオブジェクトが返されます。 |
最初の引数は Model Composer モデル名です。 2 番目の引数は、既に生成されているネットリスト ディレクトリへのパスです。 |
isValid | タイミング解析データが有効であるかどうかを示します。この API を使用して、xilinx.analyzer クラスが正常に構築されたことを確認します。 | 引数はありません。 |
getErrorMessage | クラス コンストラクターやその他の API 関数の呼び出しにエラーがあった場合、エラー メッセージの文字列を返します。 | 引数はありません。 |
getStatus | モデル内のタイミング パスのいずれかに違反 (負のスラック) があった場合に FAILED を返します。 | 引数はありません。 |
getVivadoStage | 「Post Synthesis」または「Post Implementation」のいずれかを返します。タイミング解析を実行した後の Vivado デザイン段階を示します。 | 引数はありません。 |
paths | MATLAB 構造体の配列を返します。各構造体にはタイミング パスのデータが格納されます。 | 'setup' または 'hold' のいずれかを指定します。 |
violations | MATLAB 構造体の配列を返します。配列の各メンバーは、タイミング違反のあるパス構造です。 | 'setup' または 'hold' のいずれかを指定します。 |
スラック、パス遅延、ロジック段数、ソースとデスティネーションのブロック名およびクロック名など、タイミング パス情報を出力します。 | タイミング パス データの MATLAB 構造体の配列です。配列には、1 つ以上の構造体を含めることができます。 | |
highlight | Model Composer モデルで、引数で渡されたタイミング パスのブロックをハイライトします。モデル内で既にハイライトされているブロックは、ハイライトされたままになります。 | 1 つのタイミング パスの MATLAB 構造体 |
highlightOnePath | Model Composer モデルで、引数で渡されたタイミング パスのブロックをハイライトします。このパスのブロックをハイライトする前に、モデル内で既にハイライトされているブロックのハイライトが解除されます。 | 1 つのタイミング パスの MATLAB® 構造体 |
unhighlight | Simulink® モデルで、現在ハイライトされているすべてのブロックのハイライトを解除します。 | 引数はありません。 |
disp | すべてのタイミング パスの中のワーストのスラック値など、タイミング解析結果のサマリを MATLAB コンソールに表示します。 | 引数はありません。 |
delete | xilinx.analyzer クラスのデストラクターです。 | 引数はありません。 |
フィールド名 | 説明 |
---|---|
Slack | パスのタイミング スラックを含む double 型の値 |
Delay | パスのデータパス遅延の合計 |
Levels_of_Logic | タイミング パスの Vivado デザイン内のエレメント数。タイミング パスにある HDL ブロック数は、Levels_of_Logic と異なる場合があります。 |
Source | タイミング パス内の最初の HDL ブロック |
Destination | タイミング パス内の最後の HDL ブロック |
Source_Clock | ソース ブロックのクロック ドメイン名 |
Destination_Clock | デスティネーション ブロックのクロック ドメイン名 |
Path_Constraints | パスに使用されるタイミング制約。マルチクロック デザインの場合、パス制約はマルチクロックのタイミング制約になる可能性があります。 |
Block_Masks | 各要素が HDL ブロックのマスク情報を含むセル配列。 |
Simulink_Names | 各要素が Model Composer モデルのブロックの階層名を含むセル配列 |
Vivado_Names | 各要素が Vivado データベース内の HDL ブロックの名前を含むセル配列 |
Type | タイミング違反のタイプ。値は 'setup' または 'hold' のいずれかです。 |
xilinx.analyzer - xilinx.analyzer クラス オブジェクトを構築
analyzer_object = xilinx.analyzer(<name_of_the_model>', '<path_to_netlist_directory>')
- 説明
-
xilinx.analyzer コンストラクターを呼び出すと、そのクラスのオブジェクトが戻されます。
最初の引数は、Model Composer のモデル名です。クラスのコンストラクターを呼び出す前に、モデルを開いておく必要があります。
2 番目の引数には、ネットリスト ディレクトリへの絶対パスまたは相対パスを指定します。netlist ディレクトリの読み取り権限が必要です。
xilinx.analyzer クラスの API 関数にアクセスするには、次のようにクラスのオブジェクトを使用します。特定の API 関数の詳細を取得するには、MATLAB コマンド プロンプトで次のように入力します。
help xilinx.analyzer.<API_function>
- 例
-
//Construct class. Must give the model name and absolute or relative path to the //target directory >> timing_object = xilinx.analyzer('fixed_point_IIR', './netlist_for_timing_analysis') timing_object = Number of setup paths = 9 Worst case setup slack = -1.6430
isValid – Vivado タイミング パスの有効性を確認
- 構文
-
result = analyzer_object.isValid();
- 説明
- タイミング解析データが有効な場合は 1、そうでない場合は 0 が返されます。この API を使用して、xilinx.analyzer クラスが正常に構築されたこと、およびタイミング データが有効であることを確認します。
- 例
-
//Determine if timing analysis data is valid >> valid_status = timing_object.isValid() valid_status = 1
getErrorMessage - エラー メッセージを取得
- 構文
-
result = analyzer_object.getErrorMessage();
- 説明
- クラス コンストラクターやその他の API 関数の呼び出しにエラーがあった場合、エラー メッセージの文字列を返します。
- 例
-
//Determine if there was an error in the xilinx.analyzer constructor //or in any of the API functions >> err_msg = timing_object.getErrorMessage() err_msg = ''
getStatus - タイミング解析のステータスを取得
- 構文
-
string = analyzer_object.getStatus();
- 説明
- 戻り値は PASSED または FAILED です。いずれかのタイミング パスに違反 (負のスラック) があった場合、タイミング解析のステータスは FAILED とみなされます。
- 例
-
//Determine if there were timing path violations in Simulink model >> analysis_status = timing_object.getStatus() analysis_status = FAILED
getVivadoStage - タイミング解析の Vivado デザイン段階を取得
- 構文
-
string = analyzer_object.getVivadoStage();
- 説明
- Vivado でタイミング解析が実行され、データが収集された後の Vivado デザイン段階が返されます。戻り値は、Post Synthesis または Post Implementation のいずれかです。
- 例
-
//Determine Vivado stage when timing data was collected >> design_stage = timing_object.getVivadoStage() design_stage = Post Synthesis
paths - すべてのタイミング パスにアクセス
- 構文
-
<array_of_timing_paths_structure> = analyzer_object.paths('<violation_type>');
- 説明
-
MATLAB 構造体の配列を返します。各構造体にはタイミング パスのデータが含まれており、タイミング違反の大きいものから順に (スラック値の昇順に) 並べられています。
引数
violation_type
の値は 'setup' または 'hold' です。
- 例
-
//Return an array of the timing path structures >> all_timing_paths = timing_object.paths('setup') all_timing_paths = 1x9 struct array with fields: Slack Delay Levels_of_Logic Source Destination Source_Clock Destination_Clock Path_Constraints Block_Masks Simulink_Names Vivado_Names Type
注記:このタイミング解析では、合計 9 つのタイミング パスがあります。
各タイミング パスのデータ フィールドは、その他の情報 の例 1 に示すようになります。
violations - タイミング違反のあるパスにアクセス
- 構文
-
<array_of_timing_paths_structure> = analyzer_object.violations('<violation_type>');
- 説明
-
MATLAB 構造体の配列を返します。配列の各メンバーは、タイミング違反のあるパスのデータです。配列要素は、タイミング違反の大きい方から順に並べられます。デザインにタイミング違反がない場合、API 関数は空の配列を返します。
引数
violation_type
の値は 'setup' または 'hold' です。
- 例
-
//Return an array of timing paths with setup violations >> violating_paths = timing_object.violations('setup') violating_paths = 1x2 struct array with fields: Slack Delay Levels_of_Logic Source Destination Source_Clock Destination_Clock Path_Constraints Block_Masks Simulink_Names Vivado_Names Type
このタイミング解析では、違反のあるパスが 2 つあります。
各タイミング パスのデータ フィールドは、その他の情報 の例 3 に示すようになります。
print - タイミング パス情報を出力
- 構文
-
analyzer_object.print(<timing_path_structures>);
- 説明
-
入力タイミング パス構造のスラック、パス遅延、ロジック段数、ソースとデスティネーションのブロック名、ソースとデスティネーションのクロック名、パス制約など、タイミング パス情報を出力します。
引数は、1 つ以上の要素を持つ MATLAB 構造体の配列です。
- 例
-
//Print timing path information for path #1 >> timing_object.print(all_timing_paths(1)) Path Num Slack (ns) Delay (ns) Levels of Logic Source/Destination Blocks Source Clock Destination Clock Path Constraints 1 -1.6430 11.5690 6 fixed_point_IIR/Delay1 clk clk create_clock -name clk -period 2 [get_ports clk] fixed_point_IIR/IIR Filter Subsystem/Delay4 ans = 1 //Print timing path information for path #3 >> timing_object.print(all_timing_paths(3)) Path Num Slack (ns) Delay (ns) Levels of Logic Source/Destination Blocks Source Clock Destination Clock Path Constraints 1 1.1320 0.5270 0 fixed_point_IIR/Delay1 clk clk create_clock -name clk -period 2 [get_ports clk] fixed_point_IIR/Delay1 ans = 1 //Print timing path information for path #2 from violating_paths array >> timing_obj.print(violating_paths(2)) Path Num Slack (ns) Delay (ns) Levels of Logic Source/Destination Blocks Source Clock Destination Clock Path Constraints 1 -1.3260 11.2520 6 fixed_point_IIR/Delay1 clk clk create_clock -name clk -period 2 [get_ports clk] fixed_point_IIR/Delay2 ans = 1
highlight - タイミング パスのデザイン ブロックをハイライト
- 構文
-
analyzer_object.highlight(<timing_path_structure>);
- 説明
- この API は、引数で指定したタイミング パスの HDL ブロックをハイライトします。ほかのパスからブロックのハイライトを変更するわけではないので、この機能を繰り返し使えば、複数のタイミングのパスがハイライトされます。
引数は、1 つのタイミング パスの MATLAB 構造体です。
- 例
-
//Highlight Simulink model blocks in the selected path //Don't change highlighting of currently highlighted blocks in the model >> [result, err_msg] = timing_object.highlight(all_timing_paths(1));
ハイライトされた Model Composer のモデル ブロックは次のように表示されます。
図 1. HDL モデル ブロック
highlightOnePath - タイミング パスのデザイン ブロックをハイライト
- 構文
-
analyzer_object.highlightOnePath(<timing_path_structure>);
- 説明
-
この API は、引数で指定したタイミング パスの HDL ブロックをハイライトします。既にハイライトされているパスのブロックがある場合は、そのブロックのハイライトが解除されるので、一度にハイライトされるのは 1 つのパスだけです。
引数は、1 つのタイミング パスの MATLAB 構造体です。
- 例
-
//Highlight a single path in Model Composer model, and unhighlight currently //highlighted paths >> [result, err_msg] = timing_object.highlightOnePath(violating_paths(2));
unhighlight - デザイン ブロックのハイライトを解除
- 構文
-
analyzer_object.unhighlight();
- 説明
- この API は、既にハイライトされているブロックのハイライトを解除します。Model Composer モデルのブロックは、元の色で表示されます。
- 例
-
//Unhighlight any Simulink block that is currenly highlighted >> [result, err_msg] = timing_object.unhighlight();
disp - タイミング解析のサマリを表示
- 構文
-
analyzer_object.disp();
- 説明
- この API は、ワーストのスラック値を含むタイミング パスのサマリを MATLAB コンソールに表示します。
- Example
-
//Display a summary of timing analysis >> timing_object.disp() Number of setup paths = 9 Worst case setup slack = -1.6430
delete - xilinx.analyzer クラス オブジェクトを削除
- 構文
-
analyzer_object.delete();
- 説明
- xilinx.analyzer クラスのデストラクターです。
- 例
-
//Delete xilinx.analyzer object, i.e., timing_object >> timing_object.delete();
その他の情報
タイミング パス構造のデータ フィールドにアクセスします。
- 例 1: タイミング パス #1 のデータ
-
//Return the data fields for the timing path with the worst slack >> all_timing_paths(1) ans = Slack: -1.6430 Delay: 11.5690 Levels_of_Logic: 6 Source: 'fixed_point_IIR/Delay1' Destination: 'fixed_point_IIR/IIR Filter Subsystem/Delay4' Source_Clock: 'clk' Destination_Clock: 'clk' Path_Constraints: 'create_clock -name clk -period 2 [get_ports ...' Block_Masks: {1x5 cell} Simulink_Names: {1x5 cell} Vivado_Names: {1x5 cell} Type: 'setup'
- 例 2: タイミング パス #3 のデータ
-
//Return the data fields for a timing path >> all_timing_paths(3) ans = Slack: 1.1320 Delay: 0.5270 Levels_of_Logic: 0 Source: 'fixed_point_IIR/Delay1' Destination: 'fixed_point_IIR/Delay1' Source_Clock: 'clk' Destination_Clock: 'clk' Path_Constraints: 'create_clock -name clk -period 2 [get_ports ...' Block_Masks: {'fprintf('','COMMENT: begin icon graphics')...'} Simulink_Names: {'fixed_point_IIR/Delay1'} Vivado_Names: {'fixed_point_iir.fixed_point_iir_struct.delay1'}
'setup'と入力します。
- 例 3: violating_paths アレイのパス #1 のデータ
-
//Return the data fields in a timing path with timing violations >> violating_paths(1) ans = Slack: -1.6430 Delay: 11.5690 Levels_of_Logic: 6 Source: 'fixed_point_IIR/Delay1' Destination: 'fixed_point_IIR/IIR Filter Subsystem/Delay4' Source_Clock: 'clk' Destination_Clock: 'clk' Path_Constraints: 'create_clock -name clk -period 2 [get_ports ...' Block_Masks: {1x5 cell} Simulink_Names: {1x5 cell} Vivado_Names: {1x5 cell} Type: 'setup'