tcl 基础

tcl 基础_第1张图片
tcl 基础_第2张图片
tcl 基础_第3张图片
tcl 基础_第4张图片

tcl 基础_第5张图片

tcl 基础_第6张图片

tcl 基础_第7张图片
tcl 基础_第8张图片

行内注释

行内注释使用;#。下面给出一个例子。
#!/usr/bin/tclsh

puts “Hello World!” ;# my first print in Tcl program

tcl 基础_第9张图片

大小写敏感

但是在vivado中 , set_property后边等效

set_property PART xcvc1902-vsva2197-2MP-e-S [current_project]
set_property part xcvc1902-vsva2197-2MP-e-S [current_project]


grouping: {} " "

tcl 基础_第10张图片

tcl 基础_第11张图片

方括号:Tcl 方括号中的代码会被当做表达式(变量,或函数)执行。
大括号:Tcl 中的大括号除了用作分割代码片段外(如 if while 这样的语句需要用大括号),还被用来做字符串表达。与双引号不同的是其中的方括号中的表达式不会被执行。例如:

puts "hello world"

# 报错,因为 hello 将被当做变量名 (如果有 hello 这个变量当然 ok)
puts "[hello] world"

# 正确,方括号会被当做正常字符打印
puts {[hello] world}

# 等同上面,\转义
puts "\[hello\] world"

tcl 基础_第12张图片


proc

过程的多个参数

	对于程序带参数如下图的例子所示。
#!/usr/bin/tclsh

proc add {a b} {
   return [expr $a+$b]
}
puts [add 10 30]

	当执行上面的代码,产生以下结果:
40

相对路径转绝对路径 file normalize name

在TCL语言中,有时候需要偷懒想要输入一个类似…/…/…/a.txt的相对路径,但是在后期操作中解析会有问题,所以,我们需要一个相对路径转换成绝对路径的接口。

为此,查阅了TCL的文档:

file normalize name
Returns a unique normalized path representation for the file-system object (file, directory, link, etc), whose string value can be used as a unique identifier for it. A normalized path is an absolute path which has all “…/” and “./” removed. Also it is one which is in the “standard” format for the native platform. On Unix, this means the segments leading up to the path must be free of symbolic links/aliases (but the very last path component may be a symbolic link), and on Windows it also means we want the long form with that form’s case-dependence (which gives us a unique, case-dependent path). The one exception concerning the last link in the path is necessary, because Tcl or the user may wish to operate on the actual symbolic link itself (for example file delete, file rename, file copy are defined to operate on symbolic links, not on the things that they point to).

即file normalize name接口可以将相对路径转换成绝对路径,但是如文档所说,存在软连接的情况,可能不是我们所预期的结果。
测试代码如下:

#!/usr/bin/tclsh

set abs_path [file normalize $argv0]
puts "argv0 abs: $abs_path"
puts "args abs: [file normalize [lindex $argv 0]] "

在这里,我设置了一个很复杂的相对路径函数,例如:

fh@Feihu-3 learn % ../learn/../learn/parse_redisconf.tcl  ../learn/../learn/../../tcl/learn/redis.conf 
argv0 abs: /Users/fh/fh_data/workspace/tcl/learn/parse_redisconf.tcl
args abs: /Users/fh/fh_data/workspace/tcl/learn/redis.conf 
fh@Feihu-3 learn % 
]

$ 变量替换

变量替换。
如果一个单词包含美元符号(“$”),后跟下面描述的形式之一,则 Tcl 执行variable substitution:单词中的美元符号和后续字符被变量的值替换。变量替换可以采用以下任何形式:
$name
Name是标量变量的名称;名称是一个或多个字符的序列,这些字符是字母、数字、下划线或命名空间分隔符(两个或多个冒号)。字母和数字是only标准 ASCII 字符(0–9、A–Z 和 a–z)。
$name(index)
Name给出数组变量的名称和index给出该数组中元素的名称。Name只能包含字母、数字、下划线和命名空间分隔符,并且可以是空字符串。字母和数字是only标准 ASCII 字符(0–9、A–Z 和 a–z)。对以下字符执行命令替换、变量替换和反斜杠替换index.
${name}
Name是标量变量或数组元素的名称。它可以包含除右大括号之外的任何字符。它表示一个数组元素如果name形式为“arrayName(index)” wherearrayName不包含任何左括号字符“(”或右大括号字符“}”,并且index可以是除右大括号字符之外的任何字符序列。解析期间不执行进一步的替换name.
一个单词中可以有任意数量的变量替换。不对大括号内的单词执行变量替换。
请注意,变量可能包含除上面列出的字符序列之外的字符序列,但在这种情况下,必须使用其他机制来访问它们(例如,通过 set 命令的单参数形式)。

$引用的变量名由字母数字和下划线构成,遇到非数字、字母、下划线就会停止,并不是说变量名中不可以含有其他字符,在含有其他字符时需要用{}进行引用表示这是一个整体。

exec

catch

file mkdir

今天在某个sdc中看到这样一句话,一下子触及到知识盲区了。

set local_sdc_path [file dirname [file normalize  [info script] ] ]
简简单单一句话,里面包含了4个知识点:

1:set A B

:把B 赋值给A。

2: info script

: 如果当前有脚本文件正在 Tcl 解释器中执行, 则返回最内层处于激活状态的脚本文件名; 否则将返回一个空的字符串。

3:file normalize [info script]

:返回该脚本文件的绝对路径

4: file dirname [ file normalize [info script] ]

: 返回路径中最后一个分隔符 ’/‘之前的内容

这句话的目的是为了得到当前tcl脚本的绝对路径,然后对在该目录下的其他sdc文件使用

$local_sdc_path 去调用。

eg:

source -e -v $local_sdc_path/xxx_common.tcl
————————————————
版权声明:本文为CSDN博主「bendandawugui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dongdongnihao_/article/details/128710329

你可能感兴趣的:(fpga开发)