首页 » 99链接平台 » 如何设计和生产CPU?这篇文章说得最详细!|半导体行业观察(晶体管指令处理器芯片设计)

如何设计和生产CPU?这篇文章说得最详细!|半导体行业观察(晶体管指令处理器芯片设计)

雨夜梧桐 2024-11-03 11:45:37 0

扫一扫用手机浏览

文章目录 [+]

我们都认为CPU是计算机的“大脑”,但这到底是什么意思呢?用数十亿个晶体管让你的计算机工作到底是怎么回事?在这篇文章中,我们将专注于计算机硬件设计,涵盖计算机工作原理的来龙去脉。

文章将涵盖计算机架构、处理器电路设计、超大规模集成电路(VLSI)、芯片制造和未来的计算趋势。
如果你一直对处理器内部工作原理的细节感兴趣,请继续关注,因为这就是你想要了解的内容。

CPU的原理

如何设计和生产CPU?这篇文章说得最详细!|半导体行业观察(晶体管指令处理器芯片设计) 99链接平台
(图片来自网络侵删)

我们将从一个非常高的层次开始,了解处理器的功能,以及各个组成部分在功能设计中是如何组合在一起的。
这包括处理器内核、内存层次结构、分支预测等等。
首先,我们需要知道CPU的基本定义。
最简单的解释是CPU遵循一组指令,对一组输入执行某些操作。
例如,可能是从内存中读取一个值,然后将其加上另一个值,最后将结果存储在不同位置的内存中。
如果前一次计算的结果大于零,那么也可能是更复杂的事情,如将两个数字相除。

当你想要运行一个像操作系统或游戏这样的程序时,程序本身就是CPU要执行的一系列指令。
这些指令从内存中加载,并在一个简单的处理器上逐一执行,直到程序完成。
软件开发人员用高级语言(如C++或Python)编写程序时,处理器无法理解。
它只能理解1和0,所以我们需要一种方式来表示这种格式的代码。

程序被编译成一组称为汇编语言的低级指令,作为指令集体系结构(ISA)的一部分。
这是CPU用来理解和执行的一组指令。
一些最常见的ISA是x86、MIPS、ARM、RISC-V和PowerPC。
就像用C++编写函数的语法与用Python编写相同函数的语法不同一样,每种ISA也有不同的语法。

这些ISA可以分为两大类:固定长度和可变长度。
RISC-V ISA使用固定长度的指令,这意味着每条指令中一定数量的预定义位决定了它是哪种类型的指令。
这与x86不同,x86使用可变长度指令。
在x86中,指令可以按照不同的方式进行编码,并且针对不同的部分使用不同的位数。
由于这种复杂性,x86 CPU中的指令解码器通常是整个设计中最复杂的部分。

固定长度的指令允许更容易的解码,因为它们有规则的结构,但限制了ISA可以支持的总指令数。
虽然普通版本的RISC-V架构有大约100条指令,而且是开源的,但是x86是专有的,没有人知道究竟有多少条指令。
人们通常认为有几千条x86指令,但确切的数字并不公开。
尽管ISA之间存在差异,但它们都具有基本相同的核心功能。

一些RISC-V指令的示例。
右边的操作码是7位,它决定了指令的类型。
每条指令还包含要使用的寄存器和要执行的功能的位。
这就是汇编指令如何被分解成二进制以便CPU理解。

现在我们准备好打开计算机,开始运行程序。
指令的执行实际上有几个基本部分,这些部分通过处理器的许多阶段分解。

第一步是将指令从内存提取到CPU中开始执行。
第二步对指令进行解码,以便CPU能够确定它是什么类型的指令。
有很多类型,包括算术指令、分支指令和内存指令。
一旦CPU知道它正在执行的指令类型,就从CPU中的存储器或内部寄存器收集指令的操作数。
如果你想把数字A和数字B相加,在你真正知道A和B的值之前不能进行相加。
大多数现代处理器都是64位的,这意味着每个数据值的大小都是64位。

