引言

你已经了解标准单元库的基本内容

 

本次课内容:

  • 后端物理设计流程
    • 布图规划 -> 电源规划 -> 布局 -> 时钟树综合 -> 布线 -> 签核分析

物理设计——从网表到版图

物理设计的本质

将网表中记录的标准单元及其连接关系映射到真实芯片三维空间

 

从芯片的工艺视角理解物理设计的本质——确定每一层中的内容

  • 每一层应该选取多大的面积: 布图规划
  • 在低层的什么位置摆放什么标准单元: 布图规划, 布局
  • 如何在中层连接这些标准单元: 布线
  • 如何规划时钟: 时钟树综合
  • 如何在高层规划电源: 电源规划
---------------   M7    <----- 电源规划
  | | | | | |
---------------   M6    <----- 时钟树综合
  | | | | | |
---------------   M5    <-+
  | | | | | |             |
---------------   M4      |
  | | | | | |             +--- 布线
---------------   M3      |
  | | | | | |             |
---------------   M2    <-+
  | | | | | |
---------------   M1    <-+
  | | | | | |             +--- 布图规划, 布局
===============  多晶硅 <-+
+++++++++++++++  绝缘层
ooooooooooooooo  硅衬底

物理设计的步骤

  1. 布图规划: 确定芯片大小, 并摆放一些后续流程不会调整位置的单元
    • 确定芯片大小
    • 确定芯片尺寸
    • 摆放I/O单元
    • 摆放宏单元
  1. 电源规划: 在芯片层面规划电源走线的分布, 保证芯片供电的可靠性
    • 规划I/O单元的电源环
    • 规划核心电源环
    • 规划芯片内部的电源条线
  1. 布局: 将标准单元摆放在芯片中, 确定每个标准单元的物理位置
  1. 时钟树综合: 构建时钟网络, 将时钟信号输送到所有时序单元的时钟端
  1. 布线: 根据网表的拓扑关系, 将布局阶段的标准单元通过走线连接起来

布图规划

1.确定芯片大小

与标准单元的面积类似, 芯片大小(die size)是指芯片在平面\(xOy\)中投影的面积

  • 即芯片俯视图所得矩形的面积
  • 同时也是芯片中每一层金属层的面积, 也称芯片面积

 

芯片的厚度(即\(z\)轴方向的度量)和选取的工艺相关(如1P7M)

  • 选定一种工艺后, 芯片的厚度并非一个可以调整的参数
  • 因此物理设计阶段通常不关心芯片的厚度

芯片面积的构成

根据芯片的工艺结构, 芯片面积主要由晶体管的面积和走线的面积构成

  • 晶体管的面积主要包括硅衬底的源极和漏极所占的面积, 加上多晶硅层的栅极所占的面积
    • 不过标准单元库会给出每个标准单元所占用的面积
    • 因此用户或EDA工具无需考虑晶体管层次的尺寸

 

  • 走线分垂直方向(即\(z\)轴方向)和水平方向两种
    • 垂直方向: 会经过金属层之间的通孔, 在平面\(xOy\)的投影为一个点
    • 水平方向: 在金属层内部延伸, 在平面\(xOy\)的投影为一条线
  • 表面上看这两种走线都不占用面积
  • 但根据工艺制造的要求, 通孔之间以及走线之间都存在最小间距
    • 否则将会发生信号干扰甚至短路
    • 因此实际上走线也会占用一定的面积

利用率

此时还没有开展布线工作, 无法得到走线所占的具体面积

  • 因此需要估算

 

在布图规划阶段, 一般是通过综合所得的面积报告(即标准单元所占总面积)来估算芯片大小

  • 估算时, 工程师需要考虑标准单元总面积占芯片总面积的预期比例
    • 这个比例称为利用率(utilization)
  • 根据经验, 利用率一般在60%~80%左右

 

  • 假设某芯片综合后, 其标准单元总面积约\(700000um^2\)
    • 某工程师预期能做到70%的利用率,
    • 那么在布图规划阶段, 可以估算芯片大小为\(700000um^2/0.7 = 1000000um^2 = 1mm^2\)

利用率的选取

