第三章 封装与芯片的协同:芯片-封装-系统协同设计流程、接口定义与数据交换

各位好,我是老陈。在封装设计这行摸爬滚打了十几年,今天咱们聊聊一个特别关键的话题——芯片和封装怎么“握手”。

很多人觉得,芯片设计是芯片设计的事,封装是封装的事,各干各的就行。我告诉你,这种想法在十年前或许还行得通,放到现在,尤其是做先进封装的项目,那就是给自己挖坑。

说白了,芯片和封装必须协同。怎么协同?就是通过一套标准的数据交换格式,把芯片的“底牌”告诉封装,把封装的“约束”反馈给芯片。今天我就把这里面的门道给你捋清楚。

3.1 芯片-封装-系统协同设计流程

先说说流程。我习惯把协同设计分成三个阶段:

  • 早期规划阶段:芯片还没开始画版图,封装团队就得介入。这时候主要定IO布局、电源方案、Bump map(凸点布局)。
  • 中期迭代阶段:芯片版图做到一半,封装开始做基板设计。两边数据来回交换,发现问题及时改。
  • 后期签核阶段:芯片GDSII定稿,封装也基本完成。这时候做最终检查,确保没有遗漏。

嗯,这里有个坑。我记得有一次,芯片团队把IO位置改了,但没通知封装。结果封装基板都画好了,发现Bump对不上。那叫一个惨,基板重做,周期直接拖了两周。所以,流程中一定要有变更通知机制。

核心原则:芯片和封装的数据交换,越早越好,越频繁越好。不要等到芯片快流片了才想起来跟封装对数据。

下面这张图是我自己总结的协同设计流程,你一看就明白:

早期规划阶段 IO布局 / Bump map 电源方案 / 热分析 中期迭代阶段 芯片版图 vs 基板设计 数据交换 / 问题修正 后期签核阶段 GDSII定稿 / 最终检查 DRC / LVS 验证 数据交换核心:LEF/DEF ↔ GDSII ↔ 封装设计数据 关键活动: 芯片IO规划 定义Bump位置 封装基板设计 布线 / 叠层 系统级验证 SI / PI / 热 反馈与迭代(发现问题,返回修改) ⚠ 注意:任何阶段的数据变更,必须通知所有相关方

3.2 接口定义:芯片给封装看什么?

芯片设计完成后,要给封装提供哪些信息?我列个清单:

  • Bump map(凸点布局图):芯片上所有Bump的位置、尺寸、间距、功能定义。
  • IO cell 信息:每个IO的驱动能力、电平标准、ESD等级。
  • 电源域划分:哪些Bump是VDD,哪些是VSS,哪些是模拟电源。
  • 热参数:芯片的功耗分布、热点位置。
  • 机械约束:芯片尺寸、厚度、翘曲要求。

小技巧:我个人习惯在Bump map里加一个“功能分组”的色标。比如红色是高速信号,蓝色是电源,绿色是低速控制信号。这样封装工程师一眼就能看出哪些线需要特别注意。

你想想看,如果封装不知道某个Bump是高速差分信号,随便给它绕了个长线,那信号质量肯定完蛋。所以接口定义越详细越好。

3.3 数据交换格式:LEF/DEF 和 GDSII

好了,到了最核心的部分。芯片和封装之间怎么交换数据?靠的就是下面这几种格式。

3.3.1 LEF(Library Exchange Format)

LEF 是芯片设计库的“抽象视图”。它不包含版图的全部细节,只包含封装需要的信息:

  • IO cell 的尺寸和形状
  • Bump 的位置和层数
  • 电源环的位置
  • 禁止布线区域

说白了,LEF 就是芯片的“简化版地图”。封装工程师不需要知道芯片内部每个晶体管长什么样,只需要知道“哪里能放Bump,哪里不能碰”。

举个例子,一个典型的 LEF 片段长这样:

MACRO my_io_cell
  CLASS PAD ;
  FOREIGN my_io_cell 0 0 ;
  ORIGIN 0 0 ;
  SIZE 100 BY 200 ;
  SYMMETRY X Y ;
  PIN vdd
    DIRECTION INOUT ;
    USE POWER ;
    PORT
      LAYER metal1 ;
        RECT 10 10 90 30 ;
    END
  END vdd
  PIN vss
    DIRECTION INOUT ;
    USE GROUND ;
    PORT
      LAYER metal1 ;
        RECT 10 50 90 70 ;
    END
  END vss
  PIN signal
    DIRECTION INPUT ;
    USE SIGNAL ;
    PORT
      LAYER metal1 ;
        RECT 10 100 90 120 ;
    END
  END signal
  OBS
    LAYER metal1 ;
      RECT 0 0 100 200 ;
  END
