ICC II setup&floorplan

  • Post author:
  • Post category:其他


此笔记自synopsys官方 customer education service 的workshop,主要为ICC II workshop的中翻;

此教程主要是block级的布局布线 一些细节 包括NDM库的创建, IO pad的floorplan ,以及PNS(Power net 综合)都没有详细描述。



Overflow



ICC2 block级的布局布线的flow

  1. design & timing setup
  2. floorplan
  3. placement
  4. CTS
  5. routing
  6. top-level的implementation signoff DRC fill and ECO ;



how to access RM

reference methodology script 参考流程脚本 类似于ICC里的LCMR;

generate_rm -rm_script JumpStart_2.0 -output ./ \
-node ,N-foundry <F>

RM 分为 full RM 和 JumpStart 两大类;



F4调出 Task assistant



F7调出 console



setup

get_flat_cells
#返回所有的leaf_cells  
get_cells -within {{0 0}{10 10}}
#可以在区域内查找
list_attributes -application -class cell
#报告目标的属性
report_attributes -application [get_selection]
#报告的属性信息的type可以是一个collection,说明自己的属性还有子属性
#使用-compact 选项 提高长目标name的可读性;



允许级联的属性

一些object的属性有sub_attribute是

这被称作级联属性

比如: layer的属性中的shape 他作为一个object 也是有属性的.

如何生成 collection attribute的报告:

report_attributes  -application \
[get_attributes [get_selection] layer]

#在report_attributes 里面 嵌套get_attributes 来实现看属性的属性的目的



block 和设计 库

block 是设计信息的容器

一个设计库 存储blocks 和其他的library-level 库级的数据存储在一起, 比如工艺库信息;

#创建block for verilog
create_lib
read_verilog
...
save_block / save_lib
close lib
## 打开已经存在的block
open_lib
open_block


保存设计库和block

在每一步关键的design_phase之后 都保存设计 是一个很好的习惯;

使用不同的block label 标记不同阶段的block

save_block -as ORCA/init_design

保存设计库到硬盘, 如果事先已经执行了 save_lib ,将block保存成一个新的名字;

默认 save_block -as 会保存block的copy 到硬盘,但没有改变内存中 block的名字.

相同名字但不同lable的block是独立的.



copy then saving

使用以下的方法 以一个新的名字创建一个block,然后再优化之后将它保存。

open_lib ORCA_LIB.dlib
copy_block -from ORCA/init_design \
    -to ORCA/place_opt
   
current_block ORCA/place_opt
...
place_opt
...
save_block
exit

copy_block 将block copy到内存中;

如果将 design.on_operation 改为 true 就能将block的设计全程都会储存在disk中;



application options

application options 控制ICCII命令的行为和features;

例如:

place_opt.flow.do_spg

控制 place_opt 是否执行 SPG的布局

application option是使用下面的命名规则

category.sub_category.option_name



找到 然后 报告 application options

如果你想找到某个 指定engine的application options,

使用

report_app_options 
get_app_options
#时序相关的application options 关键词会以time开头
#报告所有的timing_related app_options 
report_app_options time.*
#列出所有非默认值的application options
report_app_options -non_default
#获取所有修改过的application options 写入到脚本中
write_script -include app_options



设置一个application option的值

set_app_options -name time.remove_clock_reconvergence_pessimism \
-value true
#convergence 集合 集中
#pessimism 悲观主义

set_app_options -list {
time.remove_clock_reconvergence_pessimism true
time.aocvm_enable_analysis ture
}

get_app_option_value -name \ time.remove_clock_reconvergence_pessimism
true

也可以使用 GUI界面

在 file – application options

输入指令 查看修改其app_options



scope of application options 选项的适用范围

每一个app_options都有一个系统默认的值

application options 有一个要么block级的应用范围,或者global级的范围;

这个应用范围是无法被用户修改的;

通过report_app_options 查看 app_options的scope的信息,还有其他信息;

只有block级的值会跟随block 一起被保存;

source选项 展示的是这个option 是在哪个脚本中设置的;



block 级的应用选项

block 级的application options 应用于 当前的block;也会和block一起保存下来;

block级的应用选项的值 会覆盖掉 系统的默认值;

可以报告 那些block级的发生改变的application options

report_app_options -non_default -block [current_block]

不推荐用 user_default value 覆盖掉 系统默认的值 system_default ;

set_app_options -as_user_default -name

更改这种user_defulat的值 没有实际的意义,并不会随着block而保存, 所以是不建议的;



全局的 应用选项;

全局的应用选项 应用于此session所有的加载的block中,并不会和block一起保存下来;

#global 的value 应用
set_app_options -list \ -name
#能够在block打开之前 设置
global value 会覆盖掉系统默认的value

报告那些被修改的 global的app options
report_app_options -non_default -global

包含 global application options的设置 在工具启动之前 就通过source tcl文件就设置好 是一个很好的习惯;

>> 是update > 是重定向 rederict



floorplan



overview

通过RTL DC默认的floorplan的综合后的网表 输入到ICC中:

  1. 定义 block 的size和shape
  2. 放置 voltage area 和宏单元
  3. 放置 IO pins
  4. 应用布局的 blockage
  5. 创建 power网络
  6. 输出保存floorplan



创建 初始化floorplan

定义标准单元的 placement site array 在core的区域里面;

支持多样的core的形状:

rectanglar

L形

T形

U形

Custom

flip first row 啥意思?

flip 翻转

