这里有龙:386芯片中防止静电损伤、闩锁效应和亚稳态的设计
摘要
对Intel 386处理器I/O电路的详细逆向工程分析,解释了它如何处理静电、闩锁效应和亚稳态以保护芯片。
<p>我一直在逆向工程Intel 386处理器(1985年发布),遇到了一些有趣的芯片输入/输出(I/O)引脚电路。由于这些引脚与外部世界通信,它们面临特殊的危险:静电和闩锁效应可能损坏芯片,而亚稳态可能导致严重故障。这些I/O电路与386内部的逻辑电路完全不同,我偶然发现了一个以前未被描述的触发器电路,因此我正在探索未知的领域。在本文中,我将仔细研究I/O电路如何保护386免受可能摧毁它的“恶龙”侵害。</p>
<p><a href="https://static.righto.com/images/386-iodrivers/die-pads.jpg"><img alt="386裸片,放大显示一些焊盘电路。由于不同显微镜镜头的影响,颜色会发生变化。点击此图(或任何其他图片)可查看大图。" class="hilite" height="533" src="https://static.righto.com/images/386-iodrivers/die-pads-w500.jpg" title="386裸片,放大显示一些焊盘电路。由于不同显微镜镜头的影响,颜色会发生变化。点击此图(或任何其他图片)可查看大图。" width="500" /></a><div class="cite">386裸片,放大显示一些焊盘电路。由于不同显微镜镜头的影响,颜色会发生变化。点击此图(或任何其他图片)可查看大图。</div></p>
<p>上图是在显微镜下观察到的386裸片。矩形区域中排列的暗色复杂图案来自连接386芯片上电路的两层金属。未显示的是由硅和多晶硅制成并隐藏在金属下方的晶体管。在这个指甲盖大小的硅裸片周边,有141个方形焊盘提供芯片与外部世界的连接;微小的金键合线将焊盘连接到封装。每个I/O焊盘旁边,都有专门的电路提供芯片与外部组件之间的电气接口,同时保护芯片。我放大显示了这三组焊盘及其相关的I/O电路。顶部(数据引脚)和左侧(地址引脚)的电路与底部的控制引脚电路完全不同,显示了电路如何根据引脚功能变化。</p>
<h2>静电</h2>
<p>威胁386的第一条恶龙是静电,它能够在芯片上烧出一个洞。MOS晶体管在晶体管栅极下方有一层薄薄的绝缘氧化物层。在386中,这一脆弱如玻璃的氧化物层仅250纳米厚,相当于一个病毒的厚度。即使是少量的静电,也能击穿这层氧化物并摧毁芯片。如果你曾走过地毯并在触摸门把手时感受到火花,那么你已产生了至少3000伏足以摧毁芯片的静电。Intel建议在安装处理器时使用防静电垫和接地腕带,以避免静电放电(ESD)的危险。<span id="fnref:esd"><a class="ref" href="#fn:esd">1</a></span></p>
<p>为降低ESD损坏的风险,芯片在其I/O电路中设置了保护二极管和其他组件。下图展示了典型386输入的电路。目标是防止静电放电到达反相器,否则可能摧毁反相器的晶体管。焊盘旁的二极管提供第一层保护;它们将多余电压引向+5V电源或地。接下来,电阻器减小能够到达反相器的电流。第三个二极管提供最后一层保护。(该输入的一个异常特性——与ESD无关——是它有一个上拉电阻,由类似20kΩ电阻的晶体管实现。<span id="fnref:bs16"><a class="ref" href="#fn:bs16">2</a></span>)</p>
<p><a href="https://static.righto.com/images/386-iodrivers/bs16-schematic.jpg"><img alt="BS16#焊盘电路原理图。BS16#信号向386指示外部总线是16位还是32位。" class="hilite" height="129" src="https://static.righto.com/images/386-iodrivers/bs16-schematic-w550.jpg" title="BS16#焊盘电路原理图。BS16#信号向386指示外部总线是16位还是32位。" width="550" /></a><div class="cite"><code>BS16#</code>焊盘电路原理图。<code>BS16#</code>信号向386指示外部总线是16位还是32位。</div></p>
<p>下图展示了该电路在裸片上的外观。为拍摄此照片,我用酸溶解了金属层,将裸片剥离至硅层,使晶体管可见。二极管和上拉电阻由晶体管实现。<span id="fnref:ggnmos"><a class="ref" href="#fn:ggnmos">3</a></span>大型晶体管网格构成焊盘侧二极管,而第三个二极管位于上方。限流保护电阻由多晶硅实现,其电阻高于金属布线。电容器由多晶硅板覆盖硅板,中间以薄氧化物层隔开。如你所见,保护电路占据的面积远大于处理信号的反相器。</p>
<p><a href="https://static.righto.com/images/386-iodrivers/bs16-die.jpg"><img alt="裸片上BS16#的电路。绿色区域是氧化物层未完全去除的部分。" class="hilite" height="332" src="https://static.righto.com/images/386-iodrivers/bs16-die-w500.jpg" title="裸片上BS16#的电路。绿色区域是氧化物层未完全去除的部分。" width="500" /></a><div class="cite">裸片上BS16#的电路。绿色区域是氧化物层未完全去除的部分。</div></p>
<h2>闩锁效应</h2>
<p>386中的晶体管是通过向硅中掺杂杂质以改变其特性而制成的,形成了“N型”和“P型”硅区域。与大多数处理器一样,386芯片采用CMOS技术构建,因此使用两种类型的晶体管:NMOS和PMOS。386从一个N型硅晶圆开始,PMOS晶体管通过掺杂微小区域形成嵌入在底层N型硅中的P型硅。NMOS晶体管则相反,N型硅嵌入P型硅中。为了容纳NMOS晶体管,形成了P型硅的“阱”,如下面截面图所示。因此,386芯片包含复杂的P型和N型硅图案,构成其285,000个晶体管。</p>
<p><a href="https://static.righto.com/images/386-iodrivers/latchup-cross-section.jpg"><img alt="386中NMOS和PMOS晶体管的结构形成了寄生的NPN和PNP晶体管。此图与其他闩锁效应图相反,因为386使用N衬底,与现代使用P衬底的芯片相反。" class="hilite" height="244" src="https://static.righto.com/images/386-iodrivers/latchup-cross-section-w500.jpg" title="386中NMOS和PMOS晶体管的结构形成了寄生的NPN和PNP晶体管。此图与其他闩锁效应图相反,因为386使用N衬底,与现代使用P衬底的芯片相反。" width="500" /></a><div class="cite">386中NMOS和PMOS晶体管的结构形成了寄生的NPN和PNP晶体管。此图与其他闩锁效应图相反,因为386使用N衬底,与现代使用P衬底的芯片相反。</div></p>
<p>但表面之下潜伏着危险,即等待烧毁芯片的喷火恶龙——闩锁效应。问题在于,这些N型和P型硅区域在下方形成了不需要的“寄生”晶体管。</p>
查看缓存全文
缓存时间: 2026/05/16 03:33
# 龙潭虎穴:386处理器中的静电防护、闩锁效应与亚稳态应对
来源:http://www.righto.com/2025/08/static-latchup-metastability-386.html
我一直在逆向工程Intel 386处理器(1985年产品),并发现了一些芯片输入/输出(I/O)引脚的有趣电路。由于这些引脚与外部世界通信,它们面临着特殊危险:静电和闩锁效应可能毁掉芯片,而亚稳态则可能引发严重故障。这些I/O电路与386中的逻辑电路完全不同,我遇到了一个此前未见描述的触发器电路,因此我进入了一个未知领域。本文中,我将详细探讨I/O电路如何保护386免受这些"恶龙"的侵害。
386裸片,放大显示部分焊盘电路。由于不同显微镜镜头的效果,颜色发生了变化。点击此图像(或任何其他图像)可查看大图。(https://static.righto.com/images/386-iodrivers/die-pads.jpg)
上图显示了显微镜下的386裸片。矩形区域中排列的暗色复杂图案来自连接386芯片上电路的两层金属。不可见的是由硅和多晶硅构成、隐藏在金属层下方的晶体管。在这个指甲盖大小的硅裸片周边,141个方形焊盘提供了芯片与外部世界的连接;微小的金键合线将焊盘连接到封装。每个I/O焊盘旁边,专用电路提供了芯片与外部元件之间的电气接口,同时保护芯片。我将三个焊盘组及其相关的I/O电路放大显示。顶部(用于数据引脚)和左侧(用于地址引脚)的电路与底部的控制引脚电路完全不同,展示了电路如何根据引脚功能而变化。
## 静电
威胁386的第一条恶龙是静电,它能在芯片上烧出一个洞。MOS晶体管在其栅极下方构建了一层薄薄的绝缘氧化物层。在386中,这层脆弱的玻璃状氧化物层仅有250纳米厚,相当于病毒的厚度。即使是少量的静电,也能在这层氧化物层上炸出一个洞,从而毁掉芯片。如果你曾经走过地毯,触摸门把手时感受到火花,那么你就产生了至少3000伏、足以毁掉芯片的静电。Intel建议在安装处理器时使用防静电垫和接地腕带,以避免静电放电(ESD)的危险。[1]
为了降低ESD损坏的风险,芯片在其I/O电路中设有保护二极管和其他元件。下面的原理图显示了一个典型386输入端的电路。其目的是防止静电放电到达反相器,避免其晶体管被摧毁。焊盘旁边的二极管提供了第一层保护;它们将多余的电压引导至+5V电源轨或地线。接着,电阻器减小了可能到达反相器的电流。第三个二极管提供了最后一层保护。(该输入端的一个不寻常特性——与ESD无关——是其具有上拉电阻,由一个充当20kΩ电阻的晶体管实现。[2])
BS16#焊盘电路的原理图。BS16#信号向386指示外部总线是16位还是32位。(https://static.righto.com/images/386-iodrivers/bs16-schematic.jpg)
下图显示了该电路在裸片上的样子。在这张照片中,我用酸溶解了金属层,将裸片剥离到硅层,使晶体管可见。二极管和上拉电阻由晶体管实现。[3] 焊盘侧的大面积晶体管网格构成二极管,而第三个二极管在其上方。限流保护电阻由多晶硅实现,它比金属布线提供更高的电阻。电容器由一块位于硅层上方的多晶硅板构成,两者之间由薄氧化物层隔开。正如你所见,保护电路所占的面积远大于处理信号的反相器。
BS16#在裸片上的电路。绿色区域是氧化物层未完全去除的地方。(https://static.righto.com/images/386-iodrivers/bs16-die.jpg)
386中的晶体管是通过向硅中掺杂杂质以改变其特性而制造的,从而形成"N型"和"P型"硅区域。与大多数处理器一样,386芯片采用CMOS技术构建,因此使用两种类型的晶体管:NMOS和PMOS。386从N型硅晶圆开始,PMOS晶体管是通过掺杂微小区域,在底层N型硅中嵌入P型硅而形成的。NMOS晶体管则相反,在P型硅中嵌入N型硅。为了容纳NMOS晶体管,会形成P型硅"阱",如下面的横截面图所示。因此,386芯片包含复杂的P型和N型硅图案,构成了其285,000个晶体管。
386中NMOS和PMOS晶体管的结构会形成寄生的NPN和PNP晶体管。此图与其他闩锁效应图相反,因为386使用N型衬底,这与使用P型衬底的现代芯片相反。(https://static.righto.com/images/386-iodrivers/latchup-cross-section.jpg)
但在表面之下潜伏着某种危险,那就是喷火的闩锁效应恶龙,随时准备烧毁芯片。问题在于,这些N型和P型硅区域在所需的晶体管下方形成了不希望的"寄生"晶体管。在正常情况下,这些寄生的NPN和PNP晶体管处于非激活状态,可以忽略不计。但是,如果电流在表面下方流过硅衬底,它就可能会开启一个寄生晶体管,唤醒可怕的闩锁效应。[4] 寄生晶体管形成一个反馈回路,因此如果一个晶体管开始导通,它会导通另一个晶体管,依此类推,直到两个晶体管都完全导通,这种状态称为闩锁效应。[5] 而且,这个反馈回路会维持闩锁状态,直到芯片断电。[6] 在闩锁期间,芯片的电源和地线通过寄生晶体管短路,导致大电流流动,可能因过热或甚至熔化键合线而毁掉芯片。
闩锁效应可由多种方式触发,从电源过压到辐射,但芯片的I/O引脚是主要风险,因为来自外部世界的信号是不可预测的。例如,假设一个软盘驱动器连接到386,并且驱动器发送了一个电压高于386的5伏电源轨的信号。(这可能由于驱动器中的电压浪涌、信号线反射,甚至连接电缆而发生。)电流将流过386的保护二极管,即前一节描述的二极管。[7] 如果此电流流过芯片的硅衬底,它就可能触发闩锁效应并毁掉处理器。
由于这种危险,386的I/O焊盘被设计成防止闩锁效应。一种解决方案是阻断通过衬底的不需要的电流,本质上是在晶体管周围设置"围栏",以防止有害电流泄漏到衬底中。在386中,这种"围栏"由I/O晶体管和二极管周围的"保护环"构成。这些环通过阻断不需要的电流并将其安全地引导至电源或地线来防止闩锁效应。
W/R#输出焊盘的电路。(W/R#信号告诉计算机的内存和I/O,386正在执行写操作还是读操作。)我移除了金属和多晶硅以显示底层的硅。(https://static.righto.com/images/386-iodrivers/wr-diagram.jpg)
上图显示了一个典型I/O焊盘的双保护环。[8] 单独的环保护NMOS晶体管和PMOS晶体管。NMOS晶体管具有连接到地线(蓝色)的P型硅内环和连接到+5V电源轨(红色)的N型硅外环。对于PMOS晶体管,环的极性相反。保护环在裸片上占据了相当大的空间,但这些空间没有被浪费,因为环保护了芯片免受闩锁效应的影响。
## 亚稳态
最后一条恶龙是亚稳态:它(很可能)不会毁掉芯片,但它可能引发严重故障。[9] 亚稳态是一个奇特的问题,数字信号可能会花费无限长的时间才能稳定到0或1。换句话说,电路暂时拒绝以数字方式工作,并显示出其底层的模拟特性。[10] 亚稳态在20世纪60年代和70年代曾引起争议,许多电气工程师不相信它的存在,或认为它无关紧要。如今,亚稳态已被充分理解,并有专门的电路来防止它,但亚稳态永远无法被完全消除。
在处理器中,一切都与其时钟同步。虽然现代处理器的时钟速度达到几G赫兹,但386的时钟运行在12至33兆赫兹。在处理器内部,信号被精心组织以根据时钟变化——这就是为什么你的计算机在更高时钟频率下运行得更快。问题在于,外部信号可能与CPU的时钟无关。例如,当数据准备好时,磁盘驱动器可能向计算机发送一个中断,这取决于旋转磁盘的时序。如果这个中断恰好在错误的时间到达,就可能触发亚稳态。
亚稳态信号在不确定的时间后稳定为高电平或低电平。这张图片曾用于推广1974年关于亚稳态的课程。来自Thomas Chaney的《My Work on All Things Metastable》(https://www.arl.wustl.edu/~jon.turner/cse/260/glitchChaney.pdf)(https://static.righto.com/images/386-iodrivers/metastability-1974.jpg)
更详细地说,处理器使用触发器在时钟控制下保持信号。"边沿触发型"触发器在时钟上升到高电平("上升沿")的时刻获取其输入,并将该值保持到下一个时钟周期。如果值在时钟变化时是稳定的,那么一切正常:如果输入信号在时钟边沿之前从低电平切换到高电平,触发器将保持这个高电平值。如果输入信号在时钟边沿*之后*从低电平切换到高电平,触发器将保持低电平值,因为在时钟边沿时输入是低电平。但是,如果输入恰好在时钟切换的时刻从低电平切换到高电平,会发生什么?通常,触发器会选择低电平或高电平。但非常罕见,也许是十亿次中有几次,触发器会在中间犹豫不决,既非低电平也非高电平。在触发器"决定"一个低电平或高电平值之前,可能需要几纳秒,并且在此期间值将处于中间状态。
上面的照片说明了一个亚稳态信号,在稳定到一个值之前,它在0和1之间花费了不可预测的时间。这种情况类似于一个球平衡在山顶上,处于不稳定的平衡点。[11] 最小的扰动就会将球推下到山底两个稳定位置之一,但你不知道它会往哪边滚,也不知道需要多长时间。
亚稳态的隐喻视图,如同山顶上的球,可以向任何一侧滚落。(https://static.righto.com/images/386-iodrivers/hill.jpg)
亚稳态是严重的,因为如果数字信号的值既不是0也不是1,那么下游电路可能会混淆。例如,如果处理器的某部分认为它收到了一个中断,而处理器的其他部分认为没有发生中断,那么随着处理器采取矛盾的行动,混乱将统治一切。而且,等待几纳秒并不是良方,因为亚稳态的持续时间可以任意长。等待有所帮助,因为亚稳态的机会随时间呈指数下降,但不保证能消除。[12]
显而易见的解决方案是永远不要在时钟变化的确切时刻改变输入。处理器的设计使得内部信号在时钟变化时是稳定的,从而避免亚稳态。具体来说,触发器的设计者规定了*建立*时间——信号必须在时钟边沿之前稳定多长时间——和*保持*时间——信号必须在时钟边沿之后稳定多长时间。只要输入满足这些条件(通常为几皮秒长),触发器就能正常运作而不会出现亚稳态。
不幸的是,当处理器接收到一个与其时钟不同步的外部信号(称为异步信号)时,建立和保持时间无法得到保证。例如,当I/O设备有数据时,处理器会收到中断信号,但其时序是不可预测的,因为它取决于机械因素,如按键或旋转的软盘。大多数时候,一切都会正常运作,但是,对于信号时序不幸的十亿分之一的情况呢?(由于现代处理器以多G赫兹运行,十亿分之一的事件并不罕见;它们每秒可能发生多次。)
一种解决方案是称为同步器的电路,它接收异步信号并将其与时钟同步。同步器可以用两个串联的触发器实现:即使第一个触发器产生亚稳态输出,在第二个触发器存储该值之前,它很可能会解析为0或1。每个触发器都成指数地降低亚稳态的机会,因此使用两个触发器极大地降低了失败的可能性。
相似文章
386处理器寄存器的异常复杂电路
对英特尔386处理器寄存器电路的详细逆向工程分析,揭示了六种不同的定制电路和交织位存储。
Intel 386标准单元逻辑中的异常电路
探索Intel 386标准单元逻辑中的异常电路,包括大型多路复用器和非标准反相器,突出芯片的设计历史和自动布局布线技术。
逆向工程386处理器的预取队列电路
详细介绍386处理器预取队列电路的逆向工程,解释所用的增量器、对齐网络和动态逻辑。
Intel 8087浮点芯片的指令解码
对Intel 8087浮点协处理器指令解码的详细逆向工程分析,解释主CPU与协处理器之间的交互、微码ROM的使用以及总线接口单元。
Intel 8087 浮点芯片微码中的条件
对 Intel 8087 浮点协处理器微码中使用的条件测试的详细研究,是逆向工程工作的一部分,旨在理解其算法。