目录

  • 引言
  • 初始化
  • 压焊块摆放
  • 电源规划
    • 全局电源
    • 电源网格
  • Macro 摆放
    • 边缘摆放
  • 未涉及内容——待补充

引言

布局工具会在芯片上划出功能块、确定功能块之间的连接关系、确定 I/O 压焊块的位置、确定芯片大小,并反馈给设计者当下的布局在进行布线时的难易程度。比如一个大的数字芯片,可能会包含微处理器单元(MPU)、浮点单元(FPU)、RAM 块和 ROM 块等。对于 Floorplan 而言,人们更倾向于靠自己的经验去摆放这些 Macro,摆放它们时不仅要考虑面积、互联线长等传统问题,还需要考虑 Place 阶段 Macro 的摆放对于 Place 的影响,有时还要考虑供电和接地结构。总之一个好的布局会带来芯片性能的提升和面积的优化
通常布局工具会显示从每一个模块连至 I/O 压焊块和其他模块的所有导线,称之为飞线(flightline)。飞线的连接情况是帮助我们布局的重要参考。

给定一个布局方案,可以衡量导线长度、数据流方向,也可以衡量 Macro、端口可访问性和相关时序(布局阶段延迟预估)。

初始化

在使用导入的网表和相应的库和工艺文件创建物理数据库后,第一步是确定 ASIC core 的宽度和高度。此外,还会创建标准单元行和 I/O 压焊块位置。
行的高度等于库中标准单元格的高度。如果库中有任何多个高度标准单元,它们将占用多行。
一般行是相互毗邻摆放的,如果布线拥塞也可以在行之间加入布线通道。

压焊块摆放

作为连接芯片内部信号与封装管脚的桥梁,I/O 单元的分配要综合考虑印制板走线、封装形式、供电情况以及内部模块结构,从而保证信号从芯片内部传递到外部时其路径最短,同时要求从 I/O 单元关键引线到封装点时,避免信号交叉,方便封装基板的制作,减少基板上的走线层数,从而降低封装的成本。当芯片为通用芯片时,需要参考现有的类似芯片的封装形式,从而方便产品的应用,如果芯片是专用于某个设计,则芯片的封装可以以印制板走线为基础,从而确定 I/O 单元的位置。
对于给定的 ASIC 设计,有三种类型的 I/O 焊盘:电源、接地和信号。细分为:数字输入单元、数字输出单元、数字双向输入输出单元、静电保护单元、给 I/O 接口单元供电的单元、给芯核供电的单元、数字填充单元、模拟供电单元、模拟输入单元、模拟输出单元、模拟填充单元、专用输入输出单元、角填充单元等。在输入输出单元中,又分为普通输入、带上拉输入、带下拉输入、带施密特整形等多种类型,按照驱动能力(以 0.18um 为例)可以分别有 1mA 、2mA、4mA、6mA、8mA、12mA、16mA 等。
信号 I/O 单元的关键是选择驱动的大小,而电源 I/O 单元重点考虑的是供电电源的数量和摆放。

需要确保焊盘具有足够的电源和接地连接,并正确放置,以消除电迁移和电流开关噪声相关问题,对于 ASIC 设计的功能操作至关重要。
为了减少或消除 I/O 焊盘放置和选择期间的电容耦合效应,可以考虑以下准则:

  • 使用电源或接地 PAD 将敏感的异步输入,比如时钟或者双向接口同其他翻转信号 PAD 隔离开来;
  • 将双向 PAD 组合在一起,以便所有 PAD 都处于输入或输出模式;
  • 将信号输入速度慢的 PAD 组合在一起,将其放置在电感较高的封装引脚上;
  • 尽量使用带回滞的输入 PAD。

对于寄生电感引起的开关噪声,可通过以下方式降低:

  • 通过将输出分成多个组,每组在其数据路径中插入多个延迟缓冲区,减少同时切换的输出数量;
  • 只要速度不是问题,就使用最低额定漏电流或低噪声输出焊盘;
  • 将同时开关输出或双向焊盘放在一起,并根据它们的相对噪声额定值在它们之间分配电源和接地焊盘;
  • 将静态和低频输入焊盘分配给高电感封装引脚;
  • 通过分配尽可能多的电源和接地垫,降低有效电源和接地引脚电感。

