数字IC设计随笔之七(TCL脚本编程入门)
TCL简介
TCL是Tool Command Language的缩写,主要应用在芯片设计领域中。TCL脚本程序是一系列命令构成的集合,在芯片设计工具中,便于流程化执行,提高效率。
TCL语言与其它脚本语言perl、python类似,作为一种解释型语言,逐行解释执行,出错时将停止运行。TCL语言处理的最基本的对象是字符串,因此,不可以直接进行数学表达式的计算,但可以通过命令进行数学计算,同时可以通过命令创建特殊的数据类型,例如列表(List),数组(Array)等。
TCL语言语法结构为:Command Arg1 Arg2,Command为待执行的命令,Arg1和Arg2为后面跟随的参数,参数的个数根据命令不同而定,对于set命令而言,定义一个变量,其后跟随的第一个参数为变量名,第二个参数为变量的值。在TCL中,命令后跟随的参数可以是其它命令执行的结果,比如Command1 [Command2 Arg1 Arg2],简化编程操作。
特殊符号
特殊符号 | 使用含义 |
---|---|
$ | 变量引用 |
[ ] | 嵌套命令 |
“ ” | 变量引用替换,字符串中的变量引用将会替换为变量值 |
{ } | 字符串中变量引用不做值替换 |
\ | 续行符或转义符 |
脚本示例
puts "hello xiongdei"
#Variable,Mathematical Expressions
set var1 10
set var2 20
puts [expr $var1+$var2]
#string
set x 100
set str1 "print special char : $x"
set str2 {print special char : $x}
puts $str1
puts $str2
set num [llength $str1]
puts [format "%s has %d elements" $str1 $num]
scan $str1 "print special %s : %d" s1 s2
puts $s1
puts $s2
puts [string length $str1]
puts [string toupper $str1]
puts [string trimleft $str1 "print"]
puts [string trimright $str1 "print"]
puts [string trim $str1 "print"]
puts [string range $str1 0 6]
puts [string equal $str1 $str2]
puts "regular expression"
regexp {([0-9]+)} $str1 s1 s2 s3
puts $s1
puts $s2
puts $s3
puts [string repeat $str1 2]
#list
set str1 "are you ok"
set str2 {are you ok}
puts $str1
puts $str2
puts [lindex $str1 0]
puts [lindex $str2 1]
puts "TCL list operating"
set a [concat {1 2} {3 4}]
puts $a
puts [lindex $a 2]
puts [llength $a]
puts [linsert $a 2 5]
set x [list A B C {D E} F G H I]
puts [lreplace $x 3 3]
puts [lreplace $x 3 4 {A B} {C D}]
set x "1 2 3 4 5 6 7 8 9"
puts [lrange $x 4 end]
#input parameter must be variable name, not reference
set x "wahaha"
set y [lappend x "shuangweiwei"]
puts $y
unset y
set x "love wahaha and shuangweiwei"
puts [lindex $x [lsearch $x w*]]
# available options :-ascii, -command, -decreasing, -dictionary,
# -increasing, -index, -integer, -real, or -unique
set x "wa ha ha shuang wei wei"
puts [lsort -ascii $x]
set x "7 5 4 9 8 3 1 5 6 4 2 5"
puts [lsort -increasing $x]
set x "wa,ha,ha"
puts [split $x ","]
set x "haha {123} heihei"
puts [join $x ","]
#Associative arrays
set y(x) 10
puts $y(x)
#condition
set a 10
if { $a < 20} {
puts "true"
}
#loop
for {set i 0} {$i < 10} {incr i} {
puts $i
}
set d Wen; #Sat Sun
switch $d {
Mon { puts "Monday" }
Tue { puts "Tuesday" }
Wen { puts "Wednesday" }
Thur { puts "Thursday" }
Fri {puts "Friday"}
default { puts "weekend" }
}
set color "red green blue black"
foreach cr $color {
puts $cr
}
#proc
proc add {a {b 10}} {
set s [expr $a+$b]
return $s
}
set b [add 10]
puts "$b"
set b [add 10 15]
puts "$b"
该入门示例包含了TCL脚本中最基本的一些操作,主要包含字符串输出相关操作,数学表达式的计算,列表和列表相关操作,循环和条件判断以及过程的定义。
考虑到在芯片设计中,文件具有特殊的格式,比如verilog格式的源文件,db格式的库等工艺库相关的文件,用于后端的约束文件等,需要由工具中特定的命令进行操作。