欢迎关注个人公众号摸鱼范式
什么是TCL?
TCL,Tool Command Language,是一种脚本语言,主流的EDA工具都支持TCL进行操作。TCL经常被用于 快速原型开发,脚本编程, GUI和测试等方面。
TCL学习
接下来以一个实际的tcl脚本为例,简单介绍TCL的使用。这个脚本是用于modelsim/qusetasim仿真的脚本,mentor将tcl进行拓展,称之为do文件,实际语法还是TCL。脚本来自链接:https://blog.csdn.net/k331922164/article/details/50001035
# testbench name without .v , .vt , .vhd , .vht
set testbench_name conv
# simulation time ; ns/us/ms/min
set sim_time 1us
# auto add files when $auto_add_file==1; add file list when $auto_add_file==0
quietly set auto_add_file 1
# project path
set prj_path E:/conv_sim
# backup path
set bkp_path E:/conv_sim/backup
# monitor resolution ratio , for example : 1920 x 1080
quietly set m_width 1920
quietly set m_height 1080
if 0 {
my first program in Tcl program
Its very simple
}
首先,第一行,TCL采用#进行单行注释,多行注释使用判断句注释,就像末尾的if那样。TCL是一种弱语言类型,不需要声明类型,直接通过set声明变量并进行赋值。字符串变量直接输入即可,不需要额外的声明。这里直接set的变量是全局变量。
proc new_prj {new_prj_name} {
global prj_path
set new_prj_path E:/conv_sim/$new_prj_name/
quit -sim
project close
if { [file exists $new_prj_path]==0 } {
file mkdir $new_prj_path
}
project new $new_prj_path $new_prj_name work
if { [file exists $new_prj_path/src]==0 } {
file mkdir $new_prj_path/src
}
file copy -force -- $prj_path/sim.do $new_prj_path
puts "create new project successfully!"
puts "current project path : "
pwd
}
这里定义了一个用于创建工程的命令new_prj。
proc为procedure的缩写,TCL使用proc声明过程,用proc声明后,过程就会成为脚本的一个命令,直接使用。对于在过程中定义的变量,因为它们只能在过程中被访问,并且当过程退出时会被自动删除,所以称为局部变量;在所有过程之外定义的变量我们称之为全局变量。 TCL 中,局部变量和全局变量可以同名,两者的作用域的交集为空:局部变量的作用域是它所在的过程的内部;全局变量的作用域则不包括所有过程的内部。如果我们想在过程内部引用一个全局变量的值,可以使用 global 命令。这样在new_prj中就能访问到全局变量prj_path。
变量的引用通过$进行引用,会直接将表达式进行替换。
quit是qusetasim的命令,用于退出软件,加上选项-sim将只退出仿真而不会关闭软件。project close也是qusetasim的命令,用于关闭工程。
file exists path,判断是否存在指定文件夹。file mkdir path,创建文件夹。file copy -force -- source targetDir 复制文件到指定目录,这个命令把 source 中指明的文件或目录递归的拷贝到目的地址 targetDir,只有当存在