此笔记自synopsys官方 customer education service 的workshop,主要为ICC II workshop的中翻;
此教程主要是block级的布局布线 一些细节 包括NDM库的创建, IO pad的floorplan ,以及PNS(Power net 综合)都没有详细描述。
Overflow
ICC2 block级的布局布线的flow
- design & timing setup
- floorplan
- placement
- CTS
- routing
- 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中:
- 定义 block 的size和shape
- 放置 voltage area 和宏单元
- 放置 IO pins
- 应用布局的 blockage
- 创建 power网络
- 输出保存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
- 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;