后端流程之布局——Floorplanning

目录

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

引言

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

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

初始化

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

压焊块摆放

作为连接芯片内部信号与封装管脚的桥梁,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 数目是需要考虑的问题。后端流程之布局——Floorplanning_第3张图片
厂家所提供的库中,往往具有多种宽度的 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)问题。后端流程之布局——Floorplanning_第4张图片
电源环主要有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 头对头摆放。
    后端流程之布局——Floorplanning_第5张图片
    在 Macro 放置之后和执行全局布线之前,大多数物理设计都要求通过在包含 Macro 的区域上绘制阻挡层来定义隔离区域(keep-out regions)或仅缓冲区域(buffer-only regions),以防止将任何标准单元放置到这些区域中。
    一般用在隔离区域的导线会比较长。通过使用仅缓冲区允许在这些区域插入 buffer,从而避免与之相关的长过渡时间(transition times)。
    这些阻塞层是在预先放置的 Macro 上创建的,以覆盖其电源环和接地环。阻塞层还用于缓解 Macro 转角周围的布线拥塞。当 Macro 在多个布线层上被阻塞时,导线往往会绕过拐角并连接到附近的标准单元,从而在宏的拐角处造成布线拥塞。后端流程之布局——Floorplanning_第6张图片

未涉及内容——待补充

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

你可能感兴趣的:(数字ASIC设计入门之路,硬件工程)