フィルター結果 - 2023.2 日本語

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

Document ID
UG894
Release Date
2023-11-17
Version
2023.2 日本語

get_* を使用してデザイン オブジェクトを検索する場合、通常必要なのは一部のオブジェクトのみです。デザインのすべてのネットリスト オブジェクトは必要なく、たとえば特定のタイプのセルや特定の名前のネットのみなどが必要です。要素の一部のみが返されるようにする必要があることもあります。

図 1. 階層デザインの検索

ワイルドカード * および ? を使用したり、-regexp を使用したりして検索パターンを指定し、返される検索結果を制限できます。検索する階層範囲を指定するには、current_instance コマンドまたは -hierarchy オプションを使用します。

たとえば、次の式は異なる結果を返します。

get_cells * ; # Returns 2 cells: A,B
get_cells -hier * ; # Returns all cells of the design (leaf and hierarchical)
get_cells -hier * -filter {NAME =~ */?1/*} ; # Returns 3 cells: A/a1/data0_i,
                                                      # A/a1/data_reg, B/b1/data_reg

-filter オプションを使用すると、get_* コマンドの結果を特定のプロパティに基づいてフィルターできます。たとえば次のコマンドでは、階層名が「B/b*」で開始するすべてのセルのうち、ユーザーにより配置されていないもの (IS_LOC_FIXED が FALSE または 0) のものが返されます。

set unLoced [ get_cells -hier -filter {NAME =~ B/b* && !IS_LOC_FIXED} ]
重要: NAME プロパティには、オブジェクトの完全な階層名が含まれます。NAME プロパティをフィルターする場合、-hierarchical も含めたコマンドのほかのオプションにかかわらず、検索パターンは完全な NAME 文字列に対して評価されます。

-filter オプションにより、Vivado は結果をフィルターしてから返します。ただし、フィルターを適用する前の検索結果を変数に代入している場合は、それがメモリに保存されます。filter コマンドを使用すると、変数として保存されているリストも含め、オブジェクトの任意のリストの内容をフィルターできます。先ほどの例の場合、$unLoced に保存されているリストを次のようにフィルターできます。

set unLocedLeaf [filter $unLoced {IS_PRIMITIVE}]

この例では、$unLoced に保存されている結果をフィルターし、デザインのプリミティブ インスタンスのみを返しています。

重要: filter コマンドでは元の Tcl 変数は変更されないので、結果を別の Tcl 変数に保存する必要があります。
ヒント: 上記の例で、ブール型プロパティ IS_LOC_FIXED および IS_PRIMITIVE が直接使用されていることに注目してください。ブール型 (bool) プロパティでは、フィルター式が True か False かを直接評価できます。

フィルター パターンに使用できる演算子は等価 (==)、不等価 (!=)、含める (=~)、含めない (!~) です。数値比較演算子 <、>、<=、および >= も使用できます。複数のフィルター式を AND (&&) および OR (||) で組み合わせることもできます。