SDF 全称Standard Delay Format 是用于描述timing 信息的文本格式,通常用于STA 分析跟门级后仿真。
SDF 长啥样
SDF 通常包括三部分:表头,门延时,线延时,表头有SDF 的版本信息,当前设计的名称,产生时间,生产工具,工具的版本号,PVT, 时间单位等。
门延时,有Cell 的名字,对应instance 的名字,Delay 值,Delay 用IOPATH 跟SETUPHOLD 关键词来定义。
IOPATH 跟SETUPHOLD 结构
如下图所示:
- IOPATH: A 为该timing arc 的起点通常为cell 的输入pin, Y 为该timing arc 的终点通常为该cell 的输出pin, 第一个圆括号是该timing arc 对应的rise delay, 第二个圆括号是该timing arc 对应的fall delay;
- SETUPHOLD: "posedge D" 表示当前到D pin 是上沿, "posedge CK" 表示D pin 相对于CK pin 上升沿做check, 第一个圆括号是setup check, 第二个圆括号是hold check.
- 每个元括弧中用":" 分开的三个值分别表示min delay, typical delay, max delay.
是否可以写出PBA-based SDF
到目前为止,不可以,PBA 是一条path 一条path 计算的,对于不同path 同一条timing arc 的delay 是不同的。SDF 是不依赖于path 的,所以SDF 只能用GAB 的值。
write_sdf 如何处理负延时
SDF 3.0 的协议规定,不论是否在写SDF 是加了option "-nonegchecks" 都不允许SETUP 跟HOLD 中有负值,所以当写SDF 时指定了option "-splitsetuphold" 会将SETUP, HOLD 中的负值以0 代替。
SDF 3.0 的协议规定,SETUPHOLD 中setup 跟hold 都可以是负值,但两个值的和必须大于0. 如果在写SDF 时未加option "-splitsetuphold", 对应的值会写到SETUPHOLD 中,如果不指定"-nonegchecks", 负值会被写出。
如何写出Hierarchical 的SDF
如果要写出某个sub block 的SDF, 在写SDF 时用option "-path" 指定要写block 对应的instance 即可。
如果要写出TOP 且不包含某个block 的SDF, 在写SDF 时用option "-exclude_cells" 指定不要写出的block 对应的instance 即可。如果想要TOP 包含该block 的接口信息,可以加option "-exclude_cells_keep_io_nets".
如何处理Parallel arcs
如下图所示,该Cell 的Y pin 在lib 中有并行的timing arcs.
对于并行arc, write_sdf 默认用相同的值标不同条件的arc:
SDF与SI
如果enable 了SI, 默认工具会将base delay 跟delta delay 累加的一起写出。
命令:write_sdf
在写SDF 时可以指定"-base_delay" 和 "-delta_delay" 将base delay 跟delta delay 分开。
命令:write_sdf -base_delay -delta_delay
SDF跟MMMC
到目前为止,不可以写出一个包含多模式多corner 的SDF,不同mode 会设不同的case analysis, 不同的case analysis 会导致不同模式不同的timing arc 被disable 掉;另外不同corner PVT 不同,cell delay, net delay, constraint check 都不同,所以需要对每个模式的每个corner 分别写出SDF.
SDF跟Derate
到目前为止,无法写出一个可以精确反应SOCV 效应的SDF, SDF 是基于instance 的而SOCV 分析是基于path 的,SOCV 分析中每级instance 都有mean 跟sigma. 其中sigma 是用于计算total path delay 的。在写SDF 时可以指定option "-no_variation" 写出一个non-SOCV 的SDF.
本文转载自公众号: 陌上风骑驴看IC
原文链接:https://mp.weixin.qq.com/s/ZYZROf8Y1KOBVhl_BjcKaw
未经作者同意,请勿转载!