floorplan 的那些坑

写在开头:本博客完全是为了记录自己做项目的坑,希望对大家有帮助,至于理论的知识还是请大家移步到官网哈~ 谢谢~

目录

1. pad 的摆放

1.1 读入pad.tcl

1.1.1基本的语句

1.1.2 pad 方向问题

1.1.3 io cut

1.1.4 Corner pad

2. macro的摆放

3. 电源网络

3.0 power plan

3.1 macro 的 power ring

3.2 PG strap

3.3 std cell 的 power rail

3.4 power ring与macro相连

3.5 检查

3.6 PG strap 打不满的解决方法

1. pad的摆放

1.1读入pad.tcl

你要是和我一样自己去手动摆放,那你一定是个小可爱,还傻乎乎的,哈哈~
首先create_floorplan 之后工具会默认给你摆放pad,但是因为项目要求,考虑IP以及对于pad的位置关系,肯定是需要重新摆放的。吐出原始的pad_side.tcl 我们对其进行修改即可。

1.1.1基本的语句:

set_pad_physical_constraints -pad_name u1_cornerpad         -side 1  -order 1


参考上图的side以及order。其中padname是pad的例化名,不是库里面的名字
你以为这就完了?(并没有,哭辽~~)

1.1.2 pad 方向问题

从版图上看有可能会出现pad的方向问题,正确的pad 的数据port应该朝core内,如下图,有关修改pad方向命令如下:
set_pad_physical_constraints -pad_name PBSUDL8RA (库里面的名字)-lib_cell_orientation {S S S S}
至于怎么旋转大家可以man一下这命令
有的公司的工艺库不是很好,比如宏力的Corner pad 以及filler pad,ICC 工具没法识别,这时需要将.lef文件中CLASS这个修改为Corner filler,然后重新生成物理库才可以。

1.1.3 io cut

在pad_side.tcl里面有io cut ,这个是模拟pad 和数字pad之间的分割pad。
io cut 在综合之后的网表里面是没有的,需要create

create_cell {u1_io_cut u2_io_cut u3_io_cut u4_io_cut} PDIODE8R

但是这句话不能写在pad_side.tcl里面,因为

read_pin_pad_physical_constraints ../scripts/usr_scripts/AAA_pad_side.tcl

这个命令不识别 create_cell ,所以可以加在floorplan里面。
create 好之后就可以在AAA_pad_side.tcl 加入其位置信息了

1.1.4 Corner pad

corner pad create_cell {u1_cornerpad u2_cornerpad u3_cornerpad u4_cornerpad} PCORNERR

同样上面的问题,不再赘述

1.2 pad filler

首先插入模拟pad filler
要插入某个区域使用:

insert_pad_filler -cell $pad_filler_A -bounding_box {{0 0} {363 199}}

fix住模拟pad filler(在图形界面操作)
插入数字 pad filler(此时不需要选中区域)

2. macro的摆放

首先有以下几个原则:
1.macro尽量在core四周摆放
2.macro的pin的方向,尽量不要挡住port 的布线
3.macro 之间要有margin,并且设置place blockage
4.尽量让STD cell 的区域是完整的,不要有窄沟道
5.可以让工具自动摆一个作为参考:
placement——place macro and standard cells
6.善于利用 flylines hierarchy等工具,查看他们的逻辑连接关系

3. 电源网络

3.0 power plan

1.了解您的power的方向。
通过查看工艺库中std cell 版图中power(VDD VSS)是使用的哪一层,是什么方向。
如果std cell power 是M1 且是横向,那么您的power strap 如下设计:
H:M1 M3 M5 …
V:M2 M4 M6 …
相反,如果std cell power 是M2 且是横向,那么您的power strap 如下设计:
H:M2 M4 M6 …
V:M1 M3 M5 …
2.查看您macro的power ring是哪一层,什么方向,按照同样的设计打macro的power ring
3.考虑整体的供电关系,top给core的供电
4.考虑 IR drop

3.1 macro 的 power ring

考虑到有的macro和std cell的power 是不一样的,比如标准单元的供电是1.2V ,但是某IP 需要3.3V供电,那么就需要打不同的power ring。
首先需要创建 power port(此处举例两种)

