一、TCL语言和synopsys TCL语言入门
基本目标:
1.掌握常用TCL基本指令(至少要看得懂)
2.掌握常用synopsys TCL常用指令,包括信息与属性的获取以及过滤
3.重点关注TCL正则匹配与文本处理方法,能够写出简单的文本处理脚本
1.1 TCL基本指令
置换:变量置换$、命令置换[]、反斜杠置换\
变量赋值与输出:set、puts
其他:\t、\n、“”、{}、#
set X 1.2
set Y 1.3
puts "[expr $X + $Y]"
#结果为2.5
puts "\[expr $X + $Y\]"
#结果为[expr 1.2 + 1.3]
puts "\[expr \$X + \$Y\]"
#结果为[expr $X + $Y\]
puts {
\[expr \$X + \$Y\]}
#结果为[expr \$X + \$Y\]
数组:使用array指令获取数组信息
set cell_1(ref_name) "bufx2"
set cell_1(full_name) "top/cell_1"
set cel1_1(pins) "A B C"
puts $cell_1(ref_name)
#结果为bufx2
arry size cel1_1
#结果为3
arry names cel1_1
#结果为ref_name full_name pins
列表:concat、lindex、llength、lappend、lsort

set list1 {
bufx1 bufx2 bufx4}
set list2 {
ivtxl ivtx2 ivtx4}
concat $list1 $list2
#输出结果为bufx1 bufx2 bufx4 ivtxl ivtx2 ivtx4
llength $list1
#输出结果为3
llength [concat $list1 $list2]
#输出结果为6
lindex $list1 1
#输出结果为bufx2
lindex $list1 [expr [llength $list1] - 1]
#输出结果为bufx4
lappend list1 bufx5
#输出结果为bufx1 bufx2 bufx4 bufx5
set list3 {
4 1 2 3 2 1}
lsort -real $list3
#按数字大小排序,输出结果为1 1 2 2 3 4
lsort -unique $list3
#按唯一性输出1 2 3 4
控制流:if、foreach、break、continue、while、for
Tips:脚本语句的’{'一定要写在上一行,因为如果不这样,TCL 解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错。
if

foreach……break

foreach……continue

while

for

过程函数:proc
Tips:指令global,可以在过程内部引用全部变量
proc proc_name {
argument} {
......
return return_value
}

正则匹配:
\w,用来匹配一个字母、数字、下划线
\d ,用来匹配一个数字
\s表示空格
. 表示任意一个字符
正则匹配-量词
正则匹配-锚位

捕获变量

文本处理



1.2 synopsys TCL常用语言
1.信息获取
#语法
get_ports 端口名称
get_cells 单元名称
get_nets 网表名称
get_pins 管脚名称
获取信息的时候可以搭配通配符*去获取想要的信息,以get_ports指令为例子:
get_ports * #返回所有的端口名称
get_ports I* #返回所有的以I开头的端口名称
get_ports *1 #返回所有的以1结尾的端口名称

2.属性获取
get_attribute [get_cells 单元名] ref_name
#单元对象 的 ref_name 属性:用来保存其映射到参考单元的名称
get_attribute [get_nets 网表名] full_name
#网表对象 的 full_name 属性:用于保存网表名称
get_attribute [get_pins 单元/引脚] owner_net
#引脚对象 的 owner_net 属性:用来保存与之相连的网表名称
get_attribute [get_ports 单元名] direction
#端口对象 的 direction 属性:用来保存端口的方向
3.属性过滤和对象连接
get_ports 端口名 -f "过滤条件"
#“-f”可以用来过滤属性,以得到我们想要的object
get_nets -of [get_ports 端口名]
#“-of”可以用来得到指定object相连接的object


二、STA基本概念
2.1 时序弧(Timing Arc)与线延迟、单元延迟
时序弧用来描述,两个节点延时信息的参数。通常分为Net delay(线延迟)和Cell delay(单元延迟)。其中Cell delay(单元延迟)内部有两种延迟,分别为 Transition delay(翻转延迟)和Logic gate delay(逻辑门延迟)。

2.2 建立时间与保持时间
建立时间:在触发器的捕获沿到来之前,数据必须提前保持稳定的持续时间,以保证触发器可以顺利安全的取到数据。此参数可以用来约束数据路径上的最大时序。
保持时间:在触发器的捕获沿到来之后数据必须保持稳定的持续时间。此参数可以用来约束数据路径的最小时序。
Tips:建立时间与保持时间对应的最大延时和最小延时不要记反了!


2.3 时序路径(Timing path)
PrimeTime 进行时序分析的第一步是将设计分解为一组时序路径。每个时序路径都有一个起点和终点,起点和终点各有两种,起点包括 clock pin 和 input port,终点包括data input pin 和 output port,所以一共有四种时序路径。

2.4时钟域(Clock Domains)
大多数数字电路都是“全局异步,局部同步”的时序,但是所有的静态时序分析(STA)都是针对的同步电路。
2.5 操作条件(Operating Conditions)和 PVT(Process Voltage Temperature)
由于半导体不同的工艺制成,不同的使用环境,对器件本身的延迟存在较大影响。所以在进行STA时一定要明确操作的环境和条件,主要包括工艺制程(Process)、电压(Voltage)、温度(Temperature)。在指定上述的条件之后,单元延时和互连线的延时也就根据上述条件进行计算分析。
工艺制程的模型主要分为3种:slow、typical、fast。其中 slow 和 fast都是极端的条件,对于稳健的设计,PVT(Process Voltage Temperature)都要在极端环境下测试通过。高温低压对应最坏的情况,低温高压对应最佳情况。
一般在最大延迟环境下检查建立时间,在最小延迟环境下检查保持时间。

三、标准单元工艺库
3.1 库文件概述
通过库文件可以读出单元的相关信息,如下图所示:
具体可以参考:静态时序分析(STA)—— 标准单元库

3.2 非线性延迟模型
单元延迟取决于两个因素:输出负载电容和电平转换时间
1、输出负载,即输出端的电容负载的大小。容性负载越大,延迟越大。
2、输入端信号高低电平转换时间。大多数情况下,此参数越大,对应的延时也会越大。

根据电容负载和电平转换时间可以推导出线性延迟模型去预估模型的具体延迟。然而,线性模型在微小工艺半导体器件中并不是很精确,大都数用的是非线性模型。
第一步:根据查表法得到对应的延时。
第二步:如果找不到对应的点,则根据相邻的四个点进行插值然后根据高斯消元法得到模型延时。
3.3 电平翻转阈值调整(slew_derate)
电平翻转阈值调整主要是应对一些实际工艺制程与工艺库的不同导致延迟差异的问题。例如工艺库单元阈值为10%—90%,而实际的工艺为30%—70%,阈值相当于下降了50%。为了解决这类问题,只需要slew_derate_from_library设置为0.5即可。如下图所示:
四、建立静态时序分析的环境
正确的约束对于分析STA结果很重要,只有准确指定设计环境,STA分析才能够识别出设计中的所有时序问题。STA的准备工作包括设置时钟、指定IO时序特性以及指定伪路径和多周期路径。
什么是STA环境?大部分数字设计是同步的,从前一个时钟周期计算出的数据在时钟有效沿上被锁存在触发器中。为了对这种设计执行STA,需要指定触发器的时钟、以及进入设计和退出设计的所有路径的时序约束。

4.1 Specifying Clocks
4.1.1(主)时钟定义
要定义时钟,我们需要提供以下信息:时钟源(Clock source)、周期(Period)、占空比(Duty cycle)边沿时间(Edge times)。
以下是一个基本的时钟约束规范:
create_clock -name SYSCLK -period 20 -waveform {
0 5

本文详细介绍了TCL语言的基本指令和SynopsysTCL的使用,包括变量置换、信息获取、属性过滤等。同时,文章阐述了静态时序分析的基础概念,如时序弧、建立时间、保持时间、时序路径和时钟域。还讨论了标准单元工艺库、建立STA环境的方法,以及时序检查的各个方面,包括建立时间与保持时间检查、多周期路径和跨时钟域时序。最后,提到了鲁棒性检查,如片上变化、时间借用和门控时钟检查。



3772

被折叠的 条评论
为什么被折叠?



