Intel 386标准单元逻辑中的异常电路
摘要
探索Intel 386标准单元逻辑中的异常电路,包括大型多路复用器和非标准反相器,突出芯片的设计历史和自动布局布线技术。
<p>我最近一直在研究Intel 386处理器中的标准单元电路。386于1985年推出,是当时英特尔最复杂的处理器,拥有285,000个晶体管。英特尔现有的设计技术无法应对这种复杂性,芯片开始落后于进度。为了赶上进度,386团队开始使用一种称为标准单元逻辑的技术。他们不再手动布局每个晶体管,而是由计算机执行布局过程。</p><p>标准单元逻辑的思想是为每种逻辑元素(如反相器、与非门或锁存器)创建标准化电路(标准单元)。你将电路描述输入软件,软件选择所需的单元,将这些单元排列成列,然后在单元之间布线。这种“自动布局布线”过程比手动布局快得多。然而,转向标准单元是一个冒险的决定,因为如果软件无法创建足够密集的布局,芯片就无法制造。但最终,386提前完成了进度,这几乎是一个闻所未闻的成就。<span id="fnref:oral-history"><a class="ref" href="#fn:oral-history">1</a></span></p><p>386的标准单元电路包含一些我未曾预料到的电路。在这篇博文中,我将快速浏览其中一些电路:出乎意料大的多路复用器、一个不适合标准单元布局的晶体管,以及最终证明不是反相器的反相器。(如果你想了解关于386标准单元的更多背景,请参阅我之前的文章:“<a href="https://www.righto.com/2024/01/intel-386-standard-cells.html">逆向工程Intel 386处理器中的标准单元逻辑</a>”。)</p><p>下面的照片显示了386芯片的裸片,其中自动布局布线区域已高亮显示;我重点关注右下角的红色区域。这些逻辑块将单元排列成行,呈现出特有的条纹状外观。暗条纹是构成逻辑门的晶体管,而条纹之间较亮的区域是容纳连接单元布线的“布线通道”。相比之下,功能块(如左侧的数据路径和右下角的微码ROM)是手动设计的,以优化密度和性能,因此外观更加致密。</p><p><a href="https://static.righto.com/images/386-curiosities/die-labeled.jpg"><img alt="386裸片,标准单元区域已高亮显示。" class="hilite" height="530" src="https://static.righto.com/images/386-curiosities/die-labeled-w500.jpg" title="386裸片,标准单元区域已高亮显示。" width="500" /></a><div class="cite">386裸片,标准单元区域已高亮显示。</div></p><p>至于芯片上的其他特征,边界周围的黑色圆圈是连接到芯片外部引脚的键合线。该芯片有两层金属,按现代标准来看数量很少,但比286等早期处理器的单层金属有了飞跃。(提供两层金属使得自动布线成为可能:一层可以承载水平导线,另一层可以承载垂直导线。)在较大的区域,金属呈现白色,但在下方电路使其表面粗糙的地方则呈紫色。下方的硅和多晶硅布线被金属层遮挡。</p><h2>巨型多路复用器</h2><p>我正在检查的标准单元电路(上方的红色框)是控制逻辑的一部分,用于在执行指令时选择寄存器。你可能会认为选择哪些寄存器参与指令很容易,但由于x86架构的复杂性,这实际上更加困难。一个问题是,32位寄存器(如EAX)也可以被视为16位寄存器AX,或两个8位寄存器AH和AL。第二个问题是,某些指令包含一个“方向”位,用于切换源寄存器和目标寄存器。此外,有时寄存器由指令中的位指定,但在其他情况下,寄存器由微码指定。由于这些因素,选择操作所需的寄存器是一个复杂的过程,涉及许多情况,使用来自指令、微码和其他来源的控制位。</p><p>一个操作需要选择三个寄存器——两个源寄存器和目标寄存器——并且需要处理大约17种情况。寄存器由7位控制信号指定,这些信号选择30个寄存器之一,并控制访问寄存器的哪一部分。有三个控制信号,每个信号宽度为7位,每种情况大约有17种,可以看出寄存器控制逻辑庞大而复杂。(我在此处<a href="https://www.righto.com/2025/05/intel-386-register-circuitry.html">详细介绍了386的寄存器</a>。)</p><p>我仍在逆向工程寄存器控制逻辑,因此我不会深入细节。相反,我将讨论寄存器控制电路如何使用标准单元实现的多路复用器。多路复用器是一种通过选择其中一个输入来将多个输入信号合并为单个输出的电路。<span id="fnref:one-hot"><a class="ref" href="#fn:one-hot">2</a></span>多路复用器可以用逻辑门实现,例如,将每个输入与相应的控制线进行AND,然后将结果进行OR。然而,386使用了一种不同的方法——CMOS开关——避免了大型AND/OR门。</p><p><a href="https://static.righto.com/images/386-curiosities/cmos-switch.jpg"><img alt="CMOS开关示意图。" class="hilite" height="169" src="https://static.righto.com/images/386-curiosities/cmos-switch-w200.jpg" title="CMOS开关示意图。" width="200" /></a><div class="cite">CMOS开关示意图。</div></p><p>上图显示了如何由两个MOS晶体管构建CMOS开关。当两个晶体管导通时,输出连接到输入,但当两个晶体管截止时,输出被隔离。NMOS晶体管在其输入为高电平时导通,而PMOS晶体管在其输入为<em>低</em>电平时导通。因此,开关使用两个控制输入,其中一个反相。使用两个晶体管的动机是,NMOS晶体管在将输出拉低方面表现更好,而PMOS晶体管在将输出拉高方面表现更好,因此组合它们可实现最佳性能。<span id="fnref:6502"><a class="ref" href="#fn:6502">3</a></span>与逻辑门不同,CMOS开关没有放大功能,因此信号通过开关时会减弱。如下文所示,可以使用反相器来放大信号。</p><p>下面的图像显示了CMOS开关在显微镜下如何呈现。这张图像非常难以解读,因为386的两层金属紧密地堆叠在一起,但你可以看到有些导线水平运行,有些则垂直运行。底部的金属层(称为M1)在布线区域垂直运行,同时也为单元提供内部布线。顶部的金属层(M2)水平运行;与M1不同,M2导线可以穿过单元。大圆点是连接M1和M2层的过孔,而小圆点是M1与多晶硅或M1与硅之间的连接。图像中央的三分之一是一列标准单元,其中两个CMOS开关以绿色标出。单元由垂直的地线和+5V电源线供电,这些线为单元提供电源。布线区域位于单元的两侧,容纳连接单元的导线。</p><p><a href="https://static.righto.com/images/386-curiosities/switch-metal.jpg"><img alt="两个CMOS开关,以绿色高亮显示。下方的开关相对于上方的开关垂直翻转。" class="hilite" height="465" src="https://static.righto.com/images/386-curiosities/
查看缓存全文
缓存时间: 2026/05/16 03:33
# Intel 386 标准单元逻辑中的不寻常电路
来源:http://www.righto.com/2025/11/unusual-386-standard-cell-circuits.html
最近我一直在研究 Intel 386 处理器中的标准单元电路。386 于 1985 年推出,是当时 Intel 最复杂的处理器,包含 285,000 个晶体管。Intel 现有的设计技术无法应对这种复杂度,芯片开始落后于进度。为了赶上进度,386 团队开始使用一种称为标准单元逻辑的技术。他们不再手动布局每个晶体管,而是由计算机执行布局过程。
标准单元逻辑的理念是为每种逻辑元件(例如反相器、与非门或锁存器)创建标准化的电路(标准单元)。你将电路描述输入软件,该软件选择所需的单元,将这些单元排列成列,然后在单元之间布线。这种“自动布局布线”过程比手动布局快得多,可以更快地创建芯片布局。然而,转向标准单元是一个冒险的决定,因为如果软件无法创建足够密集的布局,芯片就无法制造。但最终,386 提前完成了进度,这几乎是闻所未闻的成就。1 (http://www.righto.com/2025/11/unusual-386-standard-cell-circuits.html#fn:oral-history)
386 的标准单元电路包含一些我没想到的电路。在这篇博文中,我将快速介绍其中一些电路:大得出奇的多路复用器、一个不适合标准单元布局的晶体管,以及原来不是反相器的反相器。(如果您想了解更多关于 386 中标准单元的背景信息,请参阅我之前的文章:“逆向工程 Intel 386 处理器中的标准单元逻辑 (https://www.righto.com/2024/01/intel-386-standard-cells.html)”)。
下面的照片显示了 386 的芯片,其中自动布局布线区域被高亮显示;我重点关注右下角的红色区域。这些逻辑块将单元排列成行,使其具有特征的条纹外观。深色条纹是组成逻辑门的晶体管,而条纹之间的浅色区域是“布线通道”,容纳着连接单元的导线。相比之下,左侧的数据通路和右下角的微码 ROM 等功能块是手动设计的,以优化密度和性能,因此外观更坚实。
标注了标准单元区域的 386 芯片。(https://static.righto.com/images/386-curiosities/die-labeled.jpg)
标注了标准单元区域的 386 芯片。
至于芯片上的其他特征,周围的黑色圆点是连接到芯片外部引脚的键合线。该芯片有两个金属层,按现代标准来说数量很少,但相比早期处理器(如 286)的单层金属层是一个飞跃。(提供两层金属使自动布线成为可能:一层可以容纳水平导线,另一层可以容纳垂直导线。)金属在较大区域呈白色,但在下方的电路使其表面粗糙的地方呈紫色。下方的硅和多晶硅导线被金属层遮挡。
## 巨大的多路复用器
我正在研究的标准单元电路(上图红色框)是控制逻辑的一部分,用于在执行指令时选择寄存器。您可能认为选择哪些寄存器参与指令很容易,但由于 x86 架构的复杂性,这更加困难。一个问题在于,像 EAX 这样的 32 位寄存器也可以被视为 16 位寄存器 AX,或两个 8 位寄存器 AH 和 AL。第二个问题是,一些指令包含一个“方向”位,用于交换源寄存器和目标寄存器。此外,有时寄存器由指令中的位指定,但在其他情况下,寄存器由微码指定。由于这些因素,选择一个操作所需的寄存器是一个复杂的过程,涉及许多情况,使用了来自指令、微码和其他来源的控制位。
一个操作需要选择三个寄存器——两个源寄存器和目标寄存器——大约需要处理 17 种情况。寄存器通过 7 位控制信号指定,这些信号选择 30 个寄存器之一,并控制访问寄存器的哪一部分。有了三个控制信号(每个 7 位宽)和每个信号的大约 17 种情况,您可以看到寄存器控制逻辑既庞大又复杂。(我在这里 (https://www.righto.com/2025/05/intel-386-register-circuitry.html) 写了更多关于 386 寄存器的内容。)
我仍在逆向工程寄存器控制逻辑,所以我不打算深入细节。相反,我将讨论寄存器控制电路如何使用由标准单元实现的多路复用器。多路复用器是一种通过选择其中一个输入来将多个输入信号组合成单个输出的电路。2 (http://www.righto.com/2025/11/unusual-386-standard-cell-circuits.html#fn:one-hot) 多路复用器可以使用逻辑门实现,例如,将每个输入与相应的控制线进行 AND 运算,然后将结果 OR 在一起。然而,386 采用了一种不同的方法——CMOS 开关——避免了大型 AND/OR 门。
CMOS 开关原理图。(https://static.righto.com/images/386-curiosities/cmos-switch.jpg)
CMOS 开关原理图。
上面的原理图显示了如何用两个 MOS 晶体管构建一个 CMOS 开关。当两个晶体管导通时,输出连接到输入,但当两个晶体管关断时,输出被隔离。NMOS 晶体管在输入为高时导通,而 PMOS 晶体管在输入为*低*时导通。因此,该开关使用两个控制输入,其中一个被反相。使用两个晶体管的动机是,NMOS 晶体管在将输出拉低方面更好,而 PMOS 晶体管在将输出拉高方面更好,因此组合它们可以获得最佳性能。3 (http://www.righto.com/2025/11/unusual-386-standard-cell-circuits.html#fn:6502) 与逻辑门不同,CMOS 开关没有放大作用,因此信号通过开关时会减弱。如下所示,可以使用反相器来放大信号。
下图显示了 CMOS 开关在显微镜下的样子。这个图像非常难以解读,因为 386 上的两层金属紧密地挤在一起,但您可以看到一些导线水平运行,而另一些垂直运行。底层金属(称为 M1)在布线区域垂直运行,同时也为单元提供内部布线。顶层金属(M2)水平运行;与 M1 不同,M2 导线可以穿过单元。大圆点是连接 M1 和 M2 层的通孔,而小圆点是 M1 与多晶硅或 M1 与硅的连接。图像中央的三分之一是一个标准单元列,其中两个 CMOS 开关用绿色标出。单元以垂直的接地轨和 +5V 电源轨为边界,为单元供电。布线区域位于单元两侧,容纳连接单元的导线。
两个 CMOS 开关,用绿色标出。下面的开关相对于上面的开关垂直翻转。(https://static.righto.com/images/386-curiosities/switch-metal.jpg)
两个 CMOS 开关,用绿色标出。下面的开关相对于上面的开关垂直翻转。
去除金属层后,露出了下面的硅层,上面有一层多晶硅导线。掺杂的硅区域显示为暗轮廓。我用绿色绘制了多晶硅;当它穿过掺杂硅时,形成一个晶体管(亮绿色)。金属接地线和电源线分别用蓝色和红色显示,其他金属线用紫色显示。黑点是层间的通孔。注意金属线(紫色)和多晶硅线(绿色)是如何结合来在单元内路由信号的。尽管这个标准单元很复杂,但重要的是它只需要设计一次。不同功能的标准单元都被设计成具有相同的宽度,因此单元可以排列成列,像乐高积木一样拼接在一起。
显示标准单元开关硅层的示意图。多晶硅用绿色表示。底部金属用蓝色、红色和紫色表示。(https://static.righto.com/images/386-curiosities/switch-diagram.jpg)
显示标准单元开关硅层的示意图。多晶硅用绿色表示。底部金属用蓝色、红色和紫色表示。
总之,这个开关电路允许输入连接到输出或断开,由选择信号控制。这个开关比之前的原理图更复杂,因为它包含两个反相器来放大信号。数据输入和两条选择线连接到多晶硅(绿色);单元的设计使得这些连接可以在任一侧进行。在顶部,输入通过一个标准的两个晶体管反相器。左下方有两个晶体管,将一个反相器的 NMOS 半部分与开关的 NMOS 半部分组合在一起。右侧的一个类似电路组合了反相器和开关的 PMOS 部分。然而,由于 PMOS 晶体管较弱,这部分电路被复制。
多路复用器是通过组合多个开关(每个输入一个)构建的。打开一个开关将选择相应的输入。例如,一个四选一多路复用器有四个开关,因此可以选择四个输入之一。
由 CMOS 开关和单个晶体管构建的四路多路复用器。(https://static.righto.com/images/386-curiosities/mux4.jpg)
由 CMOS 开关和单个晶体管构建的四路多路复用器。
上面的原理图显示了一个假设的四输入多路复用器。一个优化是,如果一个输入始终为 0,则可以省略 PMOS 晶体管。同样,如果一个输入始终为 1,则可以省略 NMOS 晶体管。一次激活一组选择线以选择相应的输入。粉色电路选择 1,绿色选择输入 A,黄色选择输入 B,蓝色选择 0。386 中的多路复用器类似,但具有更多输入。
下图显示了在这个标准单元块中有多少电路专门用于多路复用器。绿色、紫色和红色单元对应于驱动三个寄存器控制输出的多路复用器。黄色单元是反相器,用于生成 CMOS 开关的反相控制信号。该图还显示了单元自动布局如何导致看似随机的布局。
一个标准单元逻辑块,多路复用器被高亮显示。这张照片中金属和多晶硅层已被去除,露出了硅晶体管。(https://static.righto.com/images/386-curiosities/muxes.jpg)
一个标准单元逻辑块,多路复用器被高亮显示。这张照片中金属和多晶硅层已被去除,露出了硅晶体管。
## 错位的晶体管
标准单元逻辑的理念是标准化的单元排列成列。单元之间的空间是“布线通道”,容纳连接单元的导线。386 电路遵循这种布局,除了一个单独的晶体管,位于两列单元之间。
“错位”的晶体管,由箭头指示。不规则的绿色区域是未完全去除的氧化物。(https://static.righto.com/images/386-curiosities/extra-transistor.jpg)
“错位”的晶体管,由箭头指示。不规则的绿色区域是未完全去除的氧化物。
我编写了一些软件工具来帮助我分析标准单元。不幸的是,我的工具假设所有单元都在列中,因此这个不守规矩的晶体管给我造成了相当大的不便。
这个晶体管原来是一个 PMOS 晶体管,作为多路复用器的一部分将信号拉高。但为什么这个晶体管会不守规矩?我的假设是这个晶体管是一个错误修复。重新生成单元布局成本很高,需要在一台 IBM 大型机上花费数小时。大概有人发现,他们可以将必要的晶体管直接插入布线通道中未使用的点位,手动添加必要的接线,从而避免重新生成所有单元的延迟。
## 假冒的反相器
最简单的 CMOS 门是反相器,它有一个将输出拉低的 NMOS 晶体管和一个将输出拉高的 PMOS 晶体管。我检查的标准单元电路包含一百多个各种尺寸的反相器。(通过使用既不太小也不比特定电路所需更大的反相器,可以提高性能。因此,标准单元库包含多种尺寸的反相器。)
下图显示了显微镜下一个中等尺寸的标准单元反相器。对于这张图片,我用酸去除了两个金属层,以显示下面的多晶硅(亮绿色)和硅(灰色)。这张图片质量较差——在不破坏多晶硅的情况下去除金属很困难——但下面的图表应该能澄清电路。反相器有两个晶体管:一个连接到 +5 伏的 PMOS 晶体管,用于在输入为 0 时将输出拉高;以及一个连接到地的 NMOS 晶体管,用于在输入为 1 时将输出拉低。(PMOS 晶体管需要更大,因为由于硅物理特性,PMOS 晶体管的性能不如 NMOS 晶体管。)
芯片上看到的一个反相器。对应的标准单元如下图所示。(https://static.righto.com/images/386-curiosities/inverter-diagram.jpg)
芯片上看到的一个反相器。对应的标准单元如下图所示。
多晶硅输入线起着关键作用:当它穿过掺杂硅时,会形成一个晶体管栅极。为了使标准单元更灵活,反相器的输入可以在左侧或右侧连接;在这种情况下,输入在右侧连接,左侧没有连接。反相器的输出可以从左上侧或右侧的多晶硅获取,但在这里,它是从上层金属层(未显示)获取的。电源、地线和输出线位于下层金属层,我用细红、蓝和黄线表示。黑点是金属层与下层硅之间的连接。
这个反相器在电路中出现数十次。然而,我遇到了一些不合常理的反相器。问题是反相器的输出连接到了多路复用器的输出。由于反相器要么导通要么关断,它的值会覆盖多路复用器的输出。4 (http://www.righto.com/2025/11/unusual-386-standard-cell-circuits.html#fn:latch) 这说不通。我反复检查了接线,确保自己没有搞错。在进一步调查后,我发现了另一个问题:一个“坏”反相器的输入也说不通。该输入由两个短路在一起的信号组成,这行不通。
最后,我意识到是怎么回事了。一个“坏反相器”具有与反相器完全相同的硅布局,但它不是反相器:它是独立的 NMOS 和 PMOS 晶体管,具有独立的输入。现在一切都合理了。有了两个输入,输入信号是独立的,而不是短接在一起的。并且由于晶体管是单独控制的,NMOS 晶体管可以在某些情况下将输出拉低,PMOS 晶体管可以在其他情况下将输出拉高,或者两个晶
相似文章
386处理器寄存器的异常复杂电路
对英特尔386处理器寄存器电路的详细逆向工程分析,揭示了六种不同的定制电路和交织位存储。
逆向工程386处理器的预取队列电路
详细介绍386处理器预取队列电路的逆向工程,解释所用的增量器、对齐网络和动态逻辑。
这里有龙:386芯片中防止静电损伤、闩锁效应和亚稳态的设计
对Intel 386处理器I/O电路的详细逆向工程分析,解释了它如何处理静电、闩锁效应和亚稳态以保护芯片。
CT扫描仪揭示386处理器陶瓷封装内部的神奇结构
对英特尔386处理器陶瓷封装的CT扫描揭示了复杂的内部布线、多个电源网络和分层互连设计,为这款1985年芯片的封装技术提供了罕见的一瞥。
关于Intel 8086处理器算术逻辑单元的笔记
详细的技术分析,探讨Intel 8086处理器算术逻辑单元(ALU)的控制电路,解释微码和控制信号如何协调执行28种不同操作。