TCL语言及其在fpga设计中的应用

上传人:小**** 文档编号:168227950 上传时间:2022-11-08 格式:PPT 页数:68 大小:581.50KB
收藏 版权申诉 举报 下载
TCL语言及其在fpga设计中的应用_第1页
第1页 / 共68页
TCL语言及其在fpga设计中的应用_第2页
第2页 / 共68页
TCL语言及其在fpga设计中的应用_第3页
第3页 / 共68页
资源描述:

《TCL语言及其在fpga设计中的应用》由会员分享,可在线阅读,更多相关《TCL语言及其在fpga设计中的应用(68页珍藏版)》请在装配图网上搜索。

1、TCL语言及在语言及在fpga设计中的设计中的应用应用讲座内容讲座内容TCL简介简介TCL基本语法基本语法ISE下下TCL应用应用ModelSim下的脚本语言下的脚本语言TCL简介简介什么是什么是TCLTcl 全称是Tool command Language。它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握。Tcl语言是一个解释性语言,所谓解释性是指不象其他高级语言需要通过编译和联结,它象其他shell语言一样,直接对每条语句顺次解释执行。历史历史Tcl/Tk 的发明人 John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路

2、CAD 设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使 Ousterhout 教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了 Tcl(Tool Command Language)语言的产生。Tcl 最初的构想的是希望把编程按照基于组件的方法(component approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的,具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组

3、件功能基础上生成。不同的组件有不同的功能,用于不同的目的。并可为其它的应用程序所利用。当然,这种语言还要有良好的扩展性,以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起,使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的 Java 不谋而合。终于在 1988 年的春天,这种强大灵活的胶水-Tcl 语言被发明出来了 运行平台运行平台Tcl/Tk可以提供跨平台的支持。Tcl语言可以运行于绝大多数当今流行的UNIX、WINDOWS和Macintosh等系统上,而且命令通用,只是启动的细节有些不同。Tcl/Tk与C/C+的良

4、好兼容性。Tcl/Tk 脚本可以很好的集成到C/C+程序中。TCL 运行环境运行环境Tcl的执行是交互式的,Tcl提供了交互式命令界面,界面有两种:tclsh和wish。tclsh只支持Tcl命令,wish支持Tcl和Tk命令。通过交互界面,我们就可以象执行UNIX shell命令一样,逐条命令执行,并即时得到执行结果。内嵌的Tk(toolkit)图形工具可以提供简单而又丰富的图形功能,让用户可以轻松的创建简单的图形界面。TCL 工具工具本文使用本文使用active Tcl:Activestate公司开发的工具公司开发的工具下载地址下载地址http:/ 1 注释符号是 或者;#,在命令后注释用

5、;#,在行开头两者均可;2 puts:输出文本,多个单词如被空格或TAB分隔需要使用“”或 括起来;3 多个命令写在一行使用;间隔。puts Hello,World-In quotes;#注释 给变量赋值给变量赋值 set:给变量赋值,格式为 set var value;#给变量X赋一个字符串 set X This is a string;#给变量Y赋一个数字 set Y 1.24;#显示X和Y的内容 puts$X puts$Y 命令的赋值与置换一命令的赋值与置换一 1 TCL中命令的赋值分为置换和赋值两个步骤 2 续行符为 3 转义符同为 4 特殊字符列表:puts“nBen Frankli

6、n is on the$100.00 bill”;#n换行;$100前的 必须有,否则会将100作为一个变量,提示出错 set a 100.00 puts Washington is not on the$a bill;#This is not what you want puts Lincoln is not on the$a bill;#显示$100,说明是后结合的,先置换了$a,此处严格的写应该写为$a 命令的赋值与置换二命令的赋值与置换二 最外层是 则不会进行置换操作,但其中的续行符仍然有效 set Z Albany set Z_LABEL The Capitol of New Yor

7、k is:puts$Z_LABEL$Z;#显示The Capitol of New York is:Albany puts$Z_LABEL$Z;#显示$Z_LABEL$Z,没有进行置换,中不会置换 puts$Z_LABEL$Z;#最外层是双引号,所以进行了置换 命令的赋值与置换三命令的赋值与置换三 1 可以传递其中的命令结果,注意不能被 包含;2 双引号包含的 中的命令可以正常执行,命令结果也可以传出;3 包含的 中的命令不会执行,更不会有命令结果传出来。set x abc puts$xn;#显示abc set y set x def;#先执行中的命令,将”def”赋值给x,然后将该命令的结果

8、赋值给y puts X:$x Y:$yn;#显示x和y都是def set z set x This is a string ;#由于在中,所以并没有执行对x的赋值,只是将赋值给z puts$zn set a set x This is a string within braces within quotes;#执行了对x的赋值操作,并将值传出来赋给了a puts See how the set is executed:$a 算数运算算数运算操作符 数学函数 set X 100;set Y 256;#行末是否有分号都可以 set Z expr$Y+$X;#变量是否被双引号包含都可以,不过建议使用

9、双引号 set Z expr$Y+$X set Z_LABEL$Y plus$X is puts$Z_LABEL$Z puts The square root of$Y is expr sqrt($Y)n 文本比较文本比较SWITCH应用应用 1 switch的分支中的命令使用花括号包含,但是并不会影响花括号中的命令执行,切记,这是switch的格式;2 如果不想分支条件进行置换,需要在外加上花括号,不会影响分支中的命令执行。set x ONE;set y 1;set z ONE;switch$x ;#若此处有“$z”“puts ONE=1”;#不会走入此分支,走入下一分支ONE puts O

10、NE=1 TWO puts TWO=2 default puts NO_MATCH 数值比较数值比较IF应用应用 1 条件式结果 2置换变量的方法,set y x;puts$y,因为是后结合并且是一次置换,所以打出来的是$x,不是$x的值;但是在if的条件式中进行了二次置换,$y 被置换成了$x 的值 3注意:新行中需要写为 else ,不能将 写到前一行的末尾,也不能省略 后面的那个空格,后面的 也需要写在当行,并且前面需要一个空格。数值比较数值比较IF应用应用 举例举例set x 1;if$x=2 puts$x is 2 else puts$x is not 2;#判断是否相等使用=if$

11、x!=1 ;#判断是否不等使用!=puts$x is!=1 else puts$x is 1 set y x;if$y!=1 ;#在if条件式中$y进行了二次置换 puts$y is!=1;#在puts命令中,只进行了一次置换 else puts$y is 1 WHILE 循环循环 while后面的条件表达式是放在花括号中的;放在双引号中会只执行一次置换 set x 0;while$x 5 ;#只执行一次置换16 break;#如果去掉这句就成了死循环 if$x 3 continue;#这句使4 打不出来 puts x is$x;FOR循环和循环和incr incr x 和 set x exp

12、r$x+1 达到一样的效果,向上加一 for puts Start;set i 0$i 2 incr i;puts I after incr:$i;#第一部分只执行一次,后面两部分每次循环都会执行 puts I inside first loop:$i puts Start;set i 0;while$i 2 puts I inside first loop:$i incr i;puts I after incr:$i;过程过程PROC 1 格式:proc name args body 2 调用方法中参数可以用花括号或者双引号包含,也可以不包含 3 在puts等命令中需要置换的话,需要使用方括

13、号 puts The sum of 2+3 is:sum 2 3nn;#调用过程#puts The sum of 2+3 is:sum 2 3nn;#出错,提示找不到第二个参数,置换过程中第一个参数是2 3,所以找不到第二个参数 puts The sum of 2+3 is:sum(2 3)nn;#输出sum(2 3),因为没有方括号,根本没有进行置换 过程PROC的参数定义 1 过程的参数赋缺省值:proc name arg1 arg2 value 2 过程的不确定个数的参数定义:proc name arg1 argsproc example first second args ;#参数定义

14、:赋缺省值和不确定个数参数定义 if$second=puts There is only one argument and it is:$first;return 1;else if$args=puts There are two arguments-$first and$second;return 2;else puts There are many arguments-$first and$second and$args;return many;变量的作用域变量的作用域 1 全局变量定义:global var1 2 局部变量:upvar x y 等同于upvar 1 x y,作用有两个:一

15、是将上一层的x的值赋给y;二是将上一层的x的地址赋给y,于是修改y等于修改x。1代表作用范围,也可为2,3等,不能为0 变量的作用域变量的作用域 举例举例proc SetPositive variable value ;#此处variable只是一个参数名,可以修改为其他的来代替变量 upvar$variable myvar;#此处也可写为upvar 1$variable myvar if$value-This-is-one-list-LIST项的增删改 1 在中执行的命令不会改变其中变量的值,在外面单独执行会改变其值;2 list函数列表:LIST项的增删改 举例set b list a b

16、 c d e f g h;#为4项:a;b;c d e;f g h set a concat a b c d e f g h puts Concated:$an;#concat去掉了第一层花括号,输出:a b c d e f g h lappend a ij K lm;#在a后面增加了一项ij K lm,注意此处a的值改变了 lappend a ij K lm;#在a后面增加了三项 ij K lm,注意此处a的值改变了set b linsert$a 1 1 2 3;#在a的第三项(0开始数)插入三项 1 2 3,注意此处a的值并没有被改变 puts After linsert at posit

17、ion 3:$bn 更多LIST相关 1 list相关的函数列表:2 通配符列表 字符串函数 字符串函数列表 set string this is my test string puts There are string length$string characters in$string puts string index$string 1 is the second character in$string;#返回h puts string range$string 5 10 are characters between the 5th and 10th;#返回”is my”更多字符串函数

18、string compare string1 string2 字符串比较-1:string1比string2小 0:string1和string2相等 1:string1比string2大 string first string1 string2 返回string1在string2中第一次出现的位置;如果string2不在string1中,返回-1 string last string1 string2 返回string1在string2中最后一次出现的位置,如果string2不在string1中,返回-1 string wordstart string1 index 返回string1中in

19、dex处的单词的开始位置 string wordend string1 index 返回string1中index处的单词的结束位置 string match pattern string1 返回string1中是否满足匹配模式pattern 修改字符串函数 format 函数 格式:format formatstring?arg1 arg2.argn?set labels format%-20s%+10s Item Cost;#%-20s:总长度20,字符串左对齐 set price1 format%-20s%10d Cents Each Tomatoes 30;#%10d:总长度10,数值

20、右对齐 set price2 format%-20s%10d Cents Each Peppers 20 set price3 format%-20s%10d Cents Each Onions 10 set price4 format%-20s%10.2f per Lb.Steak 3.59997;#%10.2f:总长度10,小数点后两位,数值右对齐 正则表达式 11 利用正则表达式在字符串中查找子串 格式:regexp?switches?exp string1?matchVar?subMatch1.subMatchN?例如:regexp(A-Za-z+)+(a-z+)$sample mat

21、ch sub1 sub2 switches exp:正则表达式,使用 包含,如果使用”包含,需要转义符才能执行$sample:被查找的字符串 match:满足(A-Za-z+)+(a-z+)匹配的子串传递给match sub1:满足(A-Za-z+)的子串传递给sub1,正则表达式中圆括号的匹配项会将结果按顺序传递给后面的变量 sub2:满足(a-z+)的子串传递给sub2,正则表达式中圆括号的匹配项会将结果按顺序传递给后面的变量 正则表达式 22 利用正则表达式在字符串中替换子串 格式:regsub?switches?exp string1 subSpec VarName 例如:regsub

22、 way$sample lawsuit sample2 switches exp:正则表达式,此处是字符串way string1:被替换的字符串 subSpec:替换为什么字符串,此处是lawsuit VarName:替换后的结构赋给的变量 正则表达式 3正则表达式常用通配符列表 正则表达式 操作举例set sample Where there is a will,There is a way.set result regexp a-z+$sample match puts Result:$result match:$match;#返回here set result regexp(A-Za-z

23、+)+(a-z+)$sample match sub1 sub2 puts Result:$result Match:$match 1:$sub1 2:$sub2;#sub1=Where,sub2=there set sample Where there is a will,There is a way way.regsub way$sample lawsuit sample2 puts New:$sample2;#返回结果:.There is a lawsuit way.可以看出只是替换了左边的一个way 更多正则表达式更多正则表达式 正则表达式非常重要,虽然已经有正则表达式的工业标准,但是

