TCL简介

TCLTool Command Language的缩写,主要应用在芯片设计领域中。TCL脚本程序是一系列命令构成的集合,在芯片设计工具中,便于流程化执行,提高效率。

TCL语言与其它脚本语言perl、python类似,作为一种解释型语言,逐行解释执行,出错时将停止运行。TCL语言处理的最基本的对象是字符串,因此,不可以直接进行数学表达式的计算,但可以通过命令进行数学计算,同时可以通过命令创建特殊的数据类型,例如列表(List),数组(Array)等。

TCL语言语法结构为:Command Arg1 Arg2,Command为待执行的命令,Arg1和Arg2为后面跟随的参数,参数的个数根据命令不同而定,对于set命令而言,定义一个变量,其后跟随的第一个参数为变量名,第二个参数为变量的值。在TCL中,命令后跟随的参数可以是其它命令执行的结果,比如Command1 [Command2 Arg1 Arg2],简化编程操作。

特殊符号

特殊符号 使用含义
$ 变量引用
[ ] 嵌套命令
“ ” 变量引用替换,字符串中的变量引用将会替换为变量值
{ } 字符串中变量引用不做值替换
\ 续行符或转义符

脚本示例

puts "hello xiongdei"
#Variable,Mathematical Expressions
set var1 10
set var2 20puts [expr $var1+$var2]#string
set x 100
set str1 "print special char : $x"
set str2 {print special char : $x}
puts $str1
puts $str2
set num [llength $str1]
puts [format "%s has %d elements" $str1 $num]scan $str1 "print special %s : %d" s1 s2
puts $s1
puts $s2puts [string length $str1]
puts [string toupper $str1]
puts [string trimleft $str1 "print"]
puts [string trimright $str1 "print"]
puts [string trim $str1 "print"]
puts [string range $str1 0 6]puts [string equal $str1 $str2]puts "regular expression"
regexp {([0-9]+)} $str1 s1 s2 s3
puts $s1
puts $s2
puts $s3puts [string repeat $str1 2]#list
set str1 "are you ok"
set str2 {are you ok}puts $str1
puts $str2puts [lindex $str1 0]
puts [lindex $str2 1]puts "TCL list operating"
set a [concat {1 2} {3 4}]
puts $a
puts [lindex $a 2]
puts [llength $a]
puts [linsert $a 2 5]set x [list A B C {D E} F G H I]
puts [lreplace $x 3 3]
puts [lreplace $x 3 4 {A B} {C D}]set x "1 2 3 4 5 6 7 8 9"
puts [lrange $x 4 end]#input parameter must be variable name, not reference
set x "wahaha"
set y [lappend x "shuangweiwei"]
puts $y
unset yset x "love wahaha and shuangweiwei"
puts [lindex $x [lsearch $x w*]]# available options :-ascii, -command, -decreasing, -dictionary,
# -increasing, -index, -integer, -real, or -unique
set x "wa ha ha shuang wei wei"
puts [lsort -ascii $x]
set x "7 5 4 9 8 3 1 5 6 4 2 5"
puts [lsort -increasing $x]set x "wa,ha,ha"
puts [split $x ","]set x "haha {123} heihei"
puts [join $x ","]#Associative arrays
set y(x) 10
puts $y(x)#condition
set a 10
if { $a < 20} {puts "true"
}#loop
for {set i 0} {$i < 10} {incr i} {puts $i}set d Wen; #Sat Sun
switch $d  { Mon { puts "Monday" }  Tue { puts "Tuesday" }  Wen { puts "Wednesday"  } Thur { puts "Thursday"   }   Fri {puts "Friday"}default {     puts "weekend"   }
}set color "red green blue black"foreach cr $color {puts $cr
}#proc
proc add {a {b 10}} {set s [expr $a+$b]
return $s}set b [add 10]
puts "$b"
set b [add 10 15]
puts "$b"

该入门示例包含了TCL脚本中最基本的一些操作,主要包含字符串输出相关操作,数学表达式的计算,列表和列表相关操作,循环和条件判断以及过程的定义。

考虑到在芯片设计中,文件具有特殊的格式,比如verilog格式的源文件,db格式的库等工艺库相关的文件,用于后端的约束文件等,需要由工具中特定的命令进行操作。