64位是指CPU寄存器、数据路径,以及内存地址的宽度。
对于普通用户来说,这意味着一台计算机一次可以处理多少信息,最好与较小的32位体系结构相比较来理解。
64位体系结构一次处理的信息位数是32位的两倍。

在CPU有了指令的操作数之后,就移动到执行阶段,在此阶段对输入执行操作。
可能是将数字相加,对数字执行逻辑操作,或者只是传递数字而不对其进行修改。
计算结果后,可能需要访问内存来存储结果,或者CPU可以将值保存在其内部寄存器中。
存储结果后,CPU将更新各个元素的状态,然后转到下一条指令。

当然,这种描述是极大的简化,大多数现代处理器将把这几个阶段分解为20个或更多更小的阶段,以提高效率。
这意味着尽管处理器将在每个周期中启动和完成多个指令,但是任何一条指令从开始到结束可能需要20个或更多的周期。
这个模型通常被称为流水线,因为它需要一段时间来填充流水线,让液体通过流水线,但是一旦流水线满了,就会得到一个恒定的输出。

4级流水线示例。
彩色方框表示相互独立的指令。
(图片来源:维基百科)

指令经过的整个周期是一个非常精心编排的过程,但并非所有指令都可以同时完成。
例如,加法非常快,而除法或从内存加载可能需要数百个周期。
大多数现代处理器都是无序执行的,而不是在一条缓慢的指令完成时使整个处理器停止运行。
这意味着处理器将确定在给定时间执行哪条指令最有益,并缓冲其他未准备好的指令。
如果当前指令尚未就绪,则处理器可以在代码中向前跳转,以查看是否有其他指令准备就绪。

除了无序执行之外,典型的现代处理器还采用了所谓的超标量体系结构(superscalar architecture)。
这意味着在任何时候,处理器都在流水线的每个阶段同时执行许多指令。
它可能还在等待数百条指令开始执行。
为了能够一次执行许多指令,处理器将在每个流水线阶段中包含多个副本。
如果处理器看到两条指令已经准备好执行,并且它们之间没有依赖关系,那么它将同时执行这两条指令,而不是等待它们分别完成。
这种方法的一个常见实现称为同步多线程(SMT),也称为超线程。
英特尔和AMD处理器目前支持双向SMT,而IBM已开发出支持多达八路SMT的芯片。

为了完成这种精心编排的执行,处理器除了基本核心之外还有许多额外的元素。
在一个处理器中有数百个单独的模块,每个模块都有特定的用途,但我们将只简单介绍一下基本的功能。
两个最大和最有益的是缓存和分支预测器。
我们不会涉及重新排序缓冲区、寄存器别名表和保留站这些结构。

缓存的目的常常令人困惑,因为它们像RAM或SSD一样存储数据。
缓存的不同之处在于它们的访问延迟和速度。
尽管RAM非常快,但对于CPU来说,它的速度慢了几个数量级。
RAM可能需要数百个周期才能对数据做出响应,处理器可能会陷入无事可做的境地。
如果数据不在RAM中,则可能需要数万个周期才能访问SSD上的数据。
没有缓存,我们的处理器就会陷入停顿。

处理器通常具有三级缓存,形成所谓的内存层次结构。
L1缓存最小且速度最快,L2位于中间,L3是最大且最慢的缓存。
在层次结构中的缓存之上是小型寄存器,在计算期间存储单个数据值。
这些寄存器是系统中速度最快的存储设备。
当编译器将高级程序转换成汇编语言时,它将确定使用这些寄存器的最佳方法。

当CPU从内存中请求数据时,它将首先检查该数据是否已经存储在L1缓存中。
如果是,则可以在几个周期内快速访问数据。
如果不存在,CPU将检查L2缓存并随后搜索L3缓存。
缓存的实现方式通常对核心是透明的。
核心只需要在指定的内存地址中请求一些数据,层次结构中的任何级别都将响应它。
当我们进入内存层次结构的后续阶段时,大小和延迟通常会增加几个数量级。
最后,如果CPU在任何缓存中都找不到它要查找的数据,那么它就会进入主内存(RAM)。