derive_pg_connection -power_net VDD -ground_net VSS -create_ports top
derive_pg_connection -power_net VDD -power_pin  VDD -reconnect
derive_pg_connection -ground_net VSS -ground_pin VSS  -reconnectderive_pg_connection -power_net VDD1 -ground_net VSS1      -create_ports top
derive_pg_connection -power_net VDD1 -power_pin VDD1       -cells [get_flat_cells *] -reconnect
derive_pg_connection -ground_net VSS1   -ground_pin VSS1   -cells [get_flat_cells *] -reconnect`

这两种power 都是创建在top

之后再macro 周围打ring

#Create power ring around ROM and SRAM use VDD VSS
create_rectangular_rings  -nets  {VDD VSS}  -around specified -cells  {spram2048x32_bist_spram2048x32_block_instance_0/sran2KX32b_instance_0  rom16384x32_block_instance_0/u_rom64k}  -left_offset 0.5 -left_segment_layer METAL4 -left_segment_width 1.5 -right_offset 0.5 -right_segment_layer METAL4 -right_segment_width 1.5 -bottom_offset 0.5 -bottom_segment_layer METAL5 -bottom_segment_width 1.5 -top_offset 0.5 -top_segment_layer METAL5 -top_segment_width 1.5
#Create power ring around ADC use VDD1 VSS1 (3.3V)
create_rectangular_rings  -nets  {VDD1 VSS1}  -around specified -cells  {u_analog/u_TOP_ADC}  -left_offset 0.5 -left_segment_layer METAL4 -left_segment_width 1.5 -right_offset 0.5 -right_segment_layer METAL4 -right_segment_width 1.5 -bottom_offset 0.5 -bottom_segment_layer METAL3 -bottom_segment_width 1.5 -top_offset 0.5 -top_segment_layer METAL3 -top_segment_width 1.5

3.2 PG strap

本项目考虑整体power plan之后,计划PG strap 如下安排
H: M5
V: M4 M6

set_preroute_drc_strategy -min_layer METAL1 \-max_layer TM2create_power_straps  -direction vertical  -start_at 141.4 -num_placement_strap 999 -increment_x_or_y 18.45 -nets  {VDD VSS}  -layer METAL4 -width 1.21 -pitch_within_group 8.2
create_power_straps  -direction horizontal  -do_not_route_over_macros -start_at 141.925 -num_placement_strap 999 -increment_x_or_y 89.18 -nets  {VSS VDD}  -layer METAL5 -width 1.87 -pitch_within_group 44.1
set_preroute_drc_strategy -min_layer METAL5 \-max_layer TM2create_power_straps  -direction vertical -do_not_route_over_macros  -start_at 207.9 -num_placement_strap 999 -increment_x_or_y 252 -nets  {VSS VDD}  -layer TM2 -width 10 -pitch_within_group 126

需要注意以下几点:
1.option中 -start_at 要考虑metal的track,尽量考虑PG strap 不占布线资源
2.以下这两个选项要考虑到.tf文件中metal的pitch,且最好VDD VSS均匀打,所以 第一个是第二个2倍左右(左右是为了给其他布线让资源)
-increment_x_or_y
-pitch_within_group

3.3 std cell 的 power rail

set_preroute_drc_strategy -min_layer METAL1 \-max_layer METAL4
preroute_standard_cells -nets {VDD VSS} \-port_filter_mode off  \-cell_master_filter_mode off  \-cell_instance_filter_mode off  \-voltage_area_filter_mode off

第一个命令是为了power rail 只与M4打孔,而不要再打到高层,占布线资源(很重要)

3.4 将macro 的 power ring与macro相连

#preroute the ROM SRAM cell
set_preroute_drc_strategy -min_layer METAL3 \-max_layer METAL4
preroute_instances -ignore_pads \-ignore_cover_cells \-select_net_by_type \specified -nets {VDD VSS}#preroute the ADC
set_preroute_drc_strategy -min_layer METAL1 \-max_layer TM2
preroute_instances -ignore_pads \-ignore_cover_cells \-select_net_by_type \specified -nets {VDD1 VSS1}

注意用好set_preroute_drc_strategy

3.5 检查

verify_pg_nets
这个命令可以查出没有供上电的cell

3.6 PG strap 打不满的解决方法

使用命令synthesis_fp_rings -net -polygon -corner_bridge -layer -width -space -offset
其中polygon是ring的坐标点

ICC Floorplan遇到的坑以及解决方法相关推荐

  1. CocoaPods更新过程中出现的坑及解决方法

    CocoaPods更新过程中出现的坑及解决方法 参考文章: (1)CocoaPods更新过程中出现的坑及解决方法 (2)https://www.cnblogs.com/hero11223/p/1071 ...

  2. ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法)

    ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) 参考文章: (1)ubuntu16.04安装CUDA 8.0(很详尽,包括一些坑的解决方法) (2)https://www. ...

  3. mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法

    在正常项目开发过程中,如果MySQL版本从5.6升级到5.7版本.作为DBA在考虑数据库版本升级带来的影响时,一般会有几个注意点: sql_mode optimizer_switch 本文主要内容是M ...

  4. Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法

    Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 参考文章: (1)Mybatis的逆向工程,MySQL8的数据库,8.0.11驱动的逆向工程的坑的解决方法 ( ...

  5. 开发微信小程序 中遇到的坑 及解决方法

    开发微信小程序 中遇到的坑 及解决方法 参考文章: (1)开发微信小程序 中遇到的坑 及解决方法 (2)https://www.cnblogs.com/feiye512/p/6070052.html ...

  6. vue使用marked解析markdown文本遇到的坑及解决方法

    vue使用marked解析markdown文本遇到的坑及解决方法 1. 前言 最近在搭建自己的博客网站 https://lyuanzhi.com,不免遇到了要把markdown文本转化为html代码的 ...

  7. uniapp(小程序) 配置 海康威视-萤石监控(直播替代方案) 踩坑与解决方法

    uniapp(小程序) 配置 海康威视-萤石监控(直播替代方案) 踩坑与解决方法 因为公司业务需求需要获取监控的摄像头,萤石是给出了几种方案去实现. 直播接入:萤石开放平台API文档 小程序接入:萤石 ...

  8. 使用Docker时遇到的坑与解决方法

    使用Docker时遇到的坑与解决方法 1. Docker 服务启动串台 使用 docker-compose 命令各自启动两组服务,发现服务会串台! [问题起因] 在两个不同名称的目录目录下面,使用 d ...

  9. 安装fastdfs的坑还有解决方法

    记录一下安装fastdfs的坑还有解决方法,同时也想帮助一些一样错误,但是找不到解决办法的人,这是一篇综合帖子,基本上所有的问题都有解决办法,先别急,先让我们看一下报错信息. >>> ...

最新文章

  1. [YTU]_2439( C++习题 复数类--重载运算符+)
  2. python教程:使用生成器重构提取数据方法来优化爬虫代码
  3. nyoj-257-郁闷的C小加(一 )中缀式变后缀式
  4. BZOJ-4300 绝世好(蛋疼)题 DP(递推)
  5. spring源码分析第三天------spring核心IOC容器和依赖注入原理
  6. highcharts php 动态数据,php动态传数据到highcharts的方法
  7. linux虚拟存储技术,红帽Linux 7.0发布:整合虚拟存储技术
  8. Python【WINAPI】钩子程序获取账号密码等键盘输入信息
  9. 《高级着色语言HLSL入门》系列文章
  10. 软件测试测试用例编写 不超过7步骤_软件测试(功能、接口、性能、自动化)详解...
  11. 机器学习04:利用朴素贝叶斯分类器判别网络评论的情绪好坏(航空公司数据集)
  12. ansys添加力矩_ANSYS中加载力矩
  13. 向量 数量积vs向量积
  14. mod函数在vb中怎么用?
  15. android重力传感器横竖反,Android重力传感器--随重力旋转的图标
  16. 猫猫回收站教程:在线撸猫~
  17. 阿里张建锋:互联网主要解决三大问题
  18. 【零信任落地案例】北京芯盾时代电信运营商零信任业务安全解决方案落地项目
  19. [区块链技术] 吐血推荐!区块链从入门到放弃(区块链入门汇总整理)
  20. 关于微信微博等二维码问题

热门文章

  1. 微医网爬虫(二) java实现
  2. 杭电oj第1000题—— A + B Problem
  3. 常用电平标准——LVTTL、LVCMOS、LVDS
  4. mysql 查询出现次数最多的_MySQL查询重复出现次数最多的记录
  5. 求double类型的立方根_二分法逼近
  6. ios没有StringBuilder,哥心如刀绞,泪如尿崩
  7. Css图片批量下载小工具--saveimg1.5
  8. JavaScript实现5星好评制作
  9. GVM踩坑记录之 Failed to find port_list ‘33d0cd82-57c6-11e1-8ed1-406186ea4fc5‘
  10. 如何写cover letter 翻译自How to write a cover letter