admin管理员组

文章数量:1529448

整个笔记比较长 建议搜索食用

placement的关键步骤
design setup pre_placement check design & flow requirement setup QoR setup placement & optimizatio CTS

在布局之前 ,需要进行布局准备的检查,一次性的设计和流程的设置,
拥塞,时序,功耗,还有面积的QoR的设置;
最后才是 placement & optimization;

布局优化的命令
place_opt
#执行标准单元的布局和优化
-list_only #列出5个优化阶段
-from #指定由哪一个主阶段开始 默认是initial_place
-to #指定由哪一个主阶段结束 默认是final_opto

默认情况下 place_opt 会执行所有的5个阶段
使用 -from / -to 控制布局流程方便debugging

使得你可以快速的验证每一阶段是否被执行成功;

通过设置application options 可以控制placement的更多的方面;

布局指令的五个阶段 place_opt
  1. initial coarse placement (initial_place)
    执行 buffering aware的时序驱动的布局 和 扫描链的优化
    能预测到插buffer tree的net 针对buffer进行优化
  2. HFN buffering (initial_drc)
    移除buffer tree 执行高扇出的综合 和逻辑DRC的修复
  3. initial optimization(initial_opto)
    执行快速的时序优化
  4. final. placement (final_place)
    执行增量的 和最终的时序驱动和基于全局布线拥塞的布局 以及扫描链的优化
  5. final Optimization(final_opto)
    执行全尺寸的优化和设计的legalizes 合法化;

为什么会有 -from -to 这种 就是因为28nm 以下 row越来越窄,放的单元越来越多, 布局耗费的时间也越来越长,经常是20多个小时, 这种接口就是帮助我们及时发现问题,即时停止,节省时间.

建议的 place_opt的流程

在initial_place | initial_drc 的阶段 分析congestion

如果congestion是不能接受的,需要返回到未布局的设计,(floorplan阶段 或者place 的setup阶段进行调整)
应用一些 congestion-focused 注意拥塞的这种设置选项,然后重新执行 place_opt

当拥塞可接受之后,在initial_opto | final_opto 阶段分析时序,功耗和面积

如果时序 面积 功耗的一些结果不能接受,需要返回到 initial design的阶段
应用 timing-focused power-focused area-focused setup steps 然后重新执行 place_opt

布局之前的设计状态; design status

floorplan之后的 综合是完成了的;

布局是基于最可行的floorplan的设计进行的;
设计的setup 是完成了的;
新的block 是基于 floorplan之后的网表生成的
标准单元可能已经被放置好了; (SPG flow中的粗布局)

布局之前的检查

ICCII 体更大量的检查, 能够在设计的任何阶段执行
使用 get_design_checks 罗列出所有可用的检查;
{routes mid_alignment pre_route_stage legality pre_clock_tree_stage
pre_placement_stage timing mv_design}
粗体标记的检查 是复合检查,它们包含数个小的检查;
在布局之前 运行下面的指令

check_design -check pre_placement_stage
同样建议执行: physical constraint checks 物理约束检查
check_design -check physical_constraints
#对floorplan的objects执行数条检查 包含 layers bounds placement blockage cell instances macros site rows等

check_design 的结果

所有的检查都会打印一个报告 到屏幕上,也会将检查的结果保存到EMS数据库中 (enhanced messaging system)
通过 GUI 打开EMS database 可以获得更多的细节分析结果;
GUI:
Window - Message Browser Window - file -open message database(ctrl + O) -打开位于项目目录下的 check_design.ems文件

placement之前对design 以及 flow 的设置 (setup)
setup for advanced nodes 专为先进节点的设置

先进的技术节点需要更复杂的设置 去控制RC extraction(RC参数提取) placement(布局) legalization(合法化) 以及 via ladders (通孔梯子)
很多设置都是不是可选择的, 不同的工艺节点 都是不一样的;
一条命令 执行 指定工艺的检查和设置

set_technology -node 7
#很多的先进的工艺节点 都已经支持在 set_technology中
#经常会在 物理设计流程的一开始 就是用 set_technology指令;

advanced legalizer 先进的合法化引擎

set_technology 指令 会使用 7nm节点以及其他先进工艺节点的 advance legalizer
这种合法化引擎是专为 先进节点设计的;
原生支持2D规则的合法化,从而能够得到更高的密度;
允许自动的2D规则侦查;

现在advanced legalizer 正在支持更多的技术节点;

