参考资料ICC2 User Guide Version M-2016.12-SP4

• Placement and Optimization Concepts
这部分就是简单的概念,介绍coarse placement和legalization placement。
• Placement Constraints
这部分先介绍概念,跟后面的一个章节相关,相关命令在后面的一章节, 这里先略过。
Placement Blockages : Keepout Margins / Area-Based Placement Blockages
Placement Bounds
Voltage Areas
Density Constraints
Cell Spacing Constraints
• Preparing for Placement and Optimization
• Defining Keepout Margins
create_keepout_margin -outer {10 10 10 10} digital_top
• Defining Area-Based Placement Blockages
create_placement_blockage -boundary {{10 20} {100 200}}
get_placement_blockages
remove_placement_blockages -all
• Defining Placement Bounds
create_bound
report_bounds
remove_placement_blockages
举例:
create_keepout_margin -outer {10 10 20 20} u_cru/por_n_dff_reg_0_
create_placement_blockage -type hard -boundary {{10 10} {40 40}}

• Defining Voltage Areas
跟电源域相关的内容,暂时忽略。
• Controlling the Placement Density
控制局部布局密度,值是0则关闭密度限制,随便摆放,值为1时,单元不留空隙紧挨一起。
set_app_options -name place.coarse.max_density -value 0.6
• Defining Cell Spacing Constraints
标准单元可以零间距摆放,容易出现制造短路良率变差,所以可以人为规定单元之间的间距,牺牲一点面积,换取高良率减少DRC问题。
set_placement_spacing_label -name X -lib_cells {cellB cellC} -side right
set_placement_spacing_rule -labels {X Y} {0 0}
report_placement_spacing_rules
remove_placement_spacing_rules -all/-label/-rule
• Inserting Multivoltage Cells
多电源阈的设计,暂时先略过。
• Marking the Clock Networks
没有时钟树的情况下执行placement会用虚拟的时钟树,为了贴合实际的时钟树,需要定义时钟相关的参数set_clock_uncertainty, set_clock_latency, set_clock_transition. 在真正开始做时钟树之前需要移除虚拟时钟树。
foreach_in_collection mode [all_modes] {
current_mode $mode
set_ideal_network [all_fanout -flat -clock_tree]
}
remove_ideal_network
• Preserving Ports of Existing Hierarchies
冻结层次模块端口,布局优化/CTS时钟树生成时,工具默认会在分层子模块上自动新增端口,此命令就是禁止随便新增端口。
set_freeze_ports -clock [get_cells MBX22] true
report_freeze_ports
• Defining a Cell Name Prefix for Optimization
在place_opt/clock_opt/route_opt阶段,会自动插入buffer,新增标准单元,此命令就是给新增的单元统一加上名字前缀,方便后续排查问题。
set_app_options -name opt.common.user_instance_name_prefix -value "PO_"
place_opt
set_app_options -name opt.common.user_instance_name_prefix -value "CO_"
clock_opt
set_app_options -name opt.common.user_instance_name_prefix -value "RO_"
route_opt
• Analyzing the Placeability of Library Cells
提前预判单元能不能摆进芯片,规避后续legalize失败,因为某些高宽特殊的IO或特殊标准单元尺寸和site行不匹配,或者芯片内部禁区太多,可用site碎片化,部分单元没有落脚的位置。查出问题后要么改floorplan调整blockage要么替换成兼容尺寸的库单元。
analyze_lib_cell_placement -lib_cells [add_to_collection -unique "" [get_attribute [get_cell -phys] ref_phys_block]]
• Performing Placement and Optimization
• Introduction to Power Optimization
介绍动态和静态功耗,概念性的东西略过.
• Performing Power Optimization
Power 优化有5个配置项,
1.Performing Low-Power Placement
2.Performing Conventional Leakage-Power Optimization
3.Performing Dynamic-Power Optimization
4.Performing Total-Power Optimization
5.Performing Percentage Low-Threshold-Voltage Optimization
第1项是把高频率开关的器件就近摆放,缩短互连线的电容,主要是针对摆放位置优化.
第2项是HVT/SVT/LVT之间的互换,把时序富裕的路径替换成高阈值HVT的器件,来降低漏电。
第3项是优化单元扇出,重组逻辑结构,精简翻转网络电容,比如一个与门两个输入Pin的电容不一样,则高频信号连接低电容Pin,低频信号连接高电容Pin等(GLPO).
第4项是动态功耗和漏电功耗协同优化.
第5项是低电压阈器件的用量占比.
其中第2,3,4项是互斥的不能同时打开.
set_scenario_status -dynamic_power true fast_scenario
set_app_options -name place_opt.flow.enable_power -value true
set_scenario_status -leakage_power true fast_scenario
set_app_options -name place_opt.flow.enable_power -value true
set_scenario_status -leakage_power true
set_threshold_voltage_group_type
set_max_lvth_percentage
set opt.power.leakage_type percentage_lvt
set opt.power.mode leakage
• Performing Physical DFT Optimization
简单介绍了一些关于DFT的设置.
set_app_options -name place.coarse.continue_on_missing_scandef -value true
set_app_options -name opt.dft.optimize_scan_chain -value false
set_app_options -name opt.dft.clock_aware_scan -value true
• Controlling Congestion-Driven Restructuring During Placement
布局阶段拥塞驱动逻辑重构控制,三大重构策略.
| 配置值 | 功能说明 |
|---|---|
embed(默认) |
嵌入式重构:仅在单次粗布局内部做线网重构,一轮布局一轮优化 |
original |
多轮迭代重构:反复「逻辑重构→重新布局」多轮迭代,大幅度降拥塞 |
rebuild |
深度重构:线网重构 + 单元逻辑重映射(替换门电路),优化力度最大 |
original 模式配套控制参数(只有设为 original 才生效)
place.coarse.cong_restruct_auto_stop (2020的ICC2中没找到此参数)
place.coarse.cong_restruct_stop_threshold(2020的ICC2中没找到此参数)
set_app_options -name place.coarse.cong_restruct_strategy -value original
set_app_options -name place.coarse.cong_restruct_iterations -value 4
set_app_options -name place.coarse.cong_restruct_effort -value medium
create_placement -congestion
• Enabling Global-Route-Based RC Estimation During Preroute Optimization
开启全局布线的RC估算,主要是为了提升布局和预布线RC与最终详细布线后RC的一致性,时序预估更精准,默认布局RC是基于线长和平均层电阻粗略估算的,开始这个功能后,在各个阶段会先全局布线,依据真实布线所用金属层的单位电阻计算RC。开启此功能后会关闭关键线网的层优化,注意在正式布线route之前,必须执行命令清空全局布线RC缓存。
set_app_options -name opt.common.use_route_aware_estimation -value auto
remove_route_aware_estimation
• Performing Area Recovery in Regions of High Utilization to Help Legalization
在利用率过高区域执行面积回收,辅助布局合法化,打开后局部压缩重构单元腾出空间,保证合法化跑通,但会恶化时序QoR
set_app_options -name opt.commom.small_region_area_recovery -value true
• Minimizing Large Displacements During Legalization
本段主要讲位移约束,限制器件被远距离移动,保留粗布局结果,防止布局优化白费。
set_app_options -name place.legalize.optimize_orientations -value true #允许工具翻转器件的方向,可以减少距离
set_app_options -name place.legalize.stream_place -value true
set_app_options -name place.legalize.stream_effort -value high
set_app_options -name place.legalize.stream_effort_limit -value 10
• Performing Standalone Placement and Legalization
本段主要讲粗布局和布局合法化,先用create_placement和legalize_placement
对应的有一些参数可以配置,
set_app_options -name place.coarse.cong_restruct_ungroup (2020的ICC2中没找到此擦参数)
set_app_options -name place.coarse.cong_restruct_remove_buffers(2020的ICC2中没找到此参数)
set_app_options -name place.coarse.cong_restruct -value on
set_app_options -name place.coarse.cong_restruct_original_strategy -value true
create_placement -timing_driven -congestion -congestion_effort
set_app_options -name place.coarse.cong_restruct_iterations -value 1
set_app_options -name place.coarse.cong_restruct_effort -value medium
• Performing Placement, Optimization, and Legalization With the place_opt Command
place_opt包括6个步骤 initial_place/initial_drc/initial_opto/final_place/final_opto/Legalization
可以指定从哪步开始到哪步结束.
place_opt -from initial_drc
Considering the Impact on Clock Structures During Placement
set_app_options -name place_opt.flow.clock_aware_placement -vaule true
Creating a Temporary Clock Tree for Placement and Optimization
默认是理想的时钟树,可以定义零时的时钟树代替
set_app_options -name place_opt.flow.trial_clock_tree -value true
Optimizing Integrated Clock-Gating Logic
set_app_options -name place_opt.flow.optimize_icgs -value true
Enabling Global Route Based High-Fanout Synthesis
高扇出缓冲树插入
两轮流程:第一轮先按线长优先摆单元,然后临时试跑一次高扇出插缓冲,第二轮基于上一轮布局做时序驱动布局,再用真实布局布线正式做高扇出缓冲插入。
set_app_options -name place_opt.initial_drc.global_route_based -value 1
set_app_options -name place_opt.initial_place.two_pass -value true
Changing the Congestion Effort
set_app_options -name place_opt.congestion.effort -value none
Using of Nondefault Routing Rules for Critical Nets
set_app_options -name place_opt.flow.optimize_ndr -value true
Enabling Layer Optimization
set_app_options -name place_opt.flow.optimize_layers -value true
Enabling Path Optimization
set_app_options -name place_opt.flow.do_path_opt -value true
Performing Concurrent Clock and Data Optimization During the place_opt Command
set_app_options -name place_opt.flow.enable_ccd_useful_skew_max_prepone 150ps
set_app_options -name place_opt.flow.enable_ccd_useful_skew_max_postpone 50ps
这两条命令将弃用
set_app_options -name place_opt.flow.trial_clock_tree -value true
set_app_options -name place_opt.flow.optimize_icgs -value true
set_app_options -name place_opt.flow.enable_ccd -value true
• Using Physical Guidance From the Design Compiler Tool
如标题,用DC生成相应的文件来ICC2,应该不常用,暂时忽略。
• Performing Multibit Banking
为了改善局部布线拥塞,修复时序负裕量,可以将多bit的寄存器组拆分。
几种常用的拆分用法
1.指定单个实例拆分. 2.按时序裕量拆分. 3.按时钟路径组拆分. 4.精细化黑白名单控制
split_multibit reg_gr0 -lib_cells {lib1/MREG2 lib1/MREG2}
split_multibit -slack_threshold -1
split_multibit -path_groups CLKA -slack_threshold -0.5
-exclude_instance xxx:排除某些寄存器,强制不拆分
-cells {xxx}:白名单,只拆分指定列表里的 cell
• Performing Incremental Placement and Optimization Using the refine_opt Command
执行refine_opt分5步,可以选择从哪步开始从哪步结束,另外还可以关闭默认的绕线规则,还可使能layer优化。
| 阶段 | 优化对象 | 核心目的 |
|---|---|---|
| initial_path_opt | 只挪动 FF | 初步优化关键路径时序 |
| inc_place | 微调 STD cell 位置 | 缓解布线拥塞 |
| inc_opt | 门级单元替换 / 重构 | 时序 + 漏电功耗 + 面积优化 |
| final_path_opt | 再次微调关键 cell | 收尾时序收敛 |
| Legalization | 全设计 cell | 修正非法布局位置 |
set_app_options -name refine_opt.flow.optimize_ndr -value true
set_app_options -name refine_opt.flow.optimize_layers -value true
refine_opt -to inc_opt
• Performing Magnet Placement
简单理解就是把 Macro/IO 端口当成磁铁,和它相连的标准单元 STD CELL 被磁力吸附、就近摆放在磁铁周边;缩短连线、改善拥塞 + 优化时序。
magnet_placement C0
magnet_placement C2 -cells {c6 c7 c8}
• Refining Placement
布局精细化微调命令,在原有 cell 摆放基础上,局部 / 全局挪单元、修拥塞、修正非法位置,不做大范围打散重布局;place_opt 是全局粗布局,refine Placement是后置精细化修布局。
refine_placement -coordinates {0 0 2000 3000} # 只对(0 0)到(2000 3000)矩形区域精细化布局
-effort low/medium/high:布局优化力度(默认 medium)
-congestion_effort low/medium/high:拥塞优化力度(默认 medium)
-perturbation_level min/medium/high/max:原有布局扰动幅度(默认 medium)
• Performing Placement and Optimization on Multivoltage Blocks
简单介绍了多电源域的优化,暂时不设计,先不考虑。
• Adding and Removing Tie Cells
add_tie_cells
remove_tie_cells -objects
• Analyzing the Placement and Optimization Results
• Analyzing the Bufferability of Nets
可以分析这条线能不能加buffer,如果不能为什么不能加。
check_bufferability -nets n34 -voltage_area PD1
check_bufferability -driver top_reg1_/Q \
-load top_U1_9/B -hierarchy / -voltage_area PD_TOP
• Reporting Utilization
报告利用率。可以先通过第一条命令设置一些参数,比如不包括哪些cell,包不包括边检等等
create_utilization_configuration -scope block config1 -capacity core_area \
-exclude {hard_blockages soft_blockages}
report_utilization
• Reporting the Placement QoR
具体参数看文档,或者-help即可
report_placement
• Querying and Changing the Placement Status
看具体器件的状态,也可以改变他的状态属性,状态属性都包括unplaced/placed/fixed/legalize_only/locked
get_attribute -objects [get_cells INST1] -name status
set_placement_status fixed [get_cells INST1]
• Analyzing the Placement in the GUI
可以通过GUI看placement的一些状态包括Global Route Congestion Map/Cell Density Map/Pin Density Maps.
• Analyzing the Timing
这里可以先简单报告一下时序,用到的命令如下:
report_timing
report_qor
report_constraints
analyze_design_violations -type setup
• Analyzing the Power
这里可以先简单报告一下功耗,用到的命令如下:
report_power
set_app_options -name power.leakage_mode -value average