数字IC设计随笔之七(TCL脚本编程入门)相关推荐

  1. 数字IC设计随笔之六(DVE中波形数据alias显示)

    DVE中波形信号alias的定义 在使用VCS做仿真时,将波形中状态值显示为容易理解的具有实际有意义的字符串,将会大大提高debug的效率. 在DVE窗口中选择需要别名替换的信号,然后点击菜单sign ...

  2. 数字IC设计随笔之一(Verdi自动添加波形脚本应用)

    Verdi自动添加波形脚本应用 在刚接触verdi时,每次查看波形都需要重新加载一遍,写了简单的脚本用于实现波形加载,没想到下载需求挺多,也有私信问如何使用,在这里将做简单的说明. 脚本有三个文件,分 ...

  3. 数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

    VCS.DVE|Verdi单步调试 使用VCS+Verdi进行仿真时,需要在仿真文件中添加如下代码: initial begin$fsdbDumpfile("test.fsdb") ...

  4. 数字IC设计之脚本语言

    首先需要了解一下脚本语言在数字IC设计中的作用,C.C++等编程语言是为了开发软件或高性能计算应用,要是开发简单的应用,脚本语言更为简单,缩短了传统的"编写-编译-链接-运行"过程 ...

  5. 数字 IC 设计领域的书籍、工具、脚本推荐

    数字 IC 设计领域的书籍.工具.脚本推荐 版权所有,⌊新芯设计⌉\lfloor新芯设计\rceil⌊新芯设计⌉,转载文章,请注来源 文章目录 数字 IC 设计领域的书籍.工具.脚本推荐 引言

  6. 数字IC设计前端必读书籍

    数字IC设计前端推荐书籍 本文将从简单到复杂的顺序依次列出数字IC设计需要阅读的书籍. 1.数字电路基础 数字IC设计最基础的书籍了,相关书籍比较多,可以随意挑选:主要是为了弄清楚与或门电路,触发器. ...

  7. 数字IC设计工程师成长之路

    转载:http://kellen.wang/zh/the-knowledge-base-of-a-qualified-ic-design-engineer/ I. 技能清单 作为一个真正合格的数字IC ...

  8. 数字IC设计工程师的知识结构

    刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要.然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构, ...

  9. 一个合格数字IC设计工程师的知识结构

    本文转自:http://kellen.wang/zh/the-knowledge-base-of-a-qualified-ic-design-engineer/ 刚毕业的时候,我年少轻狂,以为自己已经 ...

最新文章

  1. C/C++利用三元组实现稀疏矩阵运算
  2. Android usb pc通信
  3. python爬虫登陆网页版腾讯课堂
  4. Android平台发展史
  5. C#对window 硬件类操作,ManagementObjectSearcher
  6. linux联想电脑wifi密码,联想笔记本Y7000—ubuntu16.4无法开启wifi的解决办法
  7. linux 图片编辑 java_Java在Linux下 不能处理图形的解决办法 分享
  8. 大数据技术周报第 004 期
  9. ISO8583报文协议(转)
  10. ASP.NET AJAX 首部曲 - 迈向解密之路
  11. 编程大讲坛:C#核心开发技术从入门到精通pdf
  12. 查看ESP32模组中Flash颗粒以及芯片信息
  13. [MATLABSIMULINK] 如何提取并处理Simscape Power System 中powergui的谐波分析数据
  14. word中批量插入图片
  15. Copy On Write机制了解一下
  16. 怎么做二维码?二维码制作的简单方法
  17. LNK2001LNK2019
  18. Java web后端框架
  19. JAVA的while循环语句和break与continue的使用
  20. Python做双均线策略

热门文章

  1. 魔兽世界怀旧服服务器信息,魔兽世界怀旧服服务器类型有哪些_怀旧服服务器类型介绍...
  2. 赛门铁克推测试版诺顿360服务 集成多种功能
  3. 虾米音乐关闭后还有什么好用的音乐软件?
  4. 使用ArcGIS制作城市关系强度图
  5. 教你如何搭建人事OA-员工管理系统,demo可分享
  6. kobo touch N905B刷Koreader
  7. c语言编程实现二进制计算器,本程序是用纯C语言编的一个基于命令行的四则运算计算器。主要用于计算四则运算表达式的值,同时可以实现四...
  8. windows10快捷键(windows10常用快捷键大全)
  9. java刷卡扣钱,商场购物“刷一次卡被扣了两次钱”,你遇到过吗?!
  10. 计算机编程实验,c语言下的计算机软件编程实验