SDC命令详解:使用set_min_library命令进行约束
相关阅读
SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482
目录
最大条件分析的库文件名
最小条件分析的库文件名
取消设置
最大条件和最小条件
与set_operating_conditions命令同时使用
写在最后
set_min_library命令用于设置一组最大与最小条件的库映射关系(其实它并不是一个SDC命令,归为此类只是为了方便管理),可以让Design Compiler在优化时分别使用两组逻辑库来进行最小与最大条件分析。
本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。read_sdc命令的BNF范式(有关BNF范式,可以参考以往文章)为:
set_min_library max_library-min_version min_library | -none//注:该命令的选项和参数顺序任意
最大条件分析的库文件名
max_library参数指定用于最大条件分析的库文件名,通常也是target_library及link_library中设置的库文件。
最小条件分析的库文件名
-min_version选项指定用于最小条件分析的库文件名,这些库文件不应该出现在target_library或link_library中。
取消设置
-none选项取消了最小条件分析库的设置。
最大条件和最小条件
如果使用Design Compiler的默认分析模式bc_wc,那么其在时序分析时使用单一的最大条件设置和最小条件设置:对于建立时间检查、恢复时间检查、门控时钟建立时间检查、最大延迟检查等分析,Design Compiler将使用最大条件下的工作环境以及所有用-max选项设置的约束;对于保持时间检查、移除时间检查、门控时钟保持时间检查、最小延迟检查等分析,Design Compiler将使用最小条件下的工作环境以及所有用-min选项设置的约束。
如果使用on_chip_variation模式,则Design Compiler在时序分析时会根据检查类型,对发射路径和捕获路径使用不同的条件设置:对于建立时间检查、恢复时间检查、门控时钟建立时间检查、最大延迟检查等分析,Design Compiler会对发射路径使用最大条件设置,对捕获路径使用最小条件设置,以分析最差情况下的时序;对于保持时间检查、移除时间检查、门控时钟保持时间检查、最小延迟检查等分析,Design Compiler会对发射路径使用最小条件设置,对捕获路径使用最大条件设置,以分析最差情况下的时序。
当使用set_min_library命令指定了最大与最小条件的库映射关系后,在计算最大条件延迟时,使用max_library中的时序信息;在计算最小条件延迟时,如果min_library中存在匹配的单元,则会使用min_library中的时序信息,否则依旧使用max_library中的时序信息。
需要注意的是,综合时单元依旧是被映射到max_library(即target_library及link_library中设置的库文件),只是在分析最小条件延迟时会考虑min_library,这可以通过report_cell命令验证。
与set_operating_conditions命令同时使用
set_operating_conditions命令用于设置当前设计的工作环境,如果单元的工作环境与其库中时序信息的特征化环境不符时,会使用k系数进行调整,这通常会造成较大的误差,因此现在通常不使用这个性质,每个逻辑库中只有一个工作环境(也就是它的特征化环境)。
有关于特征化环境和工作环境及k系数的更详细解释,可以参考下面的博客。
静态时序分析:工艺库的特征化环境和工作环境https://blog.csdn.net/weixin_45791458/article/details/136088521?ops_request_misc=%257B%2522request%255Fid%2522%253A%252296dfdacf66770ad65d2308ce53816443%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=96dfdacf66770ad65d2308ce53816443&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-136088521-null-null.nonecase&utm_term=%E7%89%B9%E5%BE%81%E5%8C%96&spm=1018.2226.3001.4450 下面展示了一个使用k系数进行调整的例子,该例中会使用两个逻辑库fast.db和slow.db,其中slow.db库中拥有一个k系数。
// fast.libnom_process : 1;nom_temperature : -40;nom_voltage : 1.1;operating_conditions(fast) {process : 1;temperature : -40;voltage : 1.1;tree_type : balanced_tree}// slow.libnom_process : 1;nom_temperature : 125;nom_voltage : 0.9;operating_conditions(slow) {process : 1;temperature : 125;voltage : 0.9;tree_type : balanced_tree}k_temp_cell_fall : 0.001;
下面展示了一个脚本,其中将工作环境设置为fast.db库中的fast,但使用slow.db库综合,综合时会出现警告。
// 综合脚本set_app_var target_library slow.dbset_app_var link_library "* $target_library"set_operating_conditions fast -library fastcompile_ultraWarning: Operating condition fast set on design simple_register has different process,
voltage and temperatures parameters than the parameters at which target library
slow is characterized. Delays may be inaccurate as a result. (OPT-998)
综合完毕后可以使用report_delay_calculation命令查看某个单元的延迟计算情况,如下所示。
****************************************
Report : delay_calculation
Design : simple_register
Version: W-2024.09-SP2
Date : Tue Jul 22 22:30:53 2025
****************************************From pin: out1_reg/CK
To pin: out1_reg/Q
Main Library Units: 1ns 1pF 1kOhmOperating Conditions: fast Library: fast
Wire Load Model Mode: topLibrary: 'slow'
Library Units: 1ns 1pF 1kOhm
Library Cell: 'DFFRQX2'arc sense: rising_edge
arc type: cellRise Delaycell delay = 0.2056Table is indexed by(X) input_pin_transition = 0.0000(Y) output_net_total_cap = 0.0010Relevant portion of lookup table:(X) 0.0320 (X) 0.0480(Y) 0.0012 (Z) 0.2154 (Z) 0.2196(Y) 0.0028 (Z) 0.2251 (Z) 0.2293Z = A + B*X + C*Y + D*X*YA = 0.1999 B = 0.2665C = 5.9589 D = -0.0377Z = 0.2056scaling result for operating conditionsmultiplying by 1 gives 0.2056Fall Delaycell delay = 0.2492Table is indexed by(X) input_pin_transition = 0.0000(Y) output_net_total_cap = 0.0010Relevant portion of lookup table:(X) 0.0320 (X) 0.0480(Y) 0.0012 (Z) 0.2589 (Z) 0.2632(Y) 0.0028 (Z) 0.2680 (Z) 0.2723Z = A + B*X + C*Y + D*X*YA = 0.2439 B = 0.2663C = 5.5518 D = 0.2284Z = 0.2492scaling result for operating conditionsmultiplying by 0.835 gives 0.2081Cell Delayrise: 0.2056fall: 0.2081
可以看出,单元的下降延迟在最后乘以0.835进行调整,而上升延迟则没有(因为逻辑库内的 k_temp_cell_fall为0)。
如果使用了set_min_library命令,则需要使用相应的set_operating_conditions命令,这也是为了防止出现k系数调整,下面展示了一个例子。
// 综合脚本set_app_var target_library slow.dbset_app_var link_library "* $target_library"set_min_library slow.db -min_version fast.dbset_operating_conditions -max slow -max_library slow -min fast -min_library fast compile_ultra
写在最后
该命令现在已经较少使用了,转而使用Design Compiler Graphical提供的Multicorner-Multimode(MCMM)Flow进行综合,能够创建不同的场景(Scenario)并在综合时同时考虑。