-return_string
オプションを使用すると、report_*
コマンドの出力を stdout
ではなく Tcl 文字列として返すことができます。文字列は Tcl 変数に代入したり、解析または処理できます。
set rpt [report_timing -return_string]
文字列を変数に代入すると、文字列を処理するさまざまな Tcl コマンドを使用できます。
-
append string [arg1 arg2 ... argN]
- 指定した
args
をstring
の最後に追加します。 -
format formatString [arg1 arg2 ... argN]
-
formatString
テンプレートで指定したフォーマットの形式で文字列が返されます。テンプレートは、sprintf
で使用されるように % 変換指示子を使用して指定する必要があります。追加の引数args
は、フォーマットされた文字列内で置換する値を指定します。 -
reg exp [switches] exp string
- 正規表現
exp
がすべてまたはstring
の一部に一致する場合は 1、それ以外の場合は 0 を返します。-nocase
オプションを指定すると、大文字/小文字は区別されません。 -
string match
pattern
string
-
glob
pattern
がstring
に一致する場合は 1 を返し、一致しない場合は 0 を返します。 -
scan
string
formatString
[
varName1
varName2
...]
- 指定した
string
からvarName
変数に値を抽出し、sscanf
ビヘイビアーのように % 変換指定子を使用してformatString
を適用します。varNames
を指定しない場合は、scan
が値のリストをstdout
に返します。 -
string range
string
first last
-
first
からlast
までの文字インデックスで指定されるstring
文字からの文字の範囲を返します。 -
string compare
string1
string2
- 2 つの文字列の辞書式順序による比較を実行し、
string1
がstring2
より前に来る場合は -1、同じ場合は 0、string1
がstring2
より後に来る場合は 1 を返します。 -
string last
string1
string2
-
string1
の最後に出現したstring2
の文字インデックスを返します。string1
でstring2
が見つからなかった場合は -1 を返します。 -
string length
string
-
string
の文字数を返します。
次の例では、report_timing
を使用して $report
コマンドの結果を -return_string
Tcl 変数に代入し、各パスの始点、終点、パス グループ、およびパス タイプを抽出して、最後にそのパスのサマリを Tcl コンソールに出力しています。
# Capture return string of timing report, and assign variables
set report [report_timing -return_string -max_paths 10]
set startPoint {}
set endPoint {}
set pathGroup {}
set pathType {}
# Write the header for string output
puts [format " %-12s %-12s %-20s -> %-20s" "Path Type" "Path Group" "Start Point" "End Point"]
puts [format " %-12s %-12s %-20s -> %-20s" "---------" "----------" "-----------" "---------"]
# Split the return string into multiple lines to allow line by line processing
foreach line [split $report \n] {
if {[regexp -nocase -- {^\s*Source:\s*([^[:blank:]]+)((\s+\(?)|$)} $line - startPoint]} {
} elseif {[regexp -nocase -- {^\s*Destination:\s*([^[:blank:]]+)((\s+\(?)|$)} $line - endPoint]} {
} elseif {[regexp -nocase -- {^\s*Path Group:\s*([^[:blank:]]+)\s*$} $line - pathGroup]} {
} elseif {[regexp -nocase -- {^\s*Path Type:\s*([^[:blank:]]+)((\s+\(?)|$)} $line - pathType]} {
puts [format " %-12s %-12s %-20s -> %-20s" $pathType $pathGroup $startPoint $endPoint]
}
}
次は、このコードの出力例です。
Path Type Path Group Start Point -> End Point
--------- ---------- ----------- -> ---------
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[0]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[10]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[11]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[12]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[13]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[14]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[15]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[16]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[17]
Setup bftClk ingressLoop[0]/ram/CLKBWRCLK -> transformLoop[0].ct/xOutReg_reg/A[18]