get_*
コマンドでは、通常のエレメントの Tcl リストが作成されるのではなく、オブジェクトの Vivado コレクションが作成されます。Vivado コレクションは、通常の Tcl リストと同じように動作するよう構成されています。このプロセスは、ユーザーにも Tcl にもトランスペアレントです。Vivado コレクションは Tcl リストと同様に動作し、同じコマンドで同じように処理されます。
Vivado コレクションは、Vivado オブジェクトを処理する際のランタイムを短縮し、メモリ使用量を削減するために導入されました。
Vivado コレクションを文字列に変換すると、変換されるオブジェクトの数が制限される場合があります。たとえば、Tcl コンソールにインスタンスのリストを表示する際に、リスト (実際には Vivado コレクション) に 100,000 個のインスタンスが含まれる場合、最初の 500 個 (デフォルトの制限) のみが表示されます。これにより、Tcl コンソールに極端に長い文字列が表示されるのを防ぐことができます。
オブジェクトの Vivado コレクションの文字列表現について、理解しておくことが重要です。コレクションの文字列表現に含まれるオブジェクトの最大数は、tcl.collectionResultDisplayLimit
パラメーターで指定します。
tcl.collectionResultDisplayLimit 500 integer true
このパラメーターでは、コレクションを表示するコマンドで表示可能なエレメントの最大数を指定します。0 に設定すると、制限なしになります。デフォルトは 500 です。次に例を示します。
set_param tcl.collectionResultDisplayLimit 0
set_param tcl.collectionResultDisplayLimit 1000
Vivado コレクションに tcl.collectionResultDisplayLimit
パラメーターで指定されている制限を超える数のエレメントが含まれる場合、その制限数のエレメントが文字列に変換され、文字列の最後に「...」が追加されて、元のコレクションにさらにエレメントが含まれていることが示されます。
tcl.collectionResultDisplayLimit
パラメーターは、Vivado コレクションの文字列表現にのみ適用され、通常の Tcl リストの文字列表現には適用されません。たとえば、デザインに 20000 個のインスタンスが含まれているとします。
vivado% set cells [get_cells -hier]
vivado% llength $cells
20000
vivado% set var [join $cells "\n"]
vivado% llength $var
501
vivado% lindex $var end
...