END my_io_cell

嗯,这里要注意。LEF 里的 OBS 区域就是“禁止布线区”。我曾经遇到过一个项目,封装工程师没注意 OBS 区域,把走线布到了芯片的敏感区域,结果导致芯片内部信号串扰。从那以后,我每次都会在 LEF 里把 OBS 标得清清楚楚。

3.3.2 DEF(Design Exchange Format)

DEF 描述的是芯片的“实例化信息”。它告诉封装:

  • 芯片用了哪些 IO cell
  • 这些 cell 放在什么位置
  • Bump 之间的连接关系
  • 电源网络的结构

DEF 和 LEF 是配套使用的。LEF 是“零件库”,DEF 是“装配图”。

一个简单的 DEF 片段:

DESIGN my_chip ;
  UNITS DISTANCE MICRONS 1000 ;
  COMPONENTS 3 ;
    - io1 my_io_cell + PLACED ( 100 200 ) N ;
    - io2 my_io_cell + PLACED ( 300 200 ) N ;
    - io3 my_io_cell + PLACED ( 500 200 ) N ;
  END COMPONENTS ;
  PINS 3 ;
    - vdd1 + NET vdd + LAYER metal1 ( 50 50 ) ( 150 150 ) ;
    - vss1 + NET vss + LAYER metal1 ( 250 50 ) ( 350 150 ) ;
    - sig1 + NET data + LAYER metal1 ( 450 50 ) ( 550 150 ) ;
  END PINS ;
  NETS 3 ;
    - vdd ( vdd1 ) ;
    - vss ( vss1 ) ;
    - data ( sig1 ) ;
  END NETS ;
END DESIGN

3.3.3 GDSII(Graphic Design System II)

GDSII 是芯片的“完整版图”。它包含了芯片所有层的几何图形。封装工程师拿到 GDSII 后,可以:

  • 精确测量芯片尺寸和Bump位置
  • 检查Bump与芯片内部电路的间距
  • 做详细的物理验证

但 GDSII 有个问题——文件太大。一个复杂的 SoC,GDSII 可能几十个GB。所以实际项目中,封装团队通常只拿 GDSII 做最终检查,日常迭代用 LEF/DEF 就够了。

重要提醒:GDSII 是二进制格式,不同工具之间可能存在版本兼容问题。我建议在项目开始时,芯片和封装团队就约定好 GDSII 的版本(比如 GDSII Stream Format 7.0),避免最后关头出幺蛾子。

3.4 数据交换的常见问题与避坑

做数据交换这么多年,我踩过的坑不少。给你总结几个最常见的:

  1. 坐标不一致:芯片的坐标原点和封装的坐标原点没对齐。结果Bump位置全偏了。
  2. 单位搞错:芯片用微米,封装用纳米,或者反过来。一换算就出问题。
  3. 层号混乱:芯片的顶层金属在封装看来可能是底层。层号对应不上。
  4. 版本过旧:封装拿到的 LEF 是两周前的版本,芯片早就改了Bump位置。

避坑指南:我曾经因为坐标原点没对齐,导致整个Bump map偏移了50微米。基板都投板了才发现。从那以后,我要求每次数据交换都必须附带一个“坐标核对表”,双方签字确认。

3.5 数据交换流程总结

最后,我把整个数据交换的流程总结成一张表:

阶段 芯片输出 封装输入 交换格式
早期规划 IO规划、Bump map草案 基板叠层、线宽线距 Excel / PDF / LEF
中期迭代 LEF/DEF、Bump map更新 基板布线、过孔位置 LEF / DEF / GDSII
后期签核 GDSII、DRC报告 封装GDS、装配图 GDSII / OASIS

说白了,数据交换的核心就三个字:对得上。坐标对得上,层号对得上,版本对得上。只要这三点做到位,协同设计就成功了一大半。

好了,这一章的内容就到这里。记住,芯片和封装不是孤立的,它们是一个整体。数据交换就是连接它们的桥梁。桥修好了,项目才能走得顺。

个人建议:如果你刚开始做协同设计,先从小项目练手。把LEF/DEF的生成和解析流程跑通,再去做复杂芯片。别一上来就搞7nm、2.5D封装,容易翻车。

可可精品资料库