硅片逆向工程:从显微照片到电路图,揭秘复古芯片的数字考古
1. 从硅片照片到电路图:一场硬核的数字考古
如果你和我一样,是个对八九十年代街机、游戏机内部那些神秘“黑疙瘩”充满好奇的老玩家或硬件爱好者,那么“硅片逆向工程”这个领域对你来说,绝对是一片充满宝藏的硬核乐园。我们不是在谈论用逻辑分析仪去嗅探现成芯片的引脚信号,那太“表层”了。我们干的是更底层、更物理的活儿:把那些封装好的定制芯片(ASIC)开封,用高倍显微镜拍下其硅片表面的金属连线照片,然后像侦探一样,一根线一根线地追踪,一个晶体管一个晶体管地辨认,最终还原出它的完整电路原理图,甚至用硬件描述语言(Verilog)将其“复活”。
这听起来像是科幻情节,但正是Furrtek等一群顶尖极客在“SiliconRE”项目中日复一日进行的工作。他们的目标,是那些早已停产、文档缺失、承载着无数经典游戏灵魂的定制芯片,比如Konami的“005885”精灵控制器、Capcom的“86S105”图形处理单元,或是SNK Neo Geo主板上的“NEO-ZMC2”。这些芯片是那个黄金时代的“武功秘籍”,理解了它们,就等同于掌握了那些经典画面和音效是如何从无到有被创造出来的核心机密。对于复古游戏保存、FPGA硬件仿真开发,乃至纯粹的硬件考古兴趣,这项工作都有着不可替代的价值。无论你是想深入理解硬件设计的老手,还是对数字电路逆向充满好奇的新人,跟随他们的足迹,都能窥见一个由金属、硅和逻辑构成的迷人世界。
2. 逆向工程的核心武器库:方法论与工具链解析
逆向一颗定制芯片,绝非仅凭一腔热血就能完成。它需要一套严谨的方法论和一系列特殊的工具,更像是一场结合了材料科学、显微成像和数字逻辑推理的综合性实验。
2.1 物理层揭秘:开封与成像
第一步是“开棺验尸”——芯片开封。商用芯片通常被环氧树脂或陶瓷封装严密保护。我们需要使用发烟硝酸或专用的激光开封机,小心翼翼地去除封装,暴露出指甲盖大小、甚至更小的硅晶粒。这个过程极具破坏性且危险(强酸!),必须在专业的通风橱内进行。
硅晶粒本身是半透明的,我们真正需要观察的是其表面的金属互连层。在光学显微镜下,这些金属走线会呈现出不同的颜色(取决于材料和厚度)。为了获得更高分辨率和景深,项目通常采用特制的显微照相系统,通过精确控制步进电机,对硅片进行棋盘格状的逐区域拍摄,最后再用软件(如Microsoft的Image Composite Editor或开源的Hugin)拼接成一幅数亿像素级的完整芯片“地图”。
注意:光照角度至关重要。侧向照明可以突出金属线条的立体边缘,而垂直照明则更适合观察接触孔和不同材料层的对比。有经验的操作者会通过调整光源,让不同功能的电路结构(如标准单元、存储器阵列、模拟模块)呈现出最清晰的纹理。
2.2 逻辑层重构:从连线到网表
拿到高清硅片照片后,真正的逆向工作才开始。这就像拿到一张没有图例的超级复杂城市道路卫星图,你需要认出哪条是电源“主干道”(VCC/GND),哪些是数据“公交线”(数据总线),哪些是控制“信号灯”(控制信号)。
- 电源与地线识别:这是基石。通常,最宽、遍布全芯片的金属带就是电源和地。它们会连接到每个逻辑单元的特定引脚。先标出它们,就建立了坐标参照系。
- 标准单元库匹配:80-90年代的芯片大量使用门阵列或标准单元设计。这意味着,芯片内部大量重复使用预先设计好的逻辑功能块,如与非门、或非门、触发器、缓冲器等。逆向者的宝贵财富就是已知标准单元的版图库。Furrtek在项目中整理的
Cells目录就是这样的宝藏。当你看到一片区域的结构与你库中的“FD2 双D触发器”单元完全匹配时,你就可以直接标注,而无需再去分析其内部每个晶体管。 - 手工追踪与标注:对于无法直接匹配的定制部分(如大型PLA、数据通路、模拟电路),就需要手工操作。使用图像软件(如GIMP),在不同图层上,用不同颜色的线条,一丝不苟地描出每一根金属线的走向,标记每一个晶体管(PMOS和NMOS,根据与衬底的连接关系区分),并记录它们的连接关系。
- 网表生成与整理:将所有连接信息提取出来,形成一个晶体管级网表。这只是一个连接关系的列表。随后,需要根据逻辑功能,将这些晶体管组合成更高抽象级的逻辑门(与门、或门等),再进一步整理成门级网表。这个过程极度考验耐心和空间想象力。
2.3 从网表到理解:仿真与验证
得到门级网表后,工作并未结束。这只是一份“静态”的电路连接图,它是否正确?功能是什么?需要验证。
- 逻辑仿真:将网表转换成Verilog或VHDL这样的硬件描述语言。虽然是从底层反推上来,但现代EDA工具可以对其进行仿真。你需要根据芯片的引脚定义,编写测试向量(输入信号序列),观察输出是否符合预期。
- 交叉验证:这是检验逆向正确性的黄金标准。如果这颗芯片用于已知的游戏系统(如Neo Geo的音频处理芯片),那么你可以将逆向出来的逻辑,在FPGA上实现,并替换到原机中进行实测。如果游戏能正常运行,音乐播放正确,那你的逆向就成功了99%。项目列表中很多“Done”的状态,正是通过了这样的实战检验。
- 文档化:最终产出不仅仅是网表或代码。一张清晰、标注完善的电路原理图(Schematic)是必不可少的。它让后来者能直观理解芯片架构。Furrtek分享的正是这些宝贵的原理图。
3. 实战剖析:以Konami 005885芯片为例
让我们深入一个具体案例,看看上述方法论是如何落地的。Konami 005885是80年代末期众多经典街机游戏(如《赤色要塞》、《魂斗罗》)的核心图形芯片之一,负责背景瓦片(Tile)和精灵(Sprite)的调度与控制。
3.1 芯片定位与功能推测
在开始逆向前,需要从系统层面理解它。通过查阅主板图纸和现有MAME模拟器代码,可以知道005885通常与视频RAM、颜色RAM、以及另一颗芯片(如007121)协同工作。它接收来自CPU的指令和数据,输出的是控制瓦片和精灵读取的地址信号、以及优先级选择等控制信号。有了这个高层概念,逆向时就有了目标:去找寻与地址线、行/列计数器、优先级逻辑相关的电路结构。
3.2 硅片照片中的线索挖掘
拿到005885的硅片照片后,首先进行宏观观察:
- 寻找规律性结构:大片的、重复的网格状区域,很可能是SRAM,用于存储临时数据或查找表。
- 寻找总线结构:一组平行、等间距、穿越芯片大部分区域的细线,极有可能是内部数据总线或地址总线。
- 识别I/O区域:芯片边缘的焊盘(PAD)周围,通常有大量的驱动缓冲器(大尺寸的晶体管对),这些是连接内部逻辑与外部引脚的接口电路。
3.3 关键子模块逆向过程
- 行/列计数器:这是图形芯片的核心。在照片中,你可能会发现一列串联的触发器(Flip-Flop),其输出通过一系列逻辑门(识别为多路复用器或译码器)连接到地址线上。通过追踪,可以确认这是一个典型的二进制或线性反馈移位寄存器计数器,负责生成扫描线的行地址和每行内的像素列地址。
- 精灵链表处理器:精灵通常以链表形式存储。逆向中可能会发现一个状态机模块,它包含一个当前地址寄存器、一个下一个地址指针寄存器,以及控制从显存读取“下一个精灵”数据的逻辑。这部分电路与标准逻辑单元差异较大,需要仔细手工追踪。
- 优先级仲裁逻辑:当精灵和背景瓦片在同一个像素位置重叠时,需要决定谁显示在前。这通常由一个多输入的优先级编码器实现。在版图上,这可能表现为一个多层的“与或非”门阵列(PLA结构),输入是精灵和背景的优先级位,输出是选择信号。
- 与存储器的接口:找到向外部VRAM发送地址的驱动电路,以及从数据总线上接收像素数据的锁存器。这些接口电路通常符合特定存储器的时序要求,比如会有生成行选通(RAS)和列选通(CAS)信号的时序逻辑。
3.4 原理图绘制与功能验证
将所有这些子模块的网表整理后,使用EDA绘图工具(如KiCad或专业的商业软件)绘制原理图。绘制过程本身也是二次校验,不合理的连接会在绘图时暴露出来。
随后,编写Verilog模型。这个模型不需要考虑晶体管级的延时,只需实现逻辑功能。在仿真中,模拟CPU写入控制寄存器,然后让模型运行几个帧的扫描时序,观察其输出的地址序列是否符合视频RAM的访问模式。更进一步,可以将其集成到FPGA实现的整个街机图形子系统中,看能否正确渲染出游戏画面。
4. 逆向工程中的典型挑战与应对策略
即使方法明确,实际操作中也是坑洼不断。以下是我从这些项目以及个人实践中总结出的常见难题和解决思路。
4.1 成像质量与层间连接
问题:硅片是立体的,有多层金属(M1, M2…)通过“通孔”连接。光学显微镜照片是二维俯视图,下层金属会被上层遮挡。通孔在照片上只是一个小方块,有时难以分辨其连接关系,特别是当上下层走线颜色对比度低时。
对策:
- 多角度光源:从不同角度打光,下层金属的轮廓有时会透过上层缝隙显现。
- 焦平面堆叠:拍摄不同焦距的多张照片进行合成,可以一定程度上增强不同层的可见度。
- 逻辑推理:这是最关键的手段。如果一根线“凭空消失”又“凭空出现”,且两端逻辑关联性极强,那么中间极大可能性存在一个被遮挡的通孔。结合电路功能进行推测,并在原理图中做备注,后续通过仿真验证该连接是否正确。
- 参考工艺资料:了解该芯片大概的生产年代和厂商(如东芝、NEC),可以推测其常用的工艺和金属层堆叠顺序,辅助判断。
4.2 模拟/混合信号模块
问题:数字逻辑逆向尚有规律可循,但芯片中可能集成了锁相环、电压调节器、模数转换器等模拟模块。这些模块的晶体管尺寸、连接方式与数字电路迥异,且性能依赖于精确的模拟特性,仅从版图还原其精确参数和功能极其困难。
对策:
- 划定边界:首先识别出这部分是模拟模块(晶体管尺寸不规则,有电容、电阻结构,远离数字标准单元区),明确其输入输出引脚。
- 结构识别:尝试识别基本结构,如差分对、电流镜、运算放大器输入级等。这需要一定的模拟电路版图知识。
- 黑盒处理:对于逆向目标主要是数字功能的项目,可以将复杂的模拟模块暂时视为“黑盒”,仅定义其接口行为(如“输入时钟,输出倍频后时钟”),而不深究内部。项目列表中的“时钟发生器”芯片常属于此类。
- 借助专业分析:有时需要更高级的分析手段,如电子显微镜,或者求助于有模拟设计经验的工程师。
4.3 工艺变形与缺陷
问题:几十年前的芯片,可能在生产时就有微小缺陷,或在开封、清洗过程中受到损伤。照片上可能会出现断线、毛刺、污渍,被误认为是电路的一部分,或者真正的连线因腐蚀而变得模糊不清。
对策:
- 多图对比:如果同一型号有多个芯片样品,对比它们的照片,共有的结构才是真实的电路。
- 连续性检查:一条线应从驱动端连续地走到负载端。如果中途“断掉”,检查上下层是否有通孔转折。如果都没有,且逻辑上讲不通,则可能是缺陷。
- 电气规则检查:在整理网表后,可以进行简单的ERC检查,例如:一个门的输出是否短路到另一个输出?PMOS的衬底是否接在了VDD上?违反基本电气规则的地方,可能就是识别错误或存在缺陷的区域。
- 功能合理性优先:最终的判断标准是电路功能是否合理。一个无法解释的奇怪连接,如果去掉它整个电路反而能工作,那它很可能就是缺陷或污渍。
4.4 大规模芯片与时间管理
问题:一些复杂的芯片(如项目列表中“WIP”状态的Konami 053990)包含数万甚至数十万个晶体管。纯手工追踪耗时以年计,极易让人产生挫败感并中途放弃。
对策:
- 分而治之:根据宏观结构(总线、存储器块、密集逻辑区)将芯片划分成多个功能区块。逐个击破,每完成一个区块都是正向激励。
- 善用脚本工具:开发或使用一些半自动化的辅助工具。例如,用Python脚本处理图像,增强对比度,甚至尝试简单的图案识别来标记重复的标准单元。
- 社区协作:这正是Furrtek建立项目列表和共享
Cells库的意义。多人协作可以分摊工作量,并且不同的人擅长不同的模块(有人擅长解码逻辑,有人擅长存储器结构)。 - 设定现实目标:不一定非要100%完整还原每一个晶体管。对于超大规模芯片,可以先聚焦于接口逻辑和关键数据通路,实现其主要功能。一些内部的辅助电路或测试结构,可以在后续迭代中完善。
5. 成果的应用:超越考古的实用价值
费尽千辛万苦逆向出一颗三十年前的芯片,除了满足“极客的浪漫”,还有什么实际用处?其价值远超想象。
5.1 高精度FPGA仿真与硬件保存
这是最直接的应用。模拟器(如MAME)在软件层面模拟芯片行为,但有时会因对硬件行为理解不深而存在误差或漏洞。基于晶体管/门级网表转换出的HDL代码,是对原芯片最精确的数学描述。将其用于FPGA实现,可以创造出几乎与原件电气行为一致的“克隆体”。
- 修复老化硬件:当珍贵的街机主板上的定制芯片损坏且无法购得时,可以用FPGA芯片制作一个替代品,让老机器重获新生。
- 实现“模拟即原机”:像MiSTer这样的FPGA游戏平台,其核心追求就是周期精确的硬件仿真。逆向工程提供的精确到门级的模型,是实现这一目标的终极保证,能完美再现甚至原硬件都因时序微妙差异而存在的“特性”(比如某些特殊画面效果)。
5.2 驱动数字电路设计与教育
对于硬件设计学习者而言,这些逆向出的原理图是无价的教科书。你可以看到:
- 真实的优化技巧:工业界如何用最少的门电路实现一个复杂的状态机。
- 经典的架构设计:例如,如何优雅地设计一个高效的精灵渲染流水线。
- 特定时代的电路风格:80年代由于晶体管资源紧张,设计者如何“螺蛳壳里做道场”。
分析这些经典设计,比阅读任何理论教材都更能加深对数字系统架构的理解。
5.3 填补技术历史空白
许多老公司的设计文档早已遗失。这些逆向工程成果,是在为电子游戏史乃至半导体设计史保存第一手的技术资料。它记录了从离散TTL逻辑到大规模定制ASIC的过渡时期,工程师们是如何解决图形、声音、交互等复杂问题的。这对于技术史研究者而言,是珍贵的原始素材。
6. 如何开始你的硅片逆向之旅?
如果你被这个领域吸引,跃跃欲试,可以遵循以下路径入门,这远比直接买酸开封芯片要安全且循序渐进。
6.1 第一阶段:知识储备与软件熟悉
- 夯实数字电路基础:必须精通布尔代数、组合逻辑、时序逻辑(锁存器、触发器、状态机)、存储器结构。推荐从《数字设计:原理与实践》这类经典教材开始。
- 学习硬件描述语言:掌握Verilog或VHDL是必须的,不仅要会写,更要理解其如何映射到实际的逻辑门和触发器上。这是你将来将网表“翻译”成可仿真模型的关键。
- 熟悉EDA工具链:安装并使用开源EDA工具,如Yosys(逻辑综合)、GTKWave(查看波形)、Icarus Verilog(仿真)。尝试用Verilog描述一个简单的计数器,然后综合、仿真,查看RTL图。
- 研究现有成果:仔细研读SiliconRE项目中已完成的、相对简单的芯片原理图(例如SNK NEO-BUF这种缓冲器芯片)。用EDA工具照着原理图输入网表,进行仿真,理解每一个单元的作用。
6.2 第二阶段:从“软”逆向到“硬”图像
- 尝试网表逆向:找一个有开源网表的小型数字电路(例如一个74系列逻辑芯片的SPICE网表),练习将其整理、绘制成原理图,并写出其Verilog行为模型。这能锻炼你从连接关系抽象出功能的能力。
- 分析公开的硅片照片:访问[ siliconpr0n.org ]等网站,那里有大量芯片的显微照片。选择一张结构清晰、规模较小的芯片(例如一个简单的EEPROM或门阵列),尝试在不看任何资料的情况下,仅凭图像辨认电源、地线、输入输出缓冲器。使用GIMP或Inkscape进行描线练习。
- 加入社区:关注Furrtek、Jotego等人的推特、Patreon,参与相关论坛(如FPGA Arcade论坛)的讨论。这个圈子很小,但大家乐于分享。提问前,务必先做好功课。
6.3 第三阶段:谨慎尝试实体操作
郑重警告:芯片开封涉及强酸和有毒化学品,具有高度危险性!必须在具备专业防护设备和知识的前提下进行,切勿在家庭环境中尝试!
- 安全第一:如果决心进行物理开封,务必接受实验室安全培训,准备防酸服、护目镜、防毒面具、强效通风橱和应急冲洗设备。
- 从废弃品开始:找一些完全废弃、不值钱的现代芯片(如老主板上的IO芯片)进行开封练习,掌握酸液浓度、加热温度、时间控制的经验。
- 投资成像设备:一台带有精密载物台和良好光源的体视显微镜是起步设备。更高级的则需要改装带有电动平台的显微镜用于拼接。
- 贡献而非重复:在开始自己的项目前,务必仔细查看Furrtek的芯片状态表格和社区动态。选择“Stalled”或全新的芯片进行研究,避免重复劳动,并积极分享你的进展和
Cells发现。
这条路漫长而艰辛,但每还原出一条走线,每确认一个逻辑门,每让一颗沉寂多年的芯片在仿真中重新“跳动”起来,所带来的成就感是无与伦比的。你不仅仅是在分析电路,你是在与三十年前的工程师隔空对话,在硅的荒漠中,一片一片地拼凑起数字文明的化石。这,就是硅片逆向工程的终极魅力。
