Vivado Design Suite では、get_*
コマンドを使用してオブジェクトのサブセットを選択する方法が複数あります。-hierarchical
オプションと組み合わせて -filter
オプションや -regexp
オプションを使用することもできます。
次の表に、コマンドで指定したパターンに対する -hierarchical
/-filter
/-regexp
オプションの効果を示します。
get_* [-hierarchical] [-filter] [-regexp] pattern
-hierarchical | -filter | -regexp | 結果 |
---|---|---|---|
Pattern は現在の階層レベル (current_instance ) にあるオブジェクトのローカル名と比較されます。 |
|||
あり |
Pattern は現在の階層レベル (current_instance ) およびその下位にあるオブジェクトのローカル名と比較されます。 |
||
あり |
Pattern は現在の階層レベル (current_instance ) にあるオブジェクトに適用されるフィルター式となります。NAME プロパティがオブジェクトの完全な階層名と比較されます。 |
||
〇 | 〇 |
Pattern は現在の階層レベル (current_instance ) およびその下位にあるオブジェクトに適用されるフィルター式となります。NAME プロパティがオブジェクトの完全な階層名と比較されます。 |
|
あり |
Pattern は正規表現として現在の階層レベル (current_instance ) にあるオブジェクトのローカル名と比較されます。 |
||
〇 | 〇 |
Pattern は正規表現として現在の階層レベル (current_instance ) およびその下位にあるオブジェクトのローカル名と比較されます。 |
|
〇 | 〇 |
Pattern は現在の階層レベル (current_instance ) にあるオブジェクトに適用されるフィルター式となります。NAME プロパティがオブジェクトの完全な階層名と比較されます。フィルター式は、正規表現として適用されます。 |
|
〇 | 〇 | 〇 |
Pattern は現在の階層レベル (current_instance ) およびその下位にあるオブジェクトに適用されるフィルター式となります。NAME プロパティがオブジェクトの完全な階層名と比較されます。フィルター式は、正規表現として適用されます。 |
current_instance
) からの名前の一部です。親階層から継承された部分の名前は含まれません。-filter
オプションはフィルター式を指定し、式内のパターン比較はグローバル条件式のフォーマットに従います。フィルター式ではオブジェクトのプロパティに基づく文字列の比較が実行され、必要に応じて複雑なものにできます。フィルター式に NAME
プロパティを使用すると、文字列比較にオブジェクトのローカル名ではなく完全な階層名が使用されます。ただし、現在の階層レベル (current_instance
) に含まれるオブジェクトのみが検索されます。-hierarchical
を -filter
と共に使用すると、現在の階層レベルおよびその下位にあるオブジェクトに対してフィルター処理が実行されます。-regexp
を -filter
と共に使用すると、フィルター式内のパターン比較は正規表現に従います。-regexp
は、コマンドに指定された検索パターンが正規表現であることを示します。* . [ ] +
などの一部の文字は正規表現では特別な意味を持つので、注意が必要です。正規表現でこれらの文字をリテラルとして使用する場合は、エスケープ処理する必要があります。文字列比較では大文字と小文字が区別され、常に検索文字列の冒頭および末尾にアンカーされています。検索文字列のサブ文字列を比較する場合は、正規表現を使用するかどうかによって、次の構文を使用します。
- 正規表現を使用する場合 (
-regexp
のみ):.*<substring>.*
- パターンがグローバル条件式のフォーマットに従う場合 (その他のオプション):
*<substring>*
次に、cpu_hdl
に基づく例を示します。このプロジェクトは Vivado IDE の Getting Started ページで [Open Example Project] リンクをクリックして開くことができます。
- 現在のインスタンスを
fftEngine/fftInst/ingressLoop[7].ingressFifo
に変更:vivado% current_instance fftEngine/fftInst/ingressLoop[7].ingressFifo fftEngine/fftInst/ingressLoop[7].ingressFifo
- 現在のインスタンスの下にあるすべてのセルを取得 (階層セルは 1 つのみ):
vivado% get_cells fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo vivado% get_cells -hier fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo/infer_fifo.two_rd_addr_reg [8]_i_1__29 … (154 other cells)
- 現在のインスタンスおよびその下位にあるセルのローカル名には、
ingressLoop
は含まれません。文字列ingressLoop
は親セルから継承されたものであり、完全な階層名の一部です。vivado% get_cells *ingressLoop* WARNING: [Vivado 12-180] No cells matched '*ingressLoop*'. vivado% get_cells *ingressLoop* -hier WARNING: [Vivado 12-180] No cells matched '*ingressLoop*'.
-
-filter
オプションを使用すると、NAME
プロパティは完全な階層名と一致します。vivado% get_cells -filter {NAME =~ *ingressLoop*} fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo vivado% get_cells -filter {NAME =~ *ingressLoop*} -hier fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo/infer_fifo.two_rd_addr_reg [8]_i_1__29 … (154 other cells)
-
*reg[*]*
パターンに一致するセルを検索:vivado% get_cells *reg[*]* WARNING: [Vivado 12-180] No cells matched '*reg[*]*'. vivado% get_cells *reg[*]* -hier fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo/infer_fifo.wr_addr_reg[9]_ i_1__15 … (109 other cells) vivado% get_cells -hier -regexp {.*reg\[.*\].*} fftEngine/fftInst/ingressLoop[7].ingressFifo/buffer_fifo/infer_fifo.wr_addr_reg[9]_ i_1__15 … (109 other cells) vivado% get_cells -hier -regexp {.*reg[.*].*} WARNING: [Vivado 12-180] No cells matched '.*reg[.*].*'.
最後のクエリ get_cells -hier -regexp {.*reg[.*].*}
で一致するセルがないのは、角かっこ []
がエスケープ処理されていないため、セル名のリテラル文字としてではなく、正規表現の特殊文字として扱われているからです。
フィルター式で値の範囲を指定する必要がある場合は、-regexp
に加えて -filter
オプションを使用する必要があります。たとえば、次のコードでは *reg[0]*
から *reg[16]*
までのセルのみが取得されます。この正規表現は .*reg\[[0-9]\].*
または .*reg\[1[0-6]\].*
に一致するものを検索します。
expanse="page">vivado% get_cells -hierarchical -regexp -filter {NAME =~ ".*reg\[([0-9]||1[0-6])\].*"}
次の例では、どちらのコマンドも、CLB*X*Y*
に一致するタイルで、CLB*X1Y*
から CLB*X16Y*
(X
が 1 ~ 16) を除くものが返されます。
expanse="page">vivado% get_tiles -regexp -filter {NAME !~ "CLB.*X([1][0-6]|[0-9])Y.*" && TYPE=~ "CLB.*"}
expanse="page">vivado% get_tiles -regexp -filter {NAME !~ "CLB.*X1[0-6]Y.*" && NAME !~ "CLB.*X[1-9]Y.*" &&
TYPE=~ "CLB.*"}