利用率的选取需要在成本和设计难度之间进行权衡

  • 如果利用率较高, 说明留给布线阶段的空间较小
    • 容易发生拥堵而进行长距离走线, 增加线延迟, 使得芯片频率下降
    • 甚至可能因为过分拥堵而失败, 无法完成物理设计
  • 如果利用率较低, 则芯片中空余的面积较大, 造成浪费
    • 芯片的制造费用一般和面积成正比, 从而引入不必要的成本开销

 

工程师需要根据芯片属性和自身经验来选择目标利用率:

  • 小芯片的拓扑较简单, 布局布线相对容易成功, 因此可设置较高利用率
  • 复杂的大芯片不宜设置过高的利用率, 要为布线阶段预留足够的空间

在大型项目中, 工程师一般会开展多轮的物理设计

  • 根据前一轮设计结果(过度拥挤或剩余面积过多)来调整后一轮的参数
  • 迭代优化物理设计的结果, 在成本合适的情况下实现预期的性能目标

2. 确定芯片尺寸

还需要考虑芯片的尺寸, 即芯片在\(x\)轴和\(y\)轴两个方向上的度量

  • 影响尺寸的因素除了标准单元的综合面积, 还需要考虑芯片引脚的数量
    • 引脚数量的影响又与封装方案有关

 

一种常见的封装方案是QFP(Quad Flat Package,四侧引脚扁平封装)

  • 引脚会分布在芯片的四周, 因此芯片尺寸会与引脚数量成正比
        |    |    |
   +----+----+----+----+
   |                   |
---+                   +---
   |                   |
---+                   +---
   |                   |
---+                   +---
   |                   |
   +----+----+----+----+
        |    |    |

芯片尺寸和I/O单元

一个芯片引脚需要对应一个I/O单元

  • 芯片引脚数量对芯片尺寸的影响, 是通过I/O单元的尺寸反映出来的
    • I/O单元的尺寸比一般的标准单元要大好几个数量级
    • 由于部分I/O单元需要承担供电的任务, 无法用于通信, 因此实际需要规划的引脚总数要多于用于通信的引脚

供电引脚的比例和分布密度与芯片的尺寸, 工艺, 功耗等属性有关

  • 工艺相关的手册会给出推荐的供电引脚排布方案
  • 尺寸越大, 功耗越高, 需要的供电量也越大, 供电引脚的数量也更多

 

  • 某芯片需要90个引脚进行通信, 假设需要1/3的引脚用于供电
    • 则实际需要\(90/(1-1/3) = 135\)个引脚
      • 故应选择144脚这种常见的封装方案
  • 如果引脚在四周均匀分布, 则每条边需要放置\(144/4 = 36\)个引脚

芯片尺寸和I/O单元(2)

  • 假设采用ICsprout55工艺, 一个I/O单元的尺寸为\(65um\times 130um\)
  • 假设该工艺允许I/O单元之间可以紧挨着排布
    • 则芯片的一条边长为\(36\times65um = 2340um\)
    • 芯片的最小面积为\(2340um\times2340um = 5.48mm^2\)
  • 结论: 即使按照利用率估算出芯片大小为\(1mm^2\), 考虑引脚和封装方案后, 仍然需要规划\(5.48mm^2\)的芯片面积
  • 有的工艺要求I/O单元之间预留间隙: 芯片边长会更长, 最小面积也更大

 

  • 芯片引脚数量作为一种资源, 在项目前期的规格定义阶段就要明确需求
  • 可以通过引脚数量快速估计芯片的最小面积
    • 某芯片只需要28个引脚进行通信, 按照同样的供电引脚比例进行计算, 可采用44脚的封装方案
      • 用ICsprout55工艺, 芯片最小面积\((11\times 65um)^2 = 0.51mm^2\)

芯片尺寸和宏单元

宏单元也可能会影响芯片尺寸

  • 宏单元已经被预先设计好, 其形状是固定的
  • 为了摆放某些特殊的宏单元, 需要芯片的尺寸满足一定的要求
    • 例如, 有一些DDR phy模块需要摆放在芯片边界上, 且形状是L型的
      • 这要求芯片长边必须长于L型形状的长边

