第三章 封装与芯片的协同:芯片-封装-系统协同设计流程、接口定义与数据交换
各位好,我是老陈。在封装设计这行摸爬滚打了十几年,今天咱们聊聊一个特别关键的话题——芯片和封装怎么“握手”。
很多人觉得,芯片设计是芯片设计的事,封装是封装的事,各干各的就行。我告诉你,这种想法在十年前或许还行得通,放到现在,尤其是做先进封装的项目,那就是给自己挖坑。
说白了,芯片和封装必须协同。怎么协同?就是通过一套标准的数据交换格式,把芯片的“底牌”告诉封装,把封装的“约束”反馈给芯片。今天我就把这里面的门道给你捋清楚。
3.1 芯片-封装-系统协同设计流程
先说说流程。我习惯把协同设计分成三个阶段:
- 早期规划阶段:芯片还没开始画版图,封装团队就得介入。这时候主要定IO布局、电源方案、Bump map(凸点布局)。
- 中期迭代阶段:芯片版图做到一半,封装开始做基板设计。两边数据来回交换,发现问题及时改。
- 后期签核阶段:芯片GDSII定稿,封装也基本完成。这时候做最终检查,确保没有遗漏。
嗯,这里有个坑。我记得有一次,芯片团队把IO位置改了,但没通知封装。结果封装基板都画好了,发现Bump对不上。那叫一个惨,基板重做,周期直接拖了两周。所以,流程中一定要有变更通知机制。
核心原则:芯片和封装的数据交换,越早越好,越频繁越好。不要等到芯片快流片了才想起来跟封装对数据。
下面这张图是我自己总结的协同设计流程,你一看就明白:
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 数据交换的常见问题与避坑
做数据交换这么多年,我踩过的坑不少。给你总结几个最常见的:
- 坐标不一致:芯片的坐标原点和封装的坐标原点没对齐。结果Bump位置全偏了。
- 单位搞错:芯片用微米,封装用纳米,或者反过来。一换算就出问题。
- 层号混乱:芯片的顶层金属在封装看来可能是底层。层号对应不上。
- 版本过旧:封装拿到的 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封装,容易翻车。