相关阅读
Design Compiler
https://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482
目录
write_script命令用于将当前设计中的寄生参数输出为文件(其实它并不是一个SDC命令,归为此类只是为了方便管理)。
本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。write_script命令的BNF范式(有关BNF范式,可以参考以往文章)为:
write_parasitics
[-output file_name]
[-format reduced]
[-scenario scenario_name]
[-min]
[-ratio ratio_number]
[-script]
//注:该命令的选项和参数顺序任意
指定文件名
-output选项指定寄生参数文件的名称,如果不使用该选项,寄生参数写入一个命名为_parasitics.reduced的文件。
指定格式
-format选项指定寄生参数文件的格式。对于Design Compiler而言,只能将寄生参数保存为简化(reduced)的SPEF格式(即RC π模型)。
指定场景
-scenarios选项指定写出特定场景下的寄生参数,默认情况下,写出当前场景。
指定最小条件
-min选项指定写出最小条件下的寄生参数(一般情况下,如果不开启on_chip_variation,这指的是保持时间检查),默认情况下,写出最大条件(一般情况下,如果不开启on_chip_variation,这指的是建立时间检查)。
指定比例
-ratio选项指定RC π模型中每个驱动器的近端电容的比例,指定的比例必须在0到1之间,默认为0.5。
指定脚本
-script选项指定写出包含set_load和set_resistance命令的脚本(其实就是write_sdc命令或write_script命令输出中的相应部分),而不是寄生参数文件。
简单使用
下面是一个Design Compiler输出的寄生参数文件。
*SPEF "IEEE 1481-1999"
*DESIGN "dff_100_flat"
*DATE "Sat Jan 17 00:29:48 2026"
*VENDOR "SYNOPSYS INC"
*PROGRAM "Synopsys Design Compiler (R) NXT cmos"
*VERSION "W-2024.09-SP2"
*DESIGN_FLOW "SYNTHESIS"
*DIVIDER /
*DELIMITER :
*BUS_DELIMITER []
*T_UNIT 1.0 NS
*C_UNIT 0.0010 PF
*R_UNIT 1000.0 KOHM
*L_UNIT 1.0 HENRY
*PORTS
clk I *L 0.000e+00 *S 0.000e+00 0.000e+00
rst_n I *L 0.000e+00 *S 0.000e+00 0.000e+00
d I *L 0.000e+00 *S 0.000e+00 0.000e+00
q O *L 0.000e+00 *S 7.646e-04 1.729e-03
*R_NET clk 1.759e+00
*DRIVER clk
*CELL NULL
*C2_R1_C1 8.794e-01 8.573e-06 8.794e-01
*LOADS
*RC t_reg:CLK 4.767e-06
*RC q_reg:CLK 8.867e-06
*END
*R_NET rst_n 2.634e+00
*DRIVER rst_n
*CELL NULL
*C2_R1_C1 1.317e+00 1.141e-05 1.317e+00
*LOADS
*RC t_reg:RSTB 1.822e-05
*RC q_reg:RSTB 1.157e-05
*END
*R_NET d 7.354e-01
*DRIVER d
*CELL NULL
*C2_R1_C1 3.677e-01 4.526e-06 3.677e-01
*LOADS
*RC t_reg:D 2.752e-06
*END
*R_NET q 5.471e-02
*DRIVER q_reg:Q
*CELL DFFARX1_HVT
*C2_R1_C1 2.736e-02 1.479e-06 2.736e-02
*LOADS
*RC q 2.698e-08
*END
*R_NET t 9.662e-01
*DRIVER t_reg:Q
*CELL DFFARX1_HVT
*C2_R1_C1 4.831e-01 1.063e-05 4.831e-01
*LOADS
*RC q_reg:D 7.280e-06
*END
下面针对线负载模式和拓扑模式的一些区别进行说明。
线负载模式
不使用增强型引脚负载电容建模
*R_NET后的线网负载总量由引脚负载总量(由单元的引脚负载和端口的引脚负载组成,使用set_load -pin_load命令可以设置端口的引脚负载)、互连负载总量(由线负载模型计算得出,如果使用set_load命令设置线网的互连负载,则覆盖线负载模型的结果,如果使用set_load -wire_load命令设置端口的互连负载,则累加到原结果上)。
*C2_R1_C1中的R1为互连电阻(由线负载模型计算得出,如果使用set_resistance命令设置线网的互连电阻,则覆盖线负载模型的结果)。
*RC后的互连延迟由线负载模型计算得出(在考虑了set_load -pin_load、set_load -wire_load、set_load及set_resistance命令的基础上),如果使用set_annotated_delay命令反标了互连延迟,则以该命令为准,如果上升延迟和下降延迟不同,则以更大的互连延迟为准。
使用增强型引脚负载电容建模
*R_NET后的线网负载总量由引脚负载总量(由单元的引脚负载和端口的引脚负载组成,使用set_load -pin_load命令可以设置端口的引脚负载,选择引脚负载总量的max值,如果使用-min选项则选择引脚负载总量的min值)、互连负载总量(由线负载模型计算得出,如果使用set_load命令设置线网的互连负载,则覆盖线负载模型的结果,如果使用set_load -wire_load命令设置端口的互连负载,则累加到原结果上)。
*C2_R1_C1中的R1为互连电阻(由线负载模型计算得出,如果使用set_resistance命令设置线网的互连电阻,则覆盖线负载模型的结果)。
*RC后的互连延迟由线负载模型计算得出(在考虑了set_load -pin_load、set_load -wire_load、set_load及set_resistance命令的基础上),如果使用set_annotated_delay命令反标了互连延迟,则以该命令为准,如果上升延迟和下降延迟不同,则以更大的互连延迟为准。
拓扑模式
不使用增强型引脚负载电容建模
*R_NET后的线网负载总量由引脚负载总量(由单元的引脚负载和端口的引脚负载组成,使用set_load -pin_load命令可以设置端口的引脚负载)、互连负载总量(由虚拟布线计算得出,即使使用set_load命令设置线网的互连负载,对结果也没有影响,因为使用write_parasitics命令时会执行一个隐式且不影响当前设计的虚拟布线用于提取互连电容,即使使用set_load -wire_load命令设置端口的互连负载,对结果也没有影响)。
*C2_R1_C1中的R1为互连电阻(由虚拟布线计算得出,即使使用set_resistance命令设置线网的互连电阻,对结果也没有影响)。
*RC后的互连延迟由虚拟布线计算得出(在考虑了set_load -pin_load、set_load -wire_load,不考虑set_load及set_resistance命令的基础上),并无视set_annotated_delay命令反标的互连延迟。
使用增强型引脚负载电容建模
*R_NET后的线网负载总量由引脚负载总量(由单元的引脚负载和端口的引脚负载组成,使用set_load -pin_load命令可以设置端口的引脚负载,选择引脚负载总量的max值,如果使用-min选项则选择引脚负载总量的min值)、互连负载总量(由虚拟布线计算得出,即使使用set_load命令设置线网的互连负载,对结果也没有影响,因为使用write_parasitics命令时会执行一个隐式且不影响当前设计的虚拟布线用于提取互连电容,即使使用set_load -wire_load命令设置端口的互连负载,对结果也没有影响)。
*C2_R1_C1中的R1为互连电阻(由虚拟布线计算得出,即使使用set_resistance命令设置线网的互连电阻,对结果也没有影响)。
*RC后的互连延迟由虚拟布线计算得出(在考虑了set_load -pin_load、set_load -wire_load,不考虑set_load及set_resistance命令的基础上),似乎在拓扑模式下Design Compiler并不区分逻辑库中上升沿、下降沿、最大条件、最小条件的引脚负载,统一使用最大的引脚负载进行计算,这可能是一个Bug,并无视set_annotated_delay命令反标的互连延迟。