• Tcl基础知识


    一、概述

            Tcl 语言的全称 Tool Command Language,即工具命令语言。这种需要在 EDA 工具中使用的相当之多,或者说几乎每个 EDA 工具都支持 Tcl 语言,并将它作为自己的命令shell。
             静态时序分析中多用的 Synopsys Tcl 语言,主要服务于 IC设计,其他的FPGA厂商比如 Xilinx的 .ucf文件 .xdc文件也都是 Tcl 语言编写,这与 Synopsys 半导体公司的 Tcl 语言基本相同。所以这里对Tcl进行一个简单的学习。

            Tcl是1988年加州大学伯克利分校的John K.Ousterhout 开发的脚本语言。与编译语言不同,编译语言是在执行前将语言解析并编译成机器代码的,而Tcl是一种解释语言,其每一条语句被依次解析并立即执行。因此,该语言在脚本中遇到第一个错误就会立即停止。

            Tcl支持一些基本语义。每条Tcl语句以换行符或者分号结束。如果一条语句跨越多行,然后在下一行继续执行,则应该在行尾加反斜杠。每条语句及参数都被视为字符串。一个双引号或大括号包含的多个单词的字符串被认为是单个单元。以“#”开始的语句认为是Tcl的注释。

    1. puts "Hello World"; # 这是一条注释
    2. puts {Hello World};

            Tcl具有多种语言结构,它们是:

    • 变量
    • 列表
    • 表示符与运算符
    • 控制流语句
    • 过程

    二、Tcl变量

            Tcl变量是ASCII字符串。数字也用ASCII字符来表示。变量使用 set 命令来分配。例如

    set abc "1234" ;   #这里set是命令,abc是变量,1234是分配给变量的值

            如果需要对变量求值,则需要用到 $ 符号。例如:

    puts $abc #打印结果为1234

            如果索引与变量名一起使用,则可将变量视为数组。索引不一定是整数,它也可以是一个字符串。例如:

    1. set def(1) 4567; #这里def是数组变量,索引被设置为1
    2. set def(test) 5678; #这里索引是test

            数组的索引“1”被设置为4567,注意,值4567不会显示在双括号中。在Tcl中,“4567”和4567相同,因为它们都被视为字符串。要获取数组中使用的索引值,请使用命令 array names 。例如array names def 将返回值1和test 。要对数组变量求值,可以使用相同的原理,但是需要指定索引。我们考虑如下的例子:

    1. puts $def(1); #有效命令
    2. puts $def(test); #有效命令
    3. puts $def; #无效命令

            由于$在变量求值时有着特殊意义,所以要打印此符号,必须在前面加\。例如:

    puts {I have a \$bill}

    三、Tcl列表

            Tcl中的列表是对象的集合。和任何列表一样,你可以对列表进行添加,对列表进行索引,并在列表中进行搜索。以下是几个例子:

    1. #以下创建列表
    2. set gates{list AND OR NOT NAND NOR}
    3. set gates{{AND}{OR}{NOT}{NAND}{NOR}
    4. set gates{split "AND.OR.NOT.NAND.NOR""."}
    5. #要将另一个项目添加到列表中,使用lappend
    6. set gates{lappend gates XOR}
    7. #要在列表中搜索,使用lsearch.它将返回列表中匹配的索引
    8. #返回2
    9. puts {lsearch $gates NOT};
    10. #返回-1,表示没有匹配的项
    11. puts {lsearch $gates XNOR};

    四、Tcl 表达式和运算符

            Tcl中使用 expr 命令来对表达式求值。我们考虑如下的例子:

    1. set x 10;
    2. #以下返回值都是30
    3. expr $x+20
    4. expr {$x+20}

            Tcl一般推荐表达式使用大括号,因为这有助于程序更快地执行。

            由于表达式求值与运算符关系密切,所以Tcl语言为逻辑运算符和算术运算符提供了全面支持。下表给出了所支持的运算符:

    五、Tcl的控制流语句

            Tcl控制流语句由以下种类的结构组成

    • 列表遍历
    • 决策
    • 循环
    • 子程序

    5.1 列表遍历

            为了遍历列表,Tcl提供了 foreach 结构     

    1. set gates {list AND OR NIT NAND NOR XOR}
    2. set index 1
    3. foerach element $gate {
    4. puts "Gate $index in the list is $element"
    5. incr index; #index 自动加1
    6. }

            输出如下:

    1. Gate 1 in the list is AND
    2. Gate 2 in the list is OR
    3. Gate 3 in the list is NOT
    4. Gate 4 in the list is NAND
    5. Gate 5 in the list is NOR
    6. Gate 6 in the list is XOR

    5.2 决策

            Tcl提供了 if-elseif-else 结构来提供了决策能力。我们考虑如下例子:

    1. if {$frequency < 330}{
    2. puts "Chip will function well,but slow than expected"
    3. }
    4. elseif {$frequency > 330}{
    5. puts "Chip will not function"
    6. }else {puts "Chip will funciton optimally"}

    5.3 Tcl循环

           当程序想在一个条件下循环和终止时,可以使用Tcl提供的 forwhile 语句。它提供了两个额外的结构 “break” 和 “continue” 。Break 用于提前结束循环,而 continue 用于停止执行当前循环的代码,并重新评估循环条件。

    5.4 Tcl过程

            Tcl过程用 proc 来编写。使用 return 语句从过程中返回值。

    六、其他Tcl命令

  • 相关阅读:
    Matlab论文插图绘制模板第113期—带箭头标记的图
    Android OpenCV 身份证识别实战
    MySQL-底层设置
    Mac电脑窗口管理Magnet中文 for mac
    永磁同步电机滞环电流控制(PI双闭环)matlab仿真模型
    LeetCode //C - 79. Word Search
    一图讲清楚公众号扫码关注绑定手机号自动登录
    Linux篇【3】:Linux环境基础开发工具使用(下)
    Android RecyclerView
    深入解析HTTP与HTTPS的区别及实现原理
  • 原文地址:https://blog.csdn.net/apple_53311083/article/details/133979550