芯片设计流程概览:从RTL到GDSII的完整流程

做芯片后端设计这么多年,我经常被问到同一个问题:「芯片到底是怎么从代码变成实物的?」

说实话,刚入行那会儿,我也觉得这过程很神秘。RTL 是啥?GDSII 又是啥?中间到底经历了多少步骤?

今天,我就带你走一遍这个流程。不扯虚的,全是实战中摸爬滚打出来的经验。

从 RTL 到 GDSII:一条清晰的路径

整个芯片设计流程,说白了就是把功能描述(RTL)一步步变成物理版图(GDSII)。我习惯把它分成两大阶段:

  • 前端设计:负责功能实现,输出网表
  • 后端设计:负责物理实现,输出 GDSII

你想想看,前端像建筑师画图纸,后端像施工队盖楼。图纸画得再好,施工出问题,楼照样塌。

我遇到过不少项目,前端 RTL 仿真跑得飞起,结果后端一综合,时序全崩了。为什么?因为前端没考虑物理实现的约束。所以,前后端一定要尽早对齐,别等到最后才发现问题。

完整流程的 7 个关键步骤

嗯,这里我按实际项目中的顺序,给你拆解一下:

  1. RTL 设计 & 仿真:用 Verilog/VHDL 写代码,验证功能正确性。这一步我建议多跑 corner case,别只盯着 happy path。
  2. 逻辑综合:把 RTL 转成门级网表。说白了,就是把「if-else」变成「与或非门」。这里要注意约束文件的完整性,我曾经因为漏写一条 false path,导致综合结果多出 20% 的面积。
  3. 形式验证:检查综合后的网表跟 RTL 功能是否一致。这一步很多人会跳过,但我劝你别省。有一次流片回来发现功能不对,查了三个月,最后发现是综合工具的一个 bug。从那以后,形式验证我一次都没落下。
  4. DFT(可测试性设计):插入扫描链、BIST 等测试结构。嗯,这里有个坑——DFT 插入后会影响时序,一定要提前评估。
  5. 后端物理设计:包括布局、时钟树综合、布线。这是最耗时的阶段,也是我今天要讲的重点。
  6. 物理验证:检查 DRC、LVS、ERC。说白了,就是看你的版图有没有违反工艺规则。我见过最惨的一次,DRC 报了 10 万个错误,整个团队加班两周才清完。
  7. 签收(Tapeout):生成 GDSII 文件,交给晶圆厂流片。这一步要检查所有文件是否齐全,少一个 mask layer 都可能让芯片报废。

顶层集成与版图合并的角色定位

在整个流程中,顶层集成和版图合并是后端物理设计里最容易被低估的环节。

很多人觉得,不就是把各个模块拼在一起吗?有什么难的?

我告诉你,大错特错

顶层集成,说白了就是把多个子模块(block)放到一个顶层芯片里,并处理好它们之间的连接、供电、时钟、IO 等。你想想看,一个芯片可能有几十个模块,每个模块都有自己的电源域、时钟域、复位策略。把它们拼在一起,就像把几十个独立的小城市合并成一个超级大都市——交通、水电、通信,哪样都不能乱。

我参与过一个 SoC 项目,顶层集成了 12 个不同的 IP 模块。刚开始觉得很简单,结果一跑顶层 LVS,发现电源网络短路了。查了三天,最后发现是两个模块的 VDD 网络在顶层意外连在了一起。从那以后,我每次做顶层集成,都会先画一张电源网络拓扑图,把每个模块的供电关系理清楚。

版图合并呢?它跟顶层集成是孪生兄弟。版图合并指的是把各个子模块的 GDSII 文件合并到顶层 GDSII 中,并处理模块之间的缝隙、填充、dummy 插入等

这里有个关键点:合并顺序。我建议先合并大模块,再合并小模块。为什么?因为大模块占地方,先放好大模块,小模块可以见缝插针。反过来,小模块先放,大模块可能放不进去,最后还得重来。

顶层集成与版图合并的核心任务

我整理了一个表格,方便你对照:

任务 说明 常见坑
电源网络规划 设计顶层电源网格,确保每个模块供电充足 IR drop 超标,模块供电不足导致功能失效
时钟分配 将时钟信号从 PLL 分配到各个模块 时钟 skew 过大,跨模块时序违例
IO 规划 安排芯片的输入输出引脚位置 IO 拥挤导致布线困难,信号质量下降
模块间布线 连接不同模块之间的信号线 长线延迟大,跨模块路径时序不收敛
物理验证 检查 DRC/LVS/ERC 等 模块边界处出现 DRC 违例,需要手动修复
版图合并 将子模块 GDSII 合并到顶层 合并顺序错误导致模块重叠或空隙

