synopsy的Tcl脚本语言学习笔记_第1页
synopsy的Tcl脚本语言学习笔记_第2页
synopsy的Tcl脚本语言学习笔记_第3页
synopsy的Tcl脚本语言学习笔记_第4页
synopsy的Tcl脚本语言学习笔记_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——synopsy的Tcl脚本语言学习笔记TCL脚本语言学习

(1)当输入的命令较长时,可以使用反斜线\\将一行命令分割为几行,例如:settarget_library\\

/home/fzz/synopsys/library/slow.db

上面的命令等价于settarget_library/home/fzz/synopsys/library/slow.db(2)缩略语命令:Synopsys的命令可以缩略到非含混的形式,但是在脚本文件中应当少使用缩略命令,由于脚本文件在某些Synopsys的工具或者TCL中的命令易于发生变化,这种变化由于缩略而变得含混。

(3)可以使用Synopsys中的“history〞命令列举或者执行出从前使用过所有命令,例如:

dc_shell>historyinfo5

该命令将列举出最近执行过的5跳指令dc_shell>historyredo4

该命令将执行在当前dc_shell中执行过的命令中的第4条指令,这里面redo后面的数据如不是有效的,则将重复执行最终输入的命令。例如

dc_shell>historyredo-4,-4无效,将重复执行最终输入的有效指令也可以采用快捷键的方式,输入“!!〞命令,重新执行命令。例如:dc_shell>!!

settarget_library/home/fzz/synopsys/library/slow.db/home/fzz/synopsys/library/slow.db能够重复执行某条指令可以使用Dc_shell>!5

(4)以命令行方式获得help使用-help命令获得帮助Dc_shell>echo–help

同样可以使用for命令获得help的所有命令,输入方式如下:dc_shell>helpfor*

也可以获得特别的命令组的所有命令的列表,通过输入命令集合的名字,例如:dc_shell>helpprocedures

使用man命令

也可以使用man命令获取Synopsys中获得帮助的相应命令,例如:dc_shell>manquery_objects

(5)CommandStatus

命令状态时命令返回值,所有的命令都返回一个一个字符串或者null,默认时命令状态值返回控制窗口,例如:

dc_shell>settotal_cells0,这里定义了一个新的变量0

dc_shell>incrtotal_cells(6)Quoting引用

使用quotingdisable一些特别字符的含义(例如:[],$and;)dc_shell>seta5;setb1010

dc_shell>echo{[expr$b-$a]}evaluatesto[expr$b-$a][expr$b-$a]evaluatesto5

双引号标示特别的较弱的quoting,使用举例如下:dc_shell>SetA10;setB44

dc_shell>echo“Ais$A;Bis$B.\\nNetis[expr$A-$B].〞chapter2Tcl基础Variables变量

dc_shell>setbuf_name1si_10K/B1I1si_10K/B1Idc_shell>seta11

dc_shell>setb2.5

Tcl中所有的变量都是字符串,Tcl不识别变量是整数或者实数的变量

dc_shell>setb1010

dc_shell>incrb11

dc_shell>incrb-65

Incr的默认增加值是1,假使增加的不是整数值,那么则会报错,例如:dc_shell>setb2.42.4

dc_shell>incrbError?

为了查找一个变量是否存在,可以使用tcl的infoexists命令,例如说,为了查看变量total_cells是否存在,键入:dc_shell>infoexiststotal_cells

假使变量存在,则infoexists返回1,否则,返回0。

为了查看变量是否与特定的类型相匹配,使用Tcl的脚本infovars命令,例如dc_shell>infovarstotal_c*total_cells数值变量的精度

数值变量的精度依靠于给变量所赋的值,假使使用小数点,则数值变量成为浮点数,否则成为整数。整数变量可以看作是是十进制,八进制或者十六进制。为了不产生不可预计的结果,在使用时,应当注意精度问题。例如,在下面的例子中,除法操作产生不同的结果:dc_shell>seta10;setb=4.0;setc42.5