确定芯片尺寸

综合上述条件可以初步确定芯片的尺寸:

+-----------------------------------------+
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
|                                         |
+-----------------------------------------+

3. 摆放I/O单元

  • 将功能相近的顶层端口对应的数据I/O单元摆放在物理上相邻的位置
    • 数据I/O单元在逻辑上对应整个设计的顶层端口, 它会通过走线连接到芯片内部的标准单元
    • 这种摆放方式有利于降低布线阶段中的线延迟(如下图的AB两个端口)
      • 否则, 若将功能相近的端口摆放在芯片的两侧甚至对角, 必定有其中一端需要经过较长的走线才能到达目标标准单元
         |    |    |                         |    |    |
    +----+----+----+----+               +----+----+----+----+
    |                   |               |                   |
A---+--+                +---        A---+--+                +---
    |  o                |               |  o                |
B---+--+                +---         ---+  +                +---
    |                   |               |  |                |
 ---+                   +---         ---+  +----------------+---B
    |                   |               |                   |
    +----+----+----+----+               +----+----+----+----+
         |    |    |                         |    |    |

3. 摆放I/O单元(2)

  • 根据工艺手册中对供电引脚密度的要求, 摆放相应的核心电源单元和I/O电源单元
    • 例如, 某工艺可能会要求每隔两个数据I/O单元就要放置一个电源单元

 

+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
|                                         |
|p                                       I|
|                                         |
|P                                       P|
|                                         |          I 数据I/O单元
|I                                       p|          p 核心电源单元
|                                         |          P I/O电源单元
|I                                       I|
|                                         |
|I                                       I|
|                                         |
|p                                       p|
|                                         |
|P                                       P|
|                                         |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

4. 摆放宏单元

  • 宏单元占用的面积比一般的标准单元大得多
    • 例如, 一个64x64的SRAM, 仅考虑存储单元, 就需要\(64\times64\times6 = 24576\)根晶体管
    • 而一个二输入与非门的标准单元只需要4根晶体管
  • 因此, 宏单元需要提前摆放
    • 否则在摆放标准单元后, 将很难空出连续的大面积来摆放宏单元

 

  • 和I/O单元的摆放类似, 宏单元的摆放也要将功能相近的宏单元摆放在物理上相邻的位置
    • 从而避免在布线阶段产生较长的走线, 进而影响芯片的频率

4. 摆放宏单元(2)

+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
|                                         |
|p                                       I|
|    +-------+                            |
|P   | MMMMM |                           P|
|    | MMMMM |                            |          I 数据I/O单元
|I   | MMMMM |                           p|          p 核心电源单元
|    +-------+                            |          P I/O电源单元
|I                                       I|          M 宏单元
|                            +-------+    |
|I                           | MMMMM |   I|
|                            +-------+    |
|p                                       p|
|                                         |
|P                                       P|
|                                         |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

电源规划

1. 规划I/O单元的电源环(Power Ring)

为了驱动芯片外部的电路, I/O单元需要很强的驱动能力

  • 因此I/O单元的供电与一般标准单元的供电不同, 需要单独规划和设计
    • 从物理分布上来看, I/O单元的电源环围绕芯片四周的I/O单元
    • 并与I/O单元的电源端口相连, 由I/O单元中的I/O电源单元供电
+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#                                     #I|
| #  +-------+                          # |
|P#  | MMMMM |                          #P|
| #  | MMMMM |                          # |          I 数据I/O单元
|I#  | MMMMM |                          #p|          p 核心电源单元
| #  +-------+                          # |          P I/O电源单元
|I#                                     #I|          M 宏单元
| #                          +-------+  # |          # I/O电源环
|I#                          | MMMMM |  #I|
| #                          +-------+  # |
|p#                                     #p|
| #                                     # |
|P#                                     #P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

2. 规划核心电源环

物理分布上和I/O单元的电源环类似, 但位于I/O单元的内侧并围绕芯片四周

  • 形成电源网络的主干, 由I/O单元中的核心电源单元供电
  • 向芯片内部的标准单元提供均匀的供电输入
