数字IC——TCL语言3

阅读这一篇博客之前,大家可以参考我之前总结的TCL语言基础。

数字IC——TCL语言1

数字IC——TCL语言2

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 nameinstance 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与其属性

  1. object是对于TCL脚本一个重要的扩展
  2. 常见的object有:cell、net、port、pin
  3. 每种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的特点

  1. 只需要输入一条shell启动指令就能完全自动化的完成整个综合过程
  2. 在综合不同的设计时,用户只需要将待综合的设计和库放入一个文件夹,修改参数配置文件中的环境变量即可。

 运行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
  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值