STA分析基础(一)TCL变量、数组、列表、运算

 

这一系列文章为邸志雄老师的STA课程笔记,讲得还不错

1. 概述

TCL是数集集成电路设计中常用的语言:

TCL、Perl、Python、csh语言的异同

如何启动TCL:

  • Linux系统下
    • 输入tclsh,直接输入tcl命令
    • 编写tcl脚本,在终端执行命令:tclsh xxx.tcl
  • Windows系统下
    • 安装active tcl并双击wish.exe

置换
TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换。
TCL置换分为以下三类:
1. 变量置换$
$表示变量置换,TCL解释器会将认为$后面为变量名,将变量置换成它的值。举例:

% set a "snow"
snow
% puts $a
snow
% puts a
a

2. 命令置换[]
[]表示命令置换,[]内是一个独立的TCL语句,举例:

% set a [expr 3+4]
7
% puts $a
7

3. 反斜杠置换
表示反斜杠置换,换行符空格[$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。举例:

% puts "[expr $X + $Y]"
2.5
% puts "[expr $X + $Y]"

[expr 1.2 +1.3]

% puts”[expr |$X +|$Y]” [expr $X + $Y]

反斜杠置换
t表示TAB,用n表示换行符,举例:

% puts "atb"
a   b
% puts "anb"
a
b

其他符号

  • TCL解释器对双引号""中$和[]符号会进行变量置换和命令置换。
  • 而在花括号{}中,所有特殊字符都将成为普通字符,TCL解释器不会对 其作特殊处理。
  • # 表示注释。
    % set X 1.2              
    1.2
    % set Y 1.3
    1.3
    % puts "t[expr $X +$Y]"
    2.5
    % puts {t[expr $X + $Y]}
    t[expr $X + $Y]

2. 变量、数组、列表、运算

2.1 变量

变量就是某个容器的名称,可以存储一个值。变量的名称在程序运行期间保持不变,但是变量的值通常会不断改变。
➢ 定义: set 变量名 变量值
➢ 取值: $变量名
举例:

% set cell "bufx2"
bufx2
% puts $cell
bufx2
% set cell "ivtxasdf"
ivtxasdf
% puts $cell
ivtxasdf

2.2 数组

数组: TCL中数组可以存储很多值,通过元素名来进行检索。类似于某件事物(数组名)几种不同属性(元素名),每一种属性有其独立的值。
➢ 定义: set 数组名(元素名)值
➢ 取值: $数组名(元素名)
➢ 使用array指令获取数组信息
举例:

% set array(m1) "apple"
apple
% set array(m2) 1
1
% puts $array(m1)
apple
% puts $array(m2)
1
% array size array
2
% array names array
m1 m2

2.3列表

➢ 列表是标量的有序集合。
➢ 定义 set 列表名 {元素1 元素2 元素3……}
➢ 取值 $列表名
举例:

% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% puts $fruits
apple banana watermelon peach
SyntaxDescription
concat合并两个列表
lindex选取列表中的某个元素
llength列表长度
lappend在列表末端追加元素
lsort列表排序
常用列表操作指令

1. 列表指令-concat

% set fruit1 {apple orange}
apple orange
% set fruit2 {peach watermelon}
peach watermelon
% concat $fruit1 $fruit2 #列表合并
apple orange peach watermelon
#合并后的列表无名字,若要添加名字可使用 set <name> [concat $fruit1 $fruit2]
% set total_fruit [concat $fruit1 $fruit2]           
apple orange peach watermelon
% puts $total_fruit
apple orange peach watermelon

2. 列表指令-llength
➢ 语法格式 : llength 列表
➢ 功能: 返回列表中的元素个数

% set fruit1 {apple orange}
apple orange
apple orange peach watermelon
% llength $fruit1
2

例题: list1为{bufx1 bufx2 bufx4},那么 llength [concat $list1 $list1] 会得到多少呢?

% set list1 {mem1 mem2 mem3}
mem1 mem2 mem3
% llength [concat $list1 $list1]
6

3. 列表指令-lindex

% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% lindex $fruits 0
apple
% lindex $fruits 1
banana
% lindex $fruits 3
peach

例题: 如何得到列表list1 {a b c d e f}的最后一个元素?

% set list1 {a b c d e f}           
a b c d e f
% expr [llength $list1]-1
5
% lindex $list1 [expr [llength $list1]-1]
f

4. 列表指令-lappend
➢ 语法格式 : lappend 列表 新元素
➢ 功能: 列表末尾加入新元素

% set fruits {apple banana watermelon peach}
apple banana watermelon peach
% lappend fruits orange 
apple banana watermelon peach orange
% puts $fruits 
apple banana watermelon peach orange

例题: 如果我们lappend一个列表会怎么样?

% set a {1 2 3}
1 2 3
% set b {4 5}
4 5
% lappend a $b
1 2 3 {4 5}

例题: 如果我们想得到4 用什么样的命令?

% lindex [lappend a $b] 3
4 5
% lindex [lindex [lappend a $b] 3]0
4

5. 列表指令-lsort
➢ 语法格式 : lsort 开关 列表
➢ 功能: 将列表按照一定规则排序
➢ 开关: 缺省时默认按照ASCII码进行排序。

  • –real 按照浮点数值大小排序
  • -unique唯一化,删除重复元素
#按照ASICC码排序
% set list1 {c d a f b}
c d a f b
% lsort $list1
a b c d f
#按照数字大小排序
% set list2 {-2 3.1 5 0}
-2 3.1 5 0
% lsort -real {-2 3.1 5 0}
-2 0 3.1 5
#唯一化
% set list3 {a c c b a d}
a c c b a d
% lsort -unique $list3
a b c d

例题:如何得到列表list1 {0 1.2 -4 3 5}中的最小值?

% set list {0 1.2 -4 3 5}
0 1.2 -4 3 5
% lsort -real $list
-4 0 1.2 3 5
% lindex [lsort -real $list] 0 
-4

2.4 运算

➢ 数学运算
a + b、a – b、a * b、a / b
➢ 逻辑运算
a <= b、a >= b、a == b、a != b
➢ 数学运算指令-expr
语法格式 : expr 运算表达式
功能: 将运算表达式求值

% expr 4+6
10
% expr 2*8
16

例题:我们在TCL中经常会遇到下面的现象

% expr 5/2
2

其原因是表达式5/2中5和2都是整数型参数, 默认运算结果也是整数型。如果想要进行浮点运算, 只要将其中任意一个数值, 写成浮点形式(有小数点)即可。

% expr 5/2.0
2.5
% expr 5.0/2
2.5

参考资料:
数字集成电路静态时序分析基础_哔哩哔哩_bilibili
别人的好笔记:
静态时序分析STA基础 – 陆路慧 – 博客园 (cnblogs.com)
静态时序分析 第七章 配置STA环境_waveform specification-CSDN博客
静态时序分析圣经翻译计划——汇总篇 – 知乎 (zhihu.com)

来自广东
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