晶体管之上的 CPU 编程的最低级别是什么?

电器工程 数字逻辑 电路设计 中央处理器
2022-01-11 08:10:30

在我的 CS 程序中,我的教授声称 NAND 门是工程师最基本的门,因此 CPU 中发现的所有其他门和更高级别的电路都是由 NAND 门制成的(未找到来源)。我对这种说法持怀疑态度,因为它看起来非常缓慢,而且我希望通过避免此类限制可以进行许多优化。那么,我的问题是:在物理电线和晶体管之上,标准通用 CPU 的最低编程水平是什么?

我不知情的研究使我找到了一些可能的解决方案。在电子电路布局设计基础(第 24 页)的第 1.3.2 节中,出现了以下段落:

考虑到数字电路的物理设计,具有不可变内部结构的标准元件作为单元存储在库中。这些单元,例如逻辑门和存储器,提供标准功能,并且它们的布局已经产生。

这告诉我,不仅与非门,而且所有逻辑门和进一步的功能,如锁存器、加法器、触发器等,都直接在晶体管级实现,下一步是组合这些优化的单元。我对这个答案很满意,直到我被告知VLSI 芯片有时在门级编程,这告诉我下一层是标准逻辑门,尽管仍然不只是 NAND。我还发现提到了CMOS 逻辑及其功能,但缺乏专业知识来解析我的问题的答案。

理想情况下,我正在寻找一些明确的列表,列出哪些功能直接在晶体管级别实现,以及设计通用 CPU 的下一个抽象级别是什么。我怀疑该列表很复杂,并且因公司和型号而异,但是对于好奇的外行来说,任何澄清都会有所帮助。

4个回答

在我的 CS 程序中,我的教授声称 NAND 门是工程师最基本的门,因此 CPU 中的所有其他门和更高级别的电路都是由 NAND 门制成的

“是的?嗯,你知道,这就像,呃,你的意见,伙计。” - 老兄

你的教授……在几个层面上是不正确的。

让我们打开这个包装。

与非门是工程师最基本的门

不,他们不是。那将是非门。NAND 和 NOR 相当复杂,每个都需要至少两个使用上拉电阻的晶体管(在 CMOS 中,每种类型需要四个。)

因此 CPU 中的所有其他门和更高级别的电路都是由 NAND 门制成的

NOR 也可以提出相同的要求,因为它与 NAND 一样复杂,并且可以通过应用德摩根定理实现相同的功能调色板。

所以教授的说法在理论上和实践中都不正确,我们将在下面看到。

当得知Apollo 制导计算机 (AGC) 中存在一个非常重要的早期 CPU 使用单门类型(并且很可能是此类结构中唯一的一个)时,教授可能会感到非常惊讶。这台机器的逻辑完全由一个 IC 构建而成:一个双 3 输入(正逻辑)NOR看不到 NAND,也没有(双关语)在飞行中。

更多信息:http ://www.righto.com/2019/09/a-computer-built-from-nor-gates-inside.html

以及他们选择该 IC 的理由:https ://www.ibiblio.org/apollo/hrst/archive/1716.pdf 。

在最一般的意义上,如果你只有两件事:反演和任何类型的图灵完备基 2 输入函数,你就有能力制作任何复杂的任何类型的逻辑。德摩根定理告诉我们。NOR 和 NAND 本身就满足了这一点,AND+NOT 和 OR+NOT 也是如此。选择一个或组合,它们都有效。

人们是否仍然使用单一类型的门来制造东西,无论是 NAND 还是 NOR?没那么多。门阵列或门是这种想法的极端例子,是的,它们可以完全基于单一的反相逻辑类型,如 NAND 或 NOR。门阵列有限制、低效率和成本;因此不再那么受欢迎了。它们在很大程度上已被微控制器、CPLD、FPGA,当然还有 ASIC 所取代。

对于芯片结构的层次结构(即抽象级别),我们将晶体管和互连线作为最低级别。那么,在此之上的抽象级别是什么?我们会做到的,我保证。

在芯片设计的沙拉时代(想想 Jack Kilby、Robert Noyce),答案是……不多。晶体管和互连是手工逐个多边形和逐层布置的(首先在ruby​​lith中,然后通过物理 CAD 软件),以捕获设计并创建掩模组。这种做法起源于双极,并一直延续到 MOS 技术的发展中。