+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+                         %# |
|P#% | MMMMM |                         %#P|
| #% | MMMMM |                         %# |          I 数据I/O单元
|I#% | MMMMM |                         %#p|          p 核心电源单元
| #% +-------+                         %# |          P I/O电源单元
|I#%                                   %#I|          M 宏单元
| #%                         +-------+ %# |          # I/O电源环
|I#%                         | MMMMM | %#I|          % 核心电源环
| #%                         +-------+ %# |
|p#%                                   %#p|
| #%                                   %# |
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

3. 规划芯片内部的电源条线(power stripe)

电源条线以纵横交错的方式分布在芯片内部

  • 用于将电源均匀地输送到芯片内部的各种宏单元和标准单元
  • 在布局阶段, 这些电源条线将会连接标准单元中门电路的源极和漏极
+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+                         %# |
|P#% | MMMMM |                         %#P|
| #% | MMMMM |                         %# |          I 数据I/O单元
|I#% | MMMMM |                         %#p|          p 核心电源单元
| #% +-------+                         %# |          P I/O电源单元
|I#%                                   %#I|          M 宏单元
| #%                         +-------+ %# |          # I/O电源环
|I#%                         | MMMMM | %#I|          % 核心电源环
| #%                         +-------+ %# |          = 电源条线
|p#%===================================%#p|
| #%                                   %# |
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

电源规划的示意图

+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+                         %# |
|P#% | MMMMM |                         %#P|
| #% | MMMMM |                         %# |          I 数据I/O单元
|I#% | MMMMM |                         %#p|          p 核心电源单元
| #% +-------+                         %# |          P I/O电源单元
|I#%                                   %#I|          M 宏单元
| #%                         +-------+ %# |          # I/O电源环
|I#%                         | MMMMM | %#I|          % 核心电源环
| #%                         +-------+ %# |          = 电源条线
|p#%===================================%#p|
| #%                                   %# |
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+
  • 将来芯片工作时, 电源通过供电引脚输入芯片, 通过电源环传播到芯片的四周, 并通过电源条线传播到芯片各区域的标准单元, 对晶体管的源极和漏极施加相应电压, 从而使其按照晶体管的电气特性进行工作
  • 一些复杂芯片还要支持电源管理相关功能, 如多电压域, 电源门控等

布局

布局的规则

标准单元的摆放并非任意均可, 需要遵循一定的规则:

 

  1. 标准单元之间不能互相重叠
    • 标准单元是通过底层的晶体管和低层金属层的连接实现的
    • 不同标准单元的晶体管应该占用这些层次的不同位置
      • 也即, 所有标准单元的\(z\)轴坐标分量都是相同的
---------------   M7    <----- 电源规划
  | | | | | |
---------------   M6    <----- 时钟树综合
  | | | | | |
---------------   M5    <-+
  | | | | | |             |
---------------   M4      |
  | | | | | |             +--- 布线
---------------   M3      |
  | | | | | |             |
---------------   M2    <-+
  | | | | | |
---------------   M1    <-+
  | | | | | |             +--- 布图规划, 布局
===============  多晶硅 <-+
+++++++++++++++  绝缘层
ooooooooooooooo  硅衬底

因此从\(xOy\)平面的投影(即芯片的俯视图)来看, 标准单元之间不能相互重叠

布局的规则(2)

  1. 标准单元的摆放需要满足一定的对齐条件
    • 标准单元的SITE和轨道数等属性, 本质上用于约束标准单元在布局时的位置
      • 按SITE对齐可以让电源规划阶段所设置的电源条线轻松地接入到标准单元中(如下图所示)
      • 轨道数的概念可以让后续的布线阶段较轻松地满足金属层走线的最小间距要求(即PITCH属性)
        --- +------+  +------------+----------+    +---+
         ^  |======|==|============|==========|====|===| <- VSS power stripe
         |  |      |  |            |          |    |   |
height --+  |      |  |            |          |    |   |
         |  |      |  |            |          |    |   |
         v  |======|==|============|==========|====|===| <- VDD power stripe
        --- +------+  +------------+----------+    +---+
               OR2        AOI221       AND4        NAND2

如果不对标准单元的摆放满足对齐要求, EDA工具将需要花费很大的代价来生成一个满足工艺要求的设计方案