在典型的处理器上,每个核心将有两个L1缓存:一个用于数据缓存,一个用于指令缓存。
L1缓存的总容量通常在100KB左右,大小可能因芯片和代际而异。
每个核心通常也有一个L2缓存,尽管在某些体系结构中,它可能在两个核心之间共享。
L2缓存通常为几百KB。
最后,还有一个L3缓存在所有核心之间共享,大小为几十MB。

当处理器执行代码时,它最常用的指令和数据值将被缓存。
这极大地加快了执行速度,因为处理器不需要不断地访问主存来获取所需的数据。
在本系列的第2部分和第3部分中,我们将更多地讨论如何实现这些内存系统。

除了缓存之外,现代处理器的另一个关键组件是精确的分支预测器。
分支指令类似于处理器的“if”语句。
如果条件为真,将执行一组指令,如果条件为假,将执行另一组指令。
例如,你可能想比较两个数字,如果它们相等,则执行一个函数,如果它们不同,则执行另一个函数。
这些分支指令非常常见,大约占程序中所有指令的20%。

从表面上看,这些分支指令似乎没什么问题,但对于处理器来说,它们实际上非常具有挑战性。
因为在任何时候,CPU可能同时执行10条或20条指令,所以知道要执行哪条指令是非常重要的。
可能需要5个周期来确定当前指令是否为分支,另外需要10个周期才能确定条件是否为真。
在此期间,处理器可能已经开始执行许多附加指令,甚至不知道这些指令是否是要执行的正确指令。

为了解决这个问题,所有现代高性能处理器都使用了一种称为“推测”( speculation)的技术。
这意味着处理器将跟踪分支指令,并猜测是否将采用分支。
如果预测是正确的,那么处理器已经开始执行后续指令,因此这将带来性能提升。
如果预测不正确,那么处理器将停止执行,删除已经开始执行的所有错误指令,并从正确的位置重新开始。

这些分支预测器(branch predictors )是机器学习的一些早期形式,因为预测器在运行过程中学习分支的行为。
如果预测错误太多,它就会开始学习正确的行为。
几十年来对分支预测技术的研究已经使现代处理器的准确率超过90%。

虽然推测带来了巨大的性能提升,因为处理器可以执行准备好的指令,而不必在繁忙的指令上排队,但也暴露了安全漏洞。
著名的幽灵攻击(Spectre attack)就是利用了分支预测和猜测中的漏洞。
攻击者使用经特殊设计的代码来使处理器推测性地执行会泄漏内存值的代码。
推测的某些方面必须重新设计,以确保数据不会泄露,这导致性能略有下降。

在过去的几十年里,现代处理器的体系结构已经取得了长足的进步。
创新和巧妙的设计带来了更高的性能和对底层硬件的更好利用。
不过,CPU制造商对其处理器中的技术非常保密,因此不可能确切知道其内部究竟发生了什么。
话虽如此,计算机工作的基本原理在所有处理器上都是标准化的。
英特尔可能会增加他们的秘密调整以提高缓存命中率,AMD可能会添加一个高级分支预测器,但他们都是完成相同的任务。

CPU设计过程

既然我们已经了解了处理器在高层次上的工作原理,现在是深入了解内部组件是如何设计的时候了。

你可能知道,处理器和其他大多数数字技术都是由晶体管构成的。
思考晶体管的最简单方法是把它想象成有三个引脚的可控开关。
当栅极打开时,电就可以通过晶体管。
当栅极关闭时,电流不能流动。
就像你墙上的电灯开关一样,但是要比电灯开关小得多,速度也快得多,而且可以用电来控制。

