一、概述

在前端设计完成逻辑综合得到门级网表,并在后端完成 数据设置后,需要进行布图规划(floorplanning)。后续的布局、时钟树综合CTS、布线等步骤都是在设计布图的基础上进行。

芯片级布图定义的芯片信息包括:芯片核心(core,即芯片内部逻辑功能区)设置,包括 核心的尺寸、形状、布局的行(标准单元布局按横条排列);外设,包括IO、电源、拐角管脚(cor­ner pad) 以及填充单元的位置;宏块的布局;标准单元的布局约束,用于定义禁止布局的区域; 电源的网格,包括电源环、条带和电源轨道。

布图规划流程及主要命令示意图,主要包括设计的设置阶段、布图规划阶段、虚拟展开布局VFP、电源网络综合与分析、布图阶段原型布线(全局布线)及时序分析5个阶段。

在完成虚拟展开布局VFP后,需要根据拥塞情况进行宏块位置的优化调整,以尽可能改善布线阶段的拥塞状态。原型布线和原位优化IPO主要用于对布图规划的设计时序结果进行较准确的评估和优化。

布图规划输出的DEF布图文件可供综合工具DCT参考,流程分为设计布图和重新综合两步。设计布图规划结合重新综合流程的分步流程图如图所示。

ICC布图与综合DCT的联合优化利用了布图的拓扑(topology)信息,二次综合结 果与后端设计电路结构的拟合度更好。二次综合流程中DCT利用布图规划导出的DEF布图文件重新综合完成后,综合网表再次导入ICC完成数据设置步骤,读入DEF文件,完成了设计规划工作。下一步标准单元布局将基于性能改进的门级网表进行。

模块级布图规划的初始化步骤如下:

对于直角多边形的布图区域设置可以调用预定义的模板,实现较典型的复杂形状。

芯片级的初始布图规划步骤如下:

  1. 创建仅在物理设计使用的管脚(pad cells);
  2. 指定管脚单元的位置;
  3. 初始化设计布图;
  4. 在管脚之间添加管脚填充单元(pad filler cells);
  5. 创建管脚的电源/地环(P/G pad rings);
  6. 指定忽略的走线层;
  7. 定义已知(确定)的宏块和标准单元布局(placement);
  8. 指定已知的电源网络结构;
  9. 定义已知的布局禁止区域(placement blockage)。

二、初始化布图规划

初始化布图规划这一步的工作完成了后端设计芯片基本形态定义,主要完成以下设置:

1、设置管脚约束

1)创建芯片管脚单元(pad cell)

在DC综合得到的门级网表没有定义的电源、地管脚以及芯片外围边沿4个拐角的管脚 单元。这些仅用于物理设计的管脚需要在指定信号管脚单元的位置前定义。仅用于物理设计的管脚的定义采用命令create_cell,举例如下:

create_cell {vss_l vss_r vss_t vss_b} pvOi
create_cell (vdd_l vdd_r vdd_t vdd_b} pvdi
create_cell (CornerLL CornerLR CornerTR CornerTL} pfrelr

上述示例脚本创建了上下左右4边各一个电源管脚和一个地管脚,并且创建了芯片4个拐角单元。管脚的添加一般按照电源、拐角、信号脚的顺序。

2)基于tdf文件设置芯片管脚顺序

设计中添加完仅用于物理设计的管脚后,下一步需要导入tdf文件,即Top Design File顶层设计文件。tdf主要的作用是定义管脚位置,可以用来配置芯片管脚的名称、位置对应关系。

拐角管脚 的定义格式如下:

pad padName padSide [padOrder] [padOffset] ["reflect"]

管脚定义中,padName指定管脚的名称,padSide指定管脚所在边,数值padOrder指定管脚在所在边的序号。拐角管脚在所在边的顶角,因此不标序号。非拐角管脚的tdf定义格式为与拐角管脚格式相同,但管脚所在边序号padOrder需要标出。padOffset指的是管脚相对于参考边的绝对偏移量,单位是微米,该偏移量设置是可选的。如果没有加padOffset偏移距离控制,管脚默认在每一边是均匀排列。

;tdf文件
;放置管脚单元
pad "cornerLL" "bottom"
pad "cornerLR" "right"
pad "cornerTR" "top"
pad "cornerTL" "left"
;放置io和电源管脚
;左右边的管脚编号从下往上顺序编号(除了拐角的管脚)
pad "pad_data_0" "left" 1
pad "pad_data_1" "left" 2
pad "VDD_LEFT"   "left" 3
pad "VSS_LEFT"   "left" 4
pad "pad_data_2" "left" 5
;下边和上边的管脚编号从左往右顺序编号(除了拐角的管脚)
pad "Clk" "bottom" 1
pad "A_0" "bottom" 2
pad "A_1" "bottom" 3

