innovus Tcl 学习索引:快速上手innovus Tcl
首先在开始学习之前需要对innovus Tcl有一个大体的认识。如下图所示,将脚本分成了三个大类:
首先通过innovus进行数据获取:
dbGet/get_property/get_cells/get_pins/get_libs/get_ports 等。
然后通过tcl对数据进行处理:
控制语句命令/字符操作命令/列表操作命令/集合操作命令。
还有一些其他的很常用的命令:
读写文件命令/调用linux命令/程序块定义命令等。
图中总结可能不是那么全面,但是可以通过这个图对innnovus Tcl有一个整体的认识,接下来就开始分步学习Tcl。
innovus 中对绝大多数命令都有介绍,包括tcl控制命令和tcl数据处理命令。如果本文介绍不够详细可以在innovus里尝试 help <cmd>
或者 man <cmd>
获取详细的介绍。
一、innovus Tcl 之 数据获取
dbGet
dbGet是Innovus DBTCL命令的一种,所得到数据是作为列表
形式传递的。
除了dbGet,DBTCL的命令还包括以下几种,有兴趣可以拓展了解一下:
dbShape/dbSet/dbSchema/dbQuery/setDbGetMode/getDbGetMode
dbGet是基于一种树状的结构,通过这样的结构去获取设计中的 数据。并使用这些 数据进行脚本处理。
主要需要用到的功能:
pattern筛选/expression筛选/反向筛选(-v)去重(-u)/分级指针(-p) 等。
更深入且完整的学习dbGet参考下面的文档:
https://mp.weixin.qq.com/s/RmW_4gj_IX7BcCBpK5FfA
get_* 获取数据集合
help get_*可以获取所有能获取数据集合
的命令。常用的命令有以下几种
get_cells/get_nets/get_libs/get_lib_cells/get_ports
实际应用中往往需要用到更复杂的匹配方式去获取想要的结果。
以get_cells为例(其他的 -help都有详细介绍),有以下几个option:
option | 说明 |
---|---|
-hierarchical | 能够匹配到低阶层的cell |
-filter | 在匹配结果里继续筛选,*可以根据list_property中的属性进行筛选 |
-of_objects | 将关联cell创建为集合 |
-nocase | 指定模式为不分大小写匹配模式, *需要和-regexp一起使用 |
-regexp | 指定模式为正则表达式匹配模式 |
-leaf | 只返回 leaf cell(即过滤trunk cell),*需要和-of_objects一起使用 |
使用例,根据list_property中的属性筛选出所有的clock pin:
get_pins -hierarchical -filter {is_clock==“true”}
使用例,获取chip内pin名以PAD结尾的net:
get_object_name [get_nets -of_object [get_pins -filter “full_name =~ **/PAD”]]
get_property
使用get_property的方法:
property name的获取方法:list_property
这里的例子选择了列举出cell类型的所有属性,这些property name都可以使用get_property去获取。
其他类型还有:clock design lib lib_cell lib_pg_pin lib_pin lib_timing_arc net path_group pg_net pg_pin pin port timing_arc timing_path timing_point
二、innovus Tcl 之 数据处理
控制语句
Tcl的控制语句只有如下