24、实际情况并不完全统一,perl,shell,tcl,java等的正则表达式都有些许区别,所以大家需要留心细节。1*:0到n个非零字符 2*:0到n个零 30-9+:1到n个数字 4/*:0到n个非反斜杠字符 5(/a-z*):前面是一个反斜杠,后面跟着0到n个小写字母 6(t+):非制表符的任意字符 7(t):一个制表符 8:其实是匹配的,因为书写的时候需要转义符 数组数组 数组相关命令数组相关命令array exists arrayName判断一个数组是否存在判断一个数组是否存在,数组存在返回数组存在返回1,数组不存在返回数组不存在返回0array names arrayName?patte

25、rn返回一个数组的指示列表,相返回一个数组的指示列表,相当于数组的第一维,如果没有匹配串则完全返回当于数组的第一维,如果没有匹配串则完全返回array size arrayName返回数组的列数,相当于数组的第二维数返回数组的列数,相当于数组的第二维数目目array get arrayName取得数组的值列表,它使数组的赋值变得取得数组的值列表,它使数组的赋值变得简单,例如:简单,例如:array set arrayX array get arrayY,实现了将,实现了将arrayY赋值给赋值给arrayXarray set arrayName datalist数组定义数组定义数组举例数组举例

26、array set array1 list 123 Abigail Aardvark 234 Bob Baboon 345 Cathy Coyote 456 Daniel Dog puts Array1 has array size array1 entriesnputs Array1 has the following entries:n array names array1 nputs ID Number 123 belongs to$array1(123)nset array1(123)modifiedputs ID Number 123 belongs to$array1(123)na

27、rray set array3 array get array1 ;#可以看出可以看出tcl中的数组赋值中的数组赋值非常简单非常简单,不用写循环来赋值不用写循环来赋值更多数组相关更多数组相关使用使用foreach浏览数组内容;浏览数组内容;使用使用array startsearch,array anymore和和 array nextelement 浏览数组内容;浏览数组内容;array set array1 list 123 Abigail Aardvark 234 Bob Baboon 345 Cathy Coyote 456 Daniel Dog foreach id array nam

28、es array1;#浏览数组内容方法一浏览数组内容方法一 puts$array1($id)has ID:$id文件存取文件存取 文件打开命令:文件打开命令:格式:格式:openfile fileName?access?permission解释:解释:fileName:文件名称:文件名称access:存取模式:存取模式文件关闭命令,文件用完后一定要记得关闭文件关闭命令,文件用完后一定要记得关闭格式:格式:close fileID文件存取文件存取读取文件内容读取文件内容格式:格式:gets fileID?varName?fileID 可以为以下四种中的一种可以为以下四种中的一种通过通过open打

29、开文件得到的文件标志符打开文件得到的文件标志符stdin:标准输入:标准输入stdout:标准输出:标准输出stderr:标准错误:标准错误varName:读出的文件内容存入:读出的文件内容存入向文件写入内容向文件写入内容格式:格式:puts?-nonewline?fileID?string文件信息文件信息 file dirname返回路径名返回路径名file extension返回文件扩展名返回文件扩展名file rootname返回不包括扩展名的文件名返回不包括扩展名的文件名file tail返回不包括路径名的文件名返回不包括路径名的文件名file atime返回最后一次文件存取时间返回最

30、后一次文件存取时间file executable如果可执行返回如果可执行返回1TCL中的子进程调用中的子进程调用open&exec 格式:格式:open|progName?access?功能:为管道返回一个文件描述符。如果功能:为管道返回一个文件描述符。如果progName用引号括起用引号括起来,可以包含参数。来,可以包含参数。格式:格式:exec?switches?arg1?arg2?.?argN?功能:执行子进程功能:执行子进程switches:-keepnewline:管道输出的每行后面加个新行。:管道输出的每行后面加个新行。argN:参数可以是:可执行程序;作为子进程运行的命令行;:参

31、数可以是:可执行程序;作为子进程运行的命令行;输出重定向输出重定向模块化模块化source source的用途的用途将一个程序分为多个文件;将一个程序分为多个文件;可以将一组过程放到一个文件中,成为一个库文件;可以将一组过程放到一个文件中,成为一个库文件;配置程序;配置程序;加载数据文件。加载数据文件。格式:格式:source fileName读入文件并执行;读入文件并执行;如果代码出错,如果代码出错,source返回那个错误返回那个错误如果执行到返回,就立刻返回,即便返回命令后面还有命令也不执行如果执行到返回,就立刻返回,即便返回命令后面还有命令也不执行立刻返回立刻返回如果文件名以如果文件名

32、以 开头,替换为环境变量开头,替换为环境变量$HOME创建命令创建命令eval 在程序运行的过程中,在程序运行的过程中,tcl可以执行其中创建的命令可以执行其中创建的命令格式:格式:eval arg1?arg2?.?argn?功能:将参数连接成一个字符串,传递给功能:将参数连接成一个字符串,传递给tcl_Eval 进行执行,并进行执行,并返回结果或错误码返回结果或错误码set cmd puts Evaluating a putsputs CMD IS:$cmdeval$cmd改变工作目录改变工作目录 cd&pwd改变工作目录改变工作目录格式:格式:cd?dirName?功能:改变当前目录到功能

33、:改变当前目录到dirName,如果没有,如果没有dirName就改变到就改变到当前用户的工作目录当前用户的工作目录$HOME,或者目录是,或者目录是 ,也是改变到当前,也是改变到当前用户的工作目录用户的工作目录$HOME,如果是,如果是 开头,后面紧跟的字符被解开头,后面紧跟的字符被解析为析为loginid。显示当前路径:显示当前路径:pwdISE下下TCL应用应用Xilinx Tcl ShellXtclshSource Xilinx Tcl CommandsProject Xfilelib_vhdlPartitionProcesstiming_analysisprojectproject

34、建立工程,设置工程参数。打开已有的工程,关闭工程。获得工程信息,保存工程。Archive 将工程保存为.zip文件。Clean清理工程目录下的临时文件。Close关闭工程Getproject get -process-instance 例:project get Report Type-process Generate Post-Place&Route Static Timing“project get speedProject 子命令Project 子命令 续New建立工程Open打开工程Properties工程属性列表save_as工程另存为Snapshot快照功能Project 子命令

35、续2set(set project properties,values,and options)%project set -process-instance 例子:project set Map Effort Level highProject 子命令 续3project set device project set family project set package project set speed project set top|processprocess run -instance -force rerun|rerun_allxfile xfile The xfile comman

36、d is used to manage all of the source files within an ISE project.Use the xfile command to add,remove,and get information on any source files in the current ISE project.add(add file(s)to project)%xfile add -copy-lib_vhdl -view xfile is the name of the Xilinx Tcl command.add is the name of the xfile

37、subcommand.file_name 定义源文件名称,可带路径,使用通配符,*/?-copy 可选参数,是否拷贝到工程目录。-lib_vhdl specifies the option to add the file(s)to an existing VHDL library.library_name is the name of the VHDL library.-view specifies the option to add the file(s)to a specific design view.view_type Supported view_types are:Implemen

