STA学习记录5-时序路径组和外部属性建模

1 时序路径组

如下图所示,设计中的时序路径可以视为路径的集合,每个子路径都有一个起点和一个终点

图片

在STA中,时序路径是根据有效的起点和有效的终点划分的

有效起点包括:输入端口或同步器件(触发器和存储器)的时钟引脚

有效终点包括:输出端口或者同步器件的数据输入端

时序路径包括四类:

  1. 从输入端到输出端

  2. 从输入端到同步器件的数据输入端

  3. 从一个同步器件的时钟引脚到另一个同步器件的数据输入端

  4. 从一个同步器件的时钟引脚到输出端

举个例子进行说明

图片

按序号对应:

  1. 输入端口A到输出端口Z
  2. 输入端口A到UFFA/D
  3. UFFA/CK到UFFB/D
  4. UFFB/CK到输出端口Z

可以根据不同的时钟对时序路径进行分组,而组合逻辑可以认为是默认路径组

就上面的例子而言:

  • CLKA组是输入端口A到UFFA/D
  • CLKB组是UFFA/CK到UFFB/D
  • 默认路径组是输入端口A到输出端口Z 和UFFB/CK到输出端口Z

静态时序分析和报告通常在每个时序路径组单独进行

2 外部属性建模

在之前的内容中,介绍了create_clockset_input_delayset_output_delay,这些已经足以约束设计中执行时序分析的所有路径,但是无法获取IO引脚上准确的时序,因此还需要一些属性的加入才能准确的对环境进行建模

读入输入端口,需要指定slew,可以用一下方式:

  • set_drive
  • set_driving_cell
  • set_input_transition

对于输出,需要指定输出引脚的负载电容,

  • set_load

先对这些内容进行接口

2.1 驱动强度建模

set_driveset_driving_cell用来建模外部单元在输入端口的驱动强度,如果没有这些约束,则认为驱动强度是无限的

默认情况下,输入引脚的过渡时间是0,即默认情况下驱动强度是无限的

如下图所示,set_drive明确指定了DUA输入引脚上的驱动电阻值,电阻值越小,驱动强度越大

图片

set_drive的约束情况如下

#指定咋在input UCLK处的电阻是100
set_drive 100 UCLK

#上升驱动强度和下降驱动强度不同
set_drive -rise 3 [all_inputs]
set_drive -fall 2 [all_inputs]

指定驱动强度还可用来计算RC互连情况下从输入端口到第一个单元的延迟值,计算方式为:延迟值 = (驱动强度 * 线网负载) + 连线延迟

set_driving_cell提供了一种更方便、更准确的方式来描述端口的驱动能力

可以用set_driving_cell来指定一个cell驱动的输入端口

指定方式如下:

#INPB由slow库中的INV3驱动
set_driving_cell -lib_cell INV3 \
-library slow [get_ports INPB]

#所有的inputs都是由tech3g库中的INV2驱动
set_driving_cell -lib_cell INV2 \
-library tech13g [all_inputs]

#testmode[3]由tech90gwc库中的BUFFD4驱动
set_driving_cell -lib_cell BUFFD4 \
-library tech90gwc [get_ports {testmode[3]}]

同样set_driving_cell也可以用来指定互连时从输入端口到第一个单元的延迟值

需要注意,在使用set_driving_cell进行约束时,由于输入端看上电容性负载的存在,会导致驱动单元有一个增量延迟,而这个增量延迟会被当做输入上的附加延迟被括在内

上述方法的一种替代方式是set_input_transitionset_input_transition提供了一种在输入端口表示过渡时间的便捷方式,并且可以指定参考时钟,比如下面这个例子

图片

set_input_transiton 0.85 [get_ports INPC]

set_input_transiton 0.6 [all_inputs]

set_input_transiton 0.25 [get_ports SD_DIN*]

在指定set_input_transiton是,也可以指定-max-min

2.2 电容性负载

set_load可以在输出端口设置电容性负载,用来模拟输出端口驱动外部负载的能力

默认情况下电容性负载为0,也可以将负载显示指定为电容值或某个单元的输入引脚电容

比如下面这个例子

图片

#OUTX端口有一个pF的负载
set_load 5 [get_ports OUTX]

set_laod 25 [all_outputs]
 
 set_load -pin_laod 0.007 [gets_ports {shift_write[31]}]

可以使用-wire_load选项指定与端口连接的连线的线载电容

如果既没有-pin_load,也没有-wire_load,那么默认是-pin_load

指定输出上的负载很重要,因为该值会影响驱动输出单元的延迟

set_load约束也可以用于指定内部连线上的负载,比如下面这个例子

#线载电容为 25PF
set_load 0.25 [get_nets UCNT5/NET6]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值