上面脚本定义的芯片管脚如下:

完成芯片级布图规划的管脚顺序定义文件tdf后,可采用如下tcl命令将管脚顺序读 入 ICC:

read_io_constraints [-append] [-cel_namel [-child_cell] < TDF_file>

3)基于tcl命令设置芯片管脚顺序

在新版本ICC中,pad管脚位置设置可采用tcl命令实现,代替单独的tdf文件设置。采用的命令是set_pad_physical_constraints,命令格式如下:

set_pad_physical constraints [-pad_name][-side][-order]

芯片的四边side l.side 2.side 3.side 4分别对应的是左、上、右、下四边;左上、右上、右下、左下四个拐角管脚分别属于side1.side 2.side 3.side 4。

2、布图创建

布图创建的命令是initialize_floorplan或采用命令initialize_rectilinear_block创建直角多 边形的规划区域。initialize_floorplan的图形化界面设置以及创建后的版图示例如所示。

初始化布图完成后,芯片的管脚按照指定顺序排列在芯片的4边,而内部核心区域与管脚之间留有间距,如这里设置的50。在设置选项中的Horizontal rows指的是标准单元行的方向是否是水平方向;Double back指的是相邻两行标准单选的方向是否是翻转一行,背靠背放置。

1)芯片核心(core)区域参数设置

控制的参数包括两种可选的配置。

(1) 通过比例控制

(2) 通过指定高度和宽度控制

布图在初始化完成后,可以看到外围的IO管脚已经按约束排列,还没有摆放的宏块排列在芯片上方,还未布局的标准单元排列在芯片区域外右侧,核心区域内可以看到标准单元行的 site rows的位置定义。

2)插入管脚填充单元(filler cell)

管脚填充单元的作用为:由于管脚之间可能存在间隙,管脚填充单元使管脚之间的N阱、 P阱和P/G电源环保持连接的连续性,使得信号管脚功能正常,并获得供电。

插入管脚填充单元采用的insert_pad_filler命令应用如下,其中-cell选项指定填充单元 的可选单元名称列表,例如fill5000、fill2000等。管脚填充单元的名称中数字指明了单元宽度,命令在指定填充单元时按照宽度从大到小排列,插入单元时先尽可能选择宽度大的单元, 这样可以使填充单元数量最少。

insert_pad_filler -cell "fill5000 fill2000 fill1000 ..."

插入管脚填充单元的示意效果图如下图所示,管脚之间插入的填充单元数量和类型不尽相同。右图显示插入管脚填充单元的用户设置界面。用户可填入插入单元名称、插入的区域以及选择在哪一边插入填充单元。

3)创建管脚的电源与地(P/G)电源环

创建分两步:先创建pad的电源脚(电源和地脚各3个)到电源网络(net)的逻辑连接(虚 线);再采用create_pad_rings命令物理连接电源环,即完成电源环布线。

derive_pg_connection -power_net VDD -power_pin VDD -ground_net VSS\
-ground_pin VSS
derive_pg_connection -power_net VDDO -power_pin VDDO -ground_net VSSO\
-ground_pin VSSO
derive_pg_connection -power_net VDDQ -power_pin VDDQ -ground_net VSSQ\
-ground_pin VSSQ
derive pg connection -power_net PWR -ground_net GND -tie
create_pad_rings

4)VFP(Virtual flat placement)前的准备

虚拟展开布局是在布图规划阶段通过create_fp_placement命令实现对设计的所有单元 的尝试性布局,主要用于判断布图规划是否存在潜在布线拥塞(congestion)风险。

在虚拟展开布局前可以先明确非默认的约束设置,包括:

(1)忽略不用的走线层

ICC默认使用所用金属走线层。但如果计划使用更少的层走线(减少使用高层金属层,降低制造成本),但没有指明,结果会造成走线前阶段的估算利用了更多金属层,对于拥塞的分析 过于乐观;RC寄生参数不准,造成走线时延的计算偏差较大。因此需要使用set_ignored_layers命令向ICC指定哪些层不能走线,提高走线之前对拥塞和时序分析的精度。如下设置命令,只允许使用最高到M7层的金属层用于布线:

set_ignored_layers -max_routing_layer M7

此外,可以通过以下命令查看和去除忽略的布线层。

report_ignored_layers
remove_ignored_layers