布局的示意图

+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+  @@  @@  @           @ @%# |
|P#% | MMMMM |   @      @@@      @@  @@%#P|
| #% | MMMMM |  @    @                @%# |          I 数据I/O单元
|I#% | MMMMM |                @        %#p|          p 核心电源单元
| #% +-------+   @   @@           @    %# |          P I/O电源单元
|I#%                                   %#I|          M 宏单元
| #% @   @   @   @@  @       +-------+ %# |          # I/O电源环
|I#% @    @  @   @   @   @   | MMMMM | %#I|          % 核心电源环
| #% @   @   @   @   @    @  +-------+@%# |          = 电源条线
|p#%===================================%#p|          @ 标准单元
| #% @   @       @   @    @     @     @%# |
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

一些布局阶段中的优化措施

  • 将逻辑上相近的标准单元靠近摆放
    • 如果逻辑上相近的两个标准单元距离很远, 在布线阶段将会引入较高的线延迟, 从而降低芯片的频率
  • 对标准单元进行镜像对称
    • LEF文件中的SYMMETRY属性表示标准单元可沿\(x\)轴或沿\(y\)轴对称放置
      • 从而优化布局的效果(如到某端口的线延迟等)
    • 例如, 某标准单元A左侧的端口p需要与A右侧的另一个标准单元B相连
      • 此时可以将A沿\(y\)轴进行镜像对称, 使得端口p位于A的右侧, 从而让pB的距离更近, 降低线延迟
  • 拥塞缓解
    • 标准单元过分集中在某区域, 可能会使得后续的布线工作变得困难
    • EDA工具将过分集中的标准单元进行分散处理, 从而给布线阶段预留更多的空间

时钟树综合

时钟树的性质

时钟网络通常只有一个或少数几个源头(时钟引脚或锁相环的输出)

  • 将这些源头看作根节点, 时序单元看作叶子节点
  • 时钟网络就像是从根节点向叶子节点生长的一棵或几颗树, 因此称为时钟树

 

构建的时钟树需要满足:

  1. 低延迟(low latency)
    • 给时钟信号的传播引入延迟的因素有很多:
      • 如时钟信号的走线, EDA工具应尽可能减少时钟源到触发器时钟端口的距离
      • 如时钟源本身的延迟, EDA工具无法优化, 应在建模时钟信号延迟时考虑这些因素

时钟树的性质(2)

  1. 低偏斜(low skew)
    • 在RTL设计时, 我们会认为理想时钟的信号同时到达所有的触发器
    • 但实际上, 不同的触发器在布局阶段被放置在不同的位置
      • 同一个时钟信号到达不同触发器的所需时间并不相同(时钟偏斜)
    • EDA工具需要仔细规划时钟信号的走线, 使得时钟源到各触发器的线延迟尽可能均匀

 

  1. 低抖动(low jitter)
    • 抖动是电信号天然存在的特性, 无法通过EDA工具优化或消除
    • 因此EDA工具应在建模时钟信号延迟时考虑抖动的影响
      • 否则EDA工具对时钟信号延迟的估计可能会过于乐观
      • 将来芯片在真实场景下工作时, 真实的抖动可能会使得电路违反过于乐观的时序条件, 最终令芯片无法正确工作

时钟树的性质(3)

  1. 高驱动能力(high drive)
    • 为了实现时钟信号的高驱动能力, 一般会在时钟树中插入专用的时钟缓冲器

 

这些性质之间还存在一定的相互制约关系

  • 一些走线拓扑具有低偏斜的性质
    • 但其线延迟较高
  • 插入时钟缓冲器可以提高时钟信号的驱动能力
    • 但也会改变相应路径上的延迟, 从而可能让偏斜变得严重

 

因此, EDA工具需要综合考虑这些技术对时钟树的影响, 从整体上构建出满足需求的时钟树

时钟树的示意图

考虑到简洁性, 下图只展示了时钟树的一部分作为示意

  • 实际上时钟树应连接到所有时序单元