由于设计复杂度的不同,芯片一般分为 Pad limited 和 Core limited。Pad limited 是相对的设计较小而输入、输出端口较多。Core limited 是相对输入、输出端口较少,而设计复杂度较高。针对 Pad limited 的设计,是否采用交错型结构(Stagger)代替线性型(Liner)结构来在单位宽度放入更多的 IO 数目是需要考虑的问题。
厂家所提供的库中,往往具有多种宽度的 I/O 单元。如 SMIC 的 0.18um 1P6M 工艺中,就有普通宽度、狭窄宽度、宽宽度3种类型。当芯片的输人输出单元较多而内部逻辑单元较少且一般为 I/O 单元限制型设计时,一般选用狭窄的 I/O 单元;当芯片的输入输出单元较少而内部逻辑单元较大时,则一般选用宽的 I/O 单元。在同样条件下狭窄型 I/O 单元比宽型 I/O 单元的高度要高。

电源规划

全局电源

在电源网格设计中,首先要对电源进行定义,主要包括:全局电源的定义以及连接关系的定义。全局电源网络连接(global net connect)是指把相应的端口和网络连接到合适的电源和接地网络上去,从而使得我们针对整个设计可以正确无误地顺利完成供电网络设计、电源布线、详细布线和功耗分析等步骤。这些终端和网络的连接信息一部分包含在 Verilog 网表中,另一部分则包含在相应的 LEF 文件当中。
通过 Verilog 网表中的定义,我们可以把以下几种类型的网络连接到相应的全局电源和接地网络上去。

  • 电源和接地网络
    它是将网表中每个标准单元和模块等的电源和接地网络连接到合适的全局电源和接地网络上去。这些标准单元和模块等的电源和接地网络互连关系,在 Verilog 网表中主要通过关键字 “wire” 进行定义。
  • 接高电压和接低电压网络
    它是将接高电压和接低电压网络连接到合适的全局电源和接地网络上去。它们之间的互连关系,在Verilog 网表中主要通过关键字 “1’b0”、"1’b1”、“supply0”,以及 “supply1” 进行定义。
  • 电源和接地端口
    它是将供电端口连接到合适的全局电源和接地网络上去。诸如 “VDD、vdd、vdd!” 和 “VSS、vss、gnd!” 等就是这些电源和接地端口和网络在 LEF 文件中定义的名称。
  • 填充单元网络
    它是将供电端口连接到合适的全局电源和接地网络上去。在添加填充单元前后,均可通过手工指定相应的连接关系。

电源网格

I/O 焊盘的电源和接地线内置在焊盘本身中。
对于 core,有一个 power ring,用一组或多组电源环和接地环包围 core。对于标准单元,电源和接地线由一组或两组 power strips 组成,这些条带在设计内的核心逻辑或指定区域内以固定间隔重复。每个电源和接地条带都垂直、水平或双向放置。这样做是为了平均分布电流,缩短电流回路,降低 IR drop,避免电迁移(EM,electromigration)问题。
电源环主要有3个参数:电源环的宽度、电源环的间距以及电源环的对数。
在有些设计中,还需要对硬核及 RAM 设计电源环,RAM 以及硬核电源环宽度的设定也是根据硬核的供电电流决定,其设计的方法与核内的电源环相同,只需要指定电源环的所有参数便能自动生成。很多厂家提供的硬核在设计时已经产生了电源环,当应用到芯片顶层时只需要将电源网格连接到硬核内部自身的电源环即可,从而减小不必要的面积浪费。

电源网格中重要的 4个参数分别是:纵向电源条线的宽度;横向电源条线的宽度;横向电源条线的间距;纵向电源条线的间距。其中纵向电源条线的宽度与纵向电源条线的间距成正比关系,也就是说宽度较大,间距就可以较大,电源条线的分布可以稀疏一点;与纵向电源条线相比较,横向电源条线的宽度与其间距的正比关系也存在,但是由于在横向有很多标准单元的 followpins 的存在,需要的横向电源条线比纵向电源条线要少很多。