随着 1978 年论文的发表(以及后来基于该论文的书),Carver Mead 和 Lynn Conway 用他们基于 MOS 的结构化方法改变了这一切。除其他想法外,他们还引入了标准单元的概念,这是一组预定义的功能原语,可以在芯片之间重复使用,同样重要的是,可以在工艺之间重复使用。很快,这组函数作为标准单元库由工艺供应商提供,以他们的目标工艺为特征,以保证性能

因为晶圆厂供应商保证了单元的性能,使用标准单元库流程提供了从设计人员到代工厂的“干净的移交”,这在 1960 年代和 70 年代使用红宝石中的多边形方法几乎是不可能实现的。(向那些早期的先驱者致敬;制作当时更简单的芯片所需的努力是巨大的。)

这种由 Mead 和 Conway 的结构化设计和支持它的标准单元库支持的设计和重用理念,是 1980 年代芯片设计进入高速发展阶段的原因。

Mead 和 Conway 的书Introduction to VLSI Systems仍然可用,尽管它侧重于 NMOS,但在今天仍然适用。

回到现在,你的问题。在现代 CMOS 设计中,除了基本门和复杂门之外,您会看到更多使用传输门来构建逻辑。对于 CMOS,可以说门基元、传输门和顺序存储是单个晶体管和导线之上的基本逻辑级部件。门原语将包括 NAND、NOR 和 NOT,以及更复杂元素的有效晶体管级实现,例如 XOR/XNOR、AOI (AND-OR-INVERT)、多路复用器和算术。传输门、缓冲器、锁存器和触发器完善了低级库的其余部分。

AOI / OAI 门值得特别提及。这些结构在 CMOS 中非常有效,至少只需要 6 个晶体管。它们对于呈现积和或积逻辑非常方便。

还提供更大的“常规”功能单元,如 RAM 和 ROM,从晶体管级设计并以块为特征。这些通常作为参数化宏处理,这些宏根据用户输入(深度、宽度、端口数等)自动生成

更多关于标准单元库的信息:https ://www.eng.biu.ac.il/temanad/files/2017/02/Lecture-4-Standard-Cell-Libraries.pdf

人们还在“推动多边形”吗?当然。关键路径模块受益于晶体管级手动调整设计,以实现更高的性能、更高的密度或更低的功耗。混合信号块也可以至少部分手动完成。您可以将这些视为设计人员可以在项目之间重复使用的“自定义”单元,但也将针对特定流程作为标准库的附加组件进行表征。

除了那些手工制作的边缘案例,芯片是使用基于标准单元库的综合构建的,设计人员的主要工作是架构、逻辑设计和综合,以及分区和布局——所有这些都是为了以最少的成本达到目标性能可能的芯片面积和可接受的功率。

简而言之,在现代芯片设计中,标准单元库是晶体管和电线之上的下一个抽象层次,大多数设计人员与之交互以创建芯片。

标准单元库之上用于“编程”CPU 的下一层是什么?取决于 CPU。可能有 PLA(可编程逻辑阵列)、微码 ROM 或其他一些映射结构,它们将通过仅重新排列一或两个接触层来进行掩模编程。这样的块允许在不进行整个基础层流片的情况下进行更改/修复错误。与综合逻辑相比,它们可以以增加面积为代价缩短时间并降低原型制作成本。

在当今的大多数处理器上,最低级别的编程是机器代码。

过去有一些处理器实际上运行自己的程序来解释您的程序,但这种情况很少见,公司最终倒闭了。

您可能听说过微码。一些低端 CPU 确实运行用微码编写的实际解释器。在现代 CPU 上,微码并不完全是“编程”——它更像是一个查找表,可以帮助指令解码器处理某些难以执行的指令。所有“快速”指令都无需微码帮助即可直接解码和执行。因此,在这些 CPU 上实际编程的最低级别仍然是机器代码。

即使在带有微码解释器的系统上,微码也总是与硬件一起设计的。这意味着他们设计的硬件完全符合内置微码的需求——不多也不少。它不是通用编程语言。你不能用微码编写 Python 解释器。否则他们会称之为机器代码。


您在硬件​​描述语言(特别是 Verilog)的上下文中提到了“在门级编程的 VLSI”。但是,HDL 不是 CPU 的程序。它们更像是用于设计 CPU 的系统的程序。设计人员可以编写一些 HDL,并通过他们的“Verilog 编译器”提供它,然后就可以制定出构建 CPU 的计划。然后他们可以将该计划发送到他们的制造工厂,几个月后,他们可以获得一个 CPU(或者更有可能是十万个 CPU)。然后他们可以为 CPU 编写机器代码程序。

