TCL · DIGITAL FLOW AUTOMATION
TCL 入门:从基础语法到第一个自动化脚本
掌握变量、字符串、列表、条件判断、循环、过程与文件读写,为数字 IC 流程自动化打下基础。
TCL(Tool Command Language)是一门轻量级脚本语言。在数字 IC 设计流程中,许多 EDA 工具都提供 TCL 命令接口,因此它常被用于读取设计对象、设置约束、批量执行任务和生成报告。
1. 命令、注释与输出
空格分隔命令名和参数,换行或分号结束命令,井号用于注释:
# 这是一行注释
puts "Hello, TCL!"
puts "第二条命令"; puts "第三条命令"2. 变量与替换
使用 set 创建或读取变量,使用美元符号取得变量值:
set project "cpu_core"
set corner "ss_0p72v_125c"
puts "Project: $project"
puts "Corner: $corner"3. 数值计算
数学表达式使用 expr 求值:
set setupWns -0.12
set margin 0.05
set adjusted [expr $setupWns-$margin]
puts "Adjusted WNS = $adjusted ns"4. 列表
列表适合保存端口、时钟、路径组或报告文件:
set corners [list ss tt ff]
lappend corners ff_0p88v
puts "Count: [llength $corners]"
puts "First: [lindex $corners 0]"
puts "All: $corners"5. 条件判断
set wns -0.08
if {$wns >= 0.0} {
puts "Timing PASS"
} elseif {$wns > -0.10} {
puts "Timing MARGINAL"
} else {
puts "Timing FAIL"
}6. foreach 与 for 循环
foreach 遍历列表,for 处理次数明确的循环:
set corners {ss tt ff}
foreach corner $corners {
puts "Running corner: $corner"
}
for {set i 0} {$i < 3} {incr i} {
puts "Iteration $i"
}7. 定义过程 proc
proc reportStatus {name value {unit "ns"}} {
if {$value >= 0} {
set status "PASS"
} else {
set status "FAIL"
}
return "$name: $value $unit - $status"
}
puts [reportStatus "Setup WNS" -0.12]8. 字典 dict
set metrics [dict create wns -0.12 tns -8.45 area 102345.7]
puts "WNS: [dict get $metrics wns]"
dict set metrics power 0.84
puts "Metrics: $metrics"9. 文件读写
set fp [open "run.log" r]
while {[gets $fp line] >= 0} {
if {[string match "*ERROR*" $line]} {
puts "Found: $line"
}
}
close $fp
set out [open "summary.txt" w]
puts $out "Run completed"
close $out10. 错误处理 catch
if {[catch {set fp [open "missing.rpt" r]} message]} {
puts "Open failed: $message"
} else {
puts "File opened"
close $fp
}完整练习:汇总多角点时序数据
把过程、列表、循环、字典、判断和文件输出组合起来:
proc classifyWns {wns} {
if {$wns >= 0.0} {return "PASS"}
if {$wns > -0.10} {return "MARGINAL"}
return "FAIL"
}
set timing [dict create ss -0.12 tt 0.03 ff -0.04]
set out [open "timing_summary.csv" w]
puts $out "corner,wns,status"
dict for {corner wns} $timing {
set status [classifyWns $wns]
puts "$corner: $wns ns - $status"
puts $out "$corner,$wns,$status"
}
close $out
puts "Summary written to timing_summary.csv"下一步
把 TCL 放进真实 EDA 流程
继续学习集合查询、对象属性、约束生成、时序报告解析和批量运行,让 TCL 成为数字 IC 自动化工具。
查看更多技术教程