(2)限制宏块(macro)

虚拟展开布局create_fp_placement执行后,宏块放置的位置可能不合理,造成电源网络 结构复杂,或者需要更多的总线布线资源。因此在虚拟展开布局前,可以手动在GUI界面对宏块布局,并且可以设置约束指导布局。命令如下:

set_fp_macro_options ... #设置宏块布局选项
set_fp_macro_array ...      #设置宏块阵列,集中排列关联密切的宏块
#设置关联布局,指定一个单元相对于锚点anchor的相对位置
set_fp_relative_location ...

这个阶段宏块的布局约束是软性(soft)约束,后续设计中尽可能遵守约束,但并不是必须遵守。set_fp_macro_array设置多个宏块按阵列形式排列的脚本如下:

set_fp_macro_array -name A_array -elements \
[list [get_cells Al A2] [get_cells A3 A4]] \
-x_offset 15 -y_offset 110

如图所示为布图阶段设置宏块阵列Ao以上命令指定了有A1、A2、A3、A4组成的二维阵列A_array,并设置宏块的水平和垂直方向的偏移量。在布图阶段的VFP虚拟展开布局操作中,宏块阵列被认为是单元对象,因此VFP不会在宏块之间插入标准单元。

另一个宏块控制命令set_fp_macro_options对宏块布局的控制包括:

(3)禁止布局区域(placement blockage)设置

1、全局(global)的禁止布局设置

通过set_app_ var变量设置实现,硬性禁止布局设置变量 physopt_hard_keepout_distance,变量名中physopt可以理解为物理综合优化,即布局。

图中RAM宏块周边的条纹框区域是硬性禁止区,在宏块的四边创建。作为全局 设置,所有固定宏块的四周会设置硬性禁止区,设置命令如下,在距离宏块四边10的距离 内禁止布局摆放其他单元。命令设置如下:

set_app_var physopt_hard_keepout_distance 10

图中浅白色条带是软性禁止布局区,用于设置宏块之间或者宏块到芯片核心区边缘 的狭窄通道内禁止布线,通过placer_soft_keepout_channel_width变量设置。

set_app_var placer_soft_keepout_channel_width 25

这两条全局设置可添加到.synopsys_dc. setup文件,便于ICC软件开启自动加载。

2、宏块具体(specific)的禁止布局设置

可以采用set_keepout_margin命令指定特定的禁止布局区。例如软性或者硬性,以及到宏块的各边距离。

上中RAM的管脚引出的左右两边进行限制禁止区宽度10。对应的命令如下:

set_keepout_margin -type hard -outer {10 0 10 0} RAM5

其中type选项可选soft或者hard,决定是软性还是硬性规定,-outer选项的{}内数值对应了左下右上四边的区域空白宽度。要查看或者去除设置的禁止布局空白区,可以使用如下命令:

report_keepout_margin    # 报告
remove_keepout_margin   # 去除

3、小结

创建初始布图规划的流程图和对应命令设置:

布图规划初始化阶段的tcl脚本流程如下:

open_mw_cel DESIGN_data_setup    # 打开前一阶段设计
create_cell . . .                #创建仅用于物理设计的管脚单元
read_io_constraints < TDF_file>  # 或 set_pad_physical_constraints … initialize_floorplan ...       # 初始化设计布图
insert_pad_filler ...            #在管脚之间添加管脚填充单元
derive_pg_connection ...         #
create_pad_rings ...             #创建管脚的电源/地环
set_ignored_layers - max M7      # 指定忽略的走线层
#手动放置需要设定手动定位的宏块
set_dont_touch_placement [all_macro_cells]  # 固定宏块的位置
set_fp_macro_options ...                    #设定宏块摆放的3个命令:选项、阵列、相对位置
set_fp_macro_array . . .
set_fp_relative_location …
set app var physopt_hard_keepout_distance < # >       # 宏块全局硬性禁止布局区设置
set app var placer_soft_keepout_channel_width < # >   # 宏块全局软性禁止布局区设置
set keepout margin…                                 #宏块具体的禁止布局区设置

