ICC2学习笔记之Placement and Optimization

参考资料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
相关推荐
温柔只给梦中人1 小时前
NLP学习:注意力机制
人工智能·学习·自然语言处理
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.06.02 题目:3635. 最早完成陆地和水上游乐设施的时间 II
笔记·算法·leetcode
逐影者3973 小时前
ch592f学习
学习
小满Autumn3 小时前
MVVM Light 架构笔记:定位器、命令、消息与 IoC 实践
笔记·学习·架构·c#·上位机·mvvm
蓝黑墨水3 小时前
动画角色的整个流程
学习
ZK_H4 小时前
MFC学习——简易计算器以及跨应用通信
学习·5g·mfc
kobesdu4 小时前
【ROS2实战笔记-24】ROS2 Launch 实用技巧:条件逻辑与节点动态生成
笔记·ros·slam
小满Autumn5 小时前
CommunityToolkit.Mvvm 架构笔记:现代 MVVM、源生成器与工程化实践
笔记·架构·c#·.net·wpf·mvvm