现代处理器中使用的晶体管主要有两种:PMOS和NMOS。
NMOS晶体管在栅极充电或设置为高电平时允许电流流过,PMOS晶体管在栅极放电或设置为低电平时允许电流流过。
通过将这些类型的晶体管以互补的方式组合起来,我们可以创建CMOS逻辑门。
在本文中,我们不会详细讨论晶体管的工作原理,但我们将在本系列的第3部分中讨论它。

逻辑门是一种简单的设备,它接受输入,执行一些操作,并输出结果。
例如,只有当且仅当门的所有输入都处于打开状态时,与门才会打开其输出。
如果输入关闭,那么反相器或非门将打开其输出。
我们可以将这两者结合起来,创建一个与非门。
当且仅当所有输入都不打开时,它才打开其输出。
还有其他具有不同逻辑功能的门,如或门、或非门、异或门和同或门。

下面我们可以看到两个基本的逻辑门是如何从晶体管开始设计的:一个反相器和一个与非门。
在反相器中,顶部有一个PMOS晶体管连接到VDD,底部有一个NMOS晶体管连接到GND。
PMOS晶体管的画法是一个小圆圈连接到栅极上。
我们说过,PMOS器件在输入关闭时导通,NMOS器件在输入打开时导通,所以很容易看到输出信号总是与输入信号相反。
再看看与非门,我们看到它需要四个晶体管,只要至少有一个输入是关的,输出就会打开。
设计更先进的逻辑门和处理器内部其他电路也是这种过程——将晶体管连接成这样的简单网络。

由于组件就像逻辑门一样简单,所以很难看到它们如何变成一台正常运行的计算机。
此设计过程涉及到将多个门组合在一起,以创建一个可以执行简单功能的小型器件。
然后,你可以连接许多这样的器件,形成能够执行更高级功能的器件。
组合单个组件以创建工作设计的过程正是当今用于创建现代芯片的过程。
唯一不同的是,一个现代芯片有数十亿个晶体管。

举一个简单的例子,我们将看到一个基本的加法器——1位全加器。
它接受三个输入——A、B和输入进位(Carry-In),并产生两个输出——和(Sum)与输出进位(Carry-Out)。
基本设计使用五个逻辑门,它们可以连接在一起,创建你想要的任意大小的加法器。
现代设计通过优化一些逻辑和进位信号来改进这一点,但基本原理仍然相同。

如果A、B二者之一处于打开状态,或者存在输入进位信号,且A、B全开或全关,那么输出和就是开。
输出进位有点复杂。
当A和B同时开时,或者存在输入进位信号且A、B二者之一处于打开状态,此时输出进位是有效的。
要连接多个1位加法器以形成更宽的加法器,只需将前一位的输出进位连接到当前位的输入进位。
电路越复杂,逻辑就越混乱,但这是最简单的两个数字相加的方法。
现代处理器使用更复杂的加法器,但是这些设计太复杂了,无法像这样进行概述。
除了加法器,处理器还包含所有这些操作的除法、乘法和浮点运算的单元。

将一系列这样的门组合起来对输入执行某种功能称为组合逻辑(Combinational Logic)。
然而,这种逻辑并不是计算机中唯一存在的东西。
如果我们不能存储数据或跟踪任何东西的状态,那么就没有多大用处。
为此,我们需要具有存储数据能力的时序逻辑。

时序逻辑是通过仔细连接反相器和其他逻辑门来构建的,使得它们的输出反馈到门的输入。
这些反馈回路用于存储一位数据,称为静态RAM或SRAM。
它被称为静态RAM而不是动态DRAM的原因是,存储的数据总是直接连接到正电压或GND。

实现单个SRAM的标准方法是使用如下所示的6个晶体管。
顶部信号(标记为WL,Word Line)是地址,当它被使能时,存储在这个1位单元中的数据被发送到的位线(标记为BL,Bit Line)。
BLB输出被称为Bit Line Bar,即位线的翻转值。
你应该认识晶体管的两种类型,并且M3、M1与M4、M2一起构成了一个反相器。

