对Intel8086的指令寄存器进行逆向工程

2020-08-09 12:16:16

Intel8086微处理器是有史以来最有影响力的芯片之一,它导致了今天主导台式机和服务器计算的x86体系结构。但它仍然足够简单,可以在显微镜下研究和理解它的电路。在这篇文章中,我解释了动态锁存器的实现,这是一种保持一位的电路。8086有80多个锁存器散布在芯片中,保存着各种重要的处理器状态位,1但我将重点介绍实现指令寄存器和保持的8个锁存器。在本文中,我将重点介绍实现指令寄存器和保持的8个锁存器。8086微处理器是有史以来最有影响力的芯片之一,它导致了今天主导台式机和服务器计算的x86体系结构。但它的电路仍然足够简单,可以在显微镜下研究和理解它的电路。

上图为显微镜下8086处理器的硅晶片。我去掉了金属层和多晶硅层,露出了大约29,000个晶体管。突出显示的区域表示8086';的8位指令缓冲器,由8个锁存器组成。(这个1978年的处理器非常简单,一个8位寄存器就占据了芯片的大部分区域。)特写显示了硅和晶体管组成了一个锁存器。

锁存器是8086中最重要的电路之一,因为锁存器跟踪处理器在做什么。虽然锁存器有很多种制作方法,但8086使用一种称为动态锁存器的紧凑电路。动态锁存器依赖于两相时钟,通常用于控制那个时代的微处理器。3两相时钟由两个交替激活的时钟信号组成,在第一阶段,时钟为高,补码时钟为低。然后它们进行切换,这样时钟就会变低,而时钟就会变高。此周期以时钟频率(例如5 MHz)重复。

8086处理器中的锁存器由四个通路晶体管和两个反相器构成。锁存器通过交变时钟信号运行。控制信号是加载和保持的。

上面的示意图显示了8086中的一个典型锁存器,它由两个反相器和几个传递晶体管组成。就我们的目的而言,传递晶体管可以被视为开关:如果栅极输入为1,则晶体管传递信号。如果栅极输入为0,则晶体管阻塞信号。传递晶体管由几个信号控制:LOAD,将一位加载到锁存器中;HOLD,保持现有位值;CLOCK,第一个时钟相位;CLOCK,第二个时钟相位反转。

下图显示了如何将值(在本例中为1)加载到锁存器中。负载信号变高,允许输入(在本例中为1)通过第一晶体管。由于时钟为高,信号通过第二晶体管到达反相器,反相器输出0。此时,第三个(时钟)晶体管阻塞信号。

在下一个时钟阶段(下图),时钟变为高电平,允许0信号到达输出1的第二个反相器。由于保持为高电平,信号环回,但被时钟晶体管阻挡。使该电路动态的重要一点是,此时第一个反相器没有有效输入。相反,由于电路的电容,其输入保持为1(灰色显示)。最后,此电荷会泄漏,失去该值,但在此之前,时钟切换。

当时钟为高时,该值通过第二个反相器。第一个逆变器的(灰显)输入由电路的电容保持。

时钟切换状态后,第二个逆变器的输入由电路的电容提供(下图)。信号循环,对第一个逆变器的输入进行再充电和刷新。当时钟信号继续切换时,锁存器在此图和前一个图之间切换,保持锁存器中的值并保持输出稳定。4.。