一张图看懂顶层集成与版图合并

下面这张 SVG 流程图,是我自己画的。它展示了顶层集成与版图合并在整个芯片设计流程中的位置:

芯片设计流程概览:顶层集成与版图合并的角色 前端设计阶段 RTL设计 → 功能仿真 → 逻辑综合 → 形式验证 → DFT插入 后端物理设计阶段 布局规划 → 单元放置 → 时钟树综合 → 布线 → 物理验证 ★ 顶层集成与版图合并 ★ 电源网络规划 | 时钟分配 | IO规划 | 模块间布线 | 物理验证 子模块GDSII合并 | 缝隙填充 | dummy插入 签收(Tapeout) GDSII生成 → 最终检查 → 交付晶圆厂流片 本课程核心内容

顶层集成中的常见陷阱

做顶层集成这么多年,我踩过的坑不少。挑几个典型的跟你说说:

⚠️ 陷阱一:电源网络规划不充分

我曾经在一个项目中,顶层电源网格设计得太稀疏。结果流片回来,芯片在高速运行时,某个模块的电压降到了标称值的 85%。芯片直接罢工。后来我们花了两个月,重新 tapeout 才解决。

建议:做顶层电源规划时,一定要跑 IR drop 分析。别偷懒,多跑几个 corner。

⚠️ 陷阱二:时钟分配忽略跨模块路径

时钟树综合时,很多人只关注模块内部的时钟 skew,忽略了跨模块路径。结果顶层时序分析时,发现一条跨模块路径的 setup 违例了 500ps。最后只能降频使用。

建议:在顶层做时钟树综合时,把跨模块路径的时序约束写清楚。我习惯在顶层加一些 buffer 来调整时钟延迟。

💡 我的个人习惯

每次做顶层集成前,我都会先画一张模块关系图。图上标清楚每个模块的输入输出信号、时钟域、电源域。这张图不花哨,但非常实用。它能帮你提前发现很多潜在问题。

版图合并的实操要点

版图合并听起来简单,做起来全是细节。我总结了几条实操经验:

  • 合并顺序很重要:先大后小,先核心后外围。大模块放好了,小模块自然能找到位置。
  • 注意模块边界对齐:两个模块的边界如果没对齐,合并后会出现缝隙或重叠。我建议在模块设计阶段就统一边界格点。
  • dummy 填充别省:模块合并后,边界处往往会有空隙。这些空隙如果不填充 dummy,会影响 CMP 平坦度,导致良率下降。
  • 跑一遍顶层 DRC:合并完成后,一定要跑顶层 DRC。很多 DRC 违例都出现在模块边界处,比如间距违例、天线违例等。

嗯,这里还要提醒一点:版图合并不是一次性的工作。随着项目推进,模块可能会修改,版图也需要重新合并。所以,我建议把合并流程脚本化,每次合并都跑同一个脚本,避免人为失误。

总结一下

顶层集成与版图合并,说白了就是把芯片的各个部分拼成一个完整的、可制造的物理设计。它不像前端设计那样「高大上」,但它是芯片能否成功流片的关键一环。

我见过太多项目,前端设计完美,后端物理设计也做得不错,结果在顶层集成阶段翻了车。为什么?因为顶层集成涉及的东西太杂了——电源、时钟、IO、布线、验证,哪个环节出问题,芯片都可能报废。

所以,我的建议是:重视顶层集成,把它当作一个独立的、重要的设计阶段来对待。别把它当成「最后拼一下」的收尾工作。

好了,这一章的内容就到这里。记住我今天讲的这些坑和经验,你在实际项目中一定能少走很多弯路。

📌 核心要点回顾
  • 芯片设计流程:RTL → 综合 → 物理设计 → 顶层集成 → 版图合并 → GDSII
  • 顶层集成负责模块间的连接、供电、时钟、IO 等
  • 版图合并负责子模块 GDSII 的拼接、填充、验证
  • 常见陷阱:电源规划不足、跨模块时钟问题、模块边界 DRC 违例
  • 实操建议:先大后小、统一格点、脚本化合并流程
专注资料整理