VIVADO之TCL脚本工具(基本语法)
VIVADO之TCL脚本⼯具(基本语法)
TCL脚本语⾔
注:TCL在VIVADO中的具体使⽤将写在VIVADO 之 TCL脚本⼯具 [下]中,本⽂只有TCL语法
Tcl(Tool Command Language)是⼀种很通⽤的脚本语⾔,它⼏乎在所有的平台上都可以解释运⾏,⽽且VIVADO也提供了TCL命令⾏。最近发现TCL脚本貌似⽐GUI下操作VIVADO效率⾼⼀些,⽅便⼀些。⽽且最近跟着官⽹⽂档做SDSOC的flatform,发现xilinx官⽹的⽂档⾥都是⽤TCL命令来完成操作,于是决⼼学习⼀下TCL的语法。
属牛女孩草字头吉利的名字应⽤程序(如VIVADO)使⽤Tcl作为它的命令语⾔的好处:
1 Tcl提供了标准语法,⼀旦⽤户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的⼯作变得很⽅便。
3 TCl可作为程序间通信的接⼝。
命令格式
⼀条Tcl的命令串包含了多条命令时,⽤换⾏符或分号来隔开
⽽每⼀条命令包含了⼀个域的集合,域使⽤空⽩分开的,第⼀个域是⼀个命令的名字,其它的是作为参数来传给它
数据类型
Tcl只⽀持⼀种数据结构:字符串。所有的命令、命令⾥的所有的参数、命令的结果、变量全部都是都是字符串。
简单实例:
set i 123
将123这个字符串赋值给i变量
unset i
清除变量
set i hi
将hi这个字符串赋值给i变量
set i "hi hello"
hi hello中有空格,所以加引号
set i 123;#开始注释
注意注释前,要先⽤分号,把命令结束掉,或者换⾏注释
基本语法和基础命令
在VIVADO中的TCL命令⾏⾥,学习这些基本语法
(Windows下 –> 开始 –> 所有程序 –> Xilinx Design Tools –> Vivado xxx –> Vivado xxx Tcl Shell)
1>使⽤$符号引⽤变量
其中puts是打印命令
2>使⽤[]将命令返回值,作为新命令的参数
set j 232命令会返回值232
新命令就成了 set i 232
这⾥稍微复杂⼀点点的例⼦:
set i a[set j b][set k c]
最后的结果就是:j=b ; k=c ; i=abc
3>数组
数组不需要声明,直接赋值即可,也不必按照顺序来:
set i(1) 123 ; set i(16) hi
当然也⽀持任意维数的数组:
set i(1,2,3) hi
引⽤的时候直接$i(1,2,3)即可
·
parray命令
可以打印出⼀个数组的全部信息:
· array命令
命令格式:array option arrayName
option 是 操作选项,有如下可选:
  name : 返回数组的所有元素的名称
  size : 返回数组的长度
  startsearch : 初始化⼀次遍历,返回⼀个遍历标识符(searchId),这个searchId在下⾯⽤到,(是可以多个遍历同时进⾏的)   下⾯的命令格式为:array option arrayName searchId
  ->nextelement : 返回数组中下⼀个元素,如果没有返回空
  ->anymore : 如果接下来还有元素,返回1,否则返回0
  ->donesearch : 结束遍历
4>字符串命令
· string命令
命令格式:string option string1 string2
option 是 操作选项,有如下可选:
  compare : 按照字母的排序⽅式⽐较,string1 <,=,>string2,分别返回-1,0,1
  match : 判断string1和string2是否匹配
  first : 检索string2中第⼀次出现string1的位置,如果没有出现string1则返回-1
  last : 和first相反
  trim : 从string1中删除开头和结尾的,string2的字符
命令格式:string option string
  tolower : 返回string中的所有字符被转换为⼩写字符后的新字符串
  toupper : 返回string中的所有字符串转换为⼤写后的字符串
  trimleft : ,去除string左空⽩,类似的还有trimright
  length : 返回string1的长度
  range :
  string range abcdef 1 2,返回输出结果为bc