SRAM用于在处理器中构建超高速缓存和寄存器。
它非常稳定,但是需要6到8个晶体管来存储每一位数据。
这使得它与DRAM相比,在成本、复杂性和芯片面积方面生产成本极高。
另一方面,动态RAM将数据存储在微型电容中,而不是使用逻辑门。
它被称为动态的原因是电容器的电压可以动态变化,因为它没有连接到电源或GND。
只有一个晶体管用于访问存储在电容器中的数据。

由于DRAM每位只需要一个晶体管,而且设计非常可扩展,因此可以密集且廉价地进行封装。
DRAM的一个缺点是电容器中的电荷太小,需要不断刷新。
这就是为什么当你关掉计算机时,电容全部耗尽,RAM中的数据丢失。

英特尔、AMD和英伟达等公司当然不会发布它们的处理器工作原理图,所以对于现代处理器,无法展示完整的图纸。
但是,这个简单的加法器应该可以让您很好地了解如何将处理器中最复杂的部分拆分为逻辑门、存储单元,然后再拆分为晶体管。

既然我们已经知道了处理器的一些组件是如何构造的,那么我们就需要弄清楚如何将所有东西连接起来并同步它们。
处理器中的所有关键部件都连接到时钟信号上。
它以预定义的间隔(称为频率)在“高”和“低”之间交替。
处理器内部的逻辑通常在时钟从低到高时切换数值并执行计算。
通过将所有数据同步在一起,我们可以确保数据总是在正确的时间到达,这样处理器中就不会出现任何故障。

你可能听说过,可以提高处理器的时钟(称为超频)以提高其性能。
这种性能提升来自于处理器内部晶体管和逻辑的切换速度比设计的要快。
由于每秒有更多的周期,所以可以完成更多的工作,处理器将具有更高的性能。
不过在某种程度上,这是正确的。
现代处理器通常运行在3.0GHz~4.5GHz之间,而在过去的十年中,这种情况似乎并没有改变。
就像金属链的强度只取决于最弱的一环一样,处理器的运行速度也只能和最慢的部分一样快。
在每个时钟周期结束时,处理器中的每个部件都需要完成其操作。
如果时钟太快,有某个部分还没有完成,处理器就无法工作。
设计人员将这个最慢的部分称为关键路径,它设置了处理器运行的最大频率。
超过一定的频率,晶体管无法足够快地开关,并将开始出现故障或产生不正确的输出。

通过提高处理器的电源电压,我们可以加快晶体管的开关速度,但这也只能在一定程度上起作用。
如果我们施加太高的电压,就有烧坏处理器的危险。
当我们提高处理器的频率或电压时,它总会产生更多的热量,并消耗更多的能量。
这是因为处理器的功率与频率成正比,与电压的平方成正比。
为了确定处理器的功耗,我们通常认为每个晶体管都是一个小电容,当它改变值时必须充电或放电。

功率传输是处理器非常重要的一部分,在某些情况下,芯片上一半的物理引脚可能仅用于电源或接地。
一些芯片在满载时可能会产生超过150安培的电流,这些电流必须非常小心地管理。
从这个角度看,CPU每单位面积产生的热量要比核反应堆多。

现代处理器中的时钟约占其总功率的30%~40%,因为它非常复杂,必须驱动许多不同的器件。
为了节约能源,大多数低功耗设计会在芯片不使用的时候关闭芯片的某些部分。
这可以通过关闭时钟(称为时钟门控)或关闭电源(称为电源门控)来完成。

时钟给处理器的设计带来了另一个挑战,因为随着时钟频率的不断增加,物理定律开始阻碍它的发展。
尽管光速非常快,但对于高性能处理器来说,光速还不够快。
如果你将时钟连接到芯片的一端,当信号到达另一端时,它会出现相当严重的不同步。
为了使芯片的所有部分保持相同时间,时钟使用所谓的H-Tree来分配。
这是一种结构,可确保所有端点与中心的距离完全相同。

