你能帮我解决下面的脚本吗?
这是Synopsys IC Compiler II将提供的Tcl脚本。
set_dont_use [get_lib_cells */*CKGT*0P*] -power
set_dont_use [get_lib_cells */*CKTT*0P*] -setup
我是否知道如何只使用*/*CKGT*0P*
和*/*CKTT*0P*
并将这些内容分配给变量。
答案 0 :(得分:1)
当然,您可以将Tcl脚本视为您搜索的内容;毕竟它只是一个包含文本的文件。
让我们编写一个脚本来选择文本。当然,这将是一个Tcl脚本。为了便于阅读,我将把正则表达式本身放在一个全局变量中;把它当成一个常数。 (在较大的脚本中,我发现为RE提供这样的名称有很多帮助,因为这些名称可以用来提醒我正则表达式的目的。我会称之为“{ {1}}“这里。”
RE
RE上面的关键事项?它是 in braces 以减少反斜杠。文字方括号被反击。括号中的位是我们捕获到set f [open theScript.tcl]
# Even with 10 million lines, modern computers will chew through it rapidly
set lines [split [read $f] "\n"]
close $f
# This RE will match the sample lines you've told us about; it might need tuning
# for other inputs (and knowing what's best is part of the art of RE writing)
set RE {^set_dont_use \[get_lib_cells ([\w*/]+)\] -\w+$}
foreach line $lines {
if {[regexp $RE $line -> term]} {
# At this point, the part you want is assigned to $term
puts "FOUND: $term"
}
}
变量的位。 term
匹配由“标准 w ord字符”加[\w*/]+
和*
组成的集合中的一个或多个字符的序列。
/
使用regexp
作为忽略变量的有趣名称。我原本可以称之为->
;当RE匹配时,它将在其中包含整个匹配的字符串,但是我们已经在dummy
中使用了,因为我们正在使用完全锚定的RE。但我喜欢使用$term
作为“将子匹配分配到这些”的助记符。此外,->
的正式结果是RE匹配的次数;没有regexp
选项,这实际上是一个布尔值,恰好在匹配时是真的,这很有用。非常有用。
答案 1 :(得分:0)
要将任何命令<command>
的输出分配给名为<name>
的变量,请使用set <name> [<command>]
:
> set hello_length [string length hello]
5
> puts "The length of 'hello' is $hello_length."
The length of 'hello' is 5.
在你的情况下,也许这就是你想要的? (但我仍然不太明白这个问题。)
set ckgt_cells [get_lib_cells */*CKGT*0P*]
set cktt_cells [get_lib_cells */*CKTT*0P*]