· append命令
字符串追加,可以⽆限拼接
<span ><code>set <span >i</span> a
append <span >i</span> b c d
puts $<span >i</span></code></span>
1
四大美女是谁2
3
i变量的值就成了 abcd,注意append i b c d命令,⽽不是append $i b c d
· split命令
命令格式:split 字符串分割符,将字符串转换为列表
5>数字操作
tcl中只有string类型的变量,所以当进⾏数字运算的时候,需要⽤到incr和expr操作命令
· incr命令
a变量⾃加-3:incr a -3
a变量⾃加1 : incr a
· expr命令
类似C语⾔中的算术操作符有(在Tcl 中的逻辑:真为1,假为0):
!、* 、/、 %、+、-、<<、 >> 、< 、> 、<= 、>= 、== 、!=、& 、^ 、|、&&、 || 、x ? y : z
除此之外,expr还能够识别⼀些函数及其返回值:
abs(x) 、round(x) 、sin(x)、cos(x) 等
使⽤⽅法:expr 表达式
6>list列表
类似python中的列表,⽐如:{abc {def {jkl ccc}}}是⼀个有两个元素的列表 abc和{def {jkl ccc}},Tcl中对list的命令有: (⾸先set l {abc {def {jkl ccc}}},下⾯实例中将对这个l列表进⾏操作)
命令命令格式功能实例
concat concat 列表1 列表2 等列表拼接
list list 列表1 列表2 等同上
lindex lindex 列表索引索引列表
lrange lrange列表索引1 索引2索引列表的⼀部分
llength llength 列表返回长度linsert
linsert 列表 索引 对象列表新增元素lreplace
lreplace 列表 索引1 索引2 对象把列表对应位置的元素替换lsearch
lsearch (-mode) 列表 对象在列表中搜索元素的位置(可以加具体mode)lsort
lsort (-mode) 列表列表中元素排序(可以加具体mode)join
join 列表 (连接符)
将列表中的元素连接成字符串lappend lappend 列表 对象
向列表追加元素(需要注意如下)命令
命令格式功能实例
需要注意的是:⼤部分命令都是对$l 进⾏处理,也把就是l 的内容字符串取出来,再处理,并不会对l 列表的内容造成影响
需要注意的是lappend 命令,lappend $l abcd 是⽆效的,必须lappend l abcd 才能实现列表内容的更新,⽽且是直接更改列表的内容7>proc⾃定义函数
proc:
<span ><code>proc hello {<span >str</span>} {
puts hello:$<span >str</span>}</code></span>123
需要注意的是,如果不能⼀⾏写完,那建议按照如下格式来定义(主要是要将“{”放到第⼀⾏的末尾):
第⼀⾏: proc+(空格)+函数名+(空格)+{参数}+(空格)+{
中间⾏: 逻辑运算
爱的回归线歌曲最后⾏: }
全局变量global:
⽤于将过程中的局部变量变成外界可操作的全局变量
<span ><code>proc hello {} {
<span >global</span> x
<span >set</span> x hi    <span >set</span> i hello}</code></span>123
4
上述代码,执⾏结果:
return命令:
<span ><code> proc hello {} {return world}
set <span >i</span> [hello]</code></span>
1
2
御夫网
return命令没啥好说的,上述代码的结果是,将i变量赋值为world字符串
8>流控制
if 流控制
这个同样建议按照格式来:
第⼀⾏: if+(空格)+{表达式}+(空格)+{
中间⾏: 逻辑运算
第N⾏: }+(空格)+else+(空格)+{
中间⾏: 逻辑运算
最后⾏: }
switch流控制
例⼦如下,⼀⽬了然:
<span ><code><span >switch</span> <span >2</span> {
<span >1</span> {<span >puts</span> <span >111</span>}
<span >2</span> {<span >puts</span> <span >222</span>}
<span >3</span> {<span >puts</span> <span >333</span>}
<span >default</span> {<span >puts</span> xxx}
} </code></span>
风筝鲁迅1
2
3
怎么给文件夹设密码4
5
6
case流控制
<span ><code><span >case</span> abcd in a {<span >puts</span> <span style="color:#0 1
上述程序对字符串abcd进⾏判断:
条件⼀ : 字符串为a
条件⼆ : 不管字符串的前后字符是啥,只要中间有bc⼦字符串即可
条件三 : default
9>循环控制
foreach循环:
假如想要将0,3,2,1按照顺序分别放到上述switch的判决条件(列表)⾥,输出四个结果,那就需要这个foreach了:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。