数字IC设计学习笔记_静态时序分析STA_TCL脚本

数字IC设计学习笔记

TCL脚本

1. TCL置换分类
2. 变量,数组,列表
3. 数学运算
4. 逻辑运算 
5. 控制流
6. 过程函数
7. 正则匹配 
8. 锚位
9. Regexp
10. 文本处理

1. TCL置换分类

  • 变量置换$: $ 后面为变量名。将置换成它的值。
  • 命令置换[]:[]内是一个独立的tcl语句
  • 反斜杠置换\:换行符,空格;[、$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。
  • 用\t表示TAB
  • 用\n表示换行符
  • “#” 表示注释。

注意

  • TCL解释器对双引号中$和 [] 符号会进行变量置换和命令置换。 {} 而在花括号中,所有特殊字符都将成为普通字符,TCL解释器不会对其作特殊处理。

2. 变量,数组,列表

变量

就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。

  • 定义:set 变量名 变量值
  • 取值:$变量名

注意

  • 与C语言不通,TCL脚本语言可以存字符串

数组

TCL中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性 有其独立的值。

  • 定义:set 数组名(元素名) 值
  • 取值:$数组名(元素名)

使用array指令获取数组信息
在这里插入图片描述
列表

列表是标量的有序集合。

  • 定义 set 列表名 {元素1 元素2 元素3……}
  • 取值 $列表名
    在这里插入图片描述

TCL中有一系列十分方便的列表操作命令:

  • concat 合并两个列表

  • lindex 选取列表中的某个元素,返回列表中第n个元素(从0开始计数)
    在这里插入图片描述
    如何得到列表list1 {a b c d e f}的最后一个元素?
    在这里插入图片描述

  • llength 列表长度:返回列表中的元素个数

  • lappend :在列表末端追加元素

  • lsort :列表排序,将列表按照一定规则排序
    开关: 缺省时默认按照ASCII码进行排序。

  • –real :按照浮点数值大小排序

  • -unique:唯一化,删除重复元素


3. 数学运算

  • a + b

  • a – b

  • a * b

  • a / b


4. 逻辑运算

  • a <= b
  • a >= b
  • a == b
  • a != b
  • 语法格式 : expr 运算表达式
  • 功能: 将运算表达式求值

5. 控制流

If

if {判断条件} {
脚本语句
} elseif {判断条件} {
脚本语句
} else {
脚本语句
}

注意

  • 上例中脚本语句的’{'一定要写在上一行,因为如果不这样,TCL 解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误

foreach

  • 语法格式 :foreach 变量 列表 循环主体

  • 功能:从第0个元素开始,每次按顺序取得列表的一个 元素,将其赋值给变量,然后执行循环主体一次,直 到列表最后一个元素

Break

  • 语法格式 :break
  • 功能: 结束整个循环过程,并从循环中跳出

Continue

  • 语法格式 :continue
  • 功能: 仅结束本次循环

While

  • 语法格式 : while 判断语句 循环主体
  • 功能: 如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令中断并返回一个空字符串。

for

  • 语法格式 :for 参数初始化 判断语句 重新初始化参数 循环主体
  • 功能: 如果判断语句返回值非0就进入循环,执行循环主体后,再重新初始化参数。然后再次进行判断,直到判断语句返回值为0,循环结束。
    在这里插入图片描述

6. 过程函数

proc

  • 语法格式 :proc 函数名 参数列表 函数主体
  • 功能: 类似于C语言中的函数。即用户自定义的功能,方便多次调用。
  • 全局变量:在所有过程之外定义的变量。
  • 局部变量:对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除。
  • 指令global:可以在过程内部引用全部变量

7. 正则匹配

定义

  • 正则表达式是一种特殊的字符串模式,用来去匹配符合规则的字符串。

  • 正则表达式的\w,用来匹配一个字母、数字、下划线

  • 正则表达式的\d ,用来匹配一个数字

  • \w\w\w\d\d\d这种写法过于繁琐,我们可以用代替重复的量词进行表示。

  • 在TCL中常用一下三种量词:

    *:零次或多次匹配
    +:一次或者多次匹配
    ? 零次或者一次匹配
    *和+的区别:*可以是零次,+一个至少是一次


8. 锚位

  • 锚位,用来指示字符串当中的开头和结尾的位置,使我们能够匹配 到正确的字符
  • ^ 字符串开头
  • $ 字符串结尾
  • 常用的其他字符还有\s和.
  • \s表示空格
    字符串 123 abc 123:正则表达式 \d+\s\w+\s\d+
  • . 表示任意一个字符
    我们不确定具体是什么字符是就可以用.表示。
    例如已知字符串为”xxx空格xxx空格xxx”(x为未知字符)。用.+\s.+\s.+就可以匹配

9. Regexp

  • 语法格式 :regexp? switches? exp string? matchVar? ?subMatchVar subMatchVar …?
  • 功能: 在字符串中使用正则表达式匹配。
  • switches:-nocase将字符串中的大写都当成小写看待。
  • exp 正则表达式
  • string 用来进行匹配的字符串
  • matchstring表示用正则表示式匹配的所有字符串
  • sub1表示正则表达式中的第一个子表达式匹配的字符串
  • sub2表示正则表达式中的第二个子表达式匹配的字符串
  • 通过()可以捕获字符串
    例如如何将字符串“Snow is 30 years old”中30捕获出来?

在这里插入图片描述
一次捕获多个字符串 例如如何将字符串“Snow is 30 years old”中Snow 和30一次捕获?
在这里插入图片描述

10. 文本处理

主要掌握以下三个指令。

open

  • 语法格式 open 文件 打开方式(打开方式 r表示读模式,w表示写模式。)
  • 功能 打开文件

gets

  • 语法格式 gets fileId 变量名

  • 功能 gets读fileId标识的文件的下一行,并把该行赋给变量,并返 回该行的字符数(文件尾返回-1)

  • 语法格式 close fileid

  • 功能 关闭文件


[参考资料]

  1. 邸志雄老师的课件
  2. 集成电路静态时序分析与建模

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值