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
在这方面使用之广。
基本类型
符号
$
:解析变量,类似于shell
。[]
:内置转换,类似于shell
的$()
。\
:转义字符。{}
:内部都是普通字符,类似于shell
的""
。
变量
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
也有break
和continue
,和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指令
get_ports
:返回设计中对应的端口get_cells
:返回设计中对应的cell
get_nets
:返回设计中的网表get_pins
:返回设计中的针脚
使用-f
可以用来过滤;使用-of
得到指定object
相连的object
。