Design Compiler:单元密度(Cell Density)和引脚密度(Pin Density)的相关优化 相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482目录placer_max_cell_density_threshold2008版本引入set_congestion_options命令2008版本引入placer_reduce_high_density_regions2013版本引入compile_high_pin_density_cell_spreading和compile_high_pin_density_cell_spreading_threshold2018版本引入compile_high_pin_density_cell_optimization和compile_high_pin_density_cell_optimization_utilization_threshold2018版本引入compile_cell_density_aware_optimization和compile_cell_density_aware_optimization_threshold2019版本引入placer_icc2_link_auto_density_control2023版本引入拓扑模式的Design Compiler中存在很多与粗布局(Coarse Placement)过程中单元密度(Cell Density)和引脚密度(Pin Density)相关的应用变量本文将列举其中的一部分并详细说明。placer_max_cell_density_threshold2008版本引入某些情况下消除拥塞并不是设计的重点用户可以通过设置placer_max_cell_density_threshold变量默认值为-1控制单元聚集的紧密程度或者说局部单元密度此时单元不会均匀地分布在芯片表面这可以避免在低利用率设计中因单元布局过于分散而导致的布线过长及相关的结果质量(QoR)问题。placer_max_cell_density_threshold变量应设置为高于设计总体利用率但低于1.0的值如果设计为-1即不允许单元聚集。例如如果设计的总体利用率是0.5(50%)那么该变量的合理取值应在0.5到1.0之间该数值设定得越高单元聚集得就越紧密。如果用户未设置该变量且使用compile_ultra -spg命令进行综合如果综合工具检测到设计的总体利用率较低会根据该阶段的利用率动态设置placer_max_cell_density_threshold变量综合完成后综合工具将把placer_max_cell_density_threshold变量恢复为默认值-1因此调整过程对用户不见该功能由2018版本引入当设计的总体利用率低于0.4(40%)时综合工具在全量综合和增量综合过程中将把placer_max_cell_density_threshold变量设置为0.7。当设计的总体利用率在0.4(40%)和0.6(60%)之间时综合工具在全量综合过程中将把placer_max_cell_density_threshold变量设置为0.6在增量综合过程中将把placer_max_cell_density_threshold变量设置为0.7。当设计的总体利用率在0.6(60%)和0.65(65%)之间时综合工具在全量综合过程中将把placer_max_cell_density_threshold变量设置为-1在增量综合过程中将把placer_max_cell_density_threshold变量设置为0.7。当设计的总体利用率高于0.65(65%)时综合工具在全量综合和增量综合过程中将把placer_max_cell_density_threshold变量设置为-1。placer_max_cell_density_threshold变量动态调整时会提示以下信息。Information: The design utilization is 0.53 Information: Based on the design utilization, automatically setting placer_max_cell_density_threshold to 0.60. (SPG-128)如果使用compile_ultra -spg命令进行综合设计的总体利用率较低但用户设置的placer_max_cell_density_threshold变量小于0.5综合工具会尊重用户的设置但会产生以下警告。Warning: user-defined value of placer_max_cell_density_threshold is set to ***, which is considered low.The recommended value of placer_max_cell_density_threshold for sparse designs is 0.50 Previously defined placer_max_cell_density_threshold value *** is being used下面举例进行说明图1展示了这种情况下综合结果的版图图2展示了这种情况下综合结果的单元密度查看单元密度的功能由2016版本引入。dcnxt_shell-topo create_die_area -coordinate {0 0 20 20} dcnxt_shell-topo set placer_max_cell_density_threshold -1 dcnxt_shell-topo compile_ultra图1 综合结果的版图图2 综合结果的单元密度dcnxt_shell-topo create_die_area -coordinate {0 0 20 20} dcnxt_shell-topo set placer_max_cell_density_threshold 0.6 dcnxt_shell-topo compile_ultra图3展示了这种情况下综合结果的版图图4展示了这种情况下综合结果的单元密度。图3 综合结果的版图图4 综合结果的版图如果使用了IC Compiler II Link则设置placer_max_cell_density_threshold变量等价于设置place.coarse.max_density应用选项placer_max_cell_density_threshold变量的值会通过place.coarse.max_density应用选项传递给IC Compiler II如果两个都设置则place.coarse.max_density应用选项优先级更高。set_congestion_options命令2008版本引入set_congestion_options -max_util命令用于指定在拥塞驱动的单元布局过程中需要使用compile_ultra -spg命令局部区域或整体设计的最大利用率默认为95%。例如假设初始设计的总体利用率为80%。这意味着在默认情况下可能拥有高达95%的局部高密度区域以及低于80%密度的其他区域即存在波峰/波谷。如果将-max_util设置为小于95%但大于或等于设计的总体利用率这些波峰/波谷将被平滑建议尽可能允许较高的密度值以减少对时序的影响。如果使用了IC Compiler II Link则使用set_congestion_options -max_util命令等价于设置place.coarse.congestion_driven_max_util应用选项set_congestion_options -max_util命令会通过place.coarse.congestion_driven_max_util应用选项传递给IC Compiler II如果两个都设置则place.coarse.congestion_driven_max_util应用选项优先级更高。placer_reduce_high_density_regions2013版本引入如果默认的粗布局强度不足以消除宏单元或阻挡层周围的高密度区域可以在设计中设置placer_reduce_high_density_regions变量默认值为false。作为副作用该功能会导致运行时间变长粗布局的运行时间预计会增加一倍。此外由于该功能目前尚不具备互连长度或时序感知能力使用它可能会导致互连长度增加和时序结果质量(QoR)下降。该变量在使用IC Compiler II Link时失效实验结果表明尽管手册中似乎没有提到这一点。compile_high_pin_density_cell_spreading和compile_high_pin_density_cell_spreading_threshold2018版本引入金属间距的缩小速度慢于栅极或晶体管尺寸的缩小速度在最新工艺节点下引脚访问(Pin Access)会受到影响因为此时金属间距与16 nm工艺相似但引脚面积显著减小如图5所示。图5 引脚访问问题综合工具通过改进引脚映射和引脚密度热点检测来处理引脚访问问题可以在设计中设置compile_high_pin_density_cell_spreading变量默认值为false在粗布局过程中通过将高引脚密度单元分散布局来减少引脚访问热点需要使用compile_ultra -spg命令。高引脚密度单元的识别由compile_high_pin_density_cell_spreading_threshold变量默认值为0.9决定。compile_high_pin_density_cell_optimization和compile_high_pin_density_cell_optimization_utilization_threshold2018版本引入对于引脚访问优化(Pin Access Optimization, PAO)除了使用compile_high_pin_density_cell_spreading变量控制高引脚密度单元分散布局外还可以使用compile_high_pin_density_cell_optimization变量默认值为false开启高引脚密度单元交换功能在粗布局过程中通过将高引脚密度单元替换为低引脚密度且电气等效(EEQ)的单元需要使用compile_ultra -spg命令。当使用该功能时综合工具会将设计划分为一些更小的区域并计算其局部利用率一旦区域的局部利用率超过由compile_high_pin_density_cell_optimization_utilization_threshold变量默认值为0.5控制的阈值就会将其识别为高密度区域并尝试将该区域内的高引脚密度单元替换为等效的低引脚密度单元从而在对结果质量(QoR)影响最小的情况下减少拥塞并提高可布线性。除此之外2019版本引入的set_pin_access_optimization_options命令可以用来指定哪些库单元易于引脚访问哪些难以引脚访问而不依赖电气等效(EEQ)的单元。compile_cell_density_aware_optimization和compile_cell_density_aware_optimization_threshold2019版本引入拓扑模式的Design Compiler NXT在2019版本引入了compile_cell_density_aware_optimization变量默认值为false用于在增量综合需要使用compile_ultra -spg -incr命令的布局后延时优化阶段防止综合工具为了改善WNS和TNS而在局部区域过度堆积单元显著提升综合结果与物理实现工具如IC Compiler II中布局合法化后结果的相关性这么做虽然在综合阶段可能会因为单元分散导致WNS和TNS略微退化但在进入物理实现阶段后整体的设计质量(QoR)通常会更好或持平。当使用该功能时综合工具会将设计划分为一些网格(Grid)并计算其局部单元密度一旦区域的单元密度超过由compile_cell_density_aware_optimization_threshold变量默认值为1.15控制的阈值就会将其识别为高密度区域并尝试将该区域内的时序关键单元移动到最近的低单元密度区域中。placer_icc2_link_auto_density_control2023版本引入当placer_icc2_link_auto_density_control变量默认值为false被设置为true时Design Compiler NXT会开启IC Compiler II Link中的自动密度控制(Auto Density Control, ADC)自动尝试在不引起布线拥塞的区域使用更高的单元密度并通过PLACE-027消息报告所选用的相关设置以获得更好的整体聚集效果同时降低出现密度热点的可能性。该变量的值会通过place.coarse.auto_density_control应用选项传递给IC Compiler II不通过set_app_options命令设置。