synopsy的Tcl脚本语言学习笔记Word文档下载推荐.docx
- 文档编号:8258816
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:22
- 大小:284.01KB
synopsy的Tcl脚本语言学习笔记Word文档下载推荐.docx
《synopsy的Tcl脚本语言学习笔记Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《synopsy的Tcl脚本语言学习笔记Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。
dc_shell>
manquery_objects
(5)CommandStatus
命令状态时命令返回值,所有的命令都返回一个一个字符串或者null,默认时命令状态值返回控制窗口,例如:
settotal_cells0,这里定义了一个新的变量
incrtotal_cells
(6)Quoting引用
使用quotingdisable一些特殊字符的含义(例如:
[],$and;
)
seta5;
setb10
10
echo{[expr$b-$a]}evaluatesto[expr$b-$a]
[expr$b-$a]evaluatesto5
双引号标示特殊的较弱的quoting,使用举例如下:
SetA10;
setB4
4
echo“Ais$A;
Bis$B.\nNetis[expr$A-$B].”
chapter2Tcl基础
Variables变量
setbuf_name1si_10K/B1I
1si_10K/B1I
seta1
1
setb2.5
Tcl中所有的变量都是字符串,Tcl不识别变量是整数或者实数的变量
incrb
11
incrb-6
Incr的默认增加值是1,如果增加的不是整数值,那么则会报错,例如:
setb2.4
2.4
Error
…
为了查找一个变量是否存在,可以使用tcl的infoexists命令,例如说,为了查看变量total_cells是否存在,键入:
infoexiststotal_cells
如果变量存在,则infoexists返回1,否则,返回0。
为了查看变量是否与特定的类型相匹配,使用Tcl的脚本infovars命令,例如
infovarstotal_c*
total_cells
数值变量的精度
数值变量的精度依赖于给变量所赋的值,如果使用小数点,则数值变量成为浮点数,否则成为整数。
整数变量可以看作是是十进制,八进制或者十六进制。
为了不产生不可预测的结果,在使用时,应该注意精度问题。
例如,在下面的例子中,除法操作产生不同的结果:
seta10;
setb=4.0;
setc4
2.5
expr$a/$b;
expr$a/$c
2
第一个expr命令实现了浮点数除法,第二个expr命令实现了整数除法
变量置换variablesubstitution
使用变量置换实现变量值的接入,
echo$buf_name
Scripts脚本
脚本文件是由命令集合组成的,典型,这些命令存储在脚本文件中实现一组特殊的进程。
然而可以通过使用一个分号在shell中直接输入脚本而实现连续的命令。
添加注解:
Tcl中的注解是通过井字号#添加的,例如:
echo$buf_name#thisisaninlinecomment
当命令中的延续字符”\”出现在注释行的最末时,后续的一行也被视为注释,例如在下面的例子中,任何set命令都不被执行
#setCLK_NAMESysclk;
setCLK_PERIOD10;
\
setINPUT_DELAY2
导入并运行脚本文件
可以使用Synopsys中的source命令,例如脚本文件中包含一个名为mysession.tcl的文件,通过以下方式运行脚本文件
sourcemysession.tcl
当声明一个文件而没有直接的信息时,source命令检验路径sh_source_uses_search_path以决定是否使用search_path中的值搜索文件,更多的内容,可以使用sh_source_uses_search_path和serch_path的帮助页面。
更改脚本输出端口的指向
当脚本文件执行时,可以使用synopsys的source命令,通过-echo和-verbose显示命令和命令结果,例如:
source–echo–verbosemyrun.tcl
同样可以通过使用管道操作符”>
”将执行的结果保存在一个输出文件中,例如:
source–echo–verbosemyrun.tcl>
myrun.out
脚本文件举例:
setsearch_path{./home/fzz/synopsys/dc200809/libraries/syn/home/fzz/synopsys/dc200809/dw/syn_ver/home/fzz/synopsys/dc200809/dw/home/fzz/synopsys/library}
setlink_library{*fast.db}
settarget_libraryfast.db
setsymbol_librarysmic18.sdb
setCLK_NAME
Sysclk
setCLK_PERIOD10
setOUTPUT_DELAY3
read_file-formatverilog/home/fzz/Verilog_study/clock45.v
current_design
link
set_input_delay$INPUT_DELAY–clock$CLK_NAME[list[all_inputs]]
set_output_delay$OUTPUT_DELAY
-clock$CLK_NAME[list[all_outputs]]
check_design
数据类型:
在数据类型中能够用到的数据类型有三种:
String,Lists,Arrays
Synopsys工具支持colledtion数据类型
Strings
String是以字符的序列,Tcl将命令参数看做是字符串,并以字符串返回命令结果,下面是字符串的例子:
Sysclk“FF3FF4FF5”
大部分字符操作都是通过Tcl的字符命令操作,字符串的语法如下:
Stringoption?
arg…?
Lists
List是元素的有序集合,每个元素都可能是字符串或者是另一个List.可以使用list将一组cellinstance组合起来。
可以创建简单的列表,通过双引号括起列举的元素,或者是通过使用Tcl列表命令,必须使用空格划定元素界限,而不用逗号。
例如,创建D输入引脚的cellinstance例子的list
setD_pins"
I1/FF3/DI1/FF4/DI1/FF5/D"
setD_pins{I1/FF3/DI1/FF4/DI1/FF5/D}
setD_pins[listI1/FF3/DI1/FF4/DI1/FF5/D]
也可以使用list创建特殊的混合链表,例如下面的例子中所创建的链表包含三种元素,其中每一个都是list:
setcompound_list[list{xy}{12.53.754}{redgreenblue}]
对于其中某个元素的引用使用下面的语法:
echo[lindex$D_pins1]
I1/FF4/D
echo[lindex$compound_list1]
12.53.754
Arrays
Tcl使用联合阵列,这种阵列使用任意的字符串,能够包含数字以及相应的指数,联合阵列包含的元素,每个元素都有其名字以及相应的值。
为了引用一个一个阵列元素,需要使用下面的形式:
array_name(element_name)
例如,你可以创建报告文件中的阵列如下:
setvio_rpt_ext(ir_drop).volt
.volt
setvio_rpt_ext(curr_dens).em
.em
setvio_rpt_ext(curr).current
.curren
第一个set命令将创建vio_rpt_ext阵列,同时设置ir_drop元素为.volt,下图给出了阵列的相应结构
Elementnames
elementvalues
Ir_drop
.volt
Curr_dens
.em
Curr
.current
下面的例子将打印出curr_dens的元素
echo$vio_rpt_ext(curr_dens)
也可以使用size和names命令打印出vio_rpt_ext阵列的大小和名字:
arraysizevio_rpt_ext
3
arraynamesvio_rpt_ext
currcurr_densir_drop
controlflow控制流
Tcl中使用的数据流控制命令有if,while,for,foreach,break,continue以及switch以确定命令的执行顺序
if和Switch命令提供一种方式选择可执行的脚本块,whilefor,foreach提供了一种方式重复执行脚本块,break和continue命令形结合用在环回时改变正常的执行顺序。
使用if命令:
If命令要求两个参数,此外还可以扩展至使用elseif和else参数,所要求的参数:
判定表达式,
基于表达式结果附有条件执行的脚本
If命令执行时的基本形式:
if(expression){
script
}
如果表达式的结果不为0,则脚本将被执行。
if命令可以包含一个或多个elseif分支和一个最终的else分支,一elseif分支要求有两个额外的参数,表达式和脚本
例如下面的语句计算0到10的平方:
for{setp0}{$p<
=10}{incrp}{echo"
$psquaredis:
[expr$p*$p]"
使用foreach命令
Foreach命令在列表的元素之间迭代,它有三个参数:
变量名,列表,可执行的脚本。
foreach命令有如下的形式:
foreachvar$somelist{script}
下面的例子foreach命令将简单list中的元素打印出来
setmylist{I1/FF3/DI1/FF4/DI1/FF5/D}
I1/FF3/DI1/FF4/DI1/FF5/D
foreachi$mylist{echo$i}
I1/FF3/D
I1/FF5/D
使用break和continue命令
Break和continue命令改变while,for,和foreach命令的数据流
Break命令使内部循环中断,
Continue命令使得内部循环的当前迭代中断。
Basic
FileCommands
本部分介绍了需要使用文件时的Tcl命令概述,可以使用这些命令对文件的的方向检索信息进行操作,从文件中读取和写入操作。
cd和pwd命令
cd和pwd命令等效于在操作系统中使用的,使用cd命令改变当前的工作路径,使用pwd命令打印当前工作路径的路径名。
file和glob
使用file和glob命令检索文件信息,以产生文件名称列表。
使用file命令检索文件信息,file命令有如下的形式:
Fileoptionargarg...
File命令选项:
filedirnamefname
Returnsthedirectorynamepartofafilename.
fileexistsfname
Returns1ifthefilenameexists,0otherwise.
fileextensionfname
Returnstheextensionpartofafilename.
fileisdirectoryfname
Returns1ifthefilenameisadirectory,0otherwise.
fileisfilefname
Returns1ifthefilenameisafile,0otherwise.
filereadablefname
Returns1ifthefileisreadable,0otherwise.
filerootnamefname
Returnsthenamepartofafilename.
filesizefname
Returnsthesize,inbytes,ofafile.
filetailfname
Returnsthefilenamefromafilepathstring.
filewritablefname
Returns1ifthefileiswritable,0otherwise.
可以使用glob命令产生文件名列表,例如:
Setflist[glob
*.em
*.volt]
例子产生当前路径中后缀为.em和.volt文件的列表
Openclose和flush
可以使用open,close和flush命令设置文件的读取
Open命令有如下的形式:
Openfname?
access_mode?
Open命令返回一个字符串(文件的ID),通过open命令获得的,进而标识文件以进一步交互利用
使用close命令关闭一个文件,有如下的形式。
close$fid
$fid参数是文件的ID,是通过open命令获得的,下面的例子说明了open和close命令的用法
Setf[openVDD.emw+]
close$f
使用flush命令强制缓冲的输出写入到文件中去,数据写入文件中并不会直接出现在文件中,相反,数据会会在memory中处于队列状态稍后写入文件中,flush命令忽略这中特性
Flush命令形式如下:
flush$fid
可以使用gets命令从文件中读取单一的一行,puts命令将单一的一行写入文件中。
Get名令有如下的形式:
gets$fidvar
$fid参数是通过open文件时获得的ID,var参数是接收数据行的变量。
当有一行数据被读取时,文件指向下一行,gets命令返回读取的字符数量,如果没有字符被读取,gets返回一个-1,并且将变量var置空字符串。
Puts命令有如下的形式:
puts?
$fid?
var
以下将说明使用gets和puts命令的使用说明
#Writeoutalineoftext,thenreaditbackandprintit
setfname"
mytext.txt"
#Openfile,thenwritetoit
setfid[open$fnamew+]
puts$fid"
Thisismylineoftext."
#
#Openfile,thenreadfromit
setfid[open$fnamer]
setdata_in[gets$fid]
#Printoutdataread
echo$data_in
非连续文件读取
在默认情况下,gets和puts命令式连续读取文件,可以使用seek,tell和eof命令管理不连续的文件读取。
可以使用seek命令移动文件的读取位置,读取位置是文件中下次读写的指针。
默认情况下,读取指针是上次读写终止的地方。
Seek命令的最简单形式如下:
seek$fidoffset
$fid参数是文件的ID(是在open命令中得到的);
offset参数是偏移读取位置的字节数。
Chapter3
WorkingwithProcedure进程的操作
一个进程是一个命名的指令的块(block),实现特殊的功能任务。
通过进程,使用现有的TCL和Synopsys命令创造新的命令,本章将介绍怎样产生进程,描述了怎样使用synopsys进程扩展
CreatingProcedures产生进程
可以使用Tcl命令产生一个进程
Ubuntu又一次被我搞死,DC装好怎么都用不起到dc_shell,没办法只好用pt_shell学习脚本语言了。
2010-7-8
VariableScope变量范围
变量的范围说明在脚本文件中变量的作用范围,在Tcl中,变量的范围或者是局部的或者是全局的,使用脚本或者进程时,必须注意变量的范围以确保变量被恰当使用。
当进程被调用时,进程中每个参数都是局部变量,局部变量只在进程内部使用,进程终止时,局部变量将被删除,产生于进程内部的变量也被称为局部变量。
进程外部的变量称为全局变量,在进程内部通过使用global命令可以使用全局变量
参数默认
进程中一个或多个参数还可以采用默认值,为了设定参数的默认值,可以将进程中的参数列表表示:
即包含了参数的名称和其默认值,例如,这里值得注意的是{}中分行写时不需要使用”\”
#proceduremax
#returnsthegreateroftwovalues
procmax{{a0}{b0}}{
if{$a>
$b}{
return$a
return$b
在调用时使用max95,返回结果9
VariableNumbersofArguments
可变化的参数数量
也可以创建进程,使用参数args,实现其中的参数数量是可变化的,该参数必须放在参数列表中最后位置,前面的参数由前一节中描述的处理,额外的参数被放在args中作为列表使用,下面给出了例子:
#printthesquareofatleastonenumber
procsquares{numargs}{
setnlist$num
appendnlist"
"
appendnlist$args
foreachn$nlist{
echo"
Squareof$nis[expr$n*$n]"
ExtendingProcedures
本部分介绍了synopsys中的define_proc_attributes和parse_proc_arguments命令,这些命令增加了进程的功能,利用这些命令,可以这些进程可以创建例如synopsys中的help和语义属性等
当创建一个进程时,进程固有的属性有:
没有帮助文档,进程的主题可以看做是Tcl的信息部分命令;
进程可以被修改;
进程名字可以被缩写(根据sh_command_abbrev_mode变量)
通过使用define_proc_attributes命令,可以
定义命令的help文档;
声明参数生效的规则;
预防进程被修改等
使用parse_proc_arguments命令联合define_proc_attributes命令定义进程中的-help选项以支持进程中参数的有效性。
Usingthedefine_proc_attributesCommand
使用synopsys中的define_proc_attributes命令定义以及改变进程的属性。
语法如下:
define_proc_attributesproc_name?
-infoinfo_text?
?
-define_argsarg_defs?
?
-command_groupgroup_name?
-hide_bo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- synopsy Tcl 脚本语言 学习 笔记