IC Compiler指南——布图规划(一)相关推荐

  1. IC Compiler指南——数据准备

    一.概述 ICC数据设置的文件关系框图如图: 后端工具在数据设置阶段需要对两大类数据进行设置,包括从前端设计继承的综合数据 以及后端设计需要的物理数据. 综合数据主要包括前端逻辑综合已经设置过的逻辑与 ...

  2. 数字后端——布图规划

    布图规划(floorplan)与布局(place)在芯片设计中占据着重要的地位,它的合理与否直接关系到芯片的时序收敛.布线通畅.电源稳定以及良品率.所以在整个芯片设计中,从布图规划到完成布局一般需要占 ...

  3. 数字集成电路物理设计学习总结——布图规划和布局

    PS:字丑,禁止转载!!!

  4. 数字集成电路设计-4-工具之ic compiler

    引言 IC设计,掌握硬件描述语言和数字电路设计基础知识固然是非常重要的,此外工具的使用也很重要.人和其它动物的重要区别就是,人可以制造和使用工具.借助工具可以大大提高工作效率. 一.介绍 synops ...

  5. IC Compiler II(ICC II)后端设计流程——超详细

    Preface 本文中英文结合(学习一些专有名词),主要介绍ICC II软件进行后端设计的主要流程,在阅读之前需要对数字IC设计流程有一定的了解. 逻辑综合相关知识请查看:Synopsys逻辑综合及D ...

  6. 全球及中国双稳态显示驱动IC行业研究及十四五规划分析报告

    [报告篇幅]:131 [报告图表数]:184 [报告出版时间]:2021年12月 报告摘要 2020年,全球双稳态显示驱动IC市场规模达到了 百万美元,预计2027年可以达到 百万美元,年复合增长率( ...

  7. 关于电路的书的读后感_通知 | 2021.1.1日起,专利和集成电路布图设计收费启用电子票据...

    近日,国家知识产权局网站发布了"关于专利和集成电路布图设计收费启用电子票据的公告(第394号)",自2021年1月1日起,正式启用财政电子票据.国家知识产权局不再开具纸质收费票据, ...

  8. 机器人图规划算法研究现状简述

    ‍ [文末提供原文PDF免费下载(期刊论文版式)]‍‍ 摘要:运动规划是移动机器人自主导航系统中的重要模块之一,相关算法研究成果层出不穷,本文将图规划算法拆解为三个子类算法:图搜索算法.BUG类算法和 ...

  9. 控制图的绘制步骤_实战!脚手架排布图绘制步骤和技巧讲解!图文展示

    脚手架如何进行排布.如何绘制排布图?今天这篇文章希望能够对大家有所帮助.再次说明:脚手架方案编制和排布图绘制是技术负责人的工作职责,但安全员参与并提出合理化建议,安全员搞懂这些也会是很大的提升哦! 第 ...

  10. IC Compiler 实验三

    1.实验目的 (1)完成"data setup(数据设置)"过程,即创建和维护一个Milkyway数据库来保存您的设计数据. (2) 通过布线加载平面图,运行一个完整的基本流程.( ...

最新文章

  1. 将html中的代码拷贝到jsp后出现的问题 Failed to create the part's controls
  2. macOS 环境安装Flutter
  3. 分布式内存文件系统Alluxio
  4. Cover开启投票是否对Yearn漏洞提供保险
  5. win10 设定 文件夹 联动 在 左侧窗口显示
  6. 莫烦python学习笔记之numpy.array,dtype,empty,zeros,ones,arrange,linspace
  7. 《威胁建模:设计和交付更安全的软件》——3.11 小结
  8. 目前软件分析设计过程中的主要问题
  9. scala教程(二) 函数
  10. java计算机毕业设计小区宠物管理系统源码+系统+数据库+lw文档
  11. UrlRewrite 的配置和使用总结
  12. 计算机网络的功能分类,计算机网络的功能与分类
  13. 关于pandas的安装
  14. 剑侠录java_江湖风云录-剑侠红颜
  15. 优秀的思维导图怎么制作
  16. 如何搭建一个站内搜索引擎(二) 第2章 概述
  17. python3连接mysql获取ansible动态inventory脚本
  18. 现货白银价格走势分析
  19. 列表xcode项目下所有的lnfo.plist
  20. MemFire教程|PostgreSQL RLS介绍

热门文章

  1. html5自动换行,html5文字自动换行怎么设置
  2. QC3.0手机充电器直接输出12V电压,自制诱骗线
  3. excel服务器导出文件,excel服务器导出文件夹
  4. macOS 安卓模拟器 Nox夜神模拟器 共享目录
  5. 网络课程 计算机基础1,2020超星泛雅大学计算机基础(1)网络课程答案
  6. C语言删除注册表某个键值,怎么批量快速删除注册表中指定的某个键值
  7. 上传航测影像就能土方计算?!0基础倾斜摄影土方计算流程
  8. 无人机倾斜摄影测量土方计算
  9. R语言实现 懒惰学习——使用近邻分类
  10. Laravel文档梳理11、系统架构