Macro 摆放

边缘摆放

从目前芯片设计的趋势来看,芯片中除了计算单元,随机存储单元 RAM、只读存储单元 ROM 等。这些存储单元占据的芯片面积在有些设计中甚至超过百分之五十。对于存储单元来说,存在数据端口和存储端口,并且周围需要有一些可测性电路。这使得这些单元引线众多且功耗巨大。将它们贴边放置,不仅有利于这些单元的供电,而且防止这些单元过多的引脚对其他单元的布线造成影响。
若是将标准单元都摆放在芯片区域的中心,而大的 Macro 摆放在四周,就可以使标准单元方便的只用一条电源线连接在一起,而不会被高度不统一的 Macro 打断。对电源网格的设计提供了巨大便利。
而 Macro 的摆放原则基本如下:

  • 模块尽量摆放在靠近相应输入输出口(I/O port)的位置。一般来说对于大型的 Macro,他们不仅仅需要与芯片内部的其他 Macro 或者标准单元进行数据交换,还需要与芯片外部的器件进行通信。比如,锁相环单元需要接收外部晶振信号,存储单元需要接收外部地址等。这种数据交换就是靠 I/O port 进行的,因此摆放在离相应的数据端口附近,有利于减少互联线长度,减少线上延迟,并节约布线资源。
  • 大的 Macro 摆放尽量贴近版图的边缘和角落,这样有利用空间的利用。要尽量留出一个连续且尽量接近圆形/方形的 Core 区域来摆放标准单元 。
  • Macro 与 Macro 之间要留有一定空隙,给予布线资源。特别是在 Macro 的间隙有端口的时候更是如此,设计者可以通过相邻 Marco 边界上端口的多少来决定留有多大的间隙比较合适。在使用布局工具时,可以给 Macro 加上 halo 来控制 Macro 与 Macro 之间的距离。Halo 分为 placement halo 和 routing halo,可以分别阻止在有 Halo 区域放置其他单元或者绕线,类似于 blockage。但是 Halo 并不是独立存在,而是依附于 Macro 周围,可随 Macro 移动的。所以它是专门用来控制 Macro 和其他单元之间距离的一种功能。
  • 合理设置 Macro 摆放的角度。在考量 Macro 摆放的角度时,不仅仅考虑空间摆放的因素,还要根据端口的连接关系与互连模块的位置来决定。在实际设计时,不仅要根据端口与标准单元之间的连接关系,还要考虑 Macro 与 Macro 之间的互连关系进行综合判断。Macro 的 pin 尽可能朝向中间的近似方形的区域,这样可以减少绕线长度,当 Macro 之间有互联,可以把相应 Macro 头对头摆放。

    在 Macro 放置之后和执行全局布线之前,大多数物理设计都要求通过在包含 Macro 的区域上绘制阻挡层来定义隔离区域(keep-out regions)或仅缓冲区域(buffer-only regions),以防止将任何标准单元放置到这些区域中。
    一般用在隔离区域的导线会比较长。通过使用仅缓冲区允许在这些区域插入 buffer,从而避免与之相关的长过渡时间(transition times)。
    这些阻塞层是在预先放置的 Macro 上创建的,以覆盖其电源环和接地环。阻塞层还用于缓解 Macro 转角周围的布线拥塞。当 Macro 在多个布线层上被阻塞时,导线往往会绕过拐角并连接到附近的标准单元,从而在宏的拐角处造成布线拥塞。

未涉及内容——待补充

数模混合供电
多电源供电
层次化设计

