网络课程《数字集成电路静态时序分析基础》的笔记
地址:https://www.iccollege.cn/portal/courseDetail/193.mooc
控制流 控制流 if if {判断语句}{
脚本语句
}elseif{判断语句}{
脚本语句
}else{
脚本语句
}
注意,上例中脚本语句得'{'一定要写在上一行,因为如果不这样,TCL解释器会认为if命令在换行出已经结束,下一行会被当成新的命令,从而导致错误
例题:判断一个列表{0 1 2 3 4}的长度是大于3,还是等于3,还是小于3?
循环指令-foreach 语法格式:foreach 变量 列表 循环主体 功能:从第0个元素开始,每次按顺序取得列表的一个元素,将其赋值给变量,然后执行循环主体一次,直到列表最后一个元素
循环控制指令-break 语法格式:break 功能:结束整个循环过程,并从循环中跳出
循环控制指令-continue
循环控制指令-while 语法格式:while 判断语句 循环主体 功能:如果判断语句成立(返回值非0),就运行脚本,直到不满足判断条件停止循环,此时while命令终端并返回一个空字符串
循环控制指令-for 语法格式:for 参数初始化 判断语句 重新初始化参数 循环主体 功能:如果判断语句返回值非0进入循环,执行循环主体后,再重新初始化参数。然后再次判断,直到判断语句返回值为0,循环结束
过程函数 过程函数-proc 语法格式:proc 函数名 参数列表 函数主体 功能:类似C语言中的函数。即用户自定义的功能,方便多次调用
全局变量和局部变量 全局变量:在所有过程之外定义的变量 局部变量:在过程中定义的变量,只能在过程中访问,退出过程会被自动删除 指令global,在过程内部引用全局变量
正则匹配 定义:正则表达式是一种特殊的字符串模式,用来匹配符合规则的字符串 正则表达式的\w,用来匹配一个字母、数字、下划线 正则表达式的\d,用来匹配一个数字
正则匹配-量词 \w\w\w\d\d\d这种写法过于繁琐,可以使用量词表示,常用量词有三种
正则匹配-锚位 锚位,用来知识字符串中的开头和结尾的位置,使我们能够匹配到正确的字符
正则匹配-其他字符
.表示任意字符,不确定具体使什么字符就可以用.表示。例如一直字符串为"XXX空格XXX空格XXX"(X为未知字符)。用.+\s.+\s.+就可以匹配 正则匹配指令-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一次捕获
文本处理 主要掌握三个指令open、gets、close
open
语法格式 open 文件 打开方式(r读,w写) 功能 打开文件 gets
语法格式 gets fileid 变量名 功能 gets读fileid标识的文件的像遗憾,并把该行赋给变量,并返回该行的字符数(文件尾返回-1) close
实例讲解
现有文本file.txt其内容如下。请编写TCL脚本求出所有slack值之和
set num 0
set INFILE [open file.txt r]
while {[get $INFILE line]>=0}{
if{[regexp {^Slack\s+=\s+(-?\d+\.?\d+)} $line total slack]}{
set num [expr $sum +$slack]
}
}
close $INFILE
puts $sum