#tcl不会写 不用怕 用gui生成也是不错的
initialize_floorplan  -side_size_control ratio -shape U -side_ratio{ 3 1 2 2 1 2} -core_offset {40} -core_utilization 0.7 -aspect_ratio 1

在这里插入图片描述



创建 VAs (voltage areas) for MV designs

ICCII会自动创建一个voltage area 叫做 DEFAULT_VA ,是根据UPF定义的顶层模块的 power domain 来创建的.

你需要自己创建 voltage areas 为所有的其他UPF power domains ,在布局之前,除非occurs using shape_blocks.

create_voltage_area -power_domains PD1 \
-region {{377 377} {215 377}{215 485}
{404 485}{404 215}{377 215}}

create_voltage_area -power_domains PD2 \
-region {{215 215} {350 350}}



自动 VA 的创建 shape blocks

自动的place and shape VA 使用:

shape_blocks

VA 并不需要在shape_blocks之前创建

你可以定义一个”hard keepout margin” (called guard band 警戒带) 在这个电压域周围;

没有 cell是 包括 LS ISO 能够被放置在guard band margin之内;

set_shaping_options -guard_band_size 10



place Macros and standard cells

在floorplan阶段 进行标准单元和宏单元的 coarse placement

create_placement -floorplan -congestion



配置 宏单元和标准单元的布局

布局可以被 plan.place.* 以及 plan.macro.* 这些application options 进行配置

一般一开始默认即可.

默认相同层次相同size的宏单元会自动编组,plan.macro.auto_macro_array*控制

宏单元之间的channels 会根据他们pin 的多少自动进行调整

soft placement blockage会自动应用在细长的宏单元的channel中;



更详细的 宏单元的布局约束

在需要的情况下 可以查阅以下命令的 man page

set_macro_constraints

set_macro_relative_location

create_macro_array

create_macro_relative_location_placement



使用Data flow flylines (DFF) 分析宏单元的布局

DFF允许使用 netlist tracing探索网表的链接 主要是宏单元之间的链接;

flylines 能够被配置可以穿过多层级的组合逻辑门和寄存器;

它允许在普通的 线网连接之前分析单元之间的连接关系;

但并不会展示终点在寄存器的连接;



register tracing

选择一个或多个起点object(宏单元或者 非时钟的输入port) 去查看和一级或者多级寄存器的连接关系 以及直接间接连接到其他的宏单元或者输出的ports;

flylines 仅仅展示连接到寄存器的链接,没有展示组合逻辑的连接;

建议作为一个 debug的技巧 在place_opt 之后;



Place IO pins

三种pin constraints

block pin

individual pin

bundle pin

set_block_pin_constraints -self -allowed_layers "M3 M4" \
-sides "1 2 3" \ -exclued_sides "4 5 6"
create_pin_constraint -type individual -ports clk ...

place_pins -self



power planning challenges 电源规划的挑战

1.数字逻辑和模拟逻辑的混合需要更复杂的 core rings

2.很多设计有多个电压域

每一个电压域都需要独一无二的 mesh structure;

3.special P/G patterns



pattern_ based基于模式的PNS 电源网络综合

1.定义PG regions

2.定义模式 : structure 结构

定义 金属层 间距 宽度等属性;

3.定义strategy 策略: P/G 拓扑

为指定的PG region voltage area 或者bounds 以及指定的 P/G nets 应用指定的pattern

根据floorplan进行灵活的调整 没有固定的coordinates

  1. compile power network



分析 全局的布线拥塞情况

route_global -floorplan true -congestion_map_only true   

在这里插入图片描述



拥塞潜伏在宏单元的周围

标准单元的布线 经常在靠近引脚丛以及红单元的角落 比较困难;

解决办法:

在宏单元的周围 应用布局的的blockage;

要注意默认情况下 宏单元的布局之后会在其周围存在 soft placement的blockage;



应用 padding 在宏单元的边界;

keepout_mergins 能帮助减少 宏单元pin周围的拥塞;

create_keepout_margin -type hard -outer {15 0 18 0} RAM5



write out the floorplan for ICCII and FC

在输出floorplan之前 需要将已经放置好的macro cell fix住

set_fixed_objects [get_flat_cells -filter "is_hard_macro"]
write_floorplan -output ORCA_TOP.fp \
-net_types {power ground} -include_physical_status {fixed locked}
#输出的文件夹 ORCA_TOP.fp 会包含以下文件:
floorplan.tcl #main file 会source 下面两个文件
fp.tcl #voltage areas routing blockage  hard macro的信息
floorplan.def #def  layer standard cell的位置
#可以在之后的ICC IIsession中使用
source ORCA_TOP.fp/floorplan.tcl



write out floorplan information for DC-G 输出floorplan信息给DC

从ICC输出floorplan信息对于 DC-G来说是十分必要的;

write_floorplan -formate icc -output ORCA_TOP.fp.dc \
-net_type {power ground} \
-include_physical_status {fixed locked}
#在DC中加载floorplan
create_net -power VDD
create_net -ground VSS
read_floorplan ORCA_TOP.fp.dc/floorplan.tcl



在布局之前 带着ICC II的floorplan 再综合一遍;

带着ICCII 提供的floorplan再次用DC进行综合 得到一个对布局有更好优化的网表.

在综合时 ,使用SPG flow (Synopsys physical guidance flow) 同样为ICC II 提供 coarse placement;

#在DC中
write_icc2_files  

DC spg flow吐出的这个floorplan 就可以作为ICC II placement的开始



layout VS FRAM views

frame view包含 布局布线的最小信息,输入输出,电源地,以及他的size;



版权声明:本文为weixin_41464428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。