做FPGA时序约束预备知识之简单的Tcl命令-Lattice-莱迪斯社区-FPGA CPLD-ChipDebug

做FPGA时序约束预备知识之简单的Tcl命令

TCL

  1. 基础知识:TCL在脚本中遵循一些基本语义。
    a. 每条TCL语句以换行符或者分号结束
    b. 如果一条语句跨域多行,则应在行尾加 \
    c. “#”开头为注释
    d. 一个被双引号或者大括号括住的包括多个单词的字符串被认为是单个单元
    Eg:puts “Hello,world!” puts{Hello,world!} 会向标准输出设备打印Hello,world!
  2. TCL变量
    a. Tcl变量是ASCII字符串,数字也是。
    b. 变量使用set命令来赋值
    Eg:setabc “1234”; #这里set是命令 abc是变量 1234是分配给变量的值
    c. 如果需要给变量求值
    Eg:puts$abc; #将会打印1234
    d. 如果索引和变量一起使用,则可将变量视为数组。 索引不一定是整数,也可以是一个字符串本身
    Eg:set def(1)5678; #这里def是数组变量 索引值被设为1
    Eg:set def(test)5678; #这里的索引就是test
    要获得数组的中的索引值使用命令 array names。 eg:arraynames def 得到返回值是 1 和 test
    要对数组求值必须加上对应的索引。Eg:puts $def(test);
    e. 想要打印$本身时,只需要在前面加上转义字符\ 即:\$
    f. 变量放在{}或者“”中单纯是没法求值的 eg:puts “I have a$bill”;#打印出来的结果就是I have a $bill。除非用命令就可以。
  3. Tcl列表
    a. 介绍:tcl中的列表是对象的集合。可以对列表进行添加、索引、搜索。
    b. Eg:
    #一下创建列表
    set gates [list AND OR NOT NAND NOR];
    set gates [{AND}{OR }{NOT}{NAND}{NOR}];
    set gates [SPLIT “AND.OR.NOT.NAND.NOR” ”.”];
    

    #要将另一个项目添加到列表中,使用lappend

    set gates [lappend gates XOR];
    #要在list中搜索,使用lsearch。将会返回list中的匹配的索引
    #返回2,是列表中的索引
    puts [lsearch $gates NOT];
    #返回 -1 ,是因为找不到匹配项
    Puts [lsearch $gates XNOR];
    
  4. Tcl表达式与运算符
    Tcl中使用expr命令对表达式求值。对应2 ,f)所提的问题
    set x 10;
    #两条语句的返回值都是30
    expr $x + 20;
    expr {x + 30};
    
  5. Tcl的控制流语句有四种:
    列表遍历
    判断 ifelse if else
    循环 fo, while
    子程序
    a. 列表遍历:

         set gates [list AND OR NOT NAND NOR XOR];
         set index 1
         foreach element $gates{
            puts “Gate$index in the list is $element”;
            incr index;#index 自动加1
         };
            产生输出:
                           Gate1 in the list is AND
                                    ……
    
         foreach可以同时遍历多个列表
           setall gates{}
           foreach   gatelist1{ AND OR XOR}   gatelist2{NAND NOR XNOR}{
        lappen allgates$gatelist1 $gatelist2;
     }
     puts $allgates
    

    b. 判断:

         If { $temp <100} {
            puts “…”;
         } else if {$temp>100} {
            puts “…”;
         } else { put“…”;};
    

    c. 循环:类比C,在此略,(值得注意的是条件判断也类比上面用的{}) 且也有 break 和 continue。

  6. Tcl子程序(可以看作函数)
    使用 prco 命令来编写,使用return可以从过程中返回值。
    Proc sum {addend1 addend2}{
        set value[expr{$addend1 + $addend2}];
        return $value;
    }
    
  7. 其他命令还有,但略,详见《综合与时序分析的设计约束》书中p33。
请登录后发表评论

    没有回复内容