![bfcc2bce84b16a70a773d6d40b8e16ac.png](https://img-blog.csdnimg.cn/img_convert/bfcc2bce84b16a70a773d6d40b8e16ac.png)
网络课程《数字集成电路静态时序分析基础》的笔记
地址: https://www. iccollege.cn/portal/cou rseDetail/193.mooc
![8fa76abca493f14c1c6cb38b5466d3f8.png](https://img-blog.csdnimg.cn/img_convert/8fa76abca493f14c1c6cb38b5466d3f8.png)
控制流
控制流 if
- 语法格式:
if {判断语句}{
脚本语句
}elseif{判断语句}{
脚本语句
}else{
脚本语句
}
- 注意,上例中脚本语句得'{'一定要写在上一行,因为如果不这样,TCL解释器会认为if命令在换行出已经结束,下一行会被当成新的命令,从而导致错误
![222c4157565a0fd51e2ab7d5d8404c78.png](https://img-blog.csdnimg.cn/img_convert/222c4157565a0fd51e2ab7d5d8404c78.png)
- 例题:判断一个列表{0 1 2 3 4}的长度是大于3,还是等于3,还是小于3?
![ffa06577089ebfc6b9413c51d08dca57.png](https://img-blog.csdnimg.cn/img_convert/ffa06577089ebfc6b9413c51d08dca57.png)
循环指令-foreach
- 语法格式:foreach 变量 列表 循环主体
- 功能:从第0个元素开始,每次按顺序取得列表的一个元素,将其赋值给变量,然后执行循环主体一次,直到列表最后一个元素
![374951136b190237477d8d571b322456.png](https://img-blog.csdnimg.cn/img_convert/374951136b190237477d8d571b322456.png)
![d17318b558bd99d8a4417aa494149cba.png](https://img-blog.csdnimg.cn/img_convert/d17318b558bd99d8a4417aa494149cba.png)
循环控制指令-break
- 语法格式:break
- 功能: 结束整个循环过程,并从循环中跳出
![ca7cc047818cf98bfcd8bebec7b0122d.png](https://img-blog.csdnimg.cn/img_convert/ca7cc047818cf98bfcd8bebec7b0122d.png)
循环控制指令-continue
- 语法格式:continue
- 功能:仅结束本次循环
![ca7cc047818cf98bfcd8bebec7b0122d.png](https://img-blog.csdnimg.cn/img_convert/ca7cc047818cf98bfcd8bebec7b0122d.png)
循环控制指令-while
- 语法格式:while 判断语句 循环主体
- 功能:如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令终端并返回一个空字符串
![b14019139a820c05efc452df9fbc9df9.png](https://img-blog.csdnimg.cn/img_convert/b14019139a820c05efc452df9fbc9df9.png)
循环控制指令-for
- 语法格式:for 参数初始化 判断语句 重新初始化参数 循环主体
- 功能:如果判断语句返回值非0进入循环,执行循环主体后,再重新初始化参数。然后再次判断,直到判断语句返回值为0,循环结束
![51e31292767be53bf738b998c13d5462.png](https://img-blog.csdnimg.cn/img_convert/51e31292767be53bf738b998c13d5462.png)
过程函数
过程函数-proc
- 语法格式:proc 函数名 参数列表 函数主体
- 功能:类似C语言中的函数。即用户自定义的功能,方便多次调用
![b9c5709e646cdfc8e07b200245179dfe.png](https://img-blog.csdnimg.cn/img_convert/b9c5709e646cdfc8e07b200245179dfe.png)
全局变量和局部变量
- 全局变量:在所有过程之外定义的变量
- 局部变量:在过程中定义的变量,只能在过程中访问,退出过程会被自动删除
- 指令global,在过程内部引用全局变量
![650c2b4548e587ee2093f49a21b5065f.png](https://img-blog.csdnimg.cn/img_convert/650c2b4548e587ee2093f49a21b5065f.png)
正则匹配
- 定义:正则表达式是一种特殊的字符串模式,用来匹配符合规则的字符串
- 正则表达式的w,用来匹配一个字母、数字、下划线
- 正则表达式的d,用来匹配一个数字
![745a8af92bc366e733a773ea025144e5.png](https://img-blog.csdnimg.cn/img_convert/745a8af92bc366e733a773ea025144e5.png)
正则匹配-量词
- wwwddd这种写法过于繁琐,可以使用量词表示,常用量词有三种
![95ad092ad3c6793094bf1ca92fdf4893.png](https://img-blog.csdnimg.cn/img_convert/95ad092ad3c6793094bf1ca92fdf4893.png)
- *和+的区别:包不包含0和1
![7d16bf25c16366b468ecc093e5cd4561.png](https://img-blog.csdnimg.cn/img_convert/7d16bf25c16366b468ecc093e5cd4561.png)
- ?,0或1
![bcab5aa2c6f09059d801b9faedb96a50.png](https://img-blog.csdnimg.cn/img_convert/bcab5aa2c6f09059d801b9faedb96a50.png)
正则匹配-锚位
- 锚位,用来知识字符串中的开头和结尾的位置,使我们能够匹配到正确的字符
![f53c69b9fd80d7acf2041ca7f65f94e0.png](https://img-blog.csdnimg.cn/img_convert/f53c69b9fd80d7acf2041ca7f65f94e0.png)
正则匹配-其他字符
- 常用的其他字符还有s和.
- s表示空格
![326dadbb08a7127132e282d87d386734.png](https://img-blog.csdnimg.cn/img_convert/326dadbb08a7127132e282d87d386734.png)
- .表示任意字符,不确定具体使什么字符就可以用.表示。例如一直字符串为"XXX空格XXX空格XXX"(X为未知字符)。用.+s.+s.+就可以匹配
正则匹配指令-regexp
- 语法格式:regexp?switches?exp string?matchVar? ?subMatchVar subMatchVar...?
- 功能:在字符串中使用正则表达式匹配
- switches:-nocase将字符串的大写都看成小写
- exp 正则表达式
- string 用来表示进行匹配的字符串
- matchstring表示用正则表达式匹配的所有字符串
- sub1表示正则表达式中的第一个子表达式匹配的字符串
- sub2表示正则表达式中的第一个子表达式匹配的字符串
实例讲解
- 如何匹配字符串"abc456"
![54d19c1576e35ea4c45dbcf9bd9b8353.png](https://img-blog.csdnimg.cn/img_convert/54d19c1576e35ea4c45dbcf9bd9b8353.png)
- 如何匹配一个以数字开头并且以数字结尾的字符串
![8389fb320e1d9a70ee4e02f5c5821549.png](https://img-blog.csdnimg.cn/img_convert/8389fb320e1d9a70ee4e02f5c5821549.png)
捕获变量
- 通过()可以捕获字符串,例如捕获字符串"Snow is 30 years old"中的30?
![ac95d43a6740d6f40c1dc7037f005eac.png](https://img-blog.csdnimg.cn/img_convert/ac95d43a6740d6f40c1dc7037f005eac.png)
- 一次捕获多个字符串,例如将"Snow is 30 years old"中的Snow和30一次捕获
![1bb7146a1aecd605a495cc4d60ec8f1c.png](https://img-blog.csdnimg.cn/img_convert/1bb7146a1aecd605a495cc4d60ec8f1c.png)
文本处理
主要掌握三个指令open、gets、close
- open
- 语法格式 open 文件 打开方式(r读,w写)
- 功能 打开文件
- gets
- 语法格式 gets fileid 变量名
- 功能 gets读fileid标识的文件的像遗憾,并把该行赋给变量,并返回该行的字符数(文件尾返回-1)
- close
- 语法格式 close fileid
- 功能 关闭文件
实例讲解
- 读入整个文件过程
![79eae43d8283ed634f2524a0d1b26d58.png](https://img-blog.csdnimg.cn/img_convert/79eae43d8283ed634f2524a0d1b26d58.png)
- 一个完整的写入文件过程
![aa7be242d1a0ef41e4c1635c3bae8702.png](https://img-blog.csdnimg.cn/img_convert/aa7be242d1a0ef41e4c1635c3bae8702.png)
- 现有文本file.txt其内容如下。请编写TCL脚本求出所有slack值之和
![0989caaf2f1207b2a4e5713ced2c2682.png](https://img-blog.csdnimg.cn/img_convert/0989caaf2f1207b2a4e5713ced2c2682.png)
set num