后端流程之布局——Floorplanning相关推荐

  1. 数字IC后端流程——(二)布局规划Floorplan

    参考博客原址:https://blog.csdn.net/weixin_46752319/article/details/107313770 ICC布局规划 Floorplan是ICC设计流程中非常重 ...

  2. 数字IC后端流程——(三)布局Placement

    参考原博地址:https://blog.csdn.net/weixin_46752319/article/details/107360843 ICC布局阶段 在布局规划阶段完成了芯片的整体规划,而布局 ...

  3. token验证的前后端流程与操作

    token验证的前后端流程 1.什么是token? 一般我们所说的的token大多是指用于身份验证的token,在计算机身份认证中是令牌(临时)的意思. 2.生成token 生成Token的解决方案有 ...

  4. ICC图文流程——(二)布局规划Floorplan

    ICC布局规划 Floorplan是ICC设计流程中非常重要的一环,Floorplan的好坏直接影响到设计的timing和布线布通率, 很多时候流程中反复主要发生在这步. 在ICC student l ...

  5. 微信pc端扫码支付前后端流程(Node.js)

    大致流程 不必须事先微信登录, 后台发送本次交易的数据到微信联合支付接口, 返回一个微信提供的交易二维码url, 将这个url返回给前端 前端将这个地址转换成一个二维码, 并且开启一个轮询(或webs ...

  6. RuoYi(若依开源框架)-前后台分离版-后端流程简单分析

    [项目结构] ├── common // 工具类 │ └── annotation // 自定义注解 │ └── config // 全局配置 │ └── constant // 通用常量 │ └── ...

  7. 鸿蒙app前后端流程实现

    首先要理解django里面的文件 1.使用的是MySQL,这里需要在__init__.py导入pymysql,,注意是创建项目时生成的__init__.py文件(我用的MySQL和django都是在云 ...

  8. ICC图文流程——(三)布局Placement

    ICC布局阶段 在布局规划阶段完成了芯片的整体规划,而布局阶段主要是软件自动的标准单元的摆放. 在布局开始之前,需要对设计进行确认和检查. 主要确认内容包括: ·检查设计中的所有macro是否设置为d ...

  9. 数字IC后端流程——(四)时钟树综合Clock Tree Synthesis

    参考原博地址:https://blog.csdn.net/weixin_46752319/article/details/107387584 ICC时钟树综合 时钟树综合就是指从某个clock的roo ...

最新文章

  1. 生命如何在复杂环境中生存?信息、调控和几何结构的交织
  2. php输出报错Message: Array to string conversion
  3. Leetcode PHP题解--D54 937. Reorder Log Files
  4. linux shell set 赋值,请教linux下shell 中 set 的用法?
  5. 面向对象精要-理解对象
  6. qtchart实时动态曲线_极致新体验,实时、无损、长时程细胞分析检测平台
  7. Java 8新特性——default方法(defender方法)介绍
  8. opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
  9. Exchange 2013SP1和O365混合部署系列一
  10. Hadoop3——集群搭建以及初体验
  11. ASP.NET - 一般处理程序获取session值
  12. 关于我对区块链和比特币的看法
  13. pta冒泡排序c语言_PTA 冒泡排序
  14. ARMv6 ARMv7 架构 整体介绍
  15. 小米平板4刷机win10或linux,小米平板2中Win10/MIUI系统互刷终极教程
  16. 【keil5】pwm驱动步进电机
  17. 数独基本规则_数独游戏的入门规则
  18. 120_x轴与y轴平移【transform: translateX(n) translateY(n)】利用定位和变形使元素水平垂直居中
  19. 阿里云 HotFix 注意事项
  20. 获取svg元素的高度和宽度(或其他属性)

热门文章

  1. 开源一个golang小程序商城后台系统(moshopserver)
  2. Linux 内核参数说明
  3. 阿里云工业视觉智能工程师ACP认证——备考
  4. 能够关闭并退出计算机程序的是,Mac如何强制退出程序的方法
  5. Python用*输出菱形
  6. 彻底搞懂SQLite回调函数查询
  7. verilog学习笔记- 12)触摸按键控制LED灯实验
  8. CelebA人脸数据集
  9. 转:免费国际长途 热门应用Line发布中文版
  10. html5飞机大战小游戏开发,html5 飞机大战