选择你的QoR strategy

为了方便使用, 配置ICCII 去满足你的QoR的标准

set_qor_strategy -stage pnr /
    -metric timing
    #除了timing之外 还可以是 leakage power total power
    #你选择 leakage_power 或者 total power 配置这个功耗的优化 附加到时序的优化之上  此时 时序仍然是高优先级的选项
    #而仅选择 timing 则不会多功耗做优化;

pnr stage 配置 布局 CTS 布线 以及优化的应用选项去满足项目标准;
被配置的application options 会显示在屏幕上 并且可以被写到文件中, with -output

为MCMM的优化配置scenarios (场景)

并发的MCMM的优化 需要创建 scenarios (场景)

优化是发生在当前的场景中的,可用的分析的种类:
setup hold
leakage_power dynamic_power
max_transition max_capacitance min_capacitance

在place_opt阶段 hold的分析是被忽略的; 即时他被enable
配置 scenarios 井盖是先于 place_opt 执行的;

配置palce_opt 为SPG flow

如果你的网表是通过 DC-G SPG 综合生成的 那么你在ICCII中最好也是用 SPG 的布局流程;

set_app_options -list {place_opt.flow.do_spg true}

此时place_opt 中的initial_place 和initial_drc 两步 就直接跳过;

综合后的粗布局和HFN/DRC buffering 被用作initial_optimazation的起点,就紧接着做最后的布局和优化;
影响 initial_place 和initial_drc这两个步骤的 option和commands 在使用SPG mode时不会对设计有影响;

标准单元的布局需要通过DEF文件读入:

在DC中 使用write_icc2_files 进行创建 DEF文件;

高扇出综合 port punching (端口穿孔); 做DFT时

高扇出综合以及插buffer 都发生在place_opt的initial_drc阶段;
默认, port punching may add or remove ports at hierarchy boundaries for HF synthesis

为特定的cells 关闭port punching;

set_freeze_ports -data| -clock| -all [get_cells cellA]
自动 均匀分配冗余的单元(??)

在综合后的网表中会包含入spare cells 多余的单元;

包含顶层模块以及子模块
会被ICCII 自动定义;
人工指定: set_attribute [get_flat_cells *SSPARA_REG] spare_cell_mode true

多余的单元会和整齐的标准单元一起放置,会自动的均匀扩散出去;

被 place.coarse.enable_spare_cell_placement 选项所控制 默认是打开的;
当被设置为false时 多余的cells 仍然会被布局,但不是均匀的spread out;

布局是 hierarchy aware 是层次敏感的; 所以spare cell 只会被放置他自己的阶层上;

加入没有存在于网表中的spare cells

如果你的设计没有包含金spare cells 或者你想增加附加的spare cells 你可以在place_opt 之后添加;

add_spare_cells -num_instance 20 \
    -cell_name SPARE_PREFIX_NAME \
    -lib_cell {NOR2 NAND2}

legalize_placement -incremental
set_placement_status legalizer_only \
    [get_flat_cells -filler is_spare_cell]
#该指令 会长20个所列的cells 平均的扩散到整个core area中 这些单元像一个数组一样 摆放;

移除掉不需要的ideal networks

理想的线网 包含一些高扇出的nets (像 set/reset enable select) 为了防止他们在布局期间被插buffer 而且此时的buffering并不是需要的;

能够使用report-ideal_network 去报告所有的ideal_network
移除掉所有的ideal network 约束 允许布局期间进行HFN buffering

remove_ideal_network -all
lib cell purpose

每个lib cell都有四个 purpose; cell会在不同的优化目的下会用;
每一个库单元都能被限制为一些优化任务使用的特定单元;
attribute : valid_purposes
以下的lib cell purpose 是建议使用的:

optimization setup/hold power 逻辑设计规则的优化
CTS 时钟树综合
hold purpose behave like optimization (习惯是只用 optimization)
power的目的优化是可配置的 但是并不会被工具使用???

如果原始的cell在liberty library里面的属性 dont_use = true 那么no purpose are set 没有设置目的

限制lib cell 的usage (用处)

你可能会想要限制一些特定单元的用处,在CTS期间或者其他逻辑优化的期间. 基于时序 拥塞 power 的一些考虑 一些单元不建议使用;

No big drivers ( EM 或者串扰的问题) 一些cell的驱动能力比较大 速度比快 但是功耗比较大; 不到万不得已不会使用;
极低电压库中No high leakage register
Only certain buffers for CTS

