ループの制御 - 2023.2 日本語

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

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

Tcl には、forforeachwhile など、コードのセクションを繰り返すビルトイン コマンドがあります。

これらのコマンドの構文は、次のとおりです。

for <start testCondition next body>
foreach <varname list body>
while <testCondition body>

上記のコマンドでは、各反復で Tcl スクリプトの body 全体が実行されますが、Tcl にはループの制御フローを変更する break および continue の 2 つのコマンドがあります。

break 文はループ コマンドを中止するために使用し、continue 文はループの次の反復にジャンプするために使用します。

注記: プロシージャ内で実行する場合、ループは return コマンドを使用して中止できます。この場合、ループが中止されるだけでなく、制御もループを呼び出したプロシージャに戻されます。

たとえば、1 行に 1 つのインスタンス名を含む、セル名がリストされたファイルがあるとします。次のサンプル コードは、このファイルを読み込み、現在デザインに存在するセル名のみを含む Tcl リストを作成します。先ほど示した get_file_content プロシージャを再利用しています。現在のデザインで見つからないセル名が指定の数を超えた場合、ファイルの処理を停止します。

set valid_cell_names [list]
set error 0
set max_errors 1000
foreach line [split [get_file_content ./all_cell_names.lst] \n] {
  if {[get_cells $line] == {}} {
    # cell name not found
    puts " Error - cell $line not found "
    incr error
    if {$error > $max_errors} {
      puts " Too many errors occured. Cannot continue "
      break
    } else {
      # Go to next cell name
      continue
    }
  }
  lappend valid_cell_names $line
}
puts " [llength $valid_cell_names] valid cells have been found "