TCL语言基础

- 2 mins

Tclsh是一个从标准输入流或从文件中读取tcl命令并执行他们的类shell应用。

在数字集成电路设计中,Tcl语言无处不在使用,下面用张表格来说明:

功能 工具 语言
数字综合 DC/Genus TCL
DFT Tessent/Dftmax TCL
布局布线 lnnovus/ICC2 TCL
静态时序仿真 PT/Tempus TCL
功耗分析 Redhawk/Voltus TCL
版图工具 Calibredrv TCL
物理验证 Calibre/PVS SVRF/TCL
形式验证 LEC/Formality TCL

可见,TCL在这方面使用之广。

基本类型

符号

变量

set 变量名 值

# 如果想在变量后面追加_1,做法如下:
set a 2
puts ${a}_1
# output 2_1

数组

set 数组名(属性名)# eg.
set cell(attr1) "name"
set cell(attr2) "ref"
# 数组名为cell,有两个属性,一个attr1,一个attr2

# array命令可以获取数组的相关信息
array size cell
# output 2
array names cell
# output attr1 attr2

列表

set 列表名 {元素1 元素2 元素3}

# 有以下这些命令可以对列表进行操作
# concat:合并列表
# lindex:选取列表中的某个元素,下标从0开始
# lappend:在列表末端追加元素
# lsort:列表排序,-real可以浮点数排序,-uniqe可以唯一化

控制语句

条件语句

if {condition} {
statements
} elseif {condition} {
statements
} else {
statements
}
# 必须按照这个格式

循环语句

foreach

foreach 变量 列表 循环体

# eg.
set list1 {3 2 1}
for i $list1 {
puts $i
}
# output 3\n2\n1

也有breakcontinue,和C语言类似。

while

while {condition} {statements}

for

for {initialize} {condition} {step length} {statements}

# eg.
for {set i 3} {$i > 0} {incr i -1} {
puts $i
}
# 3
# 2
# 1

函数

过程函数

proc 函数名 参数列表 函数主体

# eg.
proc add {a b} {
set sum [expr $a + $b]
return $sum
}

全局变量

在所有过程之外定义的变量

局部变量

在过程中定义的变量

如果想要在过程中使用全局变量可以使用global命令,例如,global a,使用全局变量a

文本处理

打开文件

open 文件名 权限

# eg.
set afile [open a.txt r]

读取文件

gets 文件变量 变量名
# 会从中读取一行

关闭文件

close 文件变量

# eg.
close afile

综合软件当中常见的TCL指令

使用-f可以用来过滤;使用-of得到指定object相连的object

Pei Meng

Pei Meng

Someone who interested in Computer Architecture.