dc_shell>expr$a/$b;2.5

dc_shell>expr$a/$c2

第一个expr命令实现了浮点数除法,其次个expr命令实现了整数除法变量置换variablesubstitution使用变量置换实现变量值的接入,dc_shell>setbuf_name1si_10K/B1I1si_10K/B1I

dc_shell>echo$buf_name1si_10K/B1IScripts脚本

脚本文件是由命令集合组成的,典型,这些命令存储在脚本文件中实现一组特别的进程。然而可以通过使用一个分号在shell中直接输入脚本而实现连续的命令。添加注解:

Tcl中的注解是通过井字号#添加的,例如:

dc_shell>echo$buf_name#thisisaninlinecomment

当命令中的延续字符〞\\〞出现在解释行的最末时,后续的一行也被视为解释,例如在下面的例子中,任何set命令都不被执行#setCLK_NAMESysclk;setCLK_PERIOD10;\\setINPUT_DELAY2导入并运行脚本文件

可以使用Synopsys中的source命令,例如脚本文件中包含一个名为mysession.tcl的文件,通过以下方式运行脚本文件

echo[lindex$D_pins1]

I1/FF4/D

dc_shell>echo[lindex$compound_list1]12.53.754Arrays

Tcl使用联合阵列,这种阵列使用任意的字符串,能够包含数字以及相应的指数,联合阵列包含的元素,每个元素都有其名字以及相应的值。为了引用一个一个阵列元素,需要使用下面的形式:array_name(element_name)

例如,你可以创立报告文件中的阵列如下:dc_shell>setvio_rpt_ext(ir_drop).volt.volt

dc_shell>setvio_rpt_ext(curr_dens).em.em

dc_shell>setvio_rpt_ext(curr).current.curren

第一个set命令将创立vio_rpt_ext阵列,同时设置ir_drop元素为.volt,下图给出了阵列的相应结构

ElementnameselementvaluesIr_drop.voltCurr_dens.emCurr.current下面的例子将打印出curr_dens的元素dc_shell>echo$vio_rpt_ext(curr_dens).em

也可以使用size和names命令打印出vio_rpt_ext阵列的大小和名字:

dc_shell>arraysizevio_rpt_ext3

