Tcl の概要 - 2022.1 日本語

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

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

Tcl スクリプトは、改行またはセミコロンで区切られた一連の Tcl コマンドです。Tcl コマンドは、スペースまたはタブで区切られた単語の文字列です。Tcl インタープリターはコマンド ラインを単語に分割し、必要に応じてコマンドおよび変数置換を実行します。コマンド ラインは左から右に読み込まれ、各単語が完全に評価されてから次の単語が評価されます。コマンドおよび変数置換は、左から右に実行されます。

単語は、1 つの単語または中かっこ ({}) またはダブルクォーテーション ("") で囲まれた複数の単語です。中かっこまたはダブルクォーテーション内のセミコロン、中かっこ、タブ、スペース、改行は、通常の文字として処理されますが、バックスラッシュ (\) はこの後説明するように、中かっこまたはダブルクォーテーション内でも特殊文字として処理されます。

最初の単語はコマンドとして扱われ、その後の単語は引数としてコマンドに渡されます。

set outputDir ./Tutorial_Created_Data/cpu_output 

この例では、最初の単語は Tcl set コマンドで、値を割り当てるために使用します。2 番目の単語は変数名 (set)、3 番目の単語は変数値 (outputDir) として ./Tutorial_Created_Data/cpu_output コマンドに渡されます。

単語にバックスラッシュ (\) が使用されている場合、Tcl インタープリターによりバックスラッシュ置換が実行されます。ほとんどの場合、バックスラッシュの次の文字は標準文字として処理されます。これを使用して、ダブルクォーテーション、中かっこ、ドル記号などの特殊文字を文字列に追加できます。Tcl インタープリターでバックスラッシュ文字がどのように処理されるかは、Tcl/Tk のリファレンスを参照してください。

puts $outputDir 
./Tutorial_Created_Data/cpu_output
puts \$outputDir 
$outputDir 

中かっことダブルクォーテーション マークの使用法も異なります。中かっこ内の文字に対しては、置換は実行されません。中かっこ内の単語や文字列はそのまま処理され、変数またはコマンド置換のために評価されません。次の例に示すように、単語は中かっこに囲まれたそのままの文字列 (中かっこは含まない) となります。ダブルクォーテーションに囲まれた文字列は評価され、変数およびコマンド置換が必要に応じて実行されます。ダブルクォーテーションに囲まれた文字列に対してコマンド置換、変数置換、およびバックスラッシュ置換が実行されます。

puts {The version of Vivado Design Suite is [version -short]}
The version of Vivado Design Suite is [version -short]
puts "The version of Vivado Design Suite is [version -short]"
The version of Vivado Design Suite is 2018.1

上記の例で、ダブルクォーテーションを使用した 2 番目の例では [version -short] コマンドが戻り値で置換されていますが、中かっこを使用した 1 番目の例では置換が実行されていないことに注目してください。文字列を囲む場合には、このことに注意してダブルクォーテーションまたは中かっこを選択してください。

変数に値を代入するには、set コマンドを使用します。変数を参照するには、変数名の前にドル記号 ($) を付けて指定します。単語がドル記号で開始している場合、Tcl インタープリターで変数置換が実行され、変数が現在その変数に保存されている値に置換されます。Tcl では、$ は予約語です。

set outputDir ./Tutorial_Created_Data/cpu_output
puts $outputDir
./Tutorial_Created_Data/cpu_output

角かっこ ([ ]) を使用すると、コマンド内にコマンドをネストできます。ネストされたコマンドは、左から右にボトムアップに評価されます。角かっこ内の文字列が新しい Tcl スクリプトとして反復的に処理されます。ネストされたコマンドに、さらにコマンドをネストさせることもできます。ネストされたコマンドの結果がその上位のコマンドに渡されてから、その上位のコマンドが処理されます。

set listCells [lsort [get_cells]]

上記の例では、現在のデザインの最上位にあるセル オブジェクトがアルファベット順に並べ替えられ、そのリストが listCells 変数に代入されます。まず get_cells コマンドが実行され、返されたオブジェクトが lsort コマンドで並べ替えられて、並べ替えが終了したリストが変数に代入されます。

ただし Vivado Design Suite では、角かっこの処理は標準の Tcl と多少異なります。角かっこは Verilog および VHDL の名前 (ネット、インスタンスなど) では標準文字として処理され、通常はバスやインスタンスの配列など、ベクターの 1 つまたは複数の要素を示します。Vivado Design Suite ツールでは、角かっこがネットリスト オブジェクト名の一部である場合はボトムアップに評価されません。

次の 3 つのコマンドは同等です。

1.) set list_of_pins [get_pins transformLoop[0].ct/xOutReg_reg/CARRYOUT[*] ]
2.) set list_of_pins [get_pins {transformLoop[0].ct/xOutReg_reg/CARRYOUT[*] } ]
3.) set list_of_pins [get_pins transformLoop\[0\].ct/xOutReg_reg/CARRYOUT\[*\] ]

1) では、外側の角かっこは標準の Tcl と同様にコマンドのネスト ([get_pins]) を表しますが、内側の角かっこは Vivado ツールでは指定したオブジェクト名の一部として処理されます (transformLoop[0])。Vivado Design Suite ではこれが自動的に処理されますが、一部の文字に限られます。これらの文字は次のいずれかの形式にする必要があり、それ以外の場合は角かっこは標準の Tcl と同様に評価されます。

  • star: [*]: 任意の数のビットまたはインスタンスを示すワイルドカードです。
  • integer: [12]: 特定のビットまたはインスタンスを指定します。

2) では、中かっこを使用して内側の角かっこ内の文字列がコマンド置換されないようにしており、オブジェクト名の一部として処理されます (transformLoop[0])。

3) では、バックスラッシュを使用して角かっこを特殊文字でなく標準文字として評価するよう指定しており、コマンド置換は実行されません。

2) および 3) は角かっこが適切に処理されるようにする方法を示していますが、中かっこまたはバックスラッシュを手動で追加する必要があります。1) は、これが Vivado Design Suite で自動的に処理されることを示しています。

Tcl スクリプトにコメントを追加するには、行を # で開始します。# の後に続く次の改行までの文字は、無視されます。行の最後にコメントを追加するには、次の例に示すように、コマンドの最後にセミコロン ( ; ) を記述し、その後に # を追加してコメントを記述します。

# This is a comment
puts "This is a command"; # followed by a comment