get_*
を使用してデザイン オブジェクトを検索する場合、通常必要なのは一部のオブジェクトのみです。デザインのすべてのネットリスト オブジェクトは必要なく、たとえば特定のタイプのセルや特定の名前のネットのみなどが必要です。要素の一部のみが返されるようにする必要があることもあります。
ワイルドカード * および ? を使用したり、-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} ]
-hierarchical
も含めたコマンドのほかのオプションにかかわらず、検索パターンは完全な NAME 文字列に対して評価されます。
-filter
オプションにより、Vivado は結果をフィルターしてから返します。ただし、フィルターを適用する前の検索結果を変数に代入している場合は、それがメモリに保存されます。filter
コマンドを使用すると、変数として保存されているリストも含め、オブジェクトの任意のリストの内容をフィルターできます。先ほどの例の場合、$unLoced
に保存されているリストを次のようにフィルターできます。
set unLocedLeaf [filter $unLoced {IS_PRIMITIVE}]
この例では、$unLoced に保存されている結果をフィルターし、デザインのプリミティブ インスタンスのみを返しています。
filter
コマンドでは元の Tcl 変数は変更されないので、結果を別の Tcl 変数に保存する必要があります。フィルター パターンに使用できる演算子は等価 (==)、不等価 (!=)、含める (=~)、含めない (!~) です。数値比較演算子 <、>、<=、および >= も使用できます。複数のフィルター式を AND (&&) および OR (||) で組み合わせることもできます。