set_lib_cell_purpose -include none \
    [get_lib_cells "*/*BUF_X64* */*REG_ulvt*"]
set_lib_cell_purpose -exclude cts [get_lib_cells]
set_lib_cell_purpose -include cts [get_lib_cells */NBUF*]

#去查看当前的libcell的purpose setting
report_lib_cells -columns {name valid_purpose} \
    -object [get_lib_cells "*/*BUFX2*"]

EM 电迁移问题
IC内部一般采用金属薄膜来传导工作电流——称为互连引线。随着芯片集成度的提高,互连引线变得更细更薄,电流密度越来越大。当电子流过金属线时,将同金属线的原子发生碰撞,碰撞导致金属的电阻增大,并且会发热。但是在一定时间内如果有大量的电子(大电流密度)同金属原子发生碰撞,金属原子就会沿着电子的方向进行流动,这种现象就是电迁移(EM)。
电迁移能使IC中的互连引线在工作过程中产生断路或短路,从而引起IC失效。其表现为:
① 在互连引线中形成空洞,增加了电阻;
② 空洞长大,最终贯穿互连引线,形成断路;
③ 在互连引线中形成晶须,造成层间短路:
④ 晶须长大,穿透钝化层,产生腐蚀源。
为了避免电迁移效应,可以增加连线的宽度,以保证通过连线的电流密度小于一个确定的值。
通常EM效应引起的问题是电源网格电阻增加,从而导致IR降增加,从而影响电路时序。

布线前的power optimization

默认情况下 ICCII不会执行功耗的优化;
可用的功耗优化的类型:
leakage
dynamic
total

set_app_options -list \
{opt.power.mode none | leakage | dynamic | total}
#功耗优化尽在当前的scenarios执行,
#为当前的场景打开total power 的优化
set_scenario_status {func.tt_60c} \
    -leakage_power true -dynamic_power true
leakage power 的优化

速度快 更高的 leakage power 阈值电压更低(漏电流比较大 漏功耗就比较大)
速度慢 意味着更低的leakage power 更高的电压
我们需要在 power和timing之间 做一个 tradeoff (折中)
漏功耗成为全局优化代价的一部分;
多电压 多leakage的库此时应该设置成可用的状态

power optimization的两种模式 就是leakage 和total

set_app_options -name opt.power.mode -value leakage | total
# 漏功耗的计算依赖于输入的状态
#在理想状态下 ,mos关断 是没有电流产生的,但是 漏\源 与衬底之间是两个PN结, 即时 漏和源 之间没有沟道, 还是会有反向的饱和电流;
  
dynamic power 的优化
#在当优化选项设置成 dynamic 或者 total时会执行
set_app_options -list {opt.power.mode dynamic | total}
#相对于 DRC和timing来说 其优先级还是比较低的
Total power 的优化

在高级的工艺节点中, 在一个电压域域中 leakage 和 dynamic power 有不同的变化趋势

power 的计算需要 switching activity 开关的活动率

power 的精确计算需要精确的翻转率, 需要一个SAIF文件 也就是 switching activity interchange formate (file)

set_scenario_status -dynamic_power true -leakage_power true func.tt_60c
read_saif design_sim.saif -scenario func.tt_60c
#指定的scenario下 读入saif文件 来计算当前的功耗;
#还可以选择人工设置primary input 以及黑盒输出的 翻转信息;
current_scenario func.tt_60c
set_switching_activity [get_ports "rst scan_en"] \
    -toggle_rate 0.0 -static_probability 0.0
set_switching_activity [get_ports a] \
    -toggle_rate 0.02 -static_probability 0.7

没有特殊声明的使用默认的switching_activity
switching activity 会自动繁衍至整个设计;

通过set_switching_activity 设置的局限性

主要的控制信号 (reset enable) 在使用set_switching_activity 时 不会继承默认的switching activity values

由于这些输入是典型的remain static ,对于逻辑的动态功耗的计算在这些静态信号的作用下会十分悲观的高;

继承sequential output时序输出的switching activity 翻转率趋向于0;

使得对于downstream 逻辑的动态功耗计算会十分乐观的低;

infer_switching_activity 能够对控制信号应用一个合适的static value ,以及给时序输出一个更好的更合适的toggle rate;

inter_switching_activity

定义必要的节点 去推算翻转率;

