四、数字集成电路DC综合,Tcl脚本语言初步理论

TCL 的全称是Tool Command Language ,它是由 UCA berkeley 开发的一种开放的工业标准语言。和 dc_shell 相比,Tcl 功能更加强大,使用范围也更加广泛,除了 Design Compiler 外,synopsys 的其他工具如 Formality 、PrimeTime 、Physical Compiler 等等都支持 Tcl 。另外 一些EDA 厂商的工具也大多使用 Tcl 界面。

DC 除了 DC-Tcl 之外,还支持较老的命令行方式 dc_shell ,我们可以在 Unix Shell 下通 过使用 dc-transcript 命令将 dc_shell 的脚本转化为DC-Tcl——
在这里插入图片描述

企鹅号 3270516346,交流学习及获取资料

4.1 执行 DC-Tcl 脚本

Tcl 脚本类似于 windows 环境下的.bat 批处理文件,就是将要执行的 Tcl 命令写在一个 脚本中,让后调用 dc_shell-t 执行之,这样可以提高综合的效率。

执行 Tcl 脚本有两种方式:一种是在 dc_shell-t 中调用——
在这里插入图片描述
另一种是直接在 Unix Shell 中调用——
在这里插入图片描述
在这里插入图片描述
上面的**>my.log** 表示将DC 输出定向到my.log 文件中,|tee my.log 表示除了定向到my.log 文件外还要在屏幕中输出。

4.2 在 DC-Tcl 中获得帮助

在 Tcl 环境中最基本的获得帮助的命令就是 help——
在这里插入图片描述
直接键入 help 后将列出 DC-Tcl 中的所有命令。另外我们也可以使用通配符(“*”)找到需 要查找的命令,例如要找到含有 clock 的命令——
在这里插入图片描述
如果要进步找到某一个命令的参数,就可以使用 help –v 选项,下面这个例子就列出了 所有的 set_input_delay 的开关——
在这里插入图片描述
注意:假设要看这个命令的更详细的帮助,就只能借助 man 命令。

4.3 DC-Tcl 中的注释

在这里插入图片描述
DC-Tcl 的注释有两种:行注释和行内注释。行注释和 Cshell 类似,只要在开头加井号即可(“#”);行内注释除了在注释前加井号外还要在井号前加分号(“;”)。

4.4 DC-Tcl 中的变量

  1. Tcl 变量可以通过 set 来创建和赋值,如
    在这里插入图片描述设置变量 my_var 的值为 10。
  2. 引用变量的值,需要在变量名之前加入”$”符号,如
    在这里插入图片描述
    将 my_var 的值赋给了新的变量 my_New_Var。
  3. 打印变量的值,使用 echo 语句,如
    在这里插入图片描述
  4. 删除变量,使用 unset 语句,如
    在这里插入图片描述
  5. 变量的弱引用,使用双引号,如
    在这里插入图片描述
    上面的 data[$a]中变量 a 的值为 5
  6. 变量的强引用,使用大括号,如
    在这里插入图片描述
    上面的 data[$a]中的 a 将不再作为一个变量使用。
  7. 变量中的表达式,使用 expr 语句,如
    在这里插入图片描述
    注意 expr 两边的空格。

4.5 DC-Tcl 中的列表

列表是一般 Tcl 语言的组成部分,它是一串元素的集合,中间以空格分开。列表相当于 C 语言中的字符串。如下面的语句定义了一个 L1 列表,包含 3 个元素,echo$L1 语句返回 所有的元素值,llength 用于返回这个列表的长度。
在这里插入图片描述
另外 lappend 语句用于给列表附加新的元素——
在这里插入图片描述

4.6 DC-Tcl 中的集合

集合(Collection)是 DC-Tcl 特有的数据类型,它主要用于描述有多个属性的元素的集合, 它是为了描述硬件而设计的。例如电路中的端口(ports) ,具有输入/输出、驱动单元、最大电 容等属性,电路中的设计(designs) ,具有面积、工作条件、最大面积等属性。要描述这些具 有属性的元素的集合,列表是不能胜任的。因此引入了集合的概念,它相当于 C 语言的指 针。每一个集合都有一个集合柄(collection handle) ,相当于指针指向的地址。

我们可以通过”get_”语句和”all_”语句创建一个集合,DC-Tcl 用到的创建集合的命令有 如下一些(部分)——
在这里插入图片描述
为了便于和 list 对比,下面举了一个例子——
在这里插入图片描述
可以看到,这里先创建了一个 mylist 的列表和 foo 的集合,llength 返回的 foo 的长度为 1 ,echo $foo 返回的是集合柄(_sel5) ,这些是与列表不一样的。我们可以用 sizeof_collection 类似 llength ,用 query_objects 类似 echo。

在 DC-Tcl 中查找所有包含有 collection 的命令,可以得到——
在这里插入图片描述
其中 remove_from_collection 前面章节已经接触过,它表示从集合中删去元素;相反的, 在集合中增加元素的命令是 add_to_collection ,下面是一个例子——
在这里插入图片描述
这个例子灵活的使用了变量定义了时钟周期和时序预算,这样的好处是参数化,便于以 后修改。另外还定义了 IO_DELAY 变量和 all_except_clk 集合。请大家仔细观察上面的约束 脚本的写法,并争取能在自己的脚本中引入上述方法。
另外一个比较重要的命令是 filter_collection ,它相当于一个过滤器,找出符合要求的元 素形成一个新的集合。例如——
在这里插入图片描述

从所有的 cell 的集合中过滤出引用名为 AN2 的一个,返回值为一个新的集合
在这里插入图片描述
从所有的 cell 集合中过滤出映射过的 cell ,返回值为一个新的集合。

除了 filter_collection 之外,-filter 选项也能完成相同的任务——
在这里插入图片描述
创建一个设置了 don’t_touch 属性的 cell 的集合
在这里插入图片描述
创建名为 fastclks 的 clock 的集合,它的周期属性小于 10 (ns)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chy_wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值