第二章 芯片制造流程与EDA工具链:从RTL设计到GDSII的完整流程
说实话,很多做逆向的朋友一听到「芯片制造流程」就头大。觉得那是晶圆厂的事,跟自己没关系。
但我得说句实在话——不懂制造流程,你就看不懂GDSII文件里的那些图形到底在干嘛。你看到的那些多边形、那些层次,背后都是有故事的。
这一章,我就带你走一遍从RTL到GDSII的完整流程。重点不是教你用工具,而是让你理解每个环节EDA工具扮演了什么角色,以及这些环节在逆向工程中意味着什么。
核心观点:EDA工具链就是芯片的「设计-验证-制造」流水线。逆向工程,本质上是把这个流水线倒着走一遍。
2.1 RTL设计:一切从这里开始
RTL,全称是Register Transfer Level。说白了,就是用代码描述数字电路的行为。
你写的是 always @(posedge clk),但最终它会被映射成真实的触发器、组合逻辑、连线。我见过不少新手以为RTL就是最终设计——其实它只是「设计意图」的文本表达。
逆向视角:当你拿到一个GDSII文件,想理解它的功能,第一步就是尝试恢复出它的RTL描述。这个过程叫「网表到RTL的逆向综合」,后面章节我会详细讲。
2.2 逻辑综合:把「想法」变成「电路」
逻辑综合,就是把RTL代码翻译成门级网表。EDA工具会做三件事:
- 翻译:把Verilog/VHDL转成布尔表达式
- 优化:根据面积、速度、功耗的约束,选择最优的门电路组合
- 映射:把逻辑门映射到目标工艺库里的标准单元
举个例子,你写了个 a & b | c,综合工具可能会把它实现成两个与非门加一个或门,也可能用一个复合门——取决于你给的约束。
我踩过的坑:有一次我写了个很复杂的组合逻辑,综合后面积爆了。后来发现是代码里有个不必要的优先级嵌套。所以我现在写RTL时,会刻意考虑综合工具会怎么「理解」我的代码。
2.3 布局布线:把「电路」放到「芯片」上
布局布线,简称P&R(Place and Route)。这是EDA工具最「物理」的一步。
简单说:
- 布局:把标准单元(门、触发器)放到芯片的指定位置上
- 布线:用金属层把这些单元连起来
你想想看,一个现代芯片上有几亿个晶体管,每个都要精确放置、精确连线。没有EDA工具,这事根本不可能手工完成。
注意:布局布线阶段会产生大量的中间文件,比如DEF、LEF。这些文件在逆向工程中非常有用——它们包含了单元的精确位置和连线信息。我建议你在做逆向时,优先找这些文件,比直接看GDSII轻松得多。
2.4 物理验证:检查「设计」和「制造」的差距
物理验证,是流片前的最后一道关卡。主要做三件事:
| 验证项 | 全称 | 检查什么 | 逆向意义 |
|---|---|---|---|
| DRC | 设计规则检查 | 线宽、间距、包围等制造规则 | 帮你理解工艺限制 |
| LVS | 版图与原理图一致性检查 | 版图连接是否和网表一致 | 验证你提取的网表是否正确 |
| RCX | 寄生参数提取 | 提取连线电阻电容 | 用于时序分析 |
嗯,这里要注意——物理验证工具(比如Calibre)在逆向工程中也有大用。你可以用它来检查自己提取的版图结构是否合理。
2.5 GDSII输出:最终交付物
GDSII是芯片设计的最终输出格式。晶圆厂就靠这个文件来制作掩模版。
GDSII文件里存的是啥?说白了就是一堆多边形,每个多边形属于一个层(比如金属1层、多晶硅层)。这些多边形组合起来,就构成了芯片的物理版图。
个人经验:我刚开始看GDSII文件时,觉得就是一堆乱画的图形。后来发现,每个图形都有它的「语法」——比如电源线的宽度通常是固定的,时钟树的走法也有规律。看懂这些规律,逆向就成功了一半。
2.6 逆向视角:EDA工具链的「反向」应用
讲完正向流程,咱们聊聊逆向。
逆向工程,其实就是把上面这个流程倒着走一遍:
- 从GDSII提取版图 → 用KLayout或Calibre打开GDSII
- 从版图提取网表 → 用Calibre LVS或NetTran提取晶体管级网表
- 从晶体管网表恢复门级网表 → 用自定义脚本识别标准单元
- 从门级网表恢复RTL → 用逆向综合工具(比如我们自己写的)
我曾经接手过一个项目,客户只给了GDSII文件,连文档都没有。我就是按这个流程,一步步把整个芯片的功能还原了出来。花了三个月,但最后连客户都惊讶——我们还原出的RTL和他们原始设计几乎一致。
核心思路:EDA工具既能「正向」设计芯片,也能「反向」分析芯片。关键是你得知道每个工具能输出什么中间文件,以及这些文件里藏着什么信息。
好了,这一章就到这里。下一章我们会深入GDSII文件格式本身——它到底是怎么存储那些多边形的?为什么一个文件能描述整个芯片?到时候我会手把手带你解析GDSII的二进制结构。
公众号:蓝海资料掘金营,微信deep3321