对于inter_switching_activity 的建议的设置
  1. 使用create_clock 定义时钟的activity
  2. 使用set_switching_activity 设置哪些已知需要的activity的所有的ports
  3. 使用inter_switching_activity 设置所有没有声明的essential points EPs
set_scenario_status -dynamic true func.tt_60c
inter_switching_activity -scenarios func.tt_60c \
        -sci_based all -apply -output inferred_activity,tcl
        # -sci_based allowed values : end non_sci all
switching activity 覆盖率’

使用report_activity -driver 去确保 essential point有接近100% 的switching activity 的覆盖率;
报告会将activity 分成以下几类
simulated
annotated
derived
calculated
default

使用-verbose 选项 可以看到每一类的详细的内容;

multibit Banking

根据一些条件 ,将单bit 的寄存器 merge成多比特的寄存器;
这些条件包括:

  1. 更小的面积/功耗 由于共享晶体管以及优化过的晶体管级的layout;
  2. 减少总的时钟网络的长度.

integrated multibit banking 集成的多比特打包

multibit banking /debanking 被集成到了 place_opt 指令中,

banking (打包)会在initial_opto阶段执行

自动识别单比特单元组,基于物理上的临近,并用多比特单元替代,在不影响时序的情况下去减少dynamic power

debanking (解组) 在final_opto 阶段被执行 会恢复关键路径(critical path)的bit baking 去恢复时序上的满足;

#控制 multibit  banking的option
place_opt.flow.enable_multibit_banking
place_opt.flow.enable_multibit_debanking
#两者默认都是false
配置 multibit banking
set_multibit_options 
 -exclude  #指定一些单元 避免被打包
 -exclude_library_cells #指定特定的库单元 避免被打包
 -slack_threshold  # 指定一个slack的阈值 那些小于这个阈值的register 不会被打包
追踪 设计的transformation(变化);

design transformation 会造成逻辑定价性检查的问题 而且并不是自动捕获的;

多bit banking 的变化
name changes(设计中object的名字的改变)

在你设计的一开始,所以打开 SVF 追踪.

set_svf MY_SVF.svf

创建svf文件 捕获从此刻开始的设计变化;
svf文件可以被formality文件作比较 帮助逻辑等价性的检查;

placement attractions 布局吸引

就是将实现同一逻辑功能的一组单元或者module 放在一起; 能够避免 module的撕裂;

什么时候使用 placement attractions

仅仅在他们需要达到一个比较极限的目标结果, 比如提高时序或者拥塞的情况; 去添加attraction 的constrains
为太多的modules 提阿奴家attraction 会对其他module的布局产生负面影响;

attraction 仅仅会在 initial_place 阶段工作效果良好, 在incriminatal placement 则不行;

所以当你添加新的attraction时 需要重新开始placement;

placement attraction的用法 和建议;

placement attraction 对于有超大规模cells 或者module的设计是非常合适的; 使用bounds 应用于一小组的cells;

create_placement_attraction -name risc_module \
-effort medium [get_cells I_RISC_CORE]
place_opt 

在布局组中的cells 会互相靠在一起,但是这个布局组能够被放置在core内的任何位置;或者说是 floating的;
根据需要,使用 -region选项 可以指定一个点 一个边界 或者一个多边形区域为cell attract的区域

专注于拥塞的设置步骤 (QOR相关)

在执行完 place_opt 之后分析拥塞和cell/pin的密度
执行以下的步骤 去提高当前设计的可布线性 ;

增加 布局和拥塞的 effort level
打开 基于布线的全局 HFS 和 DRC 的fixing
应用 keepout margins 以及 布局的blockages
打开 pin access checking 和优化; 基于pin density的布局优化
打开 cell expansion using GR congestion maps
执行 拥塞驱动的 restructuring 重组;

全局布线拥塞分析

在执行任何布局指令之后 首先就要分析拥塞;

如果追求更少的不拘时间,建议使用低的effort level 默认是medium;
结果更趋向于 悲观;

route_global -congestion_map_only true -effort_level low

如果拥塞情况是bordering (含糊不清的) 使用更高的effort level重新分析

提高 placement /congestion的 effort_level

提高congestion的 effort_level(默认是medium) 能够减轻拥塞的情况, 代价是运行时间 可能还会对时序造成一定的影响;

关于 在final_place 和在 initia_place 阶段什么时候使用 two_pass placement;

提高 final_place 的effort_level 可能会减轻拥塞 也可能提高timing;