在一个芯片中设计每一个晶体管、时钟信号和电源连接看起来或许非常繁琐和复杂,这肯定是真的。
尽管英特尔、高通和AMD等公司有成千上万名工程师,但他们不可能手动设计芯片的各个方面。
为了在如此大的规模上组装芯片,他们使用了各种先进的工具来为他们生成设计和原理图。
这些工具通常会对组件应该执行的操作进行高级别的描述,并确定满足这些要求的最佳硬件配置。
最近出现了一种名为“高级综合”的技术,它允许开发人员在代码中指定他们想要的功能,然后让计算机找出如何在硬件中以最佳方式实现它。

正如你可以通过代码定义计算机程序一样,设计人员也可以通过代码定义硬件。
Verilog和VHDL等语言允许硬件设计人员表达他们正在制作的任意电路的功能。
仿真和验证是在这些设计上进行的,如果一切都通过了,它们就可以被合成到构成电路的特定晶体管中。
虽然验证可能不像设计一个新的缓存或核心那样华而不实,但它要重要得多。
对于公司雇用的每位设计工程师,可能有五名或更多的验证工程师。

验证一个新设计通常比制造实际的芯片本身要花费更多的时间和金钱。
公司在验证上花费了大量的时间和金钱,因为一旦芯片投入生产,就没有办法修复。
使用软件,你只需要发布一个补丁,但硬件不是这样。
例如,英特尔的某些奔腾芯片的浮点分区单元中存在bug,最终导致它们损失了大约20亿美元。

你可能很难想象一个芯片如何拥有数十亿个晶体管以及它们所做的一切。
当你把芯片分解成单独的内部组件时,事情就简单多了。
晶体管构成逻辑门,逻辑门被组合成执行特定任务的功能单元,这些功能单元连接在一起形成我们在第1部分中讨论的计算机体系结构。

大部分设计工作都是自动化的,但这应该会让你对你购买的新CPU有多么复杂有了新的认识。

构建芯片:芯片的布局和物理构建

如何把一堆沙子变成高级处理器?让我们看看。

如前所述,处理器和所有其他数字逻辑都是由晶体管构成的。
晶体管是一种电子控制开关,我们可以通过施加或消除栅极上的电压来打开或关闭它。
我们讨论了两种主要类型的晶体管:当栅极打开时允许电流流过的NMOS器件和在栅极关闭时允许电流流过的PMOS器件。
处理器内部的晶体管的基本结构是硅。
硅被称为半导体,因为它不能完全导电或绝缘;它位于二者之间的某个位置。

为了通过添加晶体管将硅片变成有用的电路,制造工程师使用了一种称为掺杂的工艺。
掺杂工艺包括将精心选择的杂质添加到硅衬底中以改变其导电性。
这里的目标是改变电子的行为方式,以便我们能够控制它们。
就像有两种晶体管一样,掺杂也有两种主要的对应类型。

如果我们添加精确控制数量的电子给体元素,如砷、锑或磷,就可以创建一个n型区域。
由于现在施加这些元素的硅区域具有多余的电子,因此它将带负电。
这就是n型和NMOS中的“n”的由来。
通过在硅中加入硼、铟、镓等电子受体元素,我们可以得到带正电荷的p型区域。
这就是p型和PMOS中的“p”的由来。
将这些杂质添加到硅中的具体过程称为离子注入和扩散,这超出了本文的范围。

既然我们可以控制硅的某些部分的电导率,就可以结合多个区域的特性来制造晶体管。
集成电路中使用的晶体管称为MOSFET(金属氧化物半导体场效应晶体管),有四个连接。
我们控制的电流流经源极和漏极。
在n沟道器件中,它通常从漏极流入从源极流出,而在p沟道器件中,它通常从源极流入从漏极流出。
栅极是用来开关晶体管的开关。
最后,器件的主体与处理器无关,所以我们不在这里讨论。

硅制反相器的物理结构。
每个着色区域具有不同的导电特性。
注意不同的硅组件与右边的原理图的对应关系。