dc_shell>arraynamesvio_rpt_extcurrcurr_densir_dropcontrolflow控制流

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}{$psetmylist{I1/FF3/DI1/FF4/DI1/FF5/D}I1/FF3/DI1/FF4/DI1/FF5/D

dc_shell>foreachi$mylist{echo$i}I1/FF3/DI1/FF4/DI1/FF5/D

使用break和continue命令

Break和continue命令改变while,for,和foreach命令的数据流Break命令使内部循环中断,

Continue命令使得内部循环的当前迭代中断。BasicFileCommands

本部分介绍了需要使用文件时的Tcl命令概述,可以使用这些命令对文件的的方向检索信息进行操作,从文件中读取和写入操作。cd和pwd命令

cd和pwd命令等效于在操作系统中使用的,使用cd命令改变当前的工作路径,使用pwd命令打印当前工作路径的路径名。file和glob

使用file和glob命令检索文件信息,以产生文件名称列表。使用file命令检索文件信息,file命令有如下的形式:Fileoptionargarg...File命令选项:

filedirnamefnameReturnsthedirectorynamepartofafilename.fileexistsfnameReturns1ifthefilenameexists,0otherwise.fileextensionfnameReturnstheextensionpartofafilename.fileisdirectoryfnameReturns1ifthefilenameisadirectory,0otherwise.

fileisfilefnameReturns1ifthefilenameisafile,0otherwise.

filereadablefnameReturns1ifthefileisreadable,0otherwise.filerootnamefnameReturnsthenamepartofafilename.filesizefnameReturnsthesize,inbytes,ofafile.filetailfnameReturnsthefilenamefromafilepathstring.filewritablefnameReturns1ifthefileiswritable,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,thenreaditbackandprintitsetfname\#Openfile,thenwritetoitsetfid[open$fnamew+]

puts$fid\close$fid#

#Openfile,thenreadfromitsetfid[open$fnamer]

setdata_in[gets$fid]close$fid#

#Printoutdatareadecho$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学习脚本语言了。2023-7-8

VariableScope变量范围

变量的范围说明在脚本文件中变量的作用范围,在Tcl中,变量的范围或者是局部的或者是全局的,使用脚本或者进程时,必需注意变量的范围以确保变量被恰当使用。

当进程被调用时,进程中每个参数都是局部变量,局部变量只在进程内部使用,进程终止时,局部变量将被删除,产生于进程内部的变量也被称为局部变量。进程外部的变量称为全局变量,在进程内部通过使用global命令可以使用全局变量参数默认

进程中一个或多个参数还可以采用默认值,为了设定参数的默认值,可以将进程中的参数列表表示:即包含了参数的名称和其默认值,例如,这里值得注意的是{}中分行写时不需要使用〞\\〞#proceduremax

#returnsthegreateroftwovaluesprocmax{{a0}{b0}}{if{$a>$b}{return$a}return$b}

在调用时使用max95,返回结果9

VariableNumbersofArguments可变化的参数数量

也可以创立进程,使用参数args,实现其中的参数数量是可变化的,该参数必需放在参数列表中最终位置,前面的参数由前一节中描述的处理,额外的参数被放在args中作为列表使用,下面给出了例子:#printthesquareofatleastonenumberprocsquares{numargs}{setnlist$numappendnlist\appendnlist$args

foreachn$nlist{

echo\}}

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_body??-permanent??-dont_abbrev?

proc_name

define_proc_attributesCommandExample

dc_shell>procplus{ab}{return[expr$a+$b]}