set_app_options -name place_opt.place.congestion_effort -value high
set_app_options -name place_opt.final_place.effort -value high
global route_based HFS and DRC fixing (GR-OPTO)

应该是在 global route阶段;

对于宏单元主导的设计, GR-opto 能够减少拥塞提高可布线率;

global_routing 被用来为高扇出和 DRC_violating的线网提高 buffer 的布局; 为穿过大量channels 的线网减少拥塞;
时序分析依然是基于 virtual route的;

利于 initial_drc 步骤; (是为no_SPG flow 准备的)

set_app_options -name place_opt.initial_drc.global_route_based -value true

keepout margins 和 placement blockage

应用新的额 或者修改已经存在的 keepout margins 以及 placement blockage;

cell pin 的density 分析 (密度分析)

DRC 中会规定 单位面积内的标注的单元的密度

ICC II提供了强大的工具去分析 cell/pin 的density;
帮助我们进一步了理解拥塞产生的原因;

是否是高的cell的density 导致了 congestion;

在优化设计的时序时 placer (布局器) 可能会创建高密度的区域,这可能会导致布线时的拥塞;

通过查看cell density的map 分析原因 看是否有 高的cell density 与congestion的 Hotspots coincide(重合 同时发生);
可尝试通过减少cell density 来解决拥塞的问题;

使用 部分的blockage 去限制cell 的density;
#定义一个区域 的最大 的利用率为40%
create_placement_blockage -boundary {{10 20}{100 160}}  \
    -type partial -blocked_percentage 60
#定义一个利用率30 金永续buffer 和反相器的区域\
create_placement_blockage -boundary {{10 20}{100 160}}  \
    -type all_buffer_only -blocked_percentage 70
#定义一个利用率80 不允许寄存器的区域
create_placement_blockage -boundary {{10 20}{100 160}}  \
    -type register -blocked_percentage 20
优化 pin access

打开 pin density awareness 在粗布局期间
ICC II 会自动基于设计计算最大的pindensity 并在布局期间考虑pin density的问题;

place.coarse.pin_density_aware

在 legalization 期间 打开 pin optimization 选项;
通过redistribute the cells (重新分配单元) 提高 高pin density区域的可布线性;

place.legalize.optimize_pin_access_using_cell_spacing true

修改以上option只会影响 classic legalizer(经典规范器)的工作
对于 advanced legalizer 高级布线器 他默认执行高级的pin access optimization;

拥塞模型增强

在新版本的ICC II 中两个布局器的增强 通过增强布线模型 以及 cell expansion 的行为 优化了全局的拥塞情况;

  1. soft congestion map 的支持帮助 情况严重的设计 使用layer promotion (层推广) 以及 soft NDRs 去达到QoR的目标;
  2. 考虑到源布线方向的不足, 双向的cell expansion(单元扩展) 帮助减少 低层的拥塞问题;
支持 soft congestion map 的布线器

GR congestion map 包含了布线资源的软需求; soft demands

包括 用户添加的 soft NDRs ,layer optimization 的需要
和 布线的DRCs 一起 都会影响到最后的 detail routing

通过以下option 打开 soft congestion

route.global.export_soft_congestion_maps

一旦打开 布局就会使用GR maps执行 cell expansion 为布线资源创建足够的空间;

软资源需要给定更低的优先级;
一旦打开选项 查看 PLACE-076的information;

双向的cell expansion (单元扩展)

cell expansion : 布局器 会扩张cell的面积 创建空的区域 为后期附加布线资源留出空间;

在18.06 强调更低的布线层 然后是pin 的连接 最后是更好的 GR DR 的关系; 但是金仅仅执行 水平的扩展 ;

现在的布线器,可以对单元进行双向的扩展;

#通过以下 option打开双向扩展的选项
place.coarse.congestion_expansion_direction 默认是 horizontal
# 使用 both 打开双向扩展
#对于 有严重的congestion 问题的block 是有帮助的 特别是水平布线的层
#并不建议对所有的设计都使用双向的扩展;
#而且 竖直方向上的扩展优化代价很大 因为单元需要snap to the row(附着在row上)

congestion-driven 的重构 (restructuring) (CDR)

拥有复杂AOI/OAI 逻辑结构的设计,会造成很多线网的交叉,因此会造成内核区域拥塞的Hotspots;

CDR 会标记那些被输入引脚交叉的线网 tangled nets;

CDR 的设置

CDR默认就是打开的;

