Vivado之TCL脚本语言基本语法介绍_第1页
Vivado之TCL脚本语言基本语法介绍_第2页
Vivado之TCL脚本语言基本语法介绍_第3页
Vivado之TCL脚本语言基本语法介绍_第4页
Vivado之TCL脚本语言基本语法介绍_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Vivado之TCL脚本语言基本语法介绍TCL脚本语言Tcl(ToolCommandLanguage)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了TCL命令行。最近发现TCL脚本貌似比GUI下操作VIVADO效率高一些,方便一些。而且最近跟着官网文档做SDSOC的flatform,发现xilinx官网的文档里都是用TCL命令来完成操作,于是决心学习一下TCL的语法。应用程序(如VIVADO)使用Tcl作为它的命令语言的好处:1Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。2Tcl实现了很多的功能,使你的工作变得很方便。3TCl可作为程序间通信的接口。命令格式一条Tcl的命令串包含了多条命令时,用换行符或分号来隔开而每一条命令包含了一个域的集合,域使用空白分开的,第一个域是一个命令的名字,其它的是作为参数来传给它数据类型Tcl只支持一种数据结构:字符串。所有的命令、命令里的所有的参数、命令的结果、变量全部都是都是字符串。简单实例:seti123将123这个字符串赋值给i变量unseti清除变量setihi将hi这个字符串赋值给i变量seti“hihello”hihello中有空格,所以加引号seti123;#开始注释注意注释前,要先用分号,把命令结束掉,或者换行注释基本语法和基础命令在VIVADO中的TCL命令行里,学习这些基本语法(Windows下–》开始–》所有程序–》XilinxDesignTools–》Vivadoxxx–》VivadoxxxTclShell)1》使用$符号引用变量其中puts是打印命令2》使用[]将命令返回值,作为新命令的参数setj232命令会返回值232新命令就成了seti232这里稍微复杂一点点的例子:setia[setjb][setkc]最后的结果就是:j=b;k=c;i=abc3》数组数组不需要声明,直接赋值即可,也不必按照顺序来:seti(1)123;seti(16)hi当然也支持任意维数的数组:seti(1,2,3)hi引用的时候直接$i(1,2,3)即可·parray命令可以打印出一个数组的全部信息:·array命令命令格式:arrayoptionarrayNameoption是操作选项,有如下可选:name:返回数组的所有元素的名称size:返回数组的长度startsearch:初始化一次遍历,返回一个遍历标识符(searchId),这个searchId在下面用到,(是可以多个遍历同时进行的)下面的命令格式为:arrayoptionarrayNamesearchId-》nextelement:返回数组中下一个元素,如果没有返回空-》anymore:如果接下来还有元素,返回1,否则返回0-》donesearch:结束遍历4》字符串命令·string命令命令格式:stringoptionstring1string2option是操作选项,有如下可选:compare:按照字母的排序方式比较,string1《,=,》string2,分别返回-1,0,1match:判断string1和string2是否匹配first:检索string2中第一次出现string1的位置,如果没有出现string1则返回-1last:和first相反trim:从string1中删除开头和结尾的,string2的字符命令格式:stringoptionstringtolower:返回string中的所有字符被转换为小写字符后的新字符串toupper:返回string中的所有字符串转换为大写后的字符串trimleft:,去除string左空白,类似的还有trimrightlength:返回string1的长度range:stringrangeabcdef12,返回输出结果为bc·append命令字符串追加,可以无限拼接setiaappendibcdputs$ii变量的值就成了abcd,注意appendibcd命令,而不是append$ibcd·split命令命令格式:split字符串分割符,将字符串转换为列表5》数字操作tcl中只有string类型的变量,所以当进行数字运算的时候,需要用到incr和expr操作命令·incr命令a变量自加-3:incra-3a变量自加1:incra·expr命令类似C语言中的算术操作符有(在Tcl中的逻辑:真为1,假为0):!、*、/、%、+、-、《《、》》、《、》、《=、》=、==、!=、&、^、|、&&、||、x?y:z除此之外,expr还能够识别一些函数及其返回值:abs(x)、round(x)、sin(x)、cos(x)等使用方法:expr表达式6》list列表类似python中的列表,比如:{abc{def{jklccc}}}是一个有两个元素的列表abc和{def{jklccc}},Tcl中对list的命令有:(首先setl{abc{def{jklccc}}},下面实例中将对这个l列表进行操作)需要注意的是:大部分命令都是对$l进行处理,也把就是l的内容字符串取出来,再处理,并不会对l列表的内容造成影响需要注意的是lappend命令,lappend$labcd是无效的,必须lappendlabcd才能实现列表内容的更新,而且是直接更改列表的内容7》proc自定义函数proc:prochello{str}{putshello:$str}需要注意的是,如果不能一行写完,那建议按照如下格式来定义(主要是要将“{”放到第一行的末尾):第一行:proc+(空格)+函数名+(空格)+{参数}+(空格)+{中间行:逻辑运算最后行:}全局变量global:用于将过程中的局部变量变成外界可操作的全局变量prochello{}{globalxsetxhisetihello}上述代码,执行结果:return命令:prochello{}{returnworld}seti[hello]return命令没啥好说的,上述代码的结果是,将i变量赋值为world字符串8》流控制if流控制这个同样建议按照格式来:第一行:if+(空格)+{表达式}+(空格)+{中间行:逻辑运算第N行:}+(空格)+else+(空格)+{中间行:逻辑运算最后行:}switch流控制例子如下,一目了然:switch2{1{puts111}2{puts222}3{puts333}default{putsxxx}}case流控制caseabcdina{puts111}*bc*{puts333}default{putsxxx}上述程序对字符串abcd进行判断:条件一:字符串为a条件二:不管字符串的前后字符是啥,只要中间有bc子字符串即可条件三:default9》循环控制foreach循环:假如想要将0,3,2,1按照顺序分别放到上述switch的判决条件(列表)里,输出四个结果,那就需要这个foreach了:foreachi{0321}{switch$i{1{puts111}2{puts222}3{puts333}default{putsxxx}}}for循环:TCL的for循环也是很类似C语言的:for{seti0}{$i《10}{incri}{puts$i}初始化i=0,范围i《10,循环i=i+1while循环:seti10while{$i!=5}{puts$iincri-1}运行的结果,自己就可以想象了10》字符串转为命令eval命令:setaset;setbi;setchello;eval$a$b$c上述代码就等效于:setihelloeval将字符串的内容,作为命令,执行11》打印输出之前的那个puts命令也是可以打印到命令行,但是,也只是能打印出来而已,而这个format类似于C中的sprintf(用于格式化输出):format命令:format可以这样用:format“%s%d”hello666seti[format“%s%d”hello666]scan命令:说到format,刚好一起把scan说了,这两个命令可以看做是相反的一对,前者组合成字符串,后者把字符串拆分后赋值给变量scan8%d.%d.%d.%dabcd将8拆分,并分别赋值给abcd四个变量,命令返回赋值成功的变量的个数puts命令:puts当然也可以打印到文件中setf[opentest.txtw]puts-nonewline$f“hello\n”puts$f“world”close$fputs-nonewline$f“hello\n”表示的是强制不换行打印,否则自动追加一个换行符文件系统基本常用操作:gets–》一次读一行文件puts–》写入文件open–》打开文件close–》关闭文件flush–》刷新缓冲区cd命令和shell中的cd一样pwd命令用于查看当前所在的目录open命令打开文件,返回文件描述符命令格式:open文件名模式,支持6种模式,和其他编程语言中的文件IO,也是很相似的,模式如下:r模式:打开只读文件(文件必须存在)r+模式:打开可读写文件[r+和a+模式可以类比]w模式:打开只写文件,若文件存在则清空内容;若文件不存在则创建文件。a模式:以追加方式打开只写文件,若文件不存在,则创建;如果文件存在,则会在文件内容最后面追加写入的数据xxxx理论上说open|文件名模式,在文件名前加个“|”符号,可以以管道的模式打开文件,但是测试一直没有成功,之后用到的话再回来解决吧xxxxread命令setf[opentest.txtr]read$f6close$f可以使用eof命令,判断文件是否读完了,eof$f,读完返回1,否则返回0上述代码直接从文件中读6个字节;如果想把文件内容全部读出,则直接read$f;如果想一行一行读则使用gets命令:gets$fsource命令命令格式:source$f从对应的文件中读出内容,并传给Tcl解释执行tell命令返回文件的指针位置,命令格式:tell$ffile命令命令格式:fileoptionnameoption操作选项较多,就直接列个表了,表示如下:除此之外,file的stat状态操作选项:命令格式:filestatnamek,结果存在数组k里glob命令1)查看当前目录下的文件(类似shell中的ls)glob*2)查看当前目录下特定后缀的文件glob*.txt*.tcl3)查看当前目录下的txt、txl、tcl和tct文件:glob{*t[xc][tl]}4)查看当前目录下的子目录里查看txt、txl、tcl和tct文件:用“\”分割路径,格式为:glob{{目录1,目录2等}\\*.后缀}5)-type选择查看类型:命令格式:glob-type{类型1类型2等}目标目录类型有:类型含义b块设备c字符设备d代表目录f文件l代表符号链接p代表命名管道s代表套接字r读w写x可执行seek命令用于调整文件指针命令seek$f2,文件指针定位到序号为2,现在有一个文件名为s1.txt,内容为hello字符串,那么,设计一个程序实现从第三个字符串开始读文件内容:info命令获取信息假如创建了一个过程:prochello{abc}{putshi}执行命令:infoargshello,则返回abc,参数列表执行命令:infobodyhello,则返回putshi,函数体infoprocs,返回所有的过程的列表infoprocshello,如果存在hello过程则返回hello字符串,不存在则不返回infocommands,则列出解释器支持的所有命令infocommandscreate_ip,create_ip是vivado支持的tcl命令,所以这个info返回的值是create_ip,如果不支持该命令的话,则不返回值infoexistskkk,判断kkk变量是否存在infovars,返回当前变量名的列表infovarsi,如果存在该i变量则返回i字符串,不存在则不返回infoglobals,返回全局变量的列表infoglobalsenv,如果存在该env全局变量则返回env,不存在则不返回infolocals,返回local变量列表infolocalsi,如果存在该i局部变量则返回i,不存在则不返回infohostname,返回主机名infocmdcount,则返回当前解释器已经执行的命令个数infotclversion,返回解释器版本号infolevel,返回当前的在栈中的绝对位置infolevel1,如果加了参数数字,则返回该层的命令和参数注:uplevel命令(连接参数)既然说了level那就把uplevel命令说了,level值为0代表顶层,level代表在栈中的绝对位置,过程调用的时候,一层比一层的level值高1,被调用的过程中若想在上一层的环境中执行操作,那么就需要uplevel命令了prochello{}{uplevelseta“helloworld”}setahi;hello;puts$a注:upvar命令(连接变量)既然说了uplevel那就把upvar命令也说了吧,其类似于uplevel命令,但是其侧重的是在不同层之间连接单一变量prochello{a}{upvar$ax;setxhelloworld}setihi;helloi;puts$i系统异常、系统监视catch命令用于阻止因错误而导致的中断执行,类似python中的异常,执行成功返回0,否则返回1unknown命令我将这个指令归为异常指令使用方法:首先定义一个unknown过程,这个过程的参数为cwd(命令)和args(参数)procunknown{cwdargs}{putscommend:$cwdputsargs:$args}这样的话,当有未知命令或者打错了代码的话,就可以通过unknown过程,控制错误time命令time“set

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论