ICC II setup&floorplan

24 篇文章 97 订阅

此笔记自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;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺脆兵兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值