palce.coarse.cong_restruct 
#default 是打开的;
#默认 重新布局和重新布线的重复 会在 place_opt 的initial_palce 阶段发生;
#可以通过选项 提高重复的次数 default 是1 ;
place.coarse.cong_restruct_iteration value 1-3
### 控制 CDR 的effort level
place.coarse.cong_restruct_effort value default medium;

CDR 在SPG flow下

当使用SPG place_opt 时 CDR是不支持的; 在initial_place 阶段会跳过 CDR的执行;

如果你仍然想要 在SPG flow 中使用CDR 使用以下的步骤:

set_app_options -name place_opt.flow.do_spg -value true
set_app_options -name place.coarse.cong_restruct_iterations -value 2

create_placement
set_app_options -name palce_opt.flow.do_spg -value false
place_opt -from initial_drc
聚焦时序时序的设置(QoR相关)

一旦 拥塞的额情况可以接受了 接下来就是分析时序和逻辑DRCs
执行以下的 设置步骤 去提高时序;

使用design fusion
自动的时序控制;
buffering aware 的布局
打开 two-pass 的布局流程
控制单元的最大密度
stream legalization
打开 ICG的优化

timing 和DRC 的QoR报告
# 使用
report_qor -summary
# 得到一个 时序违例的总的报告 以及 逻辑DRC违例的数量
#使用
report_timing
#得到违例路径的详细信息
# 使用
report_constraint -all
#得到 逻辑DRC违例的细节信息;

获得综合的design metrics
create_qor_snapshot -name place_opt
report_qor_snapshot -display 

深入分析 design metrics

query_qor_snapshot -name place_opt -display
#能够生成 QoR 的分析表;
#能够在GUI上通过点击entries 获得更多的信息;
#应用筛选
#选择路径 并在版图上高亮显示
Design Fusion 逻辑重构: 针对timing area power;

设计融合???
design fusion 使用 ICC II的综合引擎 执行设计逻辑重构,确保面积 时序 功耗都能得到最好的结果;

逻辑冲过 是在 palce_opt 的final_opto 以及 clock_opt 的final_opto 有效的 ;
期望能够看到 时序和面积的提高,其次 是leakage power 的提高

为了面积和时序的逻辑重构 logic restructuring

power相关的 logic restructuring;

design fusion 面积时序相关的逻辑重构;
#如何打开 重构的开关
optmon.advanced_logic_restructuring_mode -value none(默认)
#values 可以是 none area timing power area_timing  timing_power 
#当打开power 的restructuring 也会使 area 的restructuring 有效;
重构-- 线网长度的代价

默认, 重构的动作在向往疮毒增加的情况下是会被拒绝的;可以通过下面的选项修改;

optmon.advances_logic_restructuring_wirelength_costing -value high(默认)
#当布线的调准比较小的时候 可以应用 medium or none 的value 去火的更好的逻辑重构的结果;
#medium :  更多的面积缩小, 线网长度增加的限制是放松的;
#none : 最大的面积的缩小,对于线网长度的增加是没有限制的;
out of the box placement setting

默认布线器的设置会被配置成最佳的 out_of_the_box 的布局结果

打开自动的密度控制

版本2019.03及以后的版本 会执行自动的密度控制,通过基于 core利用率和工艺的调整设置实现更动态的控制;

place.coarse.enhance_auto_density_control -value true #默认是关闭的
two pass placement flow

对于宏单元主导的设计,打开 two-pass initial placement,附加到 GR-opto 能够显著的提高时序 和拥塞的情况;
在 two-pass flow 中 initial_place 会执行以下步骤:

  1. buffering aware 的时序驱动的 粗布局
  2. 实验性的 HFNS
  3. 时序和拥塞驱动的 布局

实验性的 HFNS的结果是被放弃的;

剩下的place_opto 的步骤仍然是没有改变的;
仅仅影响了 initial_place 的动作, 仅仅会应用于 非SPG 的flow

set_app_options -list {place_opt.initial_drc.global_route_based true \
place_opt.initial_place.two_pass true} 
legalization 最小化large displacement(大的移动);

也就是说在legalization 期间 单元有可能被移动到很远的位置 会影响到时序;

stream legalization 的目的就是最小化这个移动;

用多步小的移动去代替大的移动;

如何打开 stream legalization;
#application option
place.legalize.stream_palce -value false
#进一步控制 effort level
place.legalize.stream_effort -value low
# 限制运行时间
place.legalize.stream_effort_limit -value 10
优化时钟门使能逻辑(pre-CTS相关)