38、tation,Simulation,All,Noneget(get project file properties)%xfile get xfile is the name of the Xilinx Tcl command.get is the name of the xfile subcommand.file_name specifies the name of the source file to get the name or timestamp information on.name if specified,returns the full path and the name of

39、 the specified file.timestamp if specified,returns the timestamp of when the file was first added to the project with the xfile add command.properties/remove xfile propertiesThe xfile properties command lists all of the available file properties.There are two properties supported for this command:na

40、me and timestamp.%xfile remove remove(remove file from project)%xfile remove lib_vhdllib_vhdl lib_vhdl add_file add a source file to the librarylib_vhdl delete add a source file to the librarylib_vhdl get get library property valuelib_vhdl new create a new library)lib_vhdl propertiesget a list of li

41、brary propertiespartitiondeletegetnewpropertiesrerunsettiming_analysisdeletedisable_constraintsdisable_cptenable_constraintsenable_cptgetnewresetrunsaveassetset_constraintset_endpointsset_filterset_queryshow_settingsModelsim下的脚本语言下的脚本语言举例举例module counter(clk,n_rst,a,b,d);input clk;input n_rst;input

42、7:0 a;input 7:0 b;output 8:0 d;reg 8:0 d;always(posedge clk)beginif(!n_rst)d=9b000000000;elsed=a+b;endendmodule举例举例vlib workvmap workvlog counter.vvsim-L work work.counter-t 1nsadd wave-r/*force-repeat 20 clk 0 0,1 10force n_rst 1force a 16#AAforce b 16#BBrun 40force n_rst 0run 40force n_rst 1force

43、a 16#55force b 16#aaarun 40新建work库映射work库编译counter.v文件,默认编译到work库里仿真work库里名为counter的模块,时间单位为1ns将工程中所有信号量添加到波形图里添加时钟信号,周期为20(ns)。如果要改变时钟周期,代码中“20”和“10”要同时改变,且为两倍关系,“10”为一个周期中高电平所占时间。将n_rst 信号置1将a 赋值为16进制的AA(b10101010)将b 赋值为16进制的BB(b10111011)运行40ns,如图中的前两个周期将n_rst 置 0运行40ns,如图中的中间两个周期将n_rst 置 1将a 赋值为16进制55(b01010101)将b 赋值为16进制 AA(b10101010)支行40ns,如图中后两个周期ENDTHANK YOU

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!