阅读这一篇博客之前,大家可以参考我之前总结的TCL语言基础。
1、TCL在EDA工具中的扩展与应用
1.1 概述
TCL(Tool Command Language)是一种简单的编程语言,开源并符合行业标准,许多Synopsys工具命令界面都基于TCL语言。
TCL脚本是基于命令的。
- Builtin Commands
Builtin命令是TCL解释器自身带有的内置命令。
- Application Commands
Application命令是由Synopsys工具提供,使用Tcl扩展机制、用C或C++编写为命令过程。
- User Defined Commands
User defined命令是用户提供的,在TCL中编写为命令过程。
本文主要介绍Application Commands,即Synopsys TCL
1.2 参考资料(有需要的友友可以问我要)
1.3 TCL的应用
- 目标:通过对设计对象的分析,了解Design Compiler获取电路并进行解析的方法。
电路可以用示意图/代码的形式进行表示,下文指令须在DC环境!!!下操作,不可在tclsh中操作。
Design Compiler中TCL的常见指令:
get_ports portsName //返回design中对应的ports object
例1:查看design中所有A开头的port
dc_shell > get_ports A*
get_cells cellsName //返回design中对应cell的instance name object
补充: 区分reference name和instance name
reference name:电路中被例化的实例,是唯一的。
instance name:可以将实例复制为多个,一般采用{U1 U2 U3}表示。
例2:查看design中U4的存在
dc_shell > get_cells U4
get_nets netsName //返回design中对应net的object
例3: 查看design中以INV开头的net
dc_shell > get_nets INV*
例4:查看design中有多少net
dc_shell > llength [get_object_name [get_nets *]]
或者
dc_shell > sizeof_collection [get_nets *]
get_pins pinsName //返回design中对应pin的object
例5:查看design中有哪些pin的名字叫做D
dc_shell > get_pins */D
1.4 object与其属性
- object是对于TCL脚本一个重要的扩展
- 常见的object有:cell、net、port、pin
- 每种object都有其属性
1.4.1 概述
get_attribute可以得到任何一种属性。
list_attribute -class * 可以得到所有object属性。
set_attribute可以设置属性。
-
Cell object
属性:ref_name:用来保存reference cell的名称。
dc_shell > get_attribute [get_cells -h U2] ref_name
{INV}
-
Pin object
属性:owner_net:用来保存与之相连的net的名称。
dc_shell > get_attribute [get_pins U4/D0] owner_net
{INV0}
-
Port object
属性:direction:用来保存port的方向。
get_attribute [get_ports A] direction
{in}
-
Net object
属性:full_name:用来保存net的名称。
dc_shell > get_attribute [get_nets INV0] full_name
{INV0}
dc_shell > get_object_name [get_nets INV0]
{INV0}
1.4.2 使用方法拓展
- -f 可以过滤属性,得到想要的object
例6:得到所有方向是input的port
dc_shell > get_ports * -f "direction == in"
{A B C D CLK}
- -of 可以用来得到与你指定object相连接的object
例7:找到与给定port相连接的net
dc_shell > get_nets -of [get_pins U2/A]
BUS0
例8:如何得到电路中所有的inverter
//使用Synosys TCL指令
get_buffers -inverter
//人工扩展TCL指令
get_inverters
人工扩展TCL指令这里将不做讨论,感兴趣的同学可以自行查阅资料探究。
2、使用TCL控制EDA工具流程
下面将使用TCL来设计Design Compiler的自动化flow
自动化flow的特点
- 只需要输入一条shell启动指令就能完全自动化的完成整个综合过程
- 在综合不同的设计时,用户只需要将待综合的设计和库放入一个文件夹,修改参数配置文件中的环境变量即可。
①运行run.csh脚本,启动DC。
②建立reports与work两个文件夹,reports文件夹用于存放生成的报告,work文件夹用于存放过程文档和脚本。
③启动顶层脚本top.tcl文件
④top.tcl按先后顺序启动各个子脚本,生成script.tcl
⑤DC读取script.tcl中的约束,最终完成综合。
#!/bin/csh -f
rm -rf *.log *.svf alib* reports log work
mkdir reports work
dc_shell -xg -t -32bit -f ./top.tcl