在CTS 之前, 默认, ICG clock pin 回合寄存器时钟引脚声明相同的latency;
这会造成:

使能逻辑的优化 会是乐观的;
可能会在CTS之后造成 ICG 时序的违例;

一般的解决方法:

应用修改的ICG clock pin的latencies
应用 路径裕量 path mergins 对ICG enable pin

这些方法 的缺点:

消耗时间且易于产生错误;
应用的值是静态的;

整个时钟树的dynamic power 会占到真个设计dynamic power 的30% -40%;所以就加了 ICG 就是 clock的gate; 门控时钟;

集成clock gate latency estimation

在place_opt 期间 集成时钟门的延迟估计是默认打开的;

估计的结果会集合到 pre_CTS的优化流程中;
为了确保 clock latency的精确计算 在每个关键步骤都会进行更新; such as:
placement
multibit banking
clock gate optimization

允许对于使能控制寄存器以及组合罗的更精确的 数据路径 更有用的skew的优化

latency的估计 - 前提 (prerequisites)

为了 使用CTS 的设置做 latency的估计 需要在palce_opt之前做以下设置:
clock NDRs (set_clock_routing_rule)
CTS的 buffer和inverter 的库单元的指定 (set_lib_cell_purpose -include cts)

不要使用trial clock tree 或者 optimize-ICG 的特性 它会关闭 ICG latency的估计;

reset_app_options {place_opt.flow.optimize_icgs
place_opt.flow.trial_clock_tree}
 
honoring 用户声明的latency

在特殊的环境(circumstance)中, 比如 一个ICG驱动一个clock mesh 或者一个还没有创建的H-tree,你可能想去为ICG声明一个clock latency,并且被工具优先使用

report 估计的latency
功耗 或者面积专注的设置步骤

分析功耗和面积
执行以下步骤 减少功耗和面积的使用;

提高功耗和面积的优化 effort_level
打开 布线前的 layer optimization
打开 布线驱动的extraction (RDE)
打开 低功耗的布局选项

power analysis 功耗分析& area analysis

使用report_power
report_power_calculation

使用 report_design 查看面积

动态功耗驱动的 placement ;

通过移动单元减少 高翻转信号线的长度 来减少动态功耗;
他在布局的所有步骤中都是可用的 包括initial placement;

读入 SAUF文件会得到更好的优化结果;
详情看之前的SAIF 文件是如何读入 及设置的

pre-route 和post-route的相互关系;

place_opt 会使用两层的虚拟布线 去计算线网的长度;
默认 使用的 h/Vlayer 的平均 RC

但是先进节点在层与层之间存在很大 的RC的变化,而且预测需要的via 也是困难的;

会造成 post -route的结果和pre-route的机构相差很大; miscorrelation
两个技术帮助我们去解决 miscorrelation
layer promotion : assign critical nets to higher less resistive layer
route driven extraction (RDE) : 基于当前的global routing data 为VR的nets 计算一个静态模型 ;

pre_route layer optimization

在final-opto阶段自动为 timing-critical的线网 分配使用更小的layer 约束的更高层的layers;
这个特性是默认常开的;

减少相同路径所需要的buffer的数量;
也会将事先 promoted 升层的线网 demote 到更低的层次中;

一旦为了得到更好的buffering的结果 去promoted /demoted 线网都会被 rebuffering;

最小化的layer constraints 会被带到之后的 post-route 优化;而且可以使用 write-script 输出出来;

RDE for preroute optimization

RDE 在已经布局好的设计上使用global routing 去获取以下 的信息:

超过 max/min layer usage 的详细的层的占用率信息
GR 拓扑 和 长度
via 的电阻
单元 pin 的形状;

一旦信息获取到之后 所有的virtual route 会使用 GR 的RC模型去做RC 参数的提取;
确保当前设计的更近的寄生参数 和时序的关系
在相同的 post-route timing QoR 的情况下 就能得到面积和功耗上功耗额结果;
也并不会提高整个流程的运行时间;

RDE 在预布线的流程中;

在整个pre-route 的流程中 RDE 会发生两次;
在 place-opt 和clock-opt 的一开始
RDE 的信息会随着设计个保存,会在子优化中重复使用;
RDE在16nm及以下工艺中是默认打开的

#查看以下优化选项
optmon.enable_rde

本文标签: ICCIIplacement