晶体管的工作原理以及不同区域如何相互作用的技术细节足以填满研究生水平的大学课程,因此我们将只触及基础知识。
晶体管的工作原理的一个很好的类比是河上的吊桥。
汽车就像晶体管中的电子,会从河的一边流向另一边,即晶体管的源极和漏极。
以NMOS器件为例,当栅极不带电时,吊桥上升,电子不能流过沟道。
当我们放下吊桥时,河上形成了一条道路,汽车可以自由移动。
同样的事情也发生在晶体管上。
充电的栅极在源极和漏极之间形成一个沟道,允许电流流动。

为了能够精确控制硅的不同p和n区域,英特尔和台积电这样的制造商使用一种称为光刻的工艺。
这是一个非常复杂的多步骤工艺,公司花费数十亿美元来完善它,以便能够制造更小、更快、更节能的晶体管。
想象一下,有一台超精密打印机可以用来在硅片上绘制每个区域的图案。

在芯片中制造晶体管的过程是从一个纯晶圆开始的。
晶圆在炉中加热,顶部生长一层薄薄的二氧化硅。
然后在二氧化硅上涂上一种光敏光刻胶聚合物。
通过将特定频率的光照射到光刻胶上,我们可以在我们想要掺杂的区域剥离光刻胶。
这是光刻步骤,类似于打印机将墨水印到页面的某些区域,只是尺度小得多。

晶圆被氢氟酸蚀刻以溶解除去光刻胶的二氧化硅。
然后除去光刻胶,只留下下面的氧化层。
掺杂离子可以被应用到晶圆上,并且只能在氧化物中有间隙的地方植入。

这种掩膜、成像和掺杂的过程要重复数十次,才能慢慢地在半导体中建立起每个特征层。
一旦硅基底完成,金属连接将在顶部制造,以把不同的晶体管连接到一起。
我们稍后会详细介绍这些连接和金属层。

当然,芯片制造商并不是一次只生产一个晶体管。
当一个新芯片被设计出来时,他们将为制造过程中的每一步生成掩模。
这些掩模将包含芯片上数十亿个晶体管的每个元件的位置。
多个芯片组合在一起,并在一个裸片上一次制造。

一旦晶圆被制造出来,各个裸片就会被切割和封装。
根据芯片的大小,每个晶圆可以容纳数百个或更多的芯片。
通常情况下,芯片的功能越强,裸片就越大,制造商从每个晶圆上得到的芯片就越少。

我们很容易想到,我们应该制造超级强大的、拥有数百个内核的大规模芯片,但这是不可能的。
目前,阻碍我们制造越来越大芯片的最大因素是制造工艺中的缺陷。
现代芯片有数十亿个晶体管,如果其中一个的一个部分坏了,整个芯片可能需要废弃。
随着处理器尺寸的增大,芯片出现故障的几率也会增加。

公司从制造过程中获得的实际收益是保密的,但70%~90%是很好的估计。
公司通常会使用额外的功能来过度设计芯片,因为他们知道某些部件无法工作。
例如,英特尔可能会设计一个8核芯片,但只将其作为6核芯片出售,因为他们估计一个或两个核可能会损坏。
在一个称为“binning”的过程中,缺陷数量非常少的芯片通常被预留出来以更高的价格出售。

与芯片制造相关的最大营销术语之一是特征尺寸。
例如,英特尔正在努力实现10nm工艺,AMD正在为一些GPU使用7nm工艺,而台积电已开始研发5nm工艺。
但是,这些数字意味着什么呢?传统上,特征尺寸表示晶体管的漏极和源极之间的最小宽度。
随着技术的进步,我们已经能够缩小晶体管,以便能够在单个芯片上容纳越来越多的晶体管。
随着晶体管变得越来越小,它们也变得越来越快。

