时序窗口文件(TWF, Timing Window File)在芯片设计中扮演着重要角色,它包含了来自静态时序分析(STA)的时序窗口(timing window)和转换时间(slew data)。这些数据用于基于信号开关时序的依赖关系来约束噪声分析,从而让动态功耗(IR Drop)的分析结果更为准确。
当你需要进行无矢量动态IR分析(vectorless dynamic IR)时,TWF文件是必不可少的输入。它针对设计中的每个网络或引脚,定义了信号到达时间和转换时间的可能范围,这些数据通常源自Innovus或PrimeTime的时序分析报告。
值得注意的是,Cadence Voltus工具所读取的TWF文件格式,与Ansys RedHawk/RedHawk-SC所使用的并不相同,其产生方式也有所区别。今天我们就重点聊聊Voltus所使用的TWF文件。
Voltus的TWF文件如何产生?
1. 通过Innovus生成
对于模块级(Block Level)设计,通常可以在Innovus实现流程中直接生成TWF文件。使用以下命令即可:
write_timing_windows -pin -power_compatible -view $view_name ./$design_name.$view_name.twf.gz
命令中的几个关键选项说明:
-pin:为每一个引脚(Pin)生成时序窗口,而不是每个网络(Net)。这通常能提供更精细的数据。
-power_compatible:生成一个适用于功耗分析的TWF文件。
-view:在多模式多工艺角(MMMC)设计中,为指定的视图(View)生成TWF。如果不指定,默认使用第一个激活的视图。
生成的TWF文件内容主要包含以下八组时序参数的定义:

2. 通过PrimeTime (PT) 生成
对于规模较大的设计或全芯片(Full Chip)级分析,更推荐使用PrimeTime来生成TWF,因为其时序引擎通常更为强大。具体操作方式如下:
在PT中完成时序更新(update_timing)后,首先载入Voltus提供的脚本,然后执行生成命令:
# 假设在PT的shell环境中
source ssv/xxx/share/voltus/gift/scripts/generate_twf.tcl
gen_twf * -pin $design_name.twf
读懂TWF文件有什么用?—— 实战场景与问题排查
了解了如何生成,我们再来看看在实际工作中,查看和分析TWF文件能帮助我们解决哪些具体问题。
- 诊断“一片通红”的IO Buffer:跑完无矢量动态IR分析后,你可能会发现IO Buffer区域显示为严重的红色违规。如果仔细查看这些红色单元的电流曲线,会发现它们在完全相同的时刻整齐地翻转。这符合实际情况吗?工具为何这样计算?原因很可能出在约束上:SDC文件中对这些IO端口的输出约束(如输出延迟)设置相同,导致工具认为它们会同时开关。但这显然过于理想化了。此时,如果你使用上级子系统或全芯片层级产生的TWF文件来重新分析这个模块(注意在读入TWF时使用
-strip_prefix $hierarchy 命令去除层次前缀),往往会发现那片“通红”的现象有所改善,电流曲线也不再完全同步。这个结果通常更贴近真实的芯片工作场景。
- 探究结果好转的原因:为什么换了TWF文件结果就好转了?这时,你可以去对比一下IO Buffer的时序窗口。很可能会发现,模块级分析中使用的TWF给出的时序窗口比较窄(甚至是一个点),而子系统/全芯片级TWF给出的窗口更宽。更宽的时序窗口意味着工具可以考虑信号在不同时间到达的可能性,从而避免了所有电流峰值叠加在最坏情况下的单一时刻,分散了开关活动,使得IR分析结果更为缓和与真实。
- 排查Level Shifter等其他问题:不仅仅是IO Buffer,像电平转换器(Level Shifter)这类单元有时也会在IR分析中出现异常。通过检查TWF文件中相关节点的时序窗口或转换时间(Slew),可以判断是否是时序数据异常导致了工具计算上的偏差。
- 注意工具版本差异:IO Buffer电流曲线异常整齐的现象,也与Voltus的版本有关。新版本的工具通常会集成更多智能的默认设置和算法优化(例如自动处理一些共同时钟域的问题),而旧版本(比如V22)可能就需要手动引入更精确的上级TWF文件来约束,才能得到合理的结果。
希望以上关于TWF文件产生和应用的讨论,能帮助你在使用Voltus进行电源完整性分析时,更清晰地理解数据来源,并高效地排查相关问题。如果在实践中遇到其他有趣的案例,欢迎在云栈社区的相应板块与我们交流分享。
|