ICC2 user guide(二)Placement and Optimization
好的!以下是一些关于ICP7和placement的相关建议:
查看具体的Placed结果
使用report_placement命令可以查看详细的Placed结果:
bash 查看整体信息 report_placement 查看特定实例的信息 getattribute -objects [getcells INST] -name status
调整Placed设置以解决时序或功耗问题
根据工具输出的结果调整setappoptions:
如果遇到无法收敛的时间违反(timing violation):
bash setappoptions -name opt.maxnetusage -value true setappoptions -name opt.maxslackfor_rerouting -value true
如果目标是降低总功耗:
bash setappoptions -name power.grepmaxslack_pct -value true
进行详细的功率分析
使用reportpower命令结合setpower_group来分析特定instance的功率使用情况:
bash 设置要分析的power group(默认为默认power group) setpowergroup mypowergroup \ -group_name default \ -group_value default \ -ignore_all False 报告指定instance的power usage based on pin-based clock network model. reportpower [getcells MY_CELL] \ --type power \ --value mypowergroup 或者报告基于工作状态的概率加权模型. reportpower [getcells MY_CELL] \ --type leakage \ --value mypowergroup \ --weight True
处理多电压设计中的cell放置问题
对于多电压设计,请确保每个voltage area都有相应的cells放置在正确的区域:
在每个voltage area中添加必要的约束条件:
bash createvoltageareashape myva /myarea shape=exteriorcellradius=10mm/...
确保level shifter和isolation cell被正确放置到voltage boundary附近:
`bash

目录
一 Specifying Coarse Placement Constraints and Settings
1 Defining Keepout Margins
2 Defining Area-Based Placement Blockages
2.1 Defining a Placement Blockage
2.2 Define a Blockage of a Predefined Category
2.3 Defining Blockages That Exclude Registers
2.4 Defining Blockages That Exclude Relative Placement Groups
2.5 Defining Blockages That Allow Relative Placement Cells Only
2.6 Defining Blockages That Allow Buffers Only
2.7 Querying && Removing Placement Blockages
3 Defining Placement Bounds
3.1 Defining Move Bounds
3.2 Querying && Removing Placement Bounds
4 Defining Placement Attractions
5 Generating Automatic Group Bounds for Clock Gating Cells
6 Controlling the Placement Density
7 Reducing Congestion
8 Considering the Power Density During Placement
9 Considering the Dynamic Power QoR During Placement
二 Specifying Legalization Constraints and Settings
1 Defining Cell Spacing Constraints for Legalization
2 Minimizing Large Displacements During Legalization
3 Improving Routability by Optimizing Pin Access During Legalization
4 Enabling Advanced PG Net Checks
5 Enabling Advanced Legalization Algorithms
6 Checking if Library Cells Are Legally Placeable
三 Specifying Optimization Settings
1 Controlling Physical DFT Optimization
2 Enabling Power Optimization
2.1 Performing Conventional Leakage-Power Optimization
2.2 Performing Dynamic-Power Optimization
2.3 Performing Total-Power Optimization
2.4 Performing Percentage Low-Threshold-Voltage Optimization
3 Defining a Cell Name Prefix for Optimization
4 Enabling Global-Route-Layer-Based (GRLB) Preroute Optimization
5 Enabling Route-Driven Extraction (RDE) for Preroute Optimization
- Enable automatic via ladder insertion during the prereouting process.
7 Enabling Advanced Logic Restructuring
8 Enabling Area Recovery in Regions of High Utilization
9 Marking the Clock Networks
10 Preserving Ports of Existing Hierarchies
四 Setting Up Multivoltage Designs for Placement and Optimization
1 Defining Voltage Areas
1.1 Merging Voltage Area Shapes
1.2 Resolving Overlapping Voltage Areas
1.3 Modifying the Stacking Order
1.4 Defining Guard Bands
1.5 Querying Voltage Areas
1.6 Modifying Voltage Areas
1.7 Controlling Physical-Feedthrough Nets in Voltage Areas
2 Inserting Multivoltage Cells
3 Analyzing Multivoltage Information
4 Controlling the Placement of Multivoltage Cells
五 Performing Placement and Optimization
1 Performing Standalone Placement and Legalization
2 Performing Placement and Optimization With the place_opt Command
2.1 Considering the Effect on Clock Structures During Placement
2.2 Creating a Temporary Clock Tree for Placement and Optimization
2.3 Optimizing Clock-Gating Cells
2.4 Enabling Global Route Based High-Fanout Synthesis
2.5 Enabling the Rebuilding of Buffer Trees
2.6 Changing the Congestion Effort
2.7 Using of Nondefault Routing Rules for Critical Nets
2.8 Enabling Layer Optimization
2.9 Enabling Path Optimization
2.10 Performing Concurrent Clock and Data Optimization
3 Using Physical Guidance From the Design Compiler Tool
4 Performing Multibit Banking
4.1 Identifying Multibit Banks
4.2 Splitting Multibit Banks
4.3 Banking Multibit Retention Registers
5 Performing Incremental Placement and Optimization Using the
refine_opt Command
5.1 Optimizing Specific Endpoints
5.2 Using of Nondefault Routing Rules for Critical Nets
5.3 Enabling Layer Optimization
6 Performing Magnet Placement
7 Refining Placement
8 Performing Placement and Optimization on Multivoltage Blocks
9 Rebuilding Buffer Trees
10 Adding and Removing Tie Cells
六 Identifying Issues That Cannot Be Fixed During Optimization
1 Analyzing the Bufferability of Nets
2 Analyzing Violations That Cannot Be Fixed
七 Analyzing the Placement
1 Reporting Utilization
2 Reporting the Placement QoR
3 Querying and Changing the Placement Status
4 Analyzing the Placement in the GUI
八 Analyzing Timing
九 Analyzing Power
1 Creating Power Groups for Reporting
2 Reporting Pin-Based Clock Network Power
一 Specifying Coarse Placement Constraints and Settings
1 Defining Keepout Margins
阻止让指定实例在一定范围内禁止放置其他实例,并能起到降低拥堵程度、减少网络绕道以及提升性能的作用;同时分为外层和内层两种(如图示),区别在于被禁止放置实例的区域方向不同:外层朝外延伸,而内层朝内收缩。

图1
create_keepout_margin -outer {10 10 10 10} my_macro
【通过设置my_macro周围的keepout参数可以有效避免pin位置出现DRC问题
2 Defining Area**-**Based Placement Blockages
area-based的placement分为四种类型: hard、 hard macro、 soft 和 partial 。 hard 属性要求所有 standard cell及 hard macro必须放置于 hard blockage中; hard macro仅约束 hard macro单元格(如 SRAM)的放置; soft 属性规定在 coarse placement 阶段将 standard cell和 hard macro限定于 soft blockage区域;然而,在 legalization 和 optimization 以及CTS阶段... 不受 partial blockage 的影响 。 partial 属性则仅控制 coarse placement 阶段 cell 的密度 ,同样不影响 legalization 和 optimization 以及CTS阶段 ...
2.1 Defining a Placement Blockage
为了生成一个placement blockage需配置区域(-boundary)和类型(-type)。
创建边界块排布策略 -边界区域定义为{120,75,230,200} -策略类型设为软性(soft)
配置选项 -名称为place.coarse.enable_enhanced_soft_blockages -启用值设为true
创建边界块排布策略 -边界区域定义为{10,20,100,200} -策略类型设为部分性(partial) -指定允许填充的百分比比例为40%
2.2 Define a Blockage of a Predefined Category
The category-based partial blockage restricts distinct cell types from accessing the designated blockage area.
注
注
2.3 Defining Blockages That Exclude Registers
该类型的寄存器不允许被放入blockage中作为部分类别。
create_placement_blockages -boundaries {{10, 20}, {100, 200}} \
-register_type, -portion_blocked(50%) \
禁止将寄存器放置在指定区域内的配置块设置。允许的寄存器分布密度为50%,其他类型的细胞不受此限制。
2.4 Defining Blockages That Exclude Relative Placement Groups
相对位置组将具有逻辑关联性的实例整合到同一个组中,在进行positioning时考虑它们之间的相对位置关系。这有助于减少网络拥塞和路径延迟。在此基础上,我们可以配置一种基于rp_group类型的阻碍机制来优化整体性能。
生成relative placement group RP1,默认设置为6行6列
将该group添加至指定位置U23
在该group内位于第(列)、第(行)的位置创建一个占据一行两列宽度的单元格
创建放置阻挡块类型为rp_group
设置该阻挡块的边界范围从坐标点(10,20)延伸至(100,20)
允许所有其他类型的cell自由排列而不受限制
2.5 Defining Blockages That Allow Relative Placement Cells Only
其对应的blockage类型为仅允许基于relative placement groups设置的allow_rp_only类型
create_placement_blockage -name rp_only -type allow_rp_only \
-boundary {10 20 100 200} -blocked_percentage 20
2.6 Defining Blockages That Allow Buffers Only
allow_buffer_only是只允许buffer放进去的partial blockage类型。
放置块ages边界 {{10 20} {100 200}}
--allow-buffer-only -设置最大容量占比为70%
2.7 Querying && Removing Placement Blockages
该模块提供以下功能:调用get_placement_blockages函数以获取placement blockage;采用remove_placement_blockage方法进行删除操作;若需删除特定的blockage,请指定其名称;若要一次性清除所有blockage,则可使用‘-all’参数。
3 Defining Placement Bounds
placement bound被设计用于约束一组cell在同一区域内的布局实现(place),从而能够有效缩短数据路径长度并优化时序关键路径(timing critical path)的收敛性表现。根据bound的类型划分(如图2所示),主要可分为以下几类:soft move bound属于软约束范畴,在该约束下被放置到bound边界附近的实例不会严格保证其位置;hard move bound则代表硬约束类型,在这种情况下被放置到bound边界附近的实例必须严格满足位置要求;此外还有一种exclusive move bound,在这种情况下仅允许特定类型的实例被放置到bound边界之外;soft group bound则是一种无需指定具体boundary形状的软约束方式;hard group bound则是一种无指定boundary形状的硬约束方法;Dimensionless group bound通过引入-dimension参数来指定bound边界利用率,在这种情况下工具会自主决定bound的具体形状和位置分布特征

图2
3.1 Defining Move Bounds
通过调用create_bound函数来设定placement bound的范围。该bound区域能够包含多个不同形状,并可通过创建bound_shape实例来添加新的形状;同时可通过调用remove_bound_shape方法来移除现有的形状。
create_bound -name name [-type soft] [-effort effort_level] \
-boundary {coordinates} [bound_objects]
定义soft move bound,effort指导bound内instance被boundary束缚的程度,默认是medium,ultra完全不能放在boundary外,low则可以放在bound外。
create_bound -name b1 -boundary {100 100 200 200} INST_1
默认soft type,medium effort。
create_bound -name b2 -type hard \
-boundary {100 100 200 200} INST_1
指定hard move bound类型就不需要-effort option,因为bound 内的instance必须放到-boundary区域内。
create_bound -name b3 -exclusive \
-boundary {100 100 200 200} INST_1
在指定区域设置exclusive move bound。
3.2 Querying && Removing Placement Bounds
通过report_bounds方法生成并报告所有bound的详细信息;通过调用get_bounds方法获取所有bound信息;并对remove_bounds函数执行删除操作以清理不必要的bound数据。
remove_bounds [get_bounds name]
remove_bounds -all
使用-all删除所有的bound。
4 Defining Placement Attractions
attractants 作为约束机制使用了一组大量细胞单元,并将其放置于邻近同一区域的位置上。这种约束属于软约束类型,并且仅适用于initial placement阶段进行应用。需要注意的是,在定义 -region时除了指定一个矩形区域外,还可以指定一条线性区域或仅给定一个点坐标的位置(例如放置于port附近的位置)。
常用命令如下:
获取并设置U₁区域内的扁平细胞集合。
创建名为U₁的位置吸引力。
指定放置position attraction cell的位置区域为{{0 0} {0 1500}}并包含$U₁_cells中的单元格。
从position attraction中取出位置attraction cell(即U₁/cell)。
操作说明
报告position attractions的相关信息。
删除position attractions实例(即删除位置attraction)。
操作说明
强制删除position attractions实例(即删除位置attraction)。
5 Generating Automatic Group Bounds for Clock Gating Cells
该工具能够为驱动寄存器内的ICG细胞自动生成对应的bound,并在placement操作完成后主动删除这些bound;此外,在其他bound单元中的cell不会被包含于auto bound集合中;同时,用户可通过设置参数的方式限定auto bound的最大fanout值。
设置App参数项的名称为place.coarse.icg_auto_bound。
设置App参数项的名称为place.coarse.icg_auto_bound_fanout_limit,并指定其.value字段为30,默认值为40。
6 Controlling the Placement Density
通过如下设置控制place阶段的density(如图3)。

图3
set_app_options -name place.coarse.max_density -value 0.6
设置非congestion区域最大的density
set_app_options -name place.coarse.congestion_driven_max_util -value 0.8
设置高congestion区域周围的低congestion区域的最大利用率
当所创建的值低于该设计的平均利用率时,则该工具将自动修正这两个参数;此外,在无需手动设置的情况下,则该系统还能够自动生成最大密度与使用率的具体方法。
set_app_options -name place.coarse.enhanced_auto_density_control -value true
工具设置的值根据不同区域采取不同的值,而不是算当前设计的平均利用率。
7 Reducing Congestion
coarse placement阶段主要关注各层的congestion信息,并不使用所有层的数据以减少pin density过高导致的底层绕线资源不足区域的congestion问题。
set_app_options -name place.coarse.increased_cell_expansion -value true
给高congestion区域的cell设置虚拟的keepout
set_app_options -name place.coarse.congestion_expansion_direction -value horizontal/both
给虚拟keepout设置方向,默认只拉大横向间距来降低竖直方向绕线引起的congestion,如果需要拉大纵向间距就设置both。
route.
set_app_options -name global.export_soft_congestion_maps -value true
让工具考虑soft routing rule产生的congestion。
set_app_options -name place.coarse.legalizer_driven_placement -value true
coarse placement congestion driven模式下给很难legalize的区域调整密度。
8 Considering the Power Density During Placement
在高功耗区域给cell增加彼此间的spacing
set_app_options -name place.coarse.power_density_aware -value true
9 Considering the Dynamic Power QoR During Placement
在开始之前,在开始时需要利用read_saif或set_switching_activity来设定toggle rate;如果未进行设置,则系统将采用预设值。
对当前的scenario进行动态功率功能的分析与启用状态核查,请执行设置命令以启用scenario中的dynamic_power功能。
最后,在配置app选项后使该工具执行动态功耗评估,在这种情况下,在每条net上评估其动态功耗以及关键路径的时间序列。因此,在优化过程中动态功耗的变化将不会对系统的时间序列产生影响。
配置选项设置为将 coarse 级别下 place 的低功耗放置启用。
进一步配置选项设置为将 coarse 级别下 place 的低功耗增强努力设置为可选值 low、medium 或 high,默认情况下此功能未启用。
二 Specifying Legalization Constraints and Settings
这部分介绍legalization相关的约束和设置
1 Defining Cell Spacing Constraints for Legalization
该配置参数用于配置set_placement_spacing_label在标准单元格及其与边界之间的间距规则。具体来说:
- 使用set_placement_spacing_label参数可以实现以下功能:
a. 通过指定-name属性确定label名称
b. 通过指定-lib_cells属性确定所属的lib reference
c. 通过指定-side属性确定附加边(可选left、right或both)
置放间距控制标签放置于右侧并指定名称为X, 同时配置相关参数以使用单元格{cellA}
置放间距控制标签放置于右侧并指定名称为Y, 同时配置相关参数以使用单元格{cellB}
set_placement_spacing_rule定义labe的spacing规则。
set_placement_spacing_rule -labels {X Y} {0 0}
X标签与Y标签之间必须保持至少一个site的间距。
set_placement_spacing_rule -labels {X SNPS_BOUNDARY} {0 0}
X标签与边界线之间必须保持至少一个site的距离。
set_placement_spacing_rule -labels {X Z} {2 4}
X标签与Z标签之间的间距必须在2到4个site之间。
报告间距规则采用report_placement_spacing_rules方案,并将其余间距规则予以去除。
2 Minimizing Large Displacements During Legalization
设置命令来尽量减少legalization阶段standard cell移动的距离。
set_app_options -name place.legalize.optimize_orientations -value true
通过翻转cell来降低legalization的距离。
set_app_options -name place.legalize.stream_place -value true
移动位置错误的cell和周围cell,更多cell的少量移动距离来代替有问题cell的长移动距离。
set_app_options -name place.legalize.stream_effort -value low/high (default:low)
控制stream placement精度使legalization结果更好,但是会消耗run time。
set_app_options -name place.legalize.stream_effort_limit -value 300
控制legalize一个cell的时间,时间到了还没找到合适的位置工具就会放弃legalize这个cell,也是消耗run time的option,实际项目中也确实有用。
3 Improving Routability by Optimizing Pin Access During****Legalization
新型技术通过提高cell间距的方法优化了pin密度较高区域的布线效率
Configure application settings by specifying the name place.legalize.optimize_pin_access_using_cell_spacing and setting its value to true.
4 Enabling Advanced PG Net Checks
采用先进工艺路线进行标准细胞与预路由PG网之间的DRC核查(例如标准型端子形状与其PVG网间的间距)。
设置应用选项:名称为place.legalize.enable_advanced_prerouted_net_check,默认值为true。
允许跨行层间访问检查:设置为BUF/Y 2。
libpin绕线检查的DRC规则
每个BUF/Y端口可能需要布放多个VIA。
设置应用选项:名称为place.legalize.advanced_layer_access_check,默认值为{BUF/Y 2}。
允许跨行层间访问检查:设置为{BUF/Y 2}。
设置应用选项:名称为place.legalize.advanced_libpin_access_check,默认值为{M2 track_drc}。
每个 BUF/Y 端口可能需要布放多个 VIA。
设置应用选项:名称为place.legalize.enable_cross_row_pnet_check,默认值为true。
同时需关注多个 cell 与 PG net 的 DRC 情况。
5 Enabling Advanced Legalization Algorithms
允许工具使用更先进的legalization方案,run time更短。
set_app_options -name place.legalize.enable_advanced_legalizer -value true
set_app_options -name place.legalize.enable_advanced_legalizer_rules -value true
place.legalize.optimize_pin_access_strategies -value horizontal_align/avoid_high_pin_density/horizontal_align avoid_high_pin_density
默认优化的方式是对齐竖直方向的pin shape,工具也提供其他三种模式:对齐水平方向pin shape、把cell 移出高pin density的地方,和对齐水平方向的pin shape并且把cell移出pin density的地方。
6 Checking if Library Cells Are Legally Placeable
在放置之前, 使用analyze_lib_cell_placement 参数进行lib_cells验证, 确认细胞是否能够合理放置. 通过trials参数设定 site数量上限, 设置为0时会分析所有site; 在进行区域分析时,默认会覆盖整个core区域; 同时max_cells参数设定为默认值100. 如果经过测试后发现 pass rate过低, 则实现 legalization 的难度相应增大. 需进一步考察 power plan 、 cell结构以及 legalization 的app选项情况.

图4
三 Specifying Optimization Settings
介绍优化的设置和约束方法。
1 Controlling Physical DFT Optimization
create_placement、place_opt和clock_opt各自进行DFT优化。在initial placement阶段时,工具仅对function net进行优化。完成之后,则会进行scan chain reorder以进一步提升DFT效果。通过scan chain reorder技术可以有效缩短线路长度并减少拥塞现象。关于具体的DFT配置细节,请参考图5所示的内容。


图5
需要注意的是:
如果缺少scan def,则必须将place.coarse.continue_on_missing_scandef设为false。否则会导致create_placement, place_opt或clock_opt无法正常运行。
2、单独执行DFT优化可以用optimize_dft命令。
opt.dft.clock_aware_scan_repartition_reorder只能在postCTS阶段被设置为true,并且主要用于改善hold violation
2 Enabling Power Optimization
ICC2可通过提升dynamic和static功率来实现功能。dynamic power与其相关且与frequency以及transition呈正比关系;static power即leakage power,在无voltage conversion的情况下即为no load state下的current consumption.
2.1 Performing Conventional Leakage**-**Power Optimization
执行传统方式的leakage power优化,命令如下:
1、set_scenario_status -leakage_power true
2、set_app_options -name opt.power.mode -value leakage
3、set_app_options -name opt.power.effort -value medium/high(defalut:low)
2.2 Performing Dynamic**-**Power Optimization
执行dynamic power优化的命令如下:
1、set_scenario_status -dynamic_power true
2、set_app_options -name opt.power.mode -value dynamic
3、set_app_options -name opt.power.effort -value medium/high(defalut:low)
2.3 Performing Total**-**Power Optimization
如果leakage power和dynamic power都需要优化的话,参考如下命令:
1、set_scenario_status -leakage_power true -dynamic_power true
read_saif或set_switching_activity支持toggle rate功能;当未配置工会时,默认将采用该功能的默认值。
3、set_app_options -name opt.power.mode -value total
4、set_app_options -name opt.power.effort -value medium/high(defalut:low)
2.4 PerformingPercentage Low-Threshold-VoltageOptimization
该方法旨在改善LVT(Low-Voltage Test)的比例,在此过程中虽然具有较小的延迟(Delay),但却伴随着较大的漏电功耗(Leakage Power)。若希望实现对LVT比例的优化,则需运用refine_opt这一指令。值得注意的是,在此过程中place_opt、clock_opt以及route_opt这三类指令均不参与对LVT比例的优化操作。
1、set_scenario_status -leakage_power true
2、设置不同VT的group和type。
设置属性[对象:get_lib_cells/Fast]为阈值电压组,并将其值设置为LVt。
将阈值电压组类型设置为低阈值LVt。
(可选)报告阈值电压组信息。
3、在配置LVT比值时,请注意这属于一种软性约束条件,在满足时间序列要求的前提下其优先级会有所提高。该LVT比值的设定不受save_block保存操作的影响。
set_max_lvth_percentage 15
(optional)remove_max_lvth_percentages
4、设置优化的app option。
指定应用选项的功率泄漏类型参数
3 Defining a Cell Name Prefix for Optimization
不同优化阶段新增data net的名字的前缀可以用户自己定义。
配置app选项
-name opt.common.user_instance_name_prefix
-value为'PO_'
place_opt
配置app选项
-name opt.common.user_instance_name_prefix
-value为'PO_'
place_opt
配置应用选项为"clock_opt",
并指定名称为"opt.common.user_instance_name_prefix",
赋值为'CO_'。
set_app_options
--name opt.common.user_instance_name_prefix 设置为'PO_'
如果需要指定优化阶段新增的clock net的前缀可以使用如下命令。
set_app_options -name cts.common.user_instance_name_prefix -value "CTS_"
4 Enabling Global**-Route-Layer-**Based (GRLB) Preroute Optimization
提升postRoute阶段的相关性,在place优化(place_opt)、clock优化(clock_opt)以及refine优化(refine_opt)的过程中采用了全局路由策略,并应用了更为合适的方块电阻值设定;为此需要对最大和最小的绕线层次进行控制以便计算RC值;应在route_global&&route_auto阶段之前应用remove_route_aware_estimation命令以去除GRLB影响。
set_app_options -name opt.common.use_route_aware_estimation -value auto/true(default:false)
如果使用GRLB,推荐设true。
5 Enabling Route**-**Driven Extraction (RDE) for Preroute Optimization
为了优化与postRoute阶段的相关性。由于RDE与GRLB不兼容,在配置RDE时会导致后端负载均衡(GRLB)失效。在配置选项集中的RC缩放因子下进行相关性计算。
set_app_options -name opt.common.enable_rde -value true ( default为auto )
采用自动模式时会根据当前的工艺节点决定是否启用RDE,并且仅在先进工艺中应用此功能
Facilitating Automated Vertical Integration Methods for Pre-Route Optimization Process
采用梯形结构布置多层vias是一种有效的布局方式。将各层的vias排列成规则阵列以实现精确分布。通过梯形结构连接至高层金属降低了接触电感,并显著提升了信号传输效率及电磁兼容性。
通常在工程文件中定义"via ladder rule"这一命名规则。此外还可以通过调用create_via_rule函数进行手动创建,并随后使用set_attribute方法为每一层via配置相应的阵列属性。
2、set_via_ladder_candidate指定lib cell pin添加via ladder。
在优化过程中自动地设置了该参数为true,并且会自动地执行相应的配置以实现功能
7 Enabling Advanced Logic Restructuring
在opto阶段采用逻辑重构技术来提升place_opt和cock_opt的时间性能。同时优化面积与功耗。需要注意的是该方法不包括size_ony、dont_touch、fixed或locked属性相关的细胞群。在日志中会记录OPT-800事件可以通过查看哪些细胞无法被重构来确认当前状态的具体情况配置方法如图7所示

图7
设置应用选项:名称为opt.common.advanced_logic_restructuring_mode,默认值为area_power。
设置应用选项:名称为opt.common.advanced_logic_restructuring_wirelength_costing,默认值为medium/none(默认值为high)。
通过逻辑重构,默认情况下不会影响布线结果;但如果布线资源较为充足,则可以选择降低wirelength_costing的设置。
8 Enabling Area Recovery in Regions of High Utilization
在place_opt和clcok_opt阶段针对利用率高的地方执行area recovery。
set_app_options opt.common.small_region_area_recovery -value true
9 Marking the Clock Networks
place之前应该把clock tree设置成ideal network。参考脚本如下:
对每个模式进行处理时,
当前设置为 $mode,
构建理想的网络结构为 [all_fanout -flat -clock_tree]。
在CTS之前需要remove_ideal_network。
10 Preserving Ports of Existing Hierarchies
在优化器(optimization)以及约束跟踪系统(CTS)中,在层次单元(hierarchical cell)中生成或移除端口(port)。为了避免这种情况的发生,请使用set_freeze_ports命令来限制端口状态。
configure all freeze ports to retrieve cells where is_hierarchical: true
configure freeze ports at clock rate with cells XX/xx @true
display freeze ports status
四 Setting Up Multivoltage Designs for Placement and Optimization
1 Defining Voltage Areas
voltage area属于每个特定于每个unique power domain的一个专用区域,在multivoltage设计过程中都会在其UPF文件中标明相应的关联关系。对于单电压设计流程而言,默认分配给每个逻辑门的是其所属的unique power domain,并在此核心区域内生成相应的default voltage areas。在place阶段(布线阶段),该voltage region被视为exclusive用于移动(move)操作,并且仅有属于同一unique power domain的所有cell才能参与此操作以完成布局安排。
通过create_voltage_area命令可以创建电压区域,并在配置voltage area时必须指定相应的power_domain参数(-power_domain)。在定义voltage area的边界时应使用region参数。
删除voltage area使用remove_voltage_areas (-all)。
1.1 Merging Voltage Area Shapes
将同一power domain内的具有重叠区域的电压区域合并为一个;工具默认将最后合并的形状放置在顶部位置;合并后的名称与最终合并后的电压区域一致
说明
icc2_shell> set_voltage_area PD1 -merge_regions
Information: Merging abutted and overlapping shapes in voltage_area 'PD1'. (NDMUI-154) 1
icc2_shell> get_voltage_area_shapes -of_objects PD1
{VOLTAGE_AREA_SHAPE_3}
merge 前后voltage area如图8。

图8
1.2 Resolving Overlapping Voltage Areas
当不同power domain中的voltage area发生重叠时,在后续设置的情况下该区域会被认定为位于上方位置;该区域的有效形状即为其自身设定;而先前设定的那个区域则需去除与后续区域存在的重叠部分。因此,在先设定的情况下若后续再进行覆盖,则原先设定的有效范围将被取消覆盖;最终可能导致该初始区域没有有效的覆盖范围(如图9所示)。

图9
先定义外部的voltage area
icc2_shell> create_voltage_area -power_domains PD1 \
-region { {0 0} {30 30} }
{PD1}
icc2_shell> create_voltage_area -power_domains PD2 \
-region { {10 10} {20 20} } {PD2}
icc2_shell> get_attribute -objects [get_voltage_areas PD2] \
-name effective_shapes
{{10.0000 10.0000} {20.0000 20.0000}}
icc2_shell> get_attribute -objects [get_voltage_areas PD1] \
-name effective_shapes
{{0.0000 0.0000} {10.0000 0.0000} {10.0000 20.0000} {20.0000 20.0000}
{20.0000 10.0000} {10.0000 10.0000} {10.0000 0.0000} {30.0000 0.0000}
{30.0000 30.0000} {0.0000 30.0000}}
先定义内部的voltage area
icc2_shell> create_voltage_area -power_domains PD2 \
-region { {10 10} {20 20} }
{PD2}
icc2_shell> create_voltage_area -power_domains PD1 \
-region { {0 0} {30 30} }
{PD1}
icc2_shell> get_attribute -objects [get_voltage_areas PD2] \
-name effective_shapes
icc2_shell> get_attribute -objects [get_voltage_areas PD1] \
-name effective_shapes
{{0.0000 0.0000} {30.0000 30.0000}}
1.3 Modifying the Stacking Order
通过运行命令 report_voltage_areas -verbose 可以获取堆叠顺序信息,并从而确定哪个 voltage area 位于上方。通过设置 voltage area 的形状属性来调整其在堆叠中的位置:提升时将该 voltage area 设置为 top 层(top),下降时设置为 bottom 层(bottom)。若需将一个 voltage shape 放在其上方则标记为 above;反之,则标记为 below。
1.4 Defining Guard Bands
guardian bands serve as exclusive zones within voltage areas, where cells cannot be placed. These zones act as demarcations between adjacent voltage areas, preventing potential DRC violations during power planning. By default, create_voltage_area and create_voltage_area_shape commands do not automatically generate guard bands. However, it is necessary to manually specify the -guard_band option for such configurations. If a merge_regions operation is performed, new guard bands must be created for the merged voltage areas. When analyzing overlapping or adjacent voltage areas, it's crucial to consider the placement implications of their respective guard bands.
注释中的参数分为两部分:前者表示水平方向的保护带宽度;后者则代表垂直方向的高度(如图1所示)。

图10
1.5 Querying Voltage Areas
1、获取voltage area列表使用get_voltage_areas命令。
2、报告volatage area详细信息使用report_voltage_areas命令。
该模块通过调用函数/方法[get_voltage_areas XX]来确定valid placement region的border,并生成ideal shapes。
通过调用该函数获取protected band区域的边界信息并将其存储为有效保护带边界信息
1.6 Modifying Voltage Areas
在创建voltage area之后,通过set_voltage_area命令去调整voltage area。
在设置电压区域时,分别使用-add_power_domain和-remove_power_domain命令来声明power domain信息
2、set_voltage_area -name 改变voltage area名字。
3、建立voltage area的形状和移除相关形状以影响或调整voltage area的区域。
1.7 Controlling Physical-Feedthrough Nets in Voltage Areas
负责管理纯物理级的feedthrough网络。如果一条net连接到一个电压区域(voltage region)内的逻辑架构,则zheti_ae被归类为此处电压区域。通常情况下,默认情况下,默认情况下,默认情况下,默认情况下,默认情况下),不属于电压区域(voltage region)的物理级网络(physical feedthrough)可自由穿越进入该电压区域(voltage region)。不过,在实际应用中,默认情况下,默认情况下),可通过命令阻止该行为发生。
如下示例,VA1禁止physical feedthrough(如图11),结果会产生detour的绕线。
create_voltage_area_rule -allow_pass_through false \ -name VA1_rule -voltage_areas VA1

图11
如上图所示,在优化过程中,默认情况下工具不会在VA1的电压区域为N1物理通路放置缓冲层。因此,在解决绕行问题时有两种解决方案:物理通路缓冲和逻辑通路缓冲方法。
通过以下方式插physical-feedthrough buffer。
enable the physical feedthrough buffer for the voltage area rule.
2、在VA0的logic hierarchy插buffer并放到VA1里。
通过以下方式插Logical-feedthrough buffer。
支持logical-feedthrough缓冲,并设置voltage_area_rule参数使其允许逻辑缓冲。通过采用包括或排除逻辑层次结构的方式进行配置即可实现所需功能。
2、在VA1 logic hierarchy插buffer并放在VA1里,如下示例。
icc2_shell>
set voltage_area_rule
set allow_logical_feedthrough = true
set include_logical_feedthrough_hierarchy = {U1, U2}
name va1_rule
define_voltage_areas va1
需要注意的是,在向更高层次或更低层次添加逻辑转发缓冲区时,请注意可能导致在block边界上产生一个新的port。如果不想让boundary被冻结,则应为该block边界口设置freeze ports。
两种插buffer的方式差别如图12所示。

图12
为了设置一个默认规则适用于未被create_voltage_area_rule指定的地方,请使用--default-rule选项。
create_voltage_area_rule -default_rule -allow_physical_feedthrough true
一个voltage area既没有定义rule也没有default rule时,其name选项决定了该voltage area是否能插physical feedthrough buffer中的app选项。其对应的app选项为opt.common.allow_physical_feedthrough。
报告voltage area rule使用report_voltage_area_rules,并移除使用remove_voltage_area_rules以避免潜在的问题。
2 Inserting Multivoltage Cells
实现多电压设计时需依赖特定类型的多电压单元。如隔离电容器和水平 shifting单元,则分别连接于不同开关状态下电源域之间的交界处完成功能。隔离电容器需连接在两个开关状态不同的电源域之间(Power Domain),而水平 shifting单元则连接于不同电压水平(Power Domain)之间的交界处,并通过电平转换功能确保输出端可正常工作。一般而言,在逻辑综合阶段会直接将这些多电压单元插入到设计中;此外工具还提供了通过create_mv_cells命令自动生成这些多电压单元的功能(ICC2)。采用多水平电压源时,默认将其配置为尺寸优先模式(Size-Only),并将连接至该单元的所有端口标记为‘ dont touch ’以避免干扰。
level shifter和isolation cell的配置方法是怎样的?任何电源连接都需要参考相关UPF文件。此外,在使用ICC2时,默认情况下会通过associate_mv_cells或commit_upf两种方法之一自动确定组件所属的domain以及连接的电源。
当自动化的声明信息无效时,默认情况下系统无法完成相应的配置操作。此时用户可以通过调用set_power_strategy_attribute来完成相应的配置操作。
3 Analyzing Multivoltage Information
为了确保没有multivoltage的错误,使用check_mv_design去检查。
报告multivoltage信息,使用如下命令,如图13。

图13
4 Controlling the Placement of Multivoltage Cells
该术语被用来指代那些跨越多个voltage area的网络结构。当一条multivoltage net的一端连接至一个multivoltage cell时,其余端或两端则连接至其他voltage area中的cell。为了缩短其长度,ICC2建议采用以下配置方案:
ConfigureAppOptions -名称 place.coarse.enable_advanced_mv_cell_placement -true
该工具会将multivoltage尽可能放置在voltage area的边界周围,并通过配置超高的缓存层来优化multivoltage net。然而,在缩短multivoltage net长度的同时, 该工具会降低缓存层的数量。
set_app_options -name opt.buffering.enable_hierarchy_mapping -value true
该app选项设置中包含一个工具,在优化逻辑DRC问题时能够有效地减少所使用的缓冲区数量;然而这可能会带来一定程度的性能损失,在时序方面有所牺牲。
五 Performing Placement and Optimization
在floorplan和power plan完成后即可开展placement、optimization和legalization工作。
1 Performing Standalone Placement and Legalization
单独进行coarse placement操作时可采用create_placement命令。这一步骤需从scan def中获取信息,因为coarse placement过程中需优化scan chain。特别提示:在进行create_placement操作前,请确保已合并好clock gate cell,并使用merge_clock_gates命令完成该操作。
关于create_placement:
1)runtime与qor的取舍通过-effort来控制。
2)执行timing driven placement,使用-timing_driven。
3)基于时序驱动的布局,并且有效解决高分支数(high fanout)和长网路(long net)的问题。采用具有缓冲器意识的时序驱动方法。
注
4)具体而言,在实现congestion driven placement时,我们采用基于-congestion的策略来优化网络流量分布。通过-congestion_effort来调节节点间的负载平衡程度,从而实现资源的有效分配和系统性能的最大化。
基于拥塞驱动的同时优化相关的逻辑用于减少拥塞,并采用-congestion_driven_restructuring策略
执行legalization,使用legalize_placement命令。
2 Performing Placement and Optimization With the place_opt Command
进行coarse placement、physical optimization及legalization操作仅需一个place_opt指令即可完成。
place_opt是一个打包命令,包括以下几个部分:
1)initial_place
在当前阶段,该工具会主动整合clock gating单元并规划coarse placement,并如同创建放置一样地对scan chain进行优化。
2)initial_drc
这个阶段工具会remove buffer trees并且优化high fanout net。
3)initial_opto
这个阶段工具执行时序,面积,congestion还有leakage power的优化。
4)final_place
这个阶段会执行增量的(incr)placement去改善时序。
5)final_opto
执行更进一步的优化。
6)legalization
工具执行legalize placement
在缺省设置下,默认情况下该命令将运行全部六个阶段。通过指定-from和-to参数可选择执行相应的阶段:包括initial_place、initial_drc、initial_opto、final_place以及final_opto。若未指定-from参数,默认起始点为initial_place,并且当不执行该命令时,结束于final_opto及随后的legalize placement步骤。
2.1 Considering the Effect on Clock Structures During Placement
该工具能够实现基于clock tree结构的布局安排,并且要求在配置文件中指定相应的选项参数
set_app_options -name place_opt.flow.clock_aware_placement -value true
这一步可以改善ICG的时序,还能降低CTS阶段clock buffer数量。
2.2 Creating a Temporary Clock Tree for Placement and Optimization
通常情况下,在place_opt阶段,默认会将clock配置为ideal clock。然而,在某些情况下或特定需求下(例如使用设计自动化工具),允许用户在工具中创建临时钟树,并通过propagated clock进行时序分析)。参考以下命令:
set_app_options -name place_opt.flow.trial_clock_tree -value true
完成 place 阶段后,在执行'clock_opt'或'synthesize_clock_trees'命令以生成CTS时,工具会自动生成并清除所有临时 clock 树,并生成最终确认的 clock 树。
2.3 Optimizing Clock-Gating Cells
通常情况下,在SPG流程中的初始优化阶段(initial_place),工具会自动完成clock gating cell的合并。如果提前调用... merge_clock_gates 命令,则相应的放置阶段将不会执行clock gate的合并操作。用户可以通过以下设置来控制是否执行clock gate的合并操作:
仅限于同一层级的clock gating cell进行合并。通常情况下,默认设置下工具会将不同层级的clock gate cells进行合并。
set_app_options -name cts.icg.merge_cross_level -value true
2)不让工具merge clock gating cell。
set_app_options -name place_opt.flow.merge_clock_gates -value true
在优化clock gating cell的过程中,采用特定的命令工具能够显著增强对clock gating cell的优化效果。当且仅当ICG配置中的enable pin存在时序违规配置时。
set_app_options -name place_opt.flow.optimize_icgs -value true
在优化clock gating cell时,工具会:
该工具实现了一种基于时钟意识的布局安排方法,并通过精确计算将具有时钟抑制功能的cell与其所有的fanout端子优化地放置在最佳位置。同时,默认跳过了set_app_options中的-place_opt.flow.clock_aware_placement项,并将其值设为XX。
该工具生成一个临时 clock tree,并基于该 clock tree 分析 ICG 的 timing violation(不考虑 set_app_options -name place_opt.flow.clock_aware_placement -value XX)。
该工具能够对clock gating cell进行拆分,在其enable pin存在时序违反的情况下,默认值为0.5的设置可以在...范围内进行调整以限制拆分操作。具体而言,set_app_options -name place_opt.flow.optimize_icgs_critical_range -value XX这一命令选项用于调整拆分范围的具体数值设定位置及作用机制。
通常情况下,默认配置下该工具会在place阶段自动计算并更新 clock gafe 的延迟值,并通过此信息进行后续设计中的 datapath 优化及有用偏移量优化处理。通过这种方式能够使该系统在设计初期就具备更高的时间一致性基础。为提升 clock gate 的延迟精度,在 place_opt 阶段必须配置 clock buffer 或 inverter 并引入必要的 ndr 规则以确保设计的一致性与可靠性。
如果在place_opt阶段采用了临时插入式_clock_tree_布局(temporary clock tree)或实现了_clock gating_相关的优化措施,则系统将能够生成一个更为精确的_clock_tree_布局;因此,在后续的过程中相应的逻辑分析和延迟计算也会因此被省略。
该工具不修改sdc中的set_clock_latency命令,仅将其中-set_clock latency中的-Offset参数存储起来.若用户希望获取这部分参数的值,可通过write_script -format指令在输出文件中检索到对应的-Offset参数.为了避免对特定clock门限进行时序估算,建议设置属性[get_pins xx/ck]并禁止对相关门限进行时序估算.
2.4 Enabling Global Route Based High-Fanout Synthesis
在initial_drc阶段进行high fanout net的优化时,默认配置中已启用虚拟绕线功能。当配置选项被启用后,默认情况下该工具将执行全局路由。
set_app_options -name place_opt.initial_drc.global_route_based -value 1
2.5 Enabling the Rebuilding of Buffer Trees
在initial DRC阶段完成后,默认情况下该工具会实现对high fanout net的优化工作。具体而言,在初始DRC阶段中,默认情况下该工具会自动构建相应的buffer树结构来实现这一目标。完成初始DRC阶段后,在后续步骤中系统会对这些设置进行必要的评估和处理,并根据分析结果可能导致需要删除或重构相应的buffer树结构以满足设计要求。
允许重建buffer tree的设置如下:
针对initial_opto阶段的multivoltage net,设置
set_app_options -name opt.buffering.enable_mv_rebuffering -value true
针对final_opto阶段的所有net,设置
set_app_options -name opt.buffering.enable_rebuffering -value true
2.6 Changing the Congestion Effort
通过如下命令控制congestion effort,默认是medium。
Configure the application options by specifying the parameter name and assigning it a value of none.
2.7 Using of Nondefault Routing Rules for Critical Nets
对critical net可以使用NDR rule来改善时序。
在place阶段优化NDR的开关时:
设置应用选项中的'place_opt.flow.optimize_ndr'名称,并将其值设置为true。
设置应用选项中的'place_opt.flow.optimize_ndr'名称,并将其值设置为false。
设置应用选项中的'place_opt.flow.disable_ndr'名称,并将其值设置为true。
这些操作有助于优化NDR的相关功能配置。
2.8 Enabling Layer Optimization
采用以下配置策略,在最终优化环节进行层的设置,并以此实现时序的优化目标;然而该方法并不推荐采用。
set_app_options -name place_opt.flow.optimize_layers -value true
set_app_options -name place_opt.flow.optimize_layers_critical_range -value XX
2.9 Enabling Path Optimization
对时序进行改进的增量优化措施通常采用路径选择技术,在默认设置下路径选择将被纳入refine_opt框架内;值得注意的是,在place阶段同样适用
set_app_options -name place_opt.flow.do_path_opt -value true
2.10 Performing Concurrent Clock and Data Optimization
在对datapath进行优化时,采用useful skew这一技术有助于提升时序性能。通过调节launch path的长短能够实现这一目标。该方法被称为concurrent clock and data(CCD)optimization。默认情况下,在完成final opto阶段前,工具会应用该优化方法。用户若希望避免此步骤可选择关闭相关设置。
set_app_options -name place_opt.flow.enable_ccd -value false
假设在clock opt阶段采用ccd策略时
设置app选项trial_clock_tree为true。
设置app选项optimize_icgs为true。
3 Using Physical Guidance From the Design Compiler Tool
通过配合DC Graphical 软件实现place优化后,不仅能够降低运行时间,还能够增强综合工具与ICC2的相关性。
DC Graphical将def给ICC2之后,place opt使用如下命令开启spg flow。
set_app_options -name place_opt.flow.do_spg -value true
spg flow会跳过initial place和initial drc。
4 Performing Multibit Banking
ICC2能够将单比特寄存器及少量的小多比特寄存器升级为更大容量的多比特寄存器。例如可以将8个1-bit或4个2-bit寄存器合并为一个8-bit或两个4-bit寄存器。同样的工具还可以将level shifter和isolation cell中的单比特转换为其等效的大容量多比特版本。采用这种方法能够显著减少细胞面积、clock tree net长度以及clock buffer的数量和功耗消耗。
使用如下命令控制multi bit的banking(组合)和的debanking(解组)。
设置应用选项中的'place_opt.flow'参数' enable_multibit_banking '的值为true。
设置应用选项中的'place_opt.flow'参数' enable_multibit_debanking '的值为true。
两种工具的默认设置均为False,在初始光解阶段分别发挥各自的作用:第一种工具主要影响初步分解过程(initial opto),而第二种工具则参与后续的彻底分解(final opto)。值得注意的是,在能够提升TNS性能时才会发挥特定功能的去向分解算法(debanking)。
也可以使用分离的步骤去做mutibit banking:
1)create_placement
2)identify_multibit,创建能被替换成multibit cell的列表。
3)place_opt -from initial_drc
4)report_multibit
若要优化时序未见提升时,请尝试将multibit进行分割操作。
4.1 Identifying Multibit Banks
通过identify_multibit命令指定可转换为multibit cell的集合(寄存器、level shifter、isolation cell)。在执行该命令时,请确保先配置以下参数:
采用多比特位(multibit)技术进行处理有两种方法:一是直接修改网络表中的单比特位(1-bit)数据为多比特位(multi-bit);另一种则是生成一个配置文件,并包含用于创建多比特位配置的命令。通过从输出文件中提取数据并将其应用到网络表中进行处理。
2)指定cell类型,-register或者-mv_cell。
当使用-regsiter选项之后,用户需要:
为了制定single bit至multibit银行间的映射关系,在命令行中输入$-input_map_file参数即可完成操作。如以下所示:
单比特寄存器组 reg_group_1 包含 REGX1、REGX2 和 REGX4。
单比特数量为 2 的情况下,默认配置为 M.REG.2。
单比特数量达到 4 时,默认配置升级至 M.REG.4。
单比特数量为 6 的情况下,默认配置设定为 M.REG.2 加上一个 M.REG.4。
当设置slack_threshold值时,在满足特定条件后才会触发执行多比特银行化操作。通常情况下,则会尽可能地对所有寄存器实施多比特银行化策略。
- cells 配置用于 bank account 的 instance 列表。
与其对应的则是 exclude_instance,并且还可以设置 exclude_library_cells 以排除列表中的 library cell。
在默认配置下,identity_multibit会实现DFT优化功能。该功能通过重新组织scan chain的方式,在同一scanchain中整合具有相同clock driver或gating cell驱动的寄存器单元。这样做能够显著提高单bit cell向multibit cell转换的数量。如果您希望避免这种scan chain的重排操作,则可以选择不启用此优化功能(建议使用-no_dft_opt选项)。
4.2 Splitting Multibit Banks
为了解决局部拥塞问题或优化时序性能,
可以通过split_multibits来分散多比特队列。
通常情况下,默认设置会将路径上的所有多比特单元在出现时序约束违反时进行分离。
需要注意的是该命令仅作用于由create_mulbits和identify_mulbits生成的多比特单元。
1)可以指定split之后更小一些的cell list,使用-lib_cells。
split_multibit reg_gr0 -lib_cells {lib1/MREG2 lib1/MREG2}
2)只针对slack小于指定值的path去split multibit。使用-slack_threshold。
split_multibit -slack_threshold -1
特定path组中的violation路径可以通过-path_group实现,并建议配合使用slack阈值来优化该路径。
split_multibit -path_groups CLKA -slack_threshold -0.5
4)通过exclude_instances或者-cells排除或指定split instance list。
4.3 Banking Multibit Retention Registers
该工具能够将单比特保留寄存器转换为多比特保留寄存器的前提是:功能声明一致。使用map_retention_cell -lib_cells命令,并且这些单比特寄存器的所有输入端口也必须一致。
5 Performing Incremental Placement and Optimization Using the
refine_opt Command
在place完成后采用refine_opt进行增量的placement和优化工作,并且其中具体包括五个优化阶段
1、initial_path_opt
优化寄存器位置设置以改善时序性能,在不引入新的violation的前提下。
2、inc_place
执行增量的placement来减少congestion。
3、inc_opto
优化时序、面积,congestion和leakage power。
4、final_path_opt
参考第一阶段的优化,总最后阶段的path 优化来改善时序。
5、legalization
legalize placement。
Refine_opt 通常执行五个阶段的处理流程。此外,在需要时还可以通过指定从和到的范围来限定前四个步骤的操作范围
5.1 Optimizing Specific Endpoints
refine_opt -endpoints指定endpoint去优化。
5.2 Using of Nondefault Routing Rules for Critical Nets
优化violation path的ndr rule,软约束。
set_app_options -name refine_opt.flow.optimize_ndr -value true
5.3 Enabling Layer Optimization
优化violation path的绕线层。
set_app_options -name rfine_opt.flow.optimize_layers -value true
set_app_options -name refine_opt.flow.optimize_layers_critical_range -value xx
限制critial的程度。
6 Performing Magnet Placement
在放置之前采用磁性放置技术使部分细胞聚集于磁性物体(固定细胞/插头/端子)周围,并参考图14了解具体的magnet_placement实现方式


图14
常用选项包括-mark_fixed和stop_on(by)_sequential_cells两种设置方式。其中前者用于控制magent placement相关cell的fixed属性设置;后者则用于限制处理流程中终点节点与寄存器之间的关系。
如果指定一个cell类型的实例列表inst_list,在该列表中至少存在一个cell与magnet object存在连接关系。
7 Refining Placement
通过refine_placement实现增量placement和legalization。其中-coordinates参数指定局部优化范围;-effort选项设置placement调整强度,默认设置为medium水平;-congestion_effort参数调节congestion缓解程度,默认值为medium等级;-perturbation_level设置现有placement方案的影响范围,默认覆盖中等比例。
8 Performing Placement and Optimization on Multivoltage Blocks
在placement过程中,在对应的power domain所对应的电压区域内将cell放置于其指定位置;同时,在电压区域边界处放置level shifter和isolation cell;在优化过程中考虑power开关状态插入缓冲层以提高系统的稳定性。
9 Rebuilding Buffer Trees
在完成place_opt操作后的initial_drc阶段中, 工具将缓冲树进行移除, 同时对具有高扇出的网络进行优化; 完成放置操作后会重新构建缓冲树, 并采用create_buffer_trees函数来实现这一目标。
该工具会自动构建所有highfnaout net的数据树结构。若需指定net参数,则可通过--from选项进行设置。
工具会在重建之前清除所有的 buffer tree,并建议尽可能保持现有且不被修改的 buffer tree,在进行增量优化时采用 -incremental 选项。
该系统将通过基于虚拟路由机制建立缓冲树,并采用全局路由策略进行通信;同时支持通过全局路由选项配置相关参数。
该工具不支持对新增的单元格进行合法化操作;为了实现这一目标,在创建缓冲树之后应调用legalize_placement方法。
示例
当设置技术库单元目的时排除所有项并包含技术库中的所有项目。
当设置技术库单元目的时优化配置并包含指定的缓冲区参数buf4x和buf8x。
从指定位置n33开始创建缓冲树结构并基于全局路由模式运行。
10 Adding and Removing Tie Cells
当配置参数设置为place_opt或clock_opt时,默认状态下会为电路板生成时间相关单元。另外一种方式是通过指定特定的引脚或端子来为这些单元附加额外的约束条件。优化功能会清除现有时间相关单元并重新配置它们。移除时间相关单元的操作可以通过remove_tie_cell命令完成。如果需要针对特定的时间相关单元进行移除操作,则可通过-object选项完成。
六 Identifying Issues****That Cannot Be Fixed During Optimization
ICC2支持网络插入缓冲区失败功能,并且具备探究优化发散现象原因的能力。
1 Analyzing the Bufferability of Nets
在分析net插buffer问题时,请注意以下几点:
- 指定net可以选择-nets选项
- 也可配合使用-driver和-loads选项
- 常见导致插buffer失败的原因包括:
- 不要触碰类型不符合要求的网络(不要触碰类型的网络)
- 避免配置多驱使类型的网络(多驱使类型的网络)
- 理想类型下的网络配置可能导致问题
- 缺乏足够的缓存/反向器资源
2 Analyzing Violations That Cannot Be Fixed
通过调用analyze_design_violations函数来探究timing violation未能收敛的根本原因,在分析过程中需设置-analyze_type参数以指定需排查的violation类型(包括max_trans, setup, hold, static_noise,以及only_lib)。对于设置在setup或hold状态下的violation,则可采用-endpoints进行处理;而筛选不同规模的violation时,则可通过调节-slack参数来控制其评估标准。
七 Analyzing the Placement
这部分提供一些命令,用于分析placement的结果。
1 Reporting Utilization
通过report_utilization来报告block的利用率,其计算公式为:利用率为需求面积除以可用总面积(utilization = demand/capacity)。该报告过程分为两个阶段。
通过配置create_utilization_configuration参数设置能够利用可用面积范围,并指定包含哪些区域的同时排除哪些区域。
示例
remove_utilization_configurations
create_utilization_configuration -scope block config1 \
-capacity core_area -exclude {hard_blockages soft_blockages}
- report_utilization用于衡量报告利用率。其中若配置了相关参数,则可通过--config选项来启用。
对于voltage area资源而言,则可采用-of_objects指定其利用情况进行描述。
2 Reporting the Placement QoR
report_placement可以报告总的线长以及一些placement violation。
1、-hierarchical指定报告的层次;
2、该字段用于记录net的线路长度信息。其中-wirelength interface专指物理边界穿过的net;而-wirelength hard_macro则用于连接至hard macro的具体net;特别说明:不支持通过-wirelength none来报告线路长度。
3、系统用于检测并记录placement中的违反物理层次结构的情况。
其中:
- 内部版本处理位于边界单元格中的放置问题;
- 外部版本则处理与子块重叠的情况;
若无需处理placement问题,则标记为none。
4、 swimming_pool_area分析了swimming pool区域(周围由subblock、hard macro及placement blockage阻挡的核心区域),该区域在设计时容易出现place和route问题。为了优化布局效果,建议通过设置maximum_swimming_pool_area来限定swimming pool的尺寸范围。
报告-narrowed-channel-problems在-thin-channel-area中出现的情况。
通过placing-blockages来限制该区域的狭窄性;或者扩大间距以改善该区域的布局。
需要注意的是:
utilizing-maximum-thin-channel-width-and-height来约束该区域的大小。
因此,在进行后续检查时,请先避免在该区域添加soft-blockages。
-hard_macro_route_over用于记录hard macro中的线路长度,并能反映hard macro内的绕线情况,在设计初期就能提前优化F/P。
7、-hard_macro_overlap报告hard macro之间的overlap问题。
3 Querying and Changing the Placement Status
instance的placement的状态(status)如图15.

图15
使用get_attribute获取status,示例如下:
get_attribute -objects [get_cells INST1] -name status
设置状态使用set_placement_status,示例如下:
set_placement_status fixed [get_cells INST1]
4 Analyzing the Placement in the GUI
再GUI界面分析placement的情况主要通过三个渠道:
1、Global Route Congestion Map
直观的体现congestion的区域的位置与congestion程度。
2、Cell Density Map
通过展示细胞密度分布情况,并结合与拥塞区域的重叠程度来分析拥塞原因,在细胞密度较高的区域实施优化策略时会遇到一定的困难
3、Pin Density Map
在分布图上,pin密度图与交通流量图趋于一致。为了优化资源分配,在高密度区域施加限制措施以平衡负载。
八 Analyzing Timing
当需要获取时序信息时, ICC2能够自动更新timing参数; 此外, 该工具还支持通过update_timing命令进行手动更新操作。
ICC2常用三个命令分析时序:
1、report_timing,分析具体path时使用。
2、report_qor,分析整体的时序,比如setup、hold的WNS与TNS。
该约束主要用作研究transition和fanout等logical DRC问题
该约束主要用以考察transition及fanout等logical DRC问题
该约束主要用于研究transition和fanout这类logical DRC问题
九 Analyzing Power
该命令用于计算并报告功耗。
借助lib库中的cell_leakage_power函数来评估instance的漏电功率。
当某个cell不具备cell_leakage_power属性时,默认会调用default_cell_leakage_power获取其漏电功率值。
默认情况下,默认模式被采用以便于计算每个工作状态的概率相等。
通过设置power.leakage_mode选项进行参数配置进而调节漏电模式。
该状态由set_case_analysis进行控制,在未受控情况下与其保持一致。
`set_app_options `-name power.leakage_mode `-value state
如果用ccs的lib库分析power,需要使用power.use_ccs_rcv_cap app option。
set_app_options -name power.use_ccs_rcv_cap -value true
1 Creating Power Groups for Reporting
在配置报告中设置 report_power 需要对 power group 进行分析。未设置时,默认系统会对 power group 进行分析(如图16)。set_power_group 选项允许指定 instance 和 cell type 并进行相应的 power 分析。

图16
2 Reporting Pin**-**Based Clock Network Power
默认报告 clock 网络的功耗是基于单元。简单解释为:当一个单元(cell)的输出连接到 clock 网络时,在计算 clock 网络的功耗时会考虑该单元所有输入和输出端子的能量消耗情况。这种计算方法与 PT 方法相同。如果想改为基于引脚(pin-based),建议可以采用以下命令:...
set_app_options -list {power.clock_network pin_based}
值得注意的是采用 report_clock_qor -type power命令形式进行功耗记录的该记录属于point-to-pin(基点)类型