那个时代的8086和其他处理器是由一种名为NMOS的晶体管建造的。它们是由掺入砷或硼形成晶体管的硅衬底构成的。在硅的顶部,多晶硅布线将晶体管的栅极和布线元件一起创建在一起。最后,顶部的金属层提供了更多的布线。(相比之下,现代处理器是由结合了NMOS和PMOS晶体管的CMOS技术建造的,它们有很多层金属。

上图显示了晶体管的结构。晶体管可以看作是一个开关,允许电流在称为源极和漏极的两个扩散区域之间流动。晶体管由栅极控制,栅极由一种称为多晶硅的特殊类型的硅制成。向栅极施加电压使电流在源极和漏极之间流动,而将栅极拉到0V阻止电流流动。栅极与硅之间由绝缘氧化层隔开,这使得栅极的作用就像动态锁存器中看到的电容器一样。

逆变器(下图)由NMOS晶体管和电阻器组成。5输入低时,晶体管关断,因此上拉电阻将输出拉高;输入高时,晶体管接通。这将输出连接到地,将输出拉低。因此,电路反转输入信号。

该示意图显示了逆变器是如何由晶体管和电阻器构成的。这张照片显示了芯片内部的实现,去除了金属层,以显示多晶硅和下面的硅。

右边的照片显示了8086中逆变器的物理构造。黄色区域是导电掺杂硅,斑点区域是顶部的多晶硅。多晶硅与掺杂硅交叉形成晶体管:多晶硅形成晶体管的栅极,而两侧的硅区是晶体管的源极和漏极。大的多晶硅矩形在+5伏和输出之间形成上拉电阻。这些物理结构可以与。

下图显示了芯片上锁存器的实现。图中显示了PASS晶体管和两个逆变器;第一个逆变器是上面描述的那个。多晶硅布线将组件连接在一起;金属层(去掉)提供了额外的布线。晶体管具有复杂的形状,可以最有效地利用空间。

8086处理器中锁闩的显微镜照片。金属线被移除了,但痕迹仍然是略带红色的垂直线。注:这张照片旋转了180度,与示意图相符。

锁存器包括输出缓冲器,上面的示意图中没有显示,它为输出和反相输出提供高电流信号。这种类型的缓冲器有一个有趣的名字";超级缓冲器";因为它提供的电流比普通的NMOS逆变器大得多。NMOS逆变器的问题是,当驱动大容量的东西时,它的速度很慢。因为超级缓冲器提供更多的电流,所以它会更快地切换信号。超级缓冲器通过用提供更高电流的晶体管取代上拉电阻来实现这一点。缺点是上拉晶体管需要逆变器来驱动它,所以超级缓冲器电路更复杂。因此,只有在必要的时候才使用超级缓冲器,通常是在发送信号时。

8086锁存器中的超级缓冲区实现。请注意,+5V和接地连接是在最右边的晶体管上打开的。

上图显示了8086'中的超级缓冲电路;与典型的超级缓冲器不同,这个超级缓冲器既包括反相超级缓冲器,也包括同相超级缓冲器。要理解电路,请注意中心电阻和晶体管形成反相器。反相器的输出连接到上部晶体管,而未反相的输入连接到下部晶体管。因此,如果输入是1,则下部晶体管将接通,而如果输入是0,则由于反相器的作用,上部晶体管将打开。因此,对于1输入,下部晶体管将接通。因此,对于1输入,下部晶体管将接通。因此,对于1输入,下部晶体管将由于反相器而接通。因此,对于1输入,下部晶体管将被连接到下部晶体管。因此,对于1输入,下部晶体管将被接通。因此,对于1输入,下部晶体管将。6个。

8086与大多数处理器一样,具有保存当前正在执行的指令的指令寄存器。在8086中,指令寄存器保存指令的第一个字节(可由多个字节组成),因此它由8个锁存器(如下)构成。您可能期望锁存器是相同的,但每个锁存器具有不同的形状。由于8086的布局高度优化,因此每个锁存器的形状被塑造为最大限度地利用可用空间,受相邻布线的限制。特别地,请注意,一些锁存器被合并在一起,以便它们可以共享电源和接地连接。布局优化也可能是锁存器没有按顺序排列的原因。

这8个锁闩都有一些不同的形状,针对它们周围的布线进行了优化。前面的部分描述了锁闩1,从这张照片旋转了180°。红色垂直线是被移除的金属层的痕迹。

指令在8086芯片中曲折前进。8086处理器使用预取,通过在需要之前从内存加载指令来提高性能。预取的指令存储在指令队列中,这是一个位于8086寄存器堆中间的6字节队列。(相比之下,现代处理器可以有兆字节的指令高速缓存。)当指令执行时,它被存储在指令寄存器中,大致位于芯片的中间。(相对较大的距离解释了超级缓冲区的使用。)。此ROM确定指令的高级特征,例如它是单字节指令、多字节指令还是指令前缀。(这只是8086复杂指令处理的一部分。其他锁存器保存指示寄存器使用和ALU操作的指令片段,而另一个单独的电路控制微码引擎,但我将在另一篇文章中讨论这一点。)。

8086模具,显示指令处理的关键部件。在芯片外部,焊接线将芯片连接到外部引脚。

8086广泛使用动态锁存器来存储内部状态。这些锁存器可以在显微镜下看到,它们的电路可以被追踪和理解。8086是一个有趣的芯片分析主题,因为与现代处理器不同,它的晶体管足够大,可以在显微镜下看到,不同于现代处理器。当时它是一个复杂的处理器,有29,000个晶体管,但仍然足够简单,电路可以被追踪和理解。

最近我写了多篇关于8086处理器内部结构的文章,我计划在以后的博客文章中更详细地分析8086,所以请在Twitter@kensheriff或RSS上关注我的更新。

8086有80多个锁存器,有些锁存器保存AD(地址/数据)引脚或控制引脚的值。其他锁存器保存当前微码地址和微指令,以及微码子例程调用的返回地址。其他锁存器保存来自指令的源和目标寄存器位,以及来自指令的算术运算。许多锁存器保存I';仍在调查的内部状态值。-↩。

许多微处理器使用交叉耦合的NOR(或NAND)门来形成SR锁存器,SR锁存器通常比动态锁存器占用更多的空间,特别是在添加附加电路以使其计时的情况下。边沿触发触发器很流行,但更为复杂,使用六个栅极。在许多情况下,通路晶体管提供足够的存储;它可以在一个时钟周期内保持一个值,但不能提供锁存器的长期存储。-↩。

处理器总是有最高时钟速度,也就是它们能运行的最快速度。(最初的8086运行频率高达5兆赫,而后来的8086-1支持10兆赫。)然而,由于使用了动态逻辑,8086的最低时钟速度也是2兆赫。如果时钟运行得比这个速度慢,电线上的电荷在使用之前就有泄漏的风险,导致错误。-↩。

锁存器运行的一个关键是有两个逆变器,因此输出稳定。奇数个逆变器会导致振荡,这是8086';的电荷泵振荡器使用的一个特性。8086的寄存器文件也使用成对的反相器来存储位。然而,在寄存器堆中,两个逆变器直接相互连接,没有计时传递晶体管,导致存储更紧凑,但更难控制。-↩。

NMOS门中的上拉电阻由一个特殊的晶体管实现,耗尽型晶体管起到电阻的作用,但比实际的电阻更紧凑,性能更好。-↩。

关于超级缓冲器的更多信息。NMOS逆变器的问题是上拉电阻提供的电流有限。当输出0时,逆变器中的晶体管以相对较高的电流迅速拉低输出。但是,当输出1时,输出被较弱的上拉电阻拉高。

超级缓冲器有点像CMOS反相器,因为它有一个上拉晶体管和一个下拉晶体管,不同之处在于CMOS同时使用PMOS和NMOS晶体管,PMOS晶体管有一个反相门输入,而NMOS超级缓冲器则需要一个单独的反相器。换句话说,CMOS反相器使用两个晶体管,而超级缓冲器的效率要低得多,需要四个晶体管。

超级缓冲器对上拉使用耗尽模式晶体管,对下拉使用增强模式晶体管,耗尽模式晶体管的阈值电压低于零,允许其输出(源极)上拉至5V,而不是关闭得稍低。当输出较低时,耗尽模式晶体管仍将(有点)导通,其作用类似于常规逆变器中的上拉,因此会有一些电流流过它。有关超级缓冲器的更多信息,请参阅超大规模集成电路系统简介,第28页。-↩