数字IC设计随笔之七(TCL脚本编程入门)

TCL简介

TCLTool 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格式的库等工艺库相关的文件,用于后端的约束文件等,需要由工具中特定的命令进行操作。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值