原创 TCL学习小记(二)——TCL语法

2011-8-8 20:56 4574 12 13 分类: FPGA/CPLD
         这一节介绍一下TCL语言的语法。

         脚本、命令和单词:在TCL中,这三个概念是从外到内的包含关系,一个脚本文件中可以包含一条或者多条命令,一个命令由由一个或者多个单词组成。举个例子吧,如一下几行代码,整个就是一个脚本文件,其中有三条命令,分隔两条命令可以用回车换行或者分号,在命令中有几个单词,如第一条命令,set是第一个单词,它是一个命令名,而a9分别为第二和第三个单词,它们是set的两个参数,因此不管是命令名还是参数都属于单词,单词之间用空格符分隔。

                                                        set  a  9

                                                        set  b  16 ; set  c  25

         替换:在TCL中有三种替换形式:变量替换、命令替换和反斜线替换。

(1) 变量替换:首先看一个程序:

set  a  9

set  b  a

         大家猜想一下,ab的值,a的值一目了然,肯定是9,关键是bb的值会是9吗?那我们来验证一下,如图1所示,a的值没问题,b的值显示是a

1

         上面这个例子说明在TCL中间接赋值是行不通的,仔细研究可以发现,在第一条命令中a是一个变量,而在第二条命令中a只是一个字符,那有什么办法能做到间接赋值呢?采用变量替换,可以将TCL变量的值插入单词中,如图2所示例子,在a前面加上变量替换符$,就可以取出变量a的值,此处a不再是一个字符,而是一个变量。

2

(2) 命令替换:一个单词可由变量的值替换,其实也可以由一个命令替换,这种替换称为命令替换,替换符为方括号[ ],如图3中命令,第二条命令中的第三个单词由一条命令替换而成,其中expr这个命令返回表达式$a*4的值,而a的值为2,因此计算得到b的值是8

3

(3) 反斜线替换:一个单词替换成一些特殊的字符,替换符为反斜杠\,这个与C语言中有些相似,比如\n表示回车换行,\t表示制表符,应该很容易理解。

引用:TCL中,有类似替换符$[]这样的特殊字符,TCL解析器需要对它们进行特殊处理,但如果想让这些字符按照正常的字符一样输出,则需要引用,引用并不限定于阻止解析器对特殊字符的处理,类似这种阻止解析器的特殊处理的方式都称为引用。在TCL中有两种引用形式:双引号引用和大括号引用。其中大括号引用取消所有特殊字符的特殊处理,双引号引用取消单词分隔符和命令分隔符的特殊处理。

(1) 双引号引用:如上所述,双引号引用可以取消单词分隔符和命令分隔符的特殊处理,单词分隔符就是空格,命令分隔符是换行或分号。如图4所示,第一条命令中,ab之间的空格被忽略;第二条命令中,ab之间的分号和bc之间的换行被忽略。

4

         双引号有两个注意:在TCL中,如果检测到一个单词的第一个字符是引号“,则表示引用开始,直到检测到另一个引号”表示结束,因此如果调用双引号引用,引号“必须作为第一个字符。

         另外一个注意就是双引号引用并不会取消特殊字符的处理,如图5所示。

5

(2) 大括号引用:取消所有特殊字符的处理。如图6所示,

6

         其实大括号引用的功能包含了双引号引用的功能,图6例子中,空格的特殊处理也被取消了。

         此外,大括号引号还可以嵌套使用,与C语言中的大括号功能类似,就是将多条命令包起来,表示这些命令是一个整体。在TCL中常用于过程定义和命令流控制,关于过程定义和命令流控制在以后学习中详细说明。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1504897 2011-8-13 14:57

希望能加入quartus ii使用中具体例子来说明这些语法
相关推荐阅读
Hoki 2017-01-11 17:35
LX9开发板呼吸灯实现
对LX9开发板硬件评测后,从这一节开始真正进入FPGA开发的世界。很多开发板的例程中必有跑马灯实验,老跑马也没意思,咱来把新潮的,整一个呼吸灯。 呼吸灯最初是出现在apple公司的笔记本产品中,当合上...
Hoki 2017-01-11 16:47
LX9的microblaze配置
虽然XC6SLX9芯片资源比较少,但是嵌一个microblaze还是搓搓有余的,这一节就来评测一下在XC6SLX9上microblaze的配置。 有两种方法配置microblaze,一是在ISE软件中...
Hoki 2017-01-11 16:32
zynq评测
Zynq芯片是业界第一款在FPGA中集成ARM核的芯片,由FPGA的发明者xilinx公司推出的。Zynq严格来说不能以FPGA来定义它,因为其是以处理器为中心的平台,能够在单芯片上提供软、硬件和 I...
Hoki 2017-01-11 16:19
u-boot
Zyny芯片启动加载分为3步: 1. 芯片上电启动,首先读取BootROM中的程序,初始化一些必要的外设,然后根据专用引脚电平判断该从何处启动first stage Bootloader(FSBL),...
Hoki 2017-01-11 16:09
基于zynq的交叉编译平台
Zynq芯片的最大特点是其集成了双ARM Cortex-A9处理器,因此zynq的应用基本是以这个ARM核为核心,再配合FPGA逻辑作为协处理器,几乎能实现所有较复杂的应用。并且在ARM上可以跑操作系...
Hoki 2017-01-11 15:54
u-boot image生成
这节介绍一下如何生成u-boot image文件,在SDK软件中点击Xilinx Tools→Create Boot Image工具即可生成,但是生成image文件需要首先集齐3个文件:u-boot....
EE直播间
更多
我要评论
1
12
关闭 站长推荐上一条 /3 下一条