在查看这些数字时,需要注意的是,一些公司可能会根据不同的指标而不是标准宽度来确定工艺尺寸。
这意味着不同公司的不同尺寸的工艺实际上可能产生相同尺寸的晶体管。
另一方面,在给定的工艺中,并非所有的晶体管都是相同的大小。
设计师可能会根据某些权衡来选择制造比其他晶体管更大的晶体管。
对于给定的设计过程,较小的晶体管将更快,因为它的栅极充放电需要的时间更短。
然而,较小的晶体管只能驱动很小数量的输出。
某个特定的部件,如果逻辑要驱动的东西需要很大的功率,如输出引脚,它就需要做得更大。
这些输出晶体管可能比内部逻辑晶体管大几个数量级。

一张最新的AMD Zen处理器的照片。
这个设计由几十亿个晶体管组成。

然而,设计和制造晶体管只是芯片的一半。
我们需要根据原理图把所有的东西连接起来。
这些连接使用晶体管上方的金属层制成。
请设想多层公路交汇处,有上坡道、下坡道和相互交叉的不同道路。
这正是芯片内部发生的事情,不过尺度要小得多。
不同的工艺在晶体管上方会有不同数量的金属互连层。
随着晶体管变得越来越小,我们需要更多的金属层来传送所有的信号。
台积电即将推出的5nm工艺有15个金属层。
设想一座15层的垂直公路立交桥,这会让你了解芯片内部的布线有多复杂。

下面的显微镜图像显示了由七个金属层组成的晶格。
每一层都是平坦的,随着它们的升高,这些层变得更大,以减小电阻。
每一层之间都有被称为通孔的小金属圆柱体,用于跳跃到更高层。
每一层通常与下面的一层在方向上交替,以便减少不必要的电容。
奇数层可用作水平连接,偶数层可用作垂直连接。

正如你所能想象的,所有这些信号和金属层都变得难以快速管理。
为了帮助解决这个问题,计算机程序被用来自动放置和布线晶体管。
根据设计的先进程度,程序甚至可以将高级C代码中的函数转换为每根导线和晶体管的物理位置。
通常情况下,芯片制造商会让计算机自动生成大部分设计,然后他们会手工对某些关键部分进行优化。

当公司想要制造一种新的芯片时,他们将从制造公司提供的标准单元开始他们的设计。
例如,英特尔或台积电将为设计师提供逻辑门或存储单元等基本部件。
设计人员可以将这些标准单元组合到他们想要构建的任意芯片中。
然后,他们将芯片的晶体管和金属层的布局发送给代工厂,代工厂是将硅制造成功能芯片的地方。
这些布局被转换成掩模,在我们上面提到的制造过程中使用。
接下来,我们将了解一个非常基本的芯片的设计过程。

首先,我们看看反相器的布局,这是一个标准单元。
顶部的斜切绿色矩形是PMOS晶体管,底部的透明绿色矩形是NMOS晶体管。
垂直红线为多晶硅栅极,蓝色区域为金属1,紫色区域为金属2。
输入A位于左侧,输出Y位于右侧。
电源和GND连接在金属2的顶部和底部。

把几个门结合起来,我们得到了一个基本的1位算术单元。
这种设计可以对两个1位输入进行加法、减法和逻辑运算。
垂直方向的蓝色切割导线是金属3层。
导线两端稍大的正方形是连接两层的通孔。

最后,将许多单元和大约2000个晶体管组合在一起,我们得到了一个基本的4位处理器,在四个金属层上有8字节的RAM。
看看它有多复杂,我们可以想象设计一个64位CPU的困难,它有兆字节的缓存、多个核心和20多个流水线阶段。
考虑到当今高性能CPU可以拥有50亿~100亿个晶体管和12个金属层,毫不夸张地说,它实际上要比这个复杂数百万倍。

这应该会让你理解为什么你的新CPU是一项昂贵的技术,以及为什么AMD和英特尔在产品发布之间花了这么长时间。
一般来说,一个新芯片从设计阶段进入市场需要3~5年的时间。
这意味着今天最快的芯片是用几年前的技术制造出来的,而我们在许多年内都不会看到使用当今最先进制造技术的芯片。

由此,我们完成了对处理器构建方式的深入研究。

相关文章