+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+  @@o @@  @           @ @%# |
|P#% | MMMMM |   @o     @@@      @@ o@@%#P|
| #% | MMMMM |  @ o  @    o         o @%# |          I 数据I/O单元
|I#% | MMMMM |    o       o   @     o  %#p|          p 核心电源单元
| #% +-------+   @o  @@   o       @ o  %# |          P I/O电源单元
|I#% oooooooooooooooooooooooooooooooooo%#I|<-- clk   M 宏单元
| #% @   @   @   @@o @    o  +-------+ %# |          # I/O电源环
|I#% @    @  @   @ o @   @o  | MMMMM | %#I|          % 核心电源环
| #% @   @   @   @ o @    @  +-------+@%# |          = 电源条线
|p#%===================================%#p|          @ 标准单元
| #% @   @       @ o @    @     @   oo@%# |          o 时钟树
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

布线

布线的策略

作为大规模和超大规模集成电路, 标准单元的数量非常多

  • 标准单元之间的走线也很多
  • 只要有一条走线无法连通, 布线就会失败

为了提升布线成功的概率, 一般将布线任务分成两个阶段进行:

  • 全局布线(Global Routing)和详细布线(Detailed Routing)

 

以城市的道路规划为例

  • 全局布线就好比规划城市的主干道
    • 一方面要保证城市中不同地点之间的连通性
    • 另一方面不能让主干道过分迂回, 尽量以较短的距离实现连通
    • 最后还需要避免某些区域过分拥堵
  • 而详细布线就相当于在主干道上进一步划分真正的车道
    • 让车辆可以在车道上行驶, 从而到达由主干道连通的地点

布线的策略(2)

全局布线的目标: 规划粗粒度的走线方案, 并为这些方案分配布线资源

  • 资源 = 轨道数量, 走线方向, 以及金属层之间的通孔等

 

布线工具在全局布线阶段会:

  1. 将多个轨道看成一个网格
  2. 然后尝试通过网格把标准单元连接起来, 得到一些网格路径(类似道路规划中的主干道)
    • 寻找一套距离较短, 同时避免过分拥塞的网格路径连通方案

 

详细布线的目标: 在全局布线的基础上, 在网格路径内部确定走线的轨道

  • 通过这些走线的轨道将标准单元真正地连接起来

布线的示意图

+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+..@@o @@..@...   .....@.@%# |
|P#% | MMMMM |  .@o.....@@@..... @@ o@@%#P|
| #% | MMMMM |..@ o  @    o   .   . o @%# |          I 数据I/O单元
|I#% | MMMMM |  . o       o   @   . o .%#p|          p 核心电源单元
| #% +-------+  .@o  @@...o   ....@ o .%# |          P I/O电源单元
|I#% oooooooooooooooooooooooooooooooooo%#I|<-- clk   M 宏单元
| #% @ ..@...@ ..@@o @... o  +-------+.%# |          # I/O电源环
|I#% @....@ .@.. @ o @. .@o .| MMMMM |.%#I|          % 核心电源环
| #% @...@...@  .@ o @  ..@..+-------+@%# |          = 电源条线
|p#%===================================%#p|          @ 标准单元
| #% @...@      .@ o @... @.....@.. oo@%# |          o 时钟树
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|          . 走线
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+

 

至此, 物理设计的工作已全部完成, 芯片中每一层的内容都已确定

  • 可以生成GDS版图文件, 来描述芯片中每一层的所有标准单元和走线

签核分析

签核分析(Sign-off)

目标: 保证物理设计过程得到的版图是可生产的

  • 需要保证版图满足前端设计的指标, 包括PPA等
  • 还需要保证版图满足晶圆厂的生产制造要求
  • 严格来说, 签核分析并不属于物理设计的范畴, 但是不可或缺的

 

签核分析的具体工作包括但不限于:

  1. 静态时序分析
    • 物理设计工作完成后, 所有标准单元的在三维空间中的位置都已确定, 所有走线的方向, 长度和拐角等细节都已明了
    • 因此可以准确建模出电路中每一条路径的逻辑延迟和线延迟
      • 包括时钟信号的传播延迟, 抖动和偏斜
    • 综合这些因素, 得到更准确的时序评估结果
      • 从而确定是否满足用户指定的频率指标

