デザイン オブジェクトへのアクセス - 2022.1 日本語

Vivado Design Suite ユーザー ガイド: Tcl スクリプト機能の使用 (UG894)

Document ID
UG894
Release Date
2022-06-08
Version
2022.1 日本語

Vivado Design Suite では、プロジェクト、デザイン、デバイス情報がインメモリ データベースに読み込まれ、合成、インプリメンテーション、タイミング解析、およびビットストリームの生成に使用されます。このデータベースは、プロジェクト モードでも非プロジェクト モードでも同じです。FPGA デザイン フローを実行していくと、それに応じてデータベースがアップデートされます。デザイン フローのどの段階でも、データベースの内容をチェックポイント ファイル (.dcp) に保存できます。Vivado ツールで Tcl コマンドを使用すると、デザイン データベースにアクセスし、Tcl オブジェクトをクエリしたり、プロパティを読み出しまたは設定したりして、その結果を Tcl スクリプトでさまざまな目的で使用できます。データベースの内容を理解し、それに対してスクリプトをいかに効率的に記述できるかを理解しておくと有益です。

Vivado Design Suite の Tcl インタープリターでは、プロジェクト、デバイス、ネット、セル、ピンなど、多数のファースト クラス オブジェクトにアクセスできます。Vivado Design Suite では、プロジェクト モードでも非プロジェクト モードでも、デザインの進行に応じてこれらのデザイン オブジェクトが随時アップデートされ、インメモリ データベースに読み込まれます。

対話的にデザイン オブジェクトのクエリ、プロジェクトの状態の解析、インメモリ デザインにアクセスするスクリプトの記述、カスタム レポートの生成、オプションのデザイン フロー手順などを実行できます。各オブジェクトには複数のプロパティがあり、いつでも読み出すことができ、また一部のプロパティは設定もできます。ほとんどのデザイン オブジェクトはほかのデザイン オブジェクトに関連付けられており、その関連性をたどって関連オブジェクトやその情報を取得できます。

デザイン オブジェクトのクエリには、get_* Tcl コマンドを使用します。結果取得されたデザイン オブジェクトは、直接処理するか、Tcl 変数に代入できます。get_* コマンドをすべてリストするには、help get_* を使用します。オブジェクトを変数に代入すると、デザイン データベースに対するクエリの回数を削減でき、実行時間を短縮できます。ネットやピンのリストのクエリは時間のかかるプロセスであり、結果を保存しておくことで、同じ情報に繰り返しアクセスする必要がある場合にデザイン フローを高速化できます。詳細は、オブジェクトのキャッシュを参照してください。

デザイン オブジェクトの各クラス (ネット、ピン、ポートなど) には標準のプロパティがあり、読み出したり、一部のプロパティは値を変更できます。また、RTL ソース ファイルで指定されているデザイン属性、Verilog パラメーター、VHDL ジェネリックも、それらが設定されているネットリスト オブジェクトのプロパティとして保存されます。たとえば、ポート オブジェクトには方向を指定するプロパティがあり、ネット オブジェクトにはファンアウトを指定するプロパティがあります。Vivado ツールでは、これらのプロパティを追加、変更、およびレポートする多数のコマンドがあります。get_* -filter オプションを使用すると、デザイン オブジェクトのリストにフィルターを適用し、特定のプロパティ値のオブジェクトのみを取得できます。詳細は、フィルター結果を参照してください。オブジェクトに設定されているプロパティのリストを取得するには、list_property コマンドを使用します。プロパティのタイプが enum である場合、list_property_value コマンドを使用して有効な値のリストを取得できます。

すべてのオブジェクトには、NAME および CLASS プロパティがあります。オブジェクトを Tcl 変数に代入すると、そのオブジェクトへのポインターが変数に保存されます。オブジェクトを変数により Tcl コマンドや Tcl プロシージャに渡すことができます。オブジェクトが引数として文字列を必要とする Tcl プロシージャまたはコマンドに渡された場合、オブジェクトそのものではなくオブジェクトの NAME プロパティが渡されます。次の例に、セル オブジェクトを変数 $inst に代入し、その変数に対して puts コマンドおよび report_property コマンドを実行た結果を示します。$inst puts コマンドでは文字列が処理されるのでオブジェクトの名前が表示され、report_property コマンドではオブジェクトのプロパティとその値が返されていることに注目してください。

set inst [get_cells cpuEngine]
cpuEngine
puts $inst
cpuEngine
report_property $inst
Property     Type  Read-only Value
CLASS      string true    cell
FILE_NAME    string true    
C:/2014.1/cpu/project_1.srcs/sources_1/imports/netlist/top.edf
IS_BLACKBOX   bool  true    0
IS_PRIMITIVE   bool  true    0
IS_SEQUENTIAL  bool  true    0
LINE_NUMBER   int   true    812044
NAME       string true    cpuEngine
PRIMITIVE_COUNT int   true    11720
REF_NAME     string true    or1200_top

Vivado Design Suite のどのクラスのデザイン オブジェクトに対しても、カスタム プロパティを作成できます。これは、メモリ内のデザイン オブジェクトにスクリプトからの情報を追記する場合に有益です。次の例では、セル オブジェクトに対して SELECTED というプロパティを作成しています。プロパティ値は整数として定義されます。

create_property SELECTED cell -type int

オブジェクトのクラスにプロパティを作成すると、特定のオブジェクト上で set_property および get_property コマンドを使用して管理し、list_property および report_property コマンドを使用してレポートできます。次の例では、名前が 1 というパターンに一致するすべてのセルの SELECTED プロパティを *aurora_64b66b* に設定しています。

set_property SELECTED 1 [get_cells -hier *aurora_64b66b*]