晶体管在电路中具有多种用途,例如开关,用于放大电子信号,使您可以控制电流等。
但是,我最近在其他随机互联网文章中读到了摩尔定律,即现代电子设备中装有大量的晶体管,现代电子设备中的晶体管数量约为数百万甚至数十亿。
但是,到底为什么有人会需要那么多晶体管呢?如果晶体管用作开关等,为什么我们的现代电子设备中需要如此之多的晶体管呢?我们是否无法使事情更有效率,以致我们使用的晶体管比目前使用的晶体管少?
晶体管在电路中具有多种用途,例如开关,用于放大电子信号,使您可以控制电流等。
但是,我最近在其他随机互联网文章中读到了摩尔定律,即现代电子设备中装有大量的晶体管,现代电子设备中的晶体管数量约为数百万甚至数十亿。
但是,到底为什么有人会需要那么多晶体管呢?如果晶体管用作开关等,为什么我们的现代电子设备中需要如此之多的晶体管呢?我们是否无法使事情更有效率,以致我们使用的晶体管比目前使用的晶体管少?
Answers:
晶体管是开关,是的,但是开关不仅仅用于打开和关闭灯。
开关组合在一起成为逻辑门。逻辑门组合在一起成为逻辑块。逻辑块组合在一起成为逻辑功能。逻辑功能组合在一起成为芯片。
例如,TTL NAND门通常使用2个晶体管(NAND门与NOR一起被视为逻辑的基本构建块之一):
模拟该电路 –使用CircuitLab创建的原理图
随着技术从TTL过渡到CMOS(现在已成为事实上的标准),基本上晶体管瞬间增加了一倍。例如,“与非”门从2个晶体管变为4个:
锁存器(例如SR)可以使用2个CMOS NAND门(即8个晶体管)制成。因此,可以使用32个触发器(即64个NAND门或256个晶体管)制成32位寄存器。一个ALU可能有多个寄存器,以及许多其他的门,因此晶体管的数量迅速增长。
芯片执行的功能越复杂,需要的门就越多,因此晶体管就越多。
这些天的平均CPU数量要比30年前的Z80芯片复杂得多。它不仅使用宽度为8倍的寄存器,而且它执行的实际操作(复杂的3D转换,矢量处理等)远比旧芯片可以执行的复杂得多。现代CPU中的一条指令在旧的8位处理器中可能要花费几秒钟(甚至几分钟)的计算时间,最终所有这些都需要拥有更多的晶体管才能完成。
我检查了各种半导体器件的本地供应商,他们拥有的最大SRAM芯片是32Mbit。可以存储1或0的3200万个单独区域。假设需要“至少” 1个晶体管来存储1位信息,那么绝对最小数量为3200万个晶体管。
32 Mbits能为您带来什么?那是4 MB,大约是4分钟低质量MP3音乐文件的大小。
编辑-根据我的谷歌搜索的SRAM存储器单元如下所示:-
因此,这是每位6个晶体管,更像我提到的该芯片上的1.92亿个晶体管。
我认为OP可能会被具有如此多晶体管的电子设备所混淆。摩尔定律是计算机(CPU,SRAM / DRAM /相关存储,GPU,FPGA等)的主要关注点。晶体管无线电之类的东西可能(大部分)在单个芯片上,但不能利用所有这么多的晶体管。另一方面,计算设备对于晶体管的附加功能和更宽的数据宽度有着无法满足的胃口。
如前所述,SRAM每位需要6个晶体管。随着我们扩大缓存(出于效率目的),我们需要越来越多的晶体管。查看处理器晶片,您可能会发现缓存大于处理器的单个内核,如果仔细查看内核,您会看到其中组织良好的部分,它们也是缓存(可能是数据和指令L1缓存)。拥有6MB的高速缓存,您需要3亿个晶体管(加上寻址逻辑)。
但是,如前所述,晶体管并不是增加晶体管数量的唯一原因。在现代Core i7上,每个时钟周期和每个内核(使用著名的dhrystone测试)执行的指令超过7条。这意味着一件事:最先进的处理器执行大量并行计算。同时进行更多操作需要有更多的单元来执行,并且需要非常巧妙的逻辑来进行调度。聪明的逻辑需要更复杂的逻辑方程式,因此需要更多的晶体管来实现。
稍微远离细节:
计算机是复杂的数字交换设备。它们具有一层又一层的复杂性。最简单的级别是逻辑门,如NAND门,如前所述,然后进入加法器,移位寄存器,锁存器等。然后添加时钟逻辑,指令解码,高速缓存,算术单元,地址解码,然后不断地进行下去。 。(更不用说内存了,每位数据需要几个晶体管)
这些级别中的每个级别都使用了先前复杂性级别中的许多部分,所有这些部分都是基于大量基本逻辑门的。
然后添加并发。为了获得越来越快的性能,现代计算机被设计为可以同时做很多事情。在单个内核中,地址解码器,算术单元,矢量处理器,高速缓存管理器和其他各种子系统都同时运行,并且都具有自己的控制系统和计时系统。
现代计算机还具有越来越多的独立内核(一个芯片上有多个CPU)。
每次上一层抽象层,复杂性就会增加许多数量级。即使是最低级别的复杂性,也具有数千个晶体管。进入像CPU这样的高级子系统,您正在谈论至少数百万个晶体管。
然后是GPU(图形处理单元)。GPU可能具有数千个单独的浮点处理器,这些浮点处理器经过优化可进行矢量数学处理,每个子处理器中将有数百万个晶体管。
除了增加RAM,缓存,寄存器的原始存储容量以及增加更多的计算核心和更宽的总线宽度(32位对64位等)之外,这还因为CPU变得越来越复杂。
CPU是由其他计算单元组成的计算单元。CPU指令经历几个阶段。在过去,只有一个阶段,并且时钟信号将与所有逻辑门(由晶体管制成)稳定的最坏情况下的时间一样长。然后,我们发明了管道内衬,其中将CPU分为多个阶段:取指令,解码,处理和写入结果。然后,该简单的4级CPU可以以原始时钟4倍的时钟速度运行。每个阶段都与其他阶段分开。这意味着您不仅可以将时钟速度提高到4倍(以4倍的增益),而且现在可以在CPU中分层(或“流水线化”)4条指令,从而使性能提高4倍。但是,现在创建“危险”是因为进入的一条指令可能取决于上一条指令的结果,但是因为 s流水线化,当它进入流程阶段,而另一个退出流程阶段时,它将无法获取。因此,您需要添加电路以将该结果转发到进入处理阶段的指令。替代方法是使管道停顿,这会降低性能。
每个流水线阶段,尤其是过程部分,可以细分为越来越多的步骤。结果,您最终将创建大量电路来处理管道中的所有相互依存关系(危害)。
其他电路也可以增强。称为“纹波进位”加法器的简单数字加法器是最简单,最小但最慢的加法器。最快的加法器是“进位超前”加法器,它需要大量的电路。在我的计算机工程课程中,我用了一个32位进位超前加法器的模拟器用尽了内存,因此我将其切成两半,两个带有脉动进位配置的16位CLA加法器。(对于计算机,加法和减法都很困难,乘法很容易,除法很难)
所有这些的副作用是,当我们缩小晶体管的尺寸并细分各个级时,时钟频率会增加。这样可以使处理器执行更多工作,从而使其运行温度更高。同样,随着频率的增加,传播延迟变得更加明显(流水线级完成所需的时间,信号在另一侧可用)。由于阻抗,有效的传播速度约为1 ft /纳秒(1 GHz)。随着时钟速度的提高,随着4 GHz芯片的最大尺寸为3英寸,其芯片布局变得越来越重要。因此,现在您必须开始包括其他总线和电路,以管理围绕芯片传输的所有数据。
我们还一直在向芯片添加说明。SIMD(单指令多数据),节能等均需要电路。
最后,我们为芯片添加了更多功能。在过去,您的CPU和ALU(算术逻辑单元)是分开的。我们将它们结合在一起。FPU(浮点单元)是独立的,也已合并在一起。如今,我们增加了USB 3.0,视频加速,MPEG解码等。我们将越来越多的计算从软件转移到硬件。
Majenko对于如何使用晶体管有很好的答案。因此,让我改用其他方法来处理效率问题。
设计某些东西时,使用尽可能少的晶体管是否有效?
这基本上可以归结为您在谈论的效率。也许您是某个宗教的成员,因此认为必须使用尽可能少的晶体管-在这种情况下,给出的答案非常多。也许您是一家制造产品的公司。突然,关于效率的简单问题变成了关于成本效益比的非常复杂的问题。
更重要的是,集成电路中的晶体管非常便宜,而且随着时间的推移它们越来越便宜(SSD是降低晶体管成本的一个很好的例子)。另一方面,劳动力非常昂贵。
在IC刚刚起步的时代,有一定的推动力以使所需的组件数量尽可能少。这仅仅是因为它们对最终产品的成本有重大影响(实际上,它们通常是产品成本的大部分),而当您制造成品的“盒装”产品时,人工成本就是散布在您制作的所有作品中。早期的基于IC的计算机(认为是视频游戏机)被推向尽可能小的每台成本。但是,固定成本(而不是单件成本)受您能够出售的数量的强烈影响。如果您只打算出售一对,那么花太多时间降低单件成本可能不值得。另一方面,如果您试图建立一个巨大的市场,
注意一个重要的部分-在设计用于批量生产的产品时,仅花费大量时间来提高“效率”才有意义。这基本上就是“工业”的含义-对于工匠而言,熟练的劳动力成本通常是制成品的主要成本,在工厂中,更多的成本来自材料和(相对)非熟练劳动力。
让我们快速前进到PC革命。当IBM风格的PC出现时,它们非常愚蠢。极度愚蠢。它们是通用计算机。对于几乎所有任务,您都可以设计一种可以做得更好,更快,更便宜的设备。换句话说,从效率简单化的角度来看,它们是非常低效的。计算器便宜得多,可以放在口袋里,并且可以长时间运行。视频游戏机具有特殊的硬件,使其非常擅长创建游戏。问题是,他们别无选择。PC可以做所有事情-它的价格/输出比要差得多,但是您并没有沉迷于制作计算器或2D Sprite游戏机。为什么《德军总部》和《毁灭战士》(以及在Apple PC上,马拉松比赛)出现在通用计算机上,而不出现在游戏机上吗?因为游戏机非常擅长基于2D精灵的游戏(想象典型的JRPG或类似Contra的游戏),但是当您想远离高效的硬件时,您发现没有足够的处理能力来做其他事情!
因此,效率似乎较低的方法为您提供了一些非常有趣的选项:
所有这一切是在一个晶体管的“废物”,但它不是真正的垃圾,因为真正的总成本更低比他们是,如果你被推为简单的“少晶体管作为可能的”。
“这么多晶体管”故事的另一面是,这些晶体管不是由人单独设计的。现代的CPU内核具有大约1亿个晶体管,并且没有人直接设计这些晶体管中的每一个。这是不可能的。75年的寿命只有23亿秒。
因此,为了使这种庞大的设计可行,与单个晶体管相比,人类要以更高的抽象水平来定义设备的功能。转换为单个晶体管的过程被称为电路综合,它是通过非常昂贵的专有工具完成的,这些工具多年来共同开发的总成本约为10亿美元,主要工具制造商和代工厂之间的总和为之。
电路综合工具无法生成具有最少数量晶体管的设计。这样做有多种原因。
首先,让我们介绍一下最基本的情况:任何复杂的电路都可以由具有足够内存的简单得多的串行CPU进行模拟。如果您只需将足够的串行RAM连接到Arduino,您就可以精确地模拟i7芯片。这样的解决方案将比真正的CPU具有更少的晶体管,并且将以1kHz或更小的有效时钟速率运行得非常慢。我们显然不打算晶体管数量减少去那么远。
因此,我们必须将自己局限于某种设计到晶体管的转换:那些保持原始设计内置的并行容量的转换。
即使到那时,最小数量的晶体管的优化也可能产生使用任何现有半导体工艺无法制造的设计。为什么?因为您实际上可以制造的芯片是2D结构,并且仅需要一些电路冗余,以便您可以互连这些晶体管而无需一公斤金属。晶体管的扇入和扇出以及由此产生的栅极确实很重要。
最后,这些工具在理论上并不是完美的:考虑到可制造芯片的限制,通常需要太多的CPU时间和内存来生成在晶体管数量方面全局最小的解决方案。
基本上,计算机能够识别的所有数字都是0和1。这是由这些开关决定的。是的,晶体管的功能远不止于开关。因此,如果开关可以决定输出必须是0还是1(假设作为单个bi操作),则位数越多。更多的晶体管..因此,难怪我们为什么必须将数百万个晶体管嵌入到单个微处理器中.. :)