签核分析的具体工作

  1. 功耗分析
    • 物理设计工作完成后, 可以得到更准确的功耗评估结果
      • 从而确定是否满足用户指定的功耗指标

 

  1. 信号完整性分析
    • 分析相邻走线之间的串扰(crosstalk)现象
      • 确保信号在噪声环境和串扰条件下仍然能正确传输, 不失真

 

  1. 物理验证(Physical Verification, 简称PV)
    • 对芯片进行物理结构上的检查
    • 若发现违例, 则需要修改布局布线的结果, 重新进行检查

物理验证的检查工作

  • 设计规则检查(Design Rule Check, DRC)
    • 保证GDS版图满足晶圆厂的设计规则
    • 包括了多晶硅层和各种金属层的检查规则
      • 如最小线宽要求, 最小间距要求等
    • 有的PDK会将这些规则以文本形式记录到文件中
      • 例如, 某PDK中的一些规则如下:
# metal1层的最小线宽是65nm
metal1.width(65.nm, euclidian).output("METAL1.1", "METAL1.1 : Minimum width of metal1 : 65nm")

# via6层的最小间距是160nm
via6.space(160.nm, euclidian).output("VIA6.2", "VIA6.2 : Minimum spacing of via6 : 160nm")
  • 电学规则检查(Electrical Rule Check, ERC)
    • 检查电路中是否存在走线悬空, 短路等电气问题
  • 版图和原理图比较(Layout Versus Schematic, LVS)
    • 确认GDS版图(物理电路)与网表(逻辑电路)的一致性

从版图到芯片

从版图到芯片

从可流片的版图到可运行的芯片, 还需要经过以下步骤:

  1. 后端设计团队将芯片的GDS版图提交给晶圆厂后, 晶圆厂将会按照版图制作出掩膜(mask)
  1. 晶圆厂用掩膜批量生产出晶圆(wafer)
    • 一个晶圆上有多个裸片(die), 晶圆厂对晶圆进行切割, 得到一批裸片
  1. 晶圆厂将裸片交给封装厂, 由封装厂按照计划的封装方案对裸片进行封装, 得到芯片成品
  1. 封装厂将芯片成品交给开发板团队, 由开发板团队设计开发板, 并将芯片成品焊接到开发板上
  1. 将开发板交给用户, 用户在芯片上部署软件并运行

总结

物理设计 = 从网表到版图

  1. 布图规划: 确定芯片大小, 并摆放一些后续流程不会调整位置的单元
  2. 电源规划: 在芯片层面规划电源走线的分布, 保证芯片供电的可靠性
  3. 布局: 将标准单元摆放在芯片中, 确定每个标准单元的物理位置
  4. 时钟树综合: 构建时钟网络, 将时钟信号输送到所有时序单元的时钟端
  5. 布线: 根据网表的拓扑关系, 将布局阶段的标准单元通过走线连接起来
+-----------------------------------------+
|  I  I  P  p  I  I  P  p  I  I  P  p  I  |
| ####################################### |
|p#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#I|
| #% +-------+..@@o @@..@...   .....@.@%# |
|P#% | MMMMM |  .@o.....@@@..... @@ o@@%#P|
| #% | MMMMM |..@ o  @    o   .   . o @%# |          I 数据I/O单元
|I#% | MMMMM |  . o       o   @   . o .%#p|          p 核心电源单元
| #% +-------+  .@o  @@...o   ....@ o .%# |          P I/O电源单元
|I#% oooooooooooooooooooooooooooooooooo%#I|<-- clk   M 宏单元
| #% @ ..@...@ ..@@o @... o  +-------+.%# |          # I/O电源环
|I#% @....@ .@.. @ o @. .@o .| MMMMM |.%#I|          % 核心电源环
| #% @...@...@  .@ o @  ..@..+-------+@%# |          = 电源条线
|p#%===================================%#p|          @ 标准单元
| #% @...@      .@ o @... @.....@.. oo@%# |          o 时钟树
|P#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#P|          . 走线
| ####################################### |
|  I  p  P  I  I  p  P  I  I  p  P  I  I  |
+-----------------------------------------+