1. 概述
TCL是数集集成电路设计中常用的语言:
TCL、Perl、Python、csh语言的异同:
如何启动TCL:
- Linux系统下
- 输入tclsh,直接输入tcl命令
- 编写tcl脚本,在终端执行命令:tclsh xxx.tcl
- Windows系统下
- 安装active tcl并双击wish.exe
置换
TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。
TCL置换分为以下三类:
1. 变量置换$
用$
表示变量置换,TCL解释器会将认为$
后面为变量名,将变量置换成它的值。举例:
% set a "snow"
snow
% puts $a
snow
% puts a
a
2. 命令置换[]
用[]
表示命令置换,[]
内是一个独立的TCL语句,举例:
% set a [expr 3+4]
7
% puts $a
7
3. 反斜杠置换
用表示反斜杠置换,
换行符
、空格
、[
、$
等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。举例:
% puts "[expr $X + $Y]"
2.5
% puts "[expr $X + $Y]"
[expr 1.2 +1.3]
% puts"[expr |$X +|$Y]" [expr $X + $Y]
反斜杠置换
用t
表示TAB,用n
表示换行符,举例:
% puts "atb"
a b
% puts "anb"
a
b
其他符号
- TCL解释器对双引号
""
中$和[]符号会进行变量置换和命令置换。 - 而在花括号
{}
中,所有特殊字符都将成为普通字符,TCL解释器不会对 其作特殊处理。 #
表示注释。% set X 1.2
1.2
% set Y 1.3
1.3
% puts "t[expr $X +$Y]"
2.5
% puts {t[expr $X + $Y]}
t[expr $X + $Y]
2. 变量、数组、列表、运算
2.1 变量
变量就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。
➢ 定义: set 变量名 变量值
➢ 取值: $变量名
举例:
% set cell "bufx2"
bufx2
% puts $cell
bufx2
% set cell "ivtxasdf"
ivtxasdf
% puts $cell
ivtxasdf
2.2 数组
数组: TCL中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。
➢ 定义: set 数组名(元素名)值
➢ 取值: $数组名(元素名)
➢ 使用array指令获取数组信息
举例:
% set array(m1) "apple"
apple
% set array(m2) 1
1
% puts $array(m1)
apple
% puts $array(m2)
1
% array size array
2
% array names array
m1 m2
2.3列表
➢ 列表是标量的有序集合。
➢ 定义 set 列表名 {元素1 元素2 元素3……}
➢ 取值 $列表名
举例:
% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% puts $fruits
apple banana watermelon peach
Syntax | Description |
---|---|
concat | 合并两个列表 |
lindex | 选取列表中的某个元素 |
llength | 列表长度 |
lappend | 在列表末端追加元素 |
lsort | 列表排序 |
1. 列表指令-concat
% set fruit1 {apple orange}
apple orange
% set fruit2 {peach watermelon}
peach watermelon
% concat $fruit1 $fruit2 #列表合并
apple orange peach watermelon
#合并后的列表无名字,若要添加名字可使用 set <name> [concat $fruit1 $fruit2]
% set total_fruit [concat $fruit1 $fruit2]
apple orange peach watermelon
% puts $total_fruit
apple orange peach watermelon
2. 列表指令-llength
➢ 语法格式 : llength 列表
➢ 功能: 返回列表中的元素个数
% set fruit1 {apple orange}
apple orange
apple orange peach watermelon
% llength $fruit1
2
例题: list1为{bufx1 bufx2 bufx4},那么 llength [concat $list1 $list1] 会得到多少呢?
% set list1 {mem1 mem2 mem3}
mem1 mem2 mem3
% llength [concat $list1 $list1]
6
3. 列表指令-lindex
% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% lindex $fruits 0
apple
% lindex $fruits 1
banana
% lindex $fruits 3
peach
例题: 如何得到列表list1 {a b c d e f}的最后一个元素?
% set list1 {a b c d e f}
a b c d e f
% expr [llength $list1]-1
5
% lindex $list1 [expr [llength $list1]-1]
f
4. 列表指令-lappend
➢ 语法格式 : lappend 列表 新元素
➢ 功能: 列表末尾加入新元素
% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% lappend fruits orange
apple banana watermelon peach orange
% puts $fruits
apple banana watermelon peach orange
例题: 如果我们lappend一个列表会怎么样?
% set a {1 2 3}
1 2 3
% set b {4 5}
4 5
% lappend a $b
1 2 3 {4 5}
例题: 如果我们想得到4 用什么样的命令?
% lindex [lappend a $b] 3
4 5
% lindex [lindex [lappend a $b] 3]0
4
5. 列表指令-lsort
➢ 语法格式 : lsort 开关 列表
➢ 功能: 将列表按照一定规则排序
➢ 开关: 缺省时默认按照ASCII码进行排序。
- –real 按照浮点数值大小排序
- -unique唯一化,删除重复元素
#按照ASICC码排序
% set list1 {c d a f b}
c d a f b
% lsort $list1
a b c d f
#按照数字大小排序
% set list2 {-2 3.1 5 0}
-2 3.1 5 0
% lsort -real {-2 3.1 5 0}
-2 0 3.1 5
#唯一化
% set list3 {a c c b a d}
a c c b a d
% lsort -unique $list3
a b c d
例题:如何得到列表list1 {0 1.2 -4 3 5}中的最小值?
% set list {0 1.2 -4 3 5}
0 1.2 -4 3 5
% lsort -real $list
-4 0 1.2 3 5
% lindex [lsort -real $list] 0
-4
2.4 运算
➢ 数学运算
a + b、a – b、a * b、a / b
➢ 逻辑运算
a <= b、a >= b、a == b、a != b
➢ 数学运算指令-expr
语法格式 : expr 运算表达式
功能: 将运算表达式求值
% expr 4+6
10
% expr 2*8
16
例题:我们在TCL中经常会遇到下面的现象
% expr 5/2
2
其原因是表达式5/2中5和2都是整数型参数, 默认运算结果也是整数型。如果想要进行浮点运算, 只要将其中任意一个数值, 写成浮点形式(有小数点)即可。
% expr 5/2.0
2.5
% expr 5.0/2
2.5
参考资料:
数字集成电路静态时序分析基础_哔哩哔哩_bilibili
别人的好笔记:
静态时序分析STA基础 - 陆路慧 - 博客园 (cnblogs.com)
静态时序分析 第七章 配置STA环境_waveform specification-CSDN博客
静态时序分析圣经翻译计划——汇总篇 - 知乎 (zhihu.com)