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
に代入し、その変数 ($inst
) に対して puts
コマンドおよび report_property
コマンドを実行した結果を示します。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*]