在成功综合之后,必须对所得的网表进行静态时序分析以检查时序违例,时序违例可包含建立和/保持时间违例。
综合设计的重点在于最大化建立时间,因此会遇到非常少的建立时间违例(如果存在)。然而,保持时间违例通常会在这一阶段发生,这是因为数据相对于时钟到达时序单元的输入太快。
如果设计没有达到建立时间的要求,除了以违例路径进一步优化为目标重新综合设计外,别无其他选择。这可包括组合违例路径或过度约束具有违例的整个子模块。然而,如果设计没有达到保持时间的要求,在布图前阶段修正这些违例,或推迟这一步直到布图后。很多设计人员对小的保持时间违例倾向于使用后一种方法,由于布图前综合和时序分析使用统计线载模型,并且在布图前阶段修正保持时间违例可导致同一路径布图后建立时间违例。然而,如果线载模型真实地反映了布线后延迟,在这一步修正保持时间违例是明智的。
1 布图前时钟规范
在布图前阶段,网表中缺少时钟树信息。因此,有必要在布图前阶段在前面估计布线后时钟树延迟,以进行适当的STA。此外,也应定义估计的时钟转换以阻止PT为驱动的门计算虚假延迟(通常较大)。大延迟的根源通常源于时钟网络相关联的高扇出。高扇出导致未驱动终点门的时钟计算出缓慢输入转换时间,进而导致PT为终点门计算出不寻常的大延迟值。为了防止这一情形,建议在源头指定一个固定的时钟转换值。
下面的命令用于在设计的布图前阶段定义时钟:
2 布图后
布图后步骤包括用反标注的实际延迟分析设计时序,这些延迟由提取版图数据获得。分析是在含有时钟树信息的布线后网表上进行的。
2.1 反标注什么
最常见的问题之一是:应给PT反标注什么,以何种格式反标注?
建议将布图工具产生的下面的信息类型反标注到PT进行STA:
——SDF格式的连线RC延迟。
——set_load格式的容性连线负载值。
——DSPF、RSPF或SPEF文件格式的时钟及其他关键连线的寄生信息。
下面的PT命令用于反标注上面的信息:
read_sdf:该命令用来读取SDF文件。
https://mp.weixin.qq.com/s?__biz=Mzg4OTIwNzE4Mg==&mid=2247483817&idx=1&sn=d09ceb26b336b7472fa84ec03dd5d370&chksm=cfee2148f899a85efeade1643abb59c11fe177cb074f1c87aed2f347838998938a40cbc0bf56&token=368408457&lang=zh_CN#rd
source:PT用这个命令读取Tcl格式的外部文件,可用于反标注set_load文件格式的连线电容文件。
read_parastics:PT利用这个命令反标注DSPF、RSPF和SPEF格式的寄生参数。
2.2 布图后时钟规范
除了这次要通过整个时钟网络传播时钟外,布图后时序分析与布图前的类似,都使用同样的命令。这是因为现在时钟网络包含时钟树缓冲器,从而时钟延迟和扭曲依赖于这些缓冲器。因此对布线后时钟规范不再需要修正时钟延迟和转换到一个指定值。下列命令举例说明了布线后时钟规范:
pt_shell > create_clock -period 20 -waveform [list 0 10] [list CLK]
pt_shell > set_propagated_clock [get_clocks CLK]
set_propagated_clock用来命令时钟网络传播时钟。由于时钟树信息现在存于设计中,时钟延迟、扭曲和转换时间由PT从组成时钟网络的门计算求得。
2.3 时序分析
设计的时序主要依赖于时钟延迟和扭曲,也就是说时钟是设计中所有其他信号的参考。与布图前的STA类似,差别仅在于时钟规范(传播时钟)。此外,在布线后STA期间,将从版图数据库提取的信息反标注到设计中,并分别用最坏情况工作条件和最佳情况工作条件来分析设计的建立时间和保持时间违例。
3 时序报告
可以使用report_timing命令生成时序报告。当指定-delay_type选项为max时,对设计进行建立时间分析;当指定-delay_type选项为min时,告知PT显示最佳情况时序报告,用于进行保持时间分析。
4 高级分析
4.1 单元交换
PT允许交换设计中的单元,只要现有单元的引脚和替换单元的引脚完全相同。例如可以用较低驱动强度的单元进行替换以修正保持时间违例(驱动强度减少导致转换时间增加,从而使门的增量延迟增加)。例如可以使用下述的命令以另一个单元替换现有的单元:
pt_shell > swap_cell {U15} [get_lib_cell stdcell_lib/BUFF1X]
这就提供了在不终止pt_shell的情况下进行调试设计并可视化单元效果的更快方法。
当然也可以在进行STA前手动修改网表,这样需要终止pt_shell,然后手动进行单元的替换,最后再次调用pt_shell以重新分析先前的违例路径段。如果对网表的修改没有生成所需的结果,那么需要重复整个过程,这种方法当然是冗长和费时的。
需要注意的是:单元交换只发生在PT内存中,物理网表保持不变。如果路径段和设计的其他部分通过了STA,应通过手动修改网表以在网表中加入这一修改。
4.2 门控时钟检查
通常,低功耗设计包含仅当需要时由门控逻辑使能的时钟。对于这样的设计,应分析用于门控时钟单元的建立和保持时间违例。
可以通过set_clock_gating_check命令来指定建立和保持时间要求。例如:
pt_shell > set_clock_gating_check -setup 0.5 -hold 0.02 tck
可采用下述命令生成报告:
pt_shell > report_constraints -clock_gating_setup -clock_gating_hold -all_violators -verbose
其中,-all_violators可以用来报告违例的门,-verbose选项以显示完整的路径报告。