Tcl スクリプトを記述する際は、コーナー ケース (まれにしか発生しないケース) およびコードでエラーが発生する可能性のある条件を必ずチェックすることをお勧めします。適切なチェックを実行することにより、スクリプトの問題やスクリプトが正しく使用されていないときにユーザーにメッセージを表示できます。チェックを正しく実行しない場合、何が問題なのか、何を直したらよいかなどの情報なしで、スクリプトが停止してしまいます。
例 1: ファイルを読み出し/書き込みで開いたときのチェック (スクリプトに問題がある例)。
if {[file exists $filename]} {
set FH [open $filename r]
if {$FH != {}} {
# The file is opened, do something
# …
close $FH
} else {
puts " File $filename could not be opened"
}
} else {
puts " File $filename does not exist"
}
上記のスクリプトのアルゴリズムは正しいように見えますが、open
コマンドで下位レベルの Tcl エラー (TCL_ERROR) が生成され、ファイルを開けなかった場合にスクリプトが停止します。例 3 では、このスクリプトを改善した例を示します。
例 2: get_*
コマンドを使用した後に Vivado オブジェクトが有効であるかをチェック。
proc get_pin_dir { pinName } {
if {$pinName == {}} {
puts " Error - no pin name provided"
return {}
}
set pin [get_pins $pinName]
if {$pin == {}} {
puts " Error - pin $pinName does not exist"
return {}
}
set direction [get_property DIRECTION $pin]
return $direction
}
Vivado オブジェクトがほかのコマンド (filter
、get_*
など) 内で使用される場合、get_*
コマンドを使用した後にこれらのオブジェクトが実際に存在するかどうかを確認することが特に重要です。