数字电路静态时序分析基础一

来源:IC创新学院 方便自己查看

1.TCL入门

1.1 变量、数组、列表

1.1.1 变量

1.1.1.1 设置变量替换
  • 设置变量 set a “snow”

    snow

  • 打印变量信息 puts $a

    snow

    puts a

    a

1.1.1.2 用[]表示命令置换/转义
  • set a [expr 3 + 4]

    7

    expr(express)命令是一个手工命令行计数器

  • 用\表示反斜杠置换
    puts “[expr $X + $Y]”

    2.5

    puts “[expr $X + $Y]”

    [expr 1.2 + 1.3]

  • 用\t表示TAB

  • 用\n表示换行

  • #表示注释

1.1.1.3 花括号与双引号
  • TCL对双引号的$和[]符号会进行变量替换和命令替换
    puts “\t[expr $X + $Y]”

    2.5

  • TCL{} 中所有特殊字符变成普通字符
    puts {\t[expr $X + $Y]}

    \t[expr $X + $Y]

1.1.2 数组

  • set数组名(元素名) 值

set cell_1(ref_name) “bufx2”
set cell_1(full_name) “top/cell_1”
set cell_1(pins) “A B C”

  • 取值: $数组名(元素名)

put $cell_1(ref_name)

  • array指令获取数组信息

数组大小:array size cell_1
数组成员: array names cell_1

1.1.3 列表

  • 设置列表

set list {list1 list2 list3}
list1 list2 list3

  • 取值

puts $list
list1 list2 list3

  • 列表基本操作
命令功能举例
concat合并两个列表concat $list1 $list2 $list3
lindex选取列表中的某个元素lindex $list 1
llength列表长度llength $list & llength [concat $list1 $list2]
lappend在列表末尾追加元素lappend list 4
lsort列表排序-real 按照浮点数大小排序 -unique 删除重复元素

1.2 控制流

1.2.1 控制流-if

if (condition) {
...
} else { ...
}

1.2.2 循环指令-foreach

set list1 {1,2,3}
foreach i $list1 {      //i为变量
puts $i
}

1.2.3 循环控制指令-break

结束整个循环

1.2.4 循环控制指令-continue

仅结束本次循环

1.2.5 循环控制指令-while

1.2.6 循环控制指令-for

for { set i 3} {$i > 0} {incr i -1} {  //初始化参数,判断语句, 重新初始化参数
 puts $i
}

1.3 过程函数

1.3.1 定义

proc 函数名 参数列表 函数主体

proc add {a b} {  // 函数名 参数列表 函数主体
set sum {expr $a + $b}
retutn $sum
}

1.3.2 属性

  • 全局变量:过程外定义
  • 局部变量:过程中使用
  • 指令global,可以在过程中引用全局变量

1.4 正则匹配

1.4.1 常见匹配

命令功能举例
\w匹配一个字母、数字、下划线
\d匹配一个数字
*重复零次或多次匹配.*
+一次或者多次匹配\d+
?零次或者一次匹配
^字符串开头
$字符串结尾
\s空格
.任意一个字符.+ 匹配多个

1.4.2 匹配指令

  • regrexp

regexp {\w+\d+} “abc123”
regexp {^\d.*\d$} “1 dsf] 1”

-()捕获

%regexp {^(\w+)\s\w+\s(\d+)." “Snow is 30 years old” total name age
%puts $total
Snow is 30 years old // 第一个匹配所有
%puts $name
%puts $age

1.5 文本处理

1.5.1 open

实例:读取文件

set INPUTFILE [ open file.txt r]         //  r 只读;  w写
while { [gets $INPUTFILE line] >= 0} {  //按照行将文件复制给变量line 
puts "$line"
}
close $ INPUTFILE

1.5.2 close

1.5.3 gets

按照行将文件复制给变量,文件尾返回-1
实例:求取Slack之和
slack = -0.051
slack = -0.234

set sum 0       //全局变量
set INPUTFILE [ open file.txt r]   
while { [gets $INPUTFILE line] >= 0} {  
if ([regexp {^slack\s+=\s+(-?\d+\.?\d+)} $line total slack
set sum [expr $sum + $slack]
}
}
close $INPUTFILE
puts $sum

1.6 synopsys tcl(EDA)

1.6.1 实例分析gets

注意电路与代码中模块的对应
在这里插入图片描述

  • 语法格式:get_ports portsname
    指令功能:返回design中对应的port object
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 语法格式:get_cells cellsname
    指令功能:返回design中对应的cell的instance name object
    reference name: 设计者设计的模块
    instance name: 实例化出来的,可以例化多个
    在这里插入图片描述
    在这里插入图片描述

  • 语法格式:get_nets netsname
    语法功能:返回design中的net的 object
    在这里插入图片描述

  • get_object_name

  • collection

    这个命令可以返回指定集合中的object名字。 在Innovus或者ICC中,诸如get_cells, get_pins等get_*命令返回的是一个集合,我们称之为collection。

    collection是无法返回具体的名称的。如果你想要抓取具体的名称,可以通过该命令将 collection转化成名称。

    collection 指定集合的名称

    • sizeof_collection [get_nets *] 返回集合大小
      在这里插入图片描述
  • 语法格式: get_pins pinsname
    指令功能:返回design中pin的object
    在这里插入图片描述

1.6.2 object(对象)与其属性

在这里插入图片描述

  • cell objiect
  • pin object
    在这里插入图片描述- port objiect
  • Net object
    在这里插入图片描述
  • get_* -f :过滤属性
    在这里插入图片描述
  • get_* [object] -of :返回的也是对象
    在这里插入图片描述
    在这里插入图片描述

1.7 TCL在DC中的自动化Flow

-DC tcl flow 在这里插入图片描述

1.7.1 运行流程

  • 1.运行run.csh脚本,启动DC

#!/bin/csh-f
\rm -rf *.log .svf alib reports log work #清除之前的文档
mkdir reports work #新建文件夹
dc_shell-xg-t -32bit -f./top.tcl #启动DC并运行top.tcl

  • 2.建立reports与work两个文件夹。reports文件夹用于存放生成的报告,work文件夹用于存放该平台运行过程中生成的文档、脚本

  • 3.启动顶层脚本top.tcl

  • 4.top.tcl按先后顺序启动各个子脚本,最终生成script.tcl

  • 5.DC读取script.tcl中的约束,最终完成综合,并将所有报告写入reports文件夹中。

在这里插入图片描述

  • top.tcl脚本运行机制:
    (1)set_library.tcl:生成设定库文件和search path的约束
    (2)read_design.tcl:生成读入设计文件的约束
    (3)creat_clock.tcl:生成时钟源相关的约束
    (4)set_rst.tcl:生成复位端口约束的约束
    (5)set_io.tcl:生成输入输出端口的约束
    (6)set_cons.tcl:生成保存门级网表,各种report文件的约束
    以上步骤只是生成DC所需要的约束文件(xxx.tcl),合并后放入script.tcl
    在这里插入图片描述

1.7.2代码读入约束生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值