dc_shell>define_proc_attributesplus-info\-define_args{\\

{a\{b\

{\dc_shell>help-verboseplus

Usingtheparse_proc_argumentsCommand

parse_proc_arguments命令将参数传递给由define_proc_attributes命令定义的进程的内部

在进程内部使用parse_proc_arguments命令支持参数的有效性,以使得-help选项有效。Chapter4

WorkingwithCollections

Collection是一组设计对象的集合,例如libraries.ports,以及cells,通过使用synopsys提供的命令创立,观测和操作集合,本章将描述怎样使用synopsys命令,使用Tcl语言处理集合。CreatingCollections

使用synopsys的get_*和all_*命令创立collections(集合),下面例子给出了一个创立端口集合的设计(dc_shell跑不起,就在design_vision下跑的):

可以将命令集合创立到一个变量中:Design_vision>setmyports[get_ports]DisplayingObjectsinaCollection

在命令提醒符中使用的命令可以将集合中的所有相应元素列举出来,为了更加灵活,可以使用query_objects命令将集合中的所有元素列举出来。

query_objects命令产生所有的输出端口,和报告命令的输出端口相像。队列结果以Tcl列表形式给出,因此可以直接使用结果,例如要显示所有以字符串c开始的端口,输入下面的命令

design_vision>query_objects[get_portsc*]

{clk,clk_out}

Query_objects命令能够直接探寻设计库,例如:design_vision>query_objects–classportc*{clk,clk_out}

SelectingObjectsFromaCollection

可以使用集合命令filter选项或者filter_collection命令从集合中选择特别的对象,每个-filter选项和filter_collection命令使用filter表达式约束结果集合

UsingFilterExpressions

filter表达式是一组规律表达式描述在集合中要添加的约束,filter表达式通过相应的操作符比较有值的属性名,例如下面的filter表达式选择继承对象名(其面积属性值小于12单位)。\AddingObjectstoaCollection

使用add_to_collection命令增加集合的对象,add_to_collection命令增加新的集合包含原始集合中,增加额外的对象,原始集合没有被修改。ComparingCollections

使用compare_collections命令比较两个集合的内容,假使两个集合中的内容一样,则ComparingCollections命令返回0,否则返回非0。例如:

design_vision>compare_collection[get_cells*][get_cells*]Copyingcollections

Copy_collection命令用来复制集合,结果产生一新的集合,基本的集合不发生变化,copy_collection命令对于复制存在的集合是一种有效的方法,例子如下:

ExtractingobjectsFromacollection

Index_collection命令产生一个集合,其对象元素是另一个集合中的第n个元素对象。集合中的元素对象从0到n-1.从命令中得到的集合,例如get_cells可能不是按序排列的,但每一个都是可预计的,同样的命令执行n次,(例如get_cells*)得到的集合是一样的。例如,从结合中抽取第一元素对象:

Chapter5

ATclScriptExample

本章将讲解一些Tcl脚本文件,以说明怎样使用Tcl脚本文件和synopsys命令,以及在前些章节中讲解的topics.从细节上对Tcl脚本文件进行讲解。脚本文件中包含dc_rpt_cell进程和define_proc_attributes命令,用来扩展dc_rpt_cell的属性。DC_rpt_cell综述

DC_rpt_cell脚本有两个部分,第一部分是dc_rpt_cell进程,其次部分是define_proc_attributes命令,define_proc_attributes命令扩展了

dc_rpt_cell进程的属性。DC_rpt_cell进程列举了设计中所有的cell,并且假使cell有如下的特性将产生报告文档。黑盒,保护属性,继承,组合以及测试cell。

在例子5-1中给出了脚本文件的全部程序代码Dc_rpt_cell,这里给出了使用该Tcl家在设计数据库德方法:我在这里使用的是任意整数分频电路,而脚本文件使用的例5-1中的脚本文件,最终执行的结果和例子中的还是有很大的区别,这里只是想了解一下,因而在Desingcompiler中跑了一下,由于没有添加时序路径的约束,因而生成的报告中,没有关于路径约束的部分。这个脚本文件还是值得自己细心研究一下。

SourceDC_rpt_cell#脚本文件

Read_file–formatverilogddc/home/fzz/verilog_study/clk_any.ddcDC_rpt_cell–total_only

例子5-1DC_rpt_cell脚本文件#Title:DC_rpt_cell.tcl#

#Description:ThisDesignCompilerTclproceduregeneratesacell#reportofadesign.

#Itreportsallcellsandthefollowingattributes:#b-blackbox(unknown)#d-hasdont_touchattribute#dw-DesignWarepart

#h-hierarchy#n-noncombinational#t-testcell#

#Options:-all_cellsonelinepercellplussummary#-hier_onlyeveryhierarchycellandsummary#-total_onlygeneratesummaryonly#

#Software:Y-2023.06#Version:June2023

#Usage:dc_shell>sourceDC_rpt_cell.tcl#dc_shell>DC_rpt_cell-t#

procDC_rpt_cellargs{suppress_messageUID-101setoption[lindex$args0]if{[stringmatch-a*$option]}{echo\

echo\

echo\echo\echo\echo\echo\

echo\echo\

echo[format\\

echo

\}elseif{[stringmatch-t*$option]}{setoption\echo\

setcd[current_design]

echo\echo\

}elseif{[stringmatch-h*$option]}{setoption\echo\

setcd[current_design]

echo\hierarchicalcellreporton[get_object$cd]\

echo\

echo[format\\

echo

\}else{

echo\

echo\echo\\\[-hier_only\\]\\[-total_only\\]\echo\return}

#initializesummaryvarssettotal_cells0setdt_cells0sethier_cells0sethier_dt_cells0setdw_cells0setseq_cells0setseq_dt_cells0settest_cells0settotal_area0#initializeothervarssethdt\settc_atr\setxcell_area0

#createac

温馨提示

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

评论

0/150

提交评论