网站建设的安全性,贵州省住房和城乡建设部官方网站,东莞个人做网站,杭工e家app是哪个网站做的静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4… 静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接· 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4.4 info3.4.5 source3.4.6 incr3.4.7 exit 四、总结 一、写在前面
一个数字芯片工程师的核心竞争力是什么不同的工程师可能给出不同的答复有些人可能提到硬件描述语言有些人可能会提到对于特定算法和协议的理解有些人或许会提到对于软硬件的结合划分作者想说这些说法其实对也不对硬件描述语言翻来覆去无非是always和assign这几个语句的反复使用而一些基础的协议算法深究起来其实也并不复杂于作者而言在常规的技能以外有两项额外的技能颇为重要其中之一便为sdc/STA的分析能力它的重要之处在于作为桥梁建立了前端和后端的连接虽然对于DE工程师而言初版交付的sdc往往不甚准确也没有办法通过这份sdc生成一份无误的timing report但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。 写此专栏一为学习记录二为交流分享以犒粉丝读者。
1.1 快速导航链接·
静态时序分析简明教程(一)绪论 静态时序分析简明教程(二)基础知识建立保持时间违例修复时序分析路径 静态时序分析简明教程(三)备战秋招如何看懂一个陌生的timing report 静态时序分析简明教程(四)时钟常约束 静态时序分析简明教程(五)生成时钟 静态时序分析简明教程(六)时钟组与其他时钟特性 静态时序分析简明教程(七)端口延迟 静态时序分析简明教程(八)虚假路径 静态时序分析简明教程(九)多周期路径 静态时序分析简明教程(十)组合电路路径 静态时序分析简明教程(十一)模式分析与约束管理 静态时序分析简明教程(十二)浅议tcl语言
二、Tcl基础知识
SDC的约束基于Tcl语言。通过使SDC扩展到Tcl基于工具的命令可以和原生Tcl的结构如变量表达式语句和子程序相混合实现更为强大的功能因此作为SDC约束的提供方对Tcl命令的理解本身也是IC技能中颇为重要的一个方面。
Tcl是由加州大学伯克利分校开发的常用脚本语言它是一种解释语言每条语句被以此解析并立即执行 在Tcl脚本遇到第一个错误的时候就会立刻停止。
Tcl脚本遵循一些基本的语义总结起来是以下四点
每条Tcl以换行符或分号结束如果一条语句跨越多行然后再下一行继续执行需要在行尾加反斜杠双引号和大括号括住的包括多个单词的字符串被认定为单元#开头的语句是注释
给出两个简单的例子帮助读者们快速get以上四条的含义 puts “Hello World!”; # 这是一条注释 puts {Hello, World!} 三、Tcl的语言结构
Tcl的语言结构可以区分为以下几种
变量列表表达式与运算符控制流语句过程
接下来我们将逐一讲解其含义
3.1 Tcl变量
Tcl变量是ASCII字符串变量使用set命令来分配Example1如果要对变量求值需要使用“$“符号Example2)因为”$“的特殊含义因此假如想要打印这个变量需要”\$多一个“\”符号(Example3) Example1: set abc “1234” #set是命令abc是变量1234是分配给变量的值 Example2: puts $abc #将打印1234 Example3: puts “I have a \$bill” 3.2 Tcl表达式与运算符
Tcl中使用expr命令来对表达式求值 set x 10 # 两条语句的返回值都为30 expr $x 20 expr [$x 20] 两条expr命令将返回相同的值但是Tcl建议表达式使用大括号这有助于程序更快地执行。 下面的表格将列出Tcl所支持的运算符
运算符描述- ~ 一元减一元加按位取反逻辑非 - * /加 减 乘 除**指数 !关系运算符小于、大于、小于或等于、大于或等于、等于、不等于eq,ne比较两个字符串相等(eq)或不相等(ne)in,ni检查列表中包括(in)不包括字符串的运算符。返回1为真0为假|^按位与、或、异或||逻辑与、或 左移右移
3.3 Tcl的控制流语句
Tcl的控制流语句由以下种类的结构组成 1.列表遍历 2.决策 3.循环 4.子程序
3.3.1 列表遍历
Tcl提供了foreach结构来遍历列表案例如下
# 创建一个包含元素的列表
set my_list {apple banana orange}# 使用 foreach 命令遍历列表
foreach item $my_list {# 输出当前列表元素puts Item: $item
}它会有如下的输出结果
Item: apple
Item: banana
Item: orange3.3.2 决策
Tcl提供if-else if-else的结构来提供决策能力举例如下
# 假设有一个变量 age 表示年龄
set age 25# 使用 if-else if-else 结构进行决策
if {$age 18} {puts 未成年人
} elseif {$age 18 $age 60} {puts 成年人
} else {puts 老年人
}其输出的结果如下
成年人3.3.3 Tcl循环
当程序想在一个条件下循环和终止时可以使用Tcl提供的for和while语句它还提供了两个额外的结构break和continue其中break用提提前结束循环而continue用于停止执行当前代码的循环并重新评估当前循环的代码。 for语句的循环举例如下
# 使用 for 循环输出数字从1到5
for {set i 1} {$i 5} {incr i} {puts $i
}运行上面的代码会产生如下的输出
1
2
3
4
5while语句的循环举例如下
# 使用 while 循环计算数字的阶乘
set num 5
set factorial 1
while {$num 0} {set factorial [expr $factorial * $num]incr num -1
}
puts 5的阶乘是: $factorial
它会产生如下的输出结果
5的阶乘是: 120break语句的举例如下
# 使用 while 循环打印数字直到遇到数字 4 时终止循环
set i 1
while {$i 10} {puts $iif {$i 4} {break ;# 当 i 等于 4 时终止循环}incr i
}
在这个示例中我们使用 while 循环打印数字从 1 到 10。然而当 i 的值等于 4 时我们使用 break 语句提前终止了循环的执行因此循环只会打印数字 1 到 3。以上的代码将会输出如下的结果
1
2
3
43.3.4 Tcl过程
在Tcl中过程可以通过 proc 命令定义用于封装一系列命令形成一个可重复使用的代码块以下是一个例子
# 定义一个计算两个数之和的过程
proc add_numbers {num1 num2} {set sum [expr $num1 $num2]return $sum
}# 调用定义的过程来计算和
set result [add_numbers 10 20]
puts 计算结果是: $result在这个示例中我们首先使用 proc 命令定义了一个名为 add_numbers 的过程该过程接受两个参数 num1 和 num2并计算它们的和。然后我们在代码的后续部分调用了这个过程传递了参数 10 和 20并将计算结果存储在变量 result 中。 其结果输出如下
计算结果是: 303.4 其他Tcl命令
以下是一些常用的Tcl命令
3.4.1 open/close
文件句柄用来打开和关闭文件
#以写模式打开文件file.txt
set fhandle [open file.txt w]
#关闭文件句柄
close $fhandle3.4.2 gets/puts
获取字符串或打印字符串举例如下
# 提示用户输入姓名
puts 请输入您的姓名
# 使用 gets 命令读取用户输入的一行数据
gets stdin name# 提示用户输入年龄
puts 请输入您的年龄
# 使用 gets 命令读取用户输入的一行数据
gets stdin age# 使用 puts 命令输出用户输入的信息
puts 您的姓名是$name
puts 您的年龄是$age
在这个示例中我们首先使用 puts 命令提示用户输入姓名并使用 gets 命令从标准输入读取用户输入的姓名。然后我们再次使用 puts 命令提示用户输入年龄并使用 gets 命令从标准输入读取用户输入的年龄。最后我们使用 puts 命令将用户输入的姓名和年龄输出到标准输出。 运行上述代码将会产生类似于以下的交互过程
请输入您的姓名
John Smith
请输入您的年龄
28
您的姓名是John Smith
您的年龄是283.4.3 catch
在Tcl中catch 命令用于捕获可能引发异常的代码块并在发生异常时进行处理。以下是一个使用 catch 命令的示例
# 尝试将一个非数字字符串转换为整数
set input abc
catch {set number [expr $input]
} result# 检查是否捕获到异常
if {[catch set number [expr $input] result]} {puts 捕获到异常$result
} else {puts 转换结果为$number
}在这个示例中我们首先尝试将字符串 “abc” 转换为整数这是不合法的操作会引发异常。我们使用 catch 命令来捕获可能发生的异常并将异常信息存储在变量 result 中。然后我们检查是否捕获到异常如果捕获到异常则输出异常信息否则输出转换结果。 运行上述代码将会输出
捕获到异常expected integer but got abc3.4.4 info
从Tcl解释器获取信息所使用的命令 info commands pattern: 返回名称与pattern格式匹配的命令列表 info exists name:如果name作为变量存在则返回1否则返回0 info procs pattern:返回与pattern格式匹配的Tcl过程列表 3.4.5 source
在 Tcl 编程语言中source 命令用于在当前脚本中执行另一个 Tcl 脚本文件。通过使用 source 命令可以将另一个脚本文件中的代码嵌入到当前脚本中执行从而实现模块化和代码重用。
3.4.6 incr
在 Tcl 编程语言中incr 是一个内置命令用于增加变量的值。它可以用于增加整数变量或双精度浮点数变量的值。
# 增加整数变量的值
set count 5
incr count ;# 将 count 增加 1
puts 增加后的值是: $count# 增加整数变量的值并指定增量
set value 10
incr value 2 ;# 将 value 增加 2
puts 增加后的值是: $value# 增加双精度浮点数变量的值
set total 3.5
incr total 1.2 ;# 将 total 增加 1.2
puts 增加后的值是: $total
上面的代码会输出如下的结果
增加后的值是: 6
增加后的值是: 12
增加后的值是: 4.73.4.7 exit
exit 是一个内置命令用于终止当前脚本的执行并退出 Tcl 解释器。您可以使用 exit 命令来在特定条件下终止脚本的执行或在脚本执行完毕后退出解释器。
四、总结
本文中我们总结了Tcl语句的相关使用方法提供了大量的案例来讲解Tcl的变量、表达式、运算符列表遍历、决策、循环、Tcl过程其中还会涉及到额外的语句如open/close、gets/puts、catch、info、source、incr、exit。