オブジェクトのリストの処理 - 2022.1 日本語

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

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

get_* コマンドを使用すると、返されたオブジェクトは標準の Tcl リストと同様で、同じように機能しますが、Vivado Design Suite ではオブジェクトの 1 つのクラスのコンテナー (セル、ネット、ピン、ポートなど) が返され、標準の Tcl リストとは異なります。ただし、このコンテナーは通常、標準の Tcl リストと同様で、同じよう機能します。オブジェクトのコンテナーは Vivado Design Suite で自動的に処理されるので、ユーザーが意識する必要はありません。たとえば、標準 Tcl コマンド llength をオブジェクトのコンテナーに対して使用し (get_cells の結果など)、通常の Tcl リストでの場合と同様に、コンテナーに含まれるエレメントの数を取得できます。

Vivado Design Suite のリストを処理するビルトインの Tcl コマンドは、オブジェクトおよびオブジェクトのコンテナーを完全にサポートするため拡張されています。たとえば、lsortlappendlindex、および llength は、オブジェクトの NAME プロパティに基づいてコンテナーを制御するよう拡張されています。これらのコマンドは、オブジェクトのコンテナーが渡された場合、オブジェクトのコンテナーを返します。たとえば、lsort は、get_cells で取得したセルのコンテナーを、オブジェクトの階層名に基づいて並べ替えます。

lappend を使用するなどしてコンテナーにオブジェクトを追加できますが、現在コンテナーに含まれるオブジェクトと同じタイプのオブジェクトしか追加できません。リストに異なるタイプのオブジェクトや文字列を追加しようとすると、Tcl エラーが返されます。

次の例では、Vivado のコンテナーを降順に並べ替え、puts コマンドと foreach ループを使用して、オブジェクトを 1 行に 1 つずつ表示しています。

foreach X [lsort -decreasing [get_cells]] {puts $X}
wbArbEngine
usb_vbus_pad_1_i_IBUF_inst
usb_vbus_pad_0_i_IBUF_inst
usbEngine1
usbEngine0
...
注記: lappend コマンドは Tcl コンソールでサポートされますが、read_xdc コマンドで読み込む XDC 制約ファイルではサポートされません。ただし、lappend コマンドで取得したリストを read_xdc コマンドと互換性を持たせるように変換できます。次のようなコードがあるとします。
set myClocks {}
lappend myClocks [get_clocks CLK1]
lappend myClocks [get_clocks CLK2]
lappend myClocks [get_clocks CLK3]

Tcl 変数 myClocks を、read_xdc コマンドと互換性を持たせるようにするには、次のようにします。

set myClocks [list [get_clocks CLK1] \
                       [get_clocks CLK2] \
                       [get_clocks CLK3] \
                ]