链接的文档提到了 Verilog 编程的不同“级别”。这些级别讨论了 Verilog 编译器必须完成的工作量。你可以告诉它“在这里放置一个晶体管”或者你可以告诉它“在这里放置一个与非门”或者你可以告诉它“放置一个加法器,它将来自这里和这里的数字相加并将结果发送到这里”或者你可以告诉它它“请让它成为一台计算定点傅里叶变换的机器”。

但这与编译器有关。在运行编译器然后将计划发送到制造厂后获得的实际芯片仍然是用机器代码编程的。


顺便说一句,您不必使用Verilog 来设计 CPU。你可以用它来设计你想要的任何芯片。但这些芯片不称为 CPU。


过去曾有人尝试设计有效执行某些高级语言的芯片,例如Lisp 机器不过,他们并没有直接运行 Lisp——他们运行的机器代码的设计方式使 Lisp 程序运行速度更快。您仍然必须使用机器代码编写 Lisp 解释器或 Lisp 编译器。

“在我的 CS 课程中,我的教授声称 NAND 门是工程师最基本的门,因此 CPU 中的所有其他门和更高级别的电路都是由 NAND 门制成的”

一个两输入 CMOS 与非门使用四个晶体管。CMOS 非门仅使用两个晶体管。因此,就晶体管而言,与非门绝对不是最小的 CMOS 门。

两输入 CMOS NAND 门和两输入 CMOS NOR 门都可以用四个晶体管构成,它们都可以作为构造任何布尔函数的基础。我认为与非门并不比或非门更“基本”。

在此处输入图像描述

我对这种说法持怀疑态度,因为它看起来非常缓慢,我希望通过避免此类限制可以进行许多优化。

虽然可以仅从 NAND 门构造任何布尔逻辑函数,但它不一定是最佳的。构建 2 输入 CMOS 或非门使用 4 个晶体管。通过将四个 CMOS 与非门粘合在一起来构建一个 2 输入 COMOS NOR 门使用 16 个晶体管。而且它的运行速度也会变慢。

在此处输入图像描述

因此,虽然我们可以仅从 NAND 门构建 CPU,但实际上我们会这样做,除非我们必须这样做。

如果您使用标准单元制作 ASIC,则例外。在这种情况下,您只能使用制造商流程中可用的技术来构建逻辑。而且它们很可能会限制您仅使用与非门。

理想情况下,我正在寻找一些明确的列表,列出哪些功能直接在晶体管级别实现,以及设计通用 CPU 的下一个抽象级别是什么。我怀疑该列表很复杂,并且因公司和型号而异,但是对于好奇的外行来说,任何澄清都会有所帮助。

您的流程中将使用哪些元素取决于您要使用的制造商。

  1. 例如,您可以用 VHDL 或 Verilog 为您的 CPU 编写逻辑描述,然后在 Xilinx FPGA 上对其进行原型设计。然后,您可以前往 Xilinx 并使用他们的 Easy-Path 流程将 FPGA 设计直接转换为 ASIC,而无需您进行任何修改。在这种情况下,可供您设计的元素基本上是 FPGA 中的任何单元。

  2. 或者,您可以使用 MOSIS 等原型 CMOS 制造服务。在这种情况下,您可以直接制作 CMOS 晶体管,并且您基本上可以做任何您想做的事情。我就读的大学使用这项服务从他们的研究生级 CPU 设计课程中制作设计。 https://www.mosis.com/

您要求“晶体管之上的最低级别”。在最低级别,您将使用 NAND 门或 NOR 门,这取决于您如何将电压解释为真值,并取决于您的确切技术。

但是,最低级别不是“两输入一输出与非门”;如果你直接到这个级别,你会扔掉太多。相反,您将有一个带有 n 个输入的 NAND 门,1 ≤ n ≤ 某个值。而且您的输入/输出不会是真或假,但仍然是电压,并且输出电压不会是您想要的完美电压。因此,您的门需要一定质量的输入信号并在其输出信号中产生一定质量。四输入 NAND 不会产生与两输入 NAND 完全相同的输出信号。所以当你建立在这个级别上时,你需要确保你的信号足够强,这样你的门才能真正起作用。

在下一个更高级别,您的标准逻辑门将从这些构建。有人会设计一个来自与非门的加法器,将使用两个输入、三个输入,无论哪个更好,并确保所有弱输出信号都用作可以处理这些弱输入的输入。

到那时,我们离“CPU 编程”还有很长的路要走。