跳转至内容

微处理器设计/线绕

来自维基教科书,开放世界中的开放书籍

从历史上看,大多数早期的 CPU 都是通过将集成电路 (IC) 连接到电路板并进行布线来构建的。

如今,在 FPGA 中设计和实现新的 CPU 要快得多——结果可能会比分散在多个 IC 上的任何东西运行得更快,功耗也更低。

但是,有些人仍然以传统的方式设计和构建 CPU。这种 CPU 有时被称为“自制 CPU”或“自制 CPU”。

有些人认为,以这种方式物理构建 CPU,因为它允许学生探究 CPU 的内部工作原理,可以帮助他们“接触魔法”[1],帮助他们学习和理解底层的电子设备和硬件。

自制计算机的一个例子,点击查看放大版本

自制 CPU 是一个使用许多简单的集成电路构建的中央处理器,通常来自 7400 系列。在规划这种 CPU 时,设计人员不仅要考虑设备的硬件,还要考虑 CPU 将要执行的指令、它们将如何运行、每个指令的位模式及其助记符。在基于计算机的电路模拟出现之前,许多商业处理器(来自摩托罗拉等制造商)都是首先使用分立逻辑构建和测试的。这些商业处理器包括摩托罗拉 6800[2]、摩托罗拉 6809[3]、32 位摩托罗拉 68030[4] 和 32 位惠普 PA-RISC TS1[5]

虽然在构建这种 CPU 时,数据总线大小没有限制,但随着总线宽度变宽,完成设计的组件数量呈指数级增长。常见的数据总线物理尺寸为 1 位、4 位、8 位和 16 位。 40 位 CPU 的不完整设计文档存在。[6] 微程序 CPU 能够向应用程序程序员提供与用于实现它的硬件直接支持的指令集明显不同的指令集。例如,68000 向应用程序程序员提供了一个 32 位指令集——一个 32 位“加法”是一个单独的指令——即使在内部它是使用 16 位 ALU 实现的。例如,Zilog Z80 是有史以来最常用的 CPU 家族之一[7],向应用程序程序员提供了一个 8 位指令集——即使在内部它是使用单个 4 位 ALU 实现的[8]

例如,w:串行计算机,即使它们每次时钟周期只计算一位,也会提供一个处理更宽字的指令集——通常是 12 位(PDP-8/S;PDP-14)、24 位(D-17B),甚至更宽——39 位(Elliott 803)。


著名的自制 CPU

Magic-1 是一个具有 8 位数据总线和 16 位地址总线的 CPU,运行速度约为 3.75MHz 4.09 MHz。 [4]

Mark I FORTH 也有一个 8 位数据总线和 16 位地址总线,但运行速度为 1MHz。[9]

V1648CPU 是一个具有 16 位数据总线和 48 位地址总线的 CPU,目前正在设计中。 [5]

APOLLO181 是一款自制的 4 位教学处理器,由 TTL 逻辑和双极性存储器组成,基于 Bugbook® I 和 II 芯片,特别是基于 74181(由 Gianluca.G 制造,意大利,2012 年 5 月)。 [6]

([待定:命名为?)] 是一个由许多麻省理工学院的学生使用“MAYBE”实验室套件重新实现的 8 位 TTL CPU。[10]

“Beta”显然是一个由许多麻省理工学院的学生重新实现的 32 位 CPU。 他们至少以 3 种不同的方式实现它

  • 在 8 位 CPU ([待定:命名为?)] 上运行的模拟,该 CPU 由简单的集成电路构建[10][11]
  • 一个直接由大量简单集成电路构建的 32 位 CPU[11]
  • 一个在其他 CPU 芯片上使用软件模拟的 32 位 CPU。

2005 年,十八名高中生重新实现并构建了他们自己的“CHUMP”(“廉价自制易懂最小处理器”)版本,这是一个具有 4 位数据路径的 CPU。[10]

...

实际上所有 CPU 设计都包括几个三态总线——一个“地址总线”、一个“数据总线”以及各种内部总线。

三态总线在功能上与多路复用器相同。但是,在三态总线中,没有你可以指向并说“那就是多路复用器”的物理部分;这是一种由许多部分共享的活动模式。使用三态总线的唯一原因是当它与等效的多路复用器排列相比,需要更少的芯片或更少、更短的线时。当您想选择非常少量的紧密相邻的数据,并且大多数数据存储在仅具有 2 态输出的芯片上时,使用实际的多路复用器芯片可能需要更少的芯片和更少的布线。当您想选择许多数据(许多寄存器中的一个,或许多存储芯片中的一个等),或者保存这些数据的许多芯片已经具有三态输出时,使用三态总线通常需要更少的芯片(即使计算在总线和每个没有三态输出的部件之间“额外”的三态缓冲器)。

连接到 TTL CPU 上的三态 16 位总线的典型寄存器文件包括

  • 八路 2 态输出寄存器(如 74x273),每个 16 位寄存器 2 个芯片
  • 八路三态非反相缓冲器(如 74x241),每个 16 位寄存器每个总线 2 个芯片
  • 一个具有 N 个输入(由微程序驱动)和 2^N 个输出线的解多路复用器,选择最多 2^N 个可能驱动总线的部件中的一个的三态缓冲器,每个总线 1 个芯片。

稍后我们将讨论可能需要更少芯片的快捷方式。

像许多历史上重要的商用计算机一样,许多自制 CPU 使用 74181 的某种版本,这是第一个单芯片完整 ALU。[12] (74181 的版本包括 74F181、40181[citation needed]、74AS181、72LS181、74HCT181 等)。74181 是一款 4 位宽的 ALU,可以执行所有传统的加/减/减操作,带或不带进位,以及 AND/NAND、OR/NOR、XOR 和移位。

典型的自制 CPU 使用 4 个这样的 74181 芯片来构建一个 ALU,该 ALU 可以一次处理 16 位数据,例如 Data General SuperNova。[13] 最简单的自制 CPU 只有一个 ALU,它在不同的时间用于递增程序计数器、对数据进行算术运算、对数据进行逻辑运算以及根据基址+偏移量计算地址。

一些构建 TTL CPU 的人试图通过构建一个小于最大字长(在 TTL 计算机中通常为 16 位)的 ALU 来“节省芯片”。例如,最早的 Data General Nova 计算机使用一个 74181 芯片,并以 4 位为单位处理所有数据。[13] 不幸的是,这会增加其他地方的复杂性,并且实际上可能会增加所需的芯片总数。[14][15][16]

最简单的 16 位 TTL ALU 将每个 74181 芯片的进位输出连接到下一个芯片的进位输入,形成一个行波进位加法器。

历史上,超前进位发生器 74182 的某个版本被用来加速“加”和“减”操作,使其与其他 ALU 操作的速度大致相同。

历史上,一些构建 TTL CPU 的人会在单个 CPU 中放置两个或多个独立的 ALU 模块——一个用于数据计算的通用 ALU、一个 PC 递增器、一个索引寄存器递增器/递减器、一个基址+偏移量地址加法器等。

我们将在 Microprocessor Design/Add and Subtract Blocks 中讨论行波进位加法器、超前进位发生器及其对 CPU 其他部分的影响。

74181 的替代品

[edit | edit source]

有些人发现 '181 芯片越来越难找。

相当多的人在构建“TTL CPU”时使用 GAL 芯片(可以擦除和重新编程)。[17] 一个 GAL20V8 芯片可以替换一个 74181 芯片。[18] 通常,另一个 GAL 芯片可以替换 2 或 3 个其他 TTL 芯片。

其他构建“TTL CPU”的人发现,完全用离散的不可编程芯片构建一个可编程机器更有魔力。是否有任何合理的替代品可以用来构建由离散芯片组成的 ALU?Magic-1 使用 74F381 和 74F382 ALU;[19] '381 和 '382 芯片是否有任何变体比 '181 更容易找到?... 74HC283、74HCT283、MC14008 芯片只能加;它们不会做 AND、NAND 等...

许多商用机器,例如 Data General Nova 4,使用四个 AM2901 ALU“并行”来构建每个 16 位 ALU。遗憾的是,这些芯片似乎比 74181 更难找。

可以利用足够数量的 74153 多路复用器构建整个 CPU(包括 ALU)。[20]

一位设计师“从头开始”构建了一个 4 位 ALU,可以进行加、减、递增、递减、“与”、“或”、“异或”等运算——大致相当于 4 位 74181——大约使用 14 个简单的 TTL 芯片:2 输入 XOR、AND、OR 门。[21]

另一位设计师发布了一个 8 位 ALU 设计,其功能比两个 74181 芯片更多——74181 无法右移——由 14 个复杂的 TTL 芯片构建而成:两个 74283 4 位加法器,一些 4:1 多路复用器和一些 2:1 多路复用器。[22]

LM3000 CPU 的设计师证明了 74181 的许多功能实际上是多余的。LM3000 中的 8 位“ALU”实际上无法进行任何逻辑运算,只能进行“加”和“减”运算,由两个 74LS283 4 位加法器和其他几个芯片构建而成。显然,那些“逻辑”运算并不真正必要。[23]

MC14500B 工业控制单元的功能甚至比 LM3000 CPU 还少。可以说,MC14500B 的功能接近于被认为是“CPU”的最低限度。[24][25] MC14500B 也许是最著名的“1 位”CPU。[26][27][28][29] [30]

所有最早的计算机以及大多数早期的海量并行处理机都使用串行 ALU,使其成为“1 位 CPU”。[31]

其他部分

[edit | edit source]

无焊接面包板方法

[edit | edit source]

无焊接面包板也许是构建涉及大量更改的实验原型最快的方法。

大约十年来,每位在麻省理工学院学习 6.004 课程的学生都是团队中的一员——每个团队有一个学期的时间来设计和构建一个简单的 8 位 CPU,使用 7400 系列集成电路。[32] 这些 CPU 由插在几个无焊接面包板上的 TTL 芯片组成,这些面包板通过许多 22 AWG(0.33 mm2)实心铜线连接。[33]

绕线

[edit | edit source]

传统上,由 TTL 芯片构建的微型计算机是用大量的绕线插座(带有长方形的方形引脚)插入穿孔板和大量的绕线线来构建的,这些插座和绕线线是用“绕线笔”或“绕线枪”组装起来的。

带状板

[edit | edit source]

最近,一些“复古计算机”制造商一直在使用插入带状板的标准插座和大量的绕线线,这些插座和绕线线是用焊锡和烙铁组装起来的。[34]

工具

[edit | edit source]

Logisim 是一款免费的逻辑模拟器,允许使用图形用户界面设计和模拟数字电路。

设计技巧

[edit | edit source]

有很多方法可以对 CPU 进行分类。每种“分类方法”都代表着一个设计问题,而该方法的各种类别则代表着在完成 CPU 实现之前需要决定的各种可能的答案。

对 CPU 进行分类的一种方法对实现有很大影响,即:“在获取下一条指令之前,我将保持一条指令多少个存储周期?”

  • 0:每个存储周期加载指令(哈佛结构)
  • 1:每个加载指令存储周期之间最多 1 个存储周期(加载存储结构)
  • 更多:一些指令在加载指令内存周期之间有 2 个或多个内存周期(内存-内存架构)。

另一种对 CPU 进行分类的方法是:“我的控制线将由灵活的微程序控制,固定的控制存储器控制,还是由直接对指令进行解码的硬连线控制解码器控制?”

加载存储和内存-内存架构需要一个“指令寄存器”(IR)。在每个指令结束时(以及从复位状态出来之后),下一个指令从内存 [PC] 中取出并存储到指令寄存器中,从那时起,指令寄存器中的信息(直接或间接)控制着 CPU 中发生的所有操作,直到下一个指令存储到指令寄存器中。

对于自制 CPU,最流行的两种架构是[需要引用]

  • 直接解码哈佛架构
  • 支持内存-内存架构的灵活微程序。

另一种对 CPU 进行分类的方法是:“一个完整的时钟周期中有多少个子状态?”

许多教科书暗示 CPU 只有一个时钟信号——一堆 D 触发器,每个触发器保存 CPU 当前状态的 1 位,这些触发器将其状态通过其“Q”输出驱动出去。这些触发器始终保持其内部状态不变,除了在一个且仅一个时钟上升沿的瞬间,每个触发器会短暂地“查看”其“D”输入并锁存新位,并且很快之后(当新位与旧位不同时)将“Q”输出更改为新位。

理论上单个时钟信号很好。遗憾的是,在实践中,我们永远无法使时钟信号精确地同时到达每个触发器——总存在一些时钟偏差(传播延迟的差异)。避免这些时钟问题的一种方法是使用一系列不同的时钟信号。[35] 另一种方法是使用足够的功率[36] 并仔细设计一个 w: 时钟分配网络(可能采用 w: H 树 的形式)并进行 w: 时序分析,将时钟偏差减少到可以忽略的程度。

继电器计算机被迫使用至少 2 个不同的时钟信号,因为存在“触点弹跳”问题。

许多芯片只有一个“时钟输入”引脚,给人一种它们使用单个时钟信号的错觉——但在内部,“时钟发生器”电路将该单个外部时钟转换为芯片使用的多个时钟信号。

许多在历史上和商业上重要的 CPU 在一个完整的时钟周期中都有许多子状态,并且有两个或多个“非重叠时钟信号”。大多数 MOS 集成电路在 1970 年代使用双时钟信号(两相时钟)[37]

从单个芯片和电线构建 CPU 需要很长时间。因此,许多人采用各种捷径来减少需要连接的东西的数量,以及他们需要进行的布线量。

  • 3 状态总线而不是 2 状态总线通常需要更少、更短的连接。
  • 有时,使用单独的地址寄存器和数据寄存器以及其他专用寄存器,而不是可以(在不同时间)用于驱动数据总线(在存储期间)或地址总线(在索引加载期间)的通用寄存器,需要更少的硬件。
  • 如果软件人员坚持使用可以(在不同时间)用于驱动数据总线(在存储期间)或地址总线(在索引加载期间)的通用寄存器,则模拟它们可能需要更少的硬件:让所有程序员可见的寄存器仅驱动一个内部微架构总线,并且(在不同时间)从该内部总线加载微架构寄存器 MAR 和 MDR,然后从 MAR 驱动外部地址总线,从 MDR 驱动外部数据总线。这牺牲了一点速度,并且需要更多的微代码,以便更容易构建。
  • 与 32 位或 64 位地址和数据寄存器相比,使用 8 位数据寄存器(有时将 2 个组合在一起以获得 16 位地址寄存器)通常需要更少的硬件。
  • 如果软件人员坚持使用 16 位或 32 位或 64 位数据寄存器和 ALU 操作,则模拟它们可能需要更少的硬件:使用多个狭窄的微架构寄存器来存储每个程序员可见的寄存器,并将每次通过一个狭窄的总线馈送 1 位或 4 位或 8 位或 16 位,以获得每个周期的部分结果,或馈送到宽 MAR 或 MDR 的子部分。这牺牲了一点速度(并在其他地方增加了复杂性),以便更容易构建总线。(参见:68000,如上所述)
  • 与许多寄存器相比,使用更少的寄存器通常需要更少的硬件。
  • 如果软件人员坚持使用许多寄存器,则模拟其中一些(如一些提议的 MMIX 实现)或可能全部(如一些 PDP 计算机)可能需要更少的硬件:使用 RAM 中的保留位置来存储大多数或所有程序员可见的寄存器,并在需要时加载它们。这牺牲了速度,使 CPU 更容易构建。遗憾的是,似乎不可能消除所有寄存器——即使将所有程序员可见的寄存器放在 RAM 中,似乎仍然需要一些微架构寄存器:IR(指令寄存器)、MAR(内存地址寄存器)、MDR(内存数据寄存器)以及……还有什么?
  • 哈佛架构通常比普林斯顿架构需要更少的硬件。这是使 CPU 更容易构建 *和* 运行更快的几种方法之一。

哈佛架构

[编辑 | 编辑源代码]

最简单的 CPU 控制逻辑使用哈佛架构,而不是普林斯顿架构。但是,哈佛架构需要 2 个独立的存储单元——程序存储器和数据存储器。一些哈佛架构机器,例如“Mark 的 TTL 微处理器”,甚至没有指令寄存器——在这些机器中,程序计数器中的地址始终应用于程序存储器,程序存储器输出的数据直接控制着 CPU 中发生的所有操作,直到程序计数器发生改变。遗憾的是,哈佛架构使得将新程序存储到程序存储器中有点棘手。

微代码架构

[编辑 | 编辑源代码]

参见 微处理器设计/微代码

汇编技巧

[编辑 | 编辑源代码]

...

“我不建议除了彻头彻尾的疯子之外的任何人再用散装芯片来自己用线绕制机器,尽管在 70 年代中期到后期,这曾经是一种很常见的做法”。——杰夫·邓特曼

编程技巧

[编辑 | 编辑源代码]

...

进一步阅读

[编辑 | 编辑源代码]
  1. “触摸魔法。我的意思是更深入地了解计算机的工作原理”——比尔·布兹比 [1]
  2. “为了在芯片设计期间评估 6800 架构,杰夫的团队使用 5 块 10 英寸 x 10 英寸(25 厘米 x 25 厘米)的电路板,用 451 个小规模 TTL 集成电路构建了等效电路。后来,他们通过使用 ROM 和 MSI 逻辑器件将其减少到一块电路板上的 114 个集成电路。”——w:Motorola_6800#开发团队
  3. 特里·里特和乔尔·博尼。 “一场革命的微处理器:6809。第 3 部分:最终想法”。照片 2 说明: “处理器的门级 TTL 模型包括十块电路板,每块电路板包含 80 到 120 个集成电路。所需的 10,000 个连接中有很多是错误的。系统必须经过测试才能找到并纠正构造和逻辑错误。”
  4. “68030 原型机,速度为 1 MHz,使用 18 块 TTL 板”。引述:“68030,本质上是带有集成 MMU 和虚拟内存功能的 68020。我们确实有一个 68020 的完整硬件面包板。68030 面包板是 18 块 24 英寸 x 24 英寸的线绕面包板,每块面包板都带有 23x14 个 20 引脚 DIP 插座!”
  5. “第一个实现是 TS1,一个由分立晶体管-晶体管逻辑 (74F TTL) 器件组成的中央处理单元。”——w:PA-RISC
  6. “异步 40 位 TTL CPU”,作者:汉斯·萨默斯,1992 年
  7. 维基百科:Zilog Z80
  8. 肯·希里夫。 “Z-80 具有 4 位 ALU。它是这样工作的。”,2013 年。
  9. 安德鲁·霍姆。 “Mark 1 FORTH 计算机”
  10. a b c Dave Feinberg. "课堂上的简单且实惠的 TTL 处理器".
  11. a b Kevin McCormick,Colin Bulthaup,Scott Grant 和 Eric Prebys "VHS". 引用:“十多年来……学生们必须在课堂上用分立集成电路构建一台简单的 8 位计算机。这台计算机没有微处理器 - 你需要自己构建处理器。这台机器被用于软件中模拟更复杂的 32 位处理器,称为 Beta。……在 1996 年秋季,Scott、Colin、Eric 和我构建了 Beta 的直接硬件实现,我们称之为 VHS。在 6.004 的历史上,还没有人成功构建过 32 位机器。我们做到了,我们的机器运行速度至少是竞争对手的 50 倍!”
  12. "74181 是一个位片算术逻辑单元 (ALU)……第一个完整的单芯片 ALU……许多计算机 CPU 和子系统都基于 '181,包括……PDP-11 - 历史上最受欢迎的 小型机" -- 维基百科:74181
  13. a b 维基百科:Data General Nova#处理器设计
  14. "我的家用 TTL 计算机处理器 (CPU)",作者:Donn Stewart
  15. "如果内存地址恰好适合一个字,那么指令执行单元执行的基本算法是最容易表达的。" -- "终极 RISC",作者:Douglas W. Jones
  16. "如果你能操作的最大数据小于你的地址大小,那真的很糟糕。这意味着累加器需要与 PC 相同大小 - 16 位。" -- "计算机体系结构"
  17. Andrew Holme. "Mark 2 FORTH 计算机"
  18. GALU - 基于门阵列逻辑的 ALU 集成电路。
  19. Bill Buzbee. "Magic-1 微架构".
  20. Dieter Mueller. "多路复用器:逻辑设计的战术核武器" 2004.
  21. Rodney Moffitt. 微程序算术处理器. 55 个 TTL 芯片。核心 4 位加法器/减法器大约有 7 个 SSI 芯片。ALU 围绕该核心大约有 7 个额外的 SSI 逻辑芯片,以支持“与”、“或”、“异或”、“增量”、“减量”。围绕 ALU 的指令寄存器和微程序序列器处理 (4 位)“乘法”和“除法”。
  22. Dieter Mueller. 带有加法器的 ALU. 2004.
  23. LM3000 CPU
  24. Decode Systems. "摩托罗拉 14500B"
  25. "1 (是的,一个) 位计算机?MC14500B"
  26. TinyMicros 维基百科:MC14500B
  27. Dennis Feucht. "被遗忘的电路(应该被带回来):MC14500B 工业控制单元". EDN 2012.
  28. "MC14500B - 一位工业处理器"
  29. "icu-assembler:用 C 编写的摩托罗拉 MC14500B ICU 的汇编器"
  30. Eric Smith. "摩托罗拉 MC14500B"
  31. 维基百科:串行计算机
  32. VHS,由 Kevin McCormick、Colin Bulthaup、Scott Grant 和 Eric Prebys 为他们的 MIT 6.004 课程构建的 32 位 CPU。
  33. 6.004 竞赛照片 [2][3]
  34. "Libby8" 新复古计算机,作者:Julian Skidmore
  35. Bill Buzbee. Magic-1 自制 CPU:时钟
  36. "英特尔的 Atom 架构:旅程开始",作者:Anand Lal Shimpi,2008 年。在一个大型微处理器中,驱动时钟信号所使用的功率可能超过整个芯片总功耗的 30%。
  37. 维基百科:两相时钟

继电器计算机

[编辑 | 编辑源代码]
  • "继电器计算机的历史" (jhallen) 列出了几个继电器 CPU。
  • "relaysbc:单板继电器计算机/训练器" (jhallen) (83 个继电器,全部是相同的 DPDT DIP 继电器。CPU 寄存器用边缘触发的 D 触发器实现,每个位只需 1.5 个 DPDT 继电器)。
  • Harry Porter 的继电器计算机 (415 个继电器,全部是相同的 4PDT) ("RC1")
  • "RC-3 继电器计算机" (418 个继电器,全部是相同的 4PDT。前面板上 421 个指示灯和 134 个开关。以 6 Hz 的速度运行)。 RC-3 继电器计算机(背景). RC-3 继电器计算机(技术细节).
  • "继电器计算机二",作者:Jon Stanley (281 个继电器,两种类型:177 个 SPDT 和 104 个 4PDT) ("RC2")
  • "继电器二进制加法器",作者:Jon Stanley。 "一个简单的 4 位继电器加法器,有两个 4 位输入存储/寄存器。"展示了用 1 个继电器构建 1 位存储单元、用 1 个 DPDT 继电器构建 1 位半加器以及用 2 个继电器构建 1 位全加器的方法。
  • "i2 8 位继电器计算机" (大约 300 个继电器,两种类型:单极和双极,加上 2 kB 静态 RAM 用作内存),作者:???。i2 指令集是 John Stanley 的 RC2 ISA 的修改版本。
  • Zusie - 我的继电器计算机,作者:Fredrik Andersson (使用大约 330 个继电器,两种类型:4 极和 6 极双掷继电器,加上约 30 个集成电路用于 RAM 和微代码)
  • 继电器计算机,作者:Kilian Leonhardt (德语):一台“大型计算机”,大约有 1500 个继电器和一个程序 EEPROM,以及一台“小型计算机”,有 171 个继电器。
  • DUO 14 PREMIUM 由杰克·艾森曼设计(约 50 个继电器,包括 4 个可寻址的“面包屑”RAM,每个面包屑为 2 位,加上 6x8 开关 DIP 开关中的 48 位程序 ROM。唯一的半导体元件:555 定时器、十进制计数器和时钟发生器中的晶体管。每个命令有 6 位,程序 ROM 中的 8 个命令由 3 位程序计数器选择)。
  • 维基百科:Z3(计算机),由康拉德·楚泽设计,是世界上第一台工作中的可编程全自动计算机器。使用 2,000 个继电器制造。
  • Z3 Nachbau[7][8],霍斯特·楚泽(康拉德·楚泽的儿子)和劳尔·罗哈斯在 2001 年重建的经典 Z3。32 字、22 位宽的内存也完全由继电器构成,大约 700 个继电器。(德语)[9]
  • 霍斯特·楚泽的新的 Z3 重建:为纪念康拉德·楚泽诞辰 100 周年而于 2010 年创建。大约 2500 个现代继电器。(德语)
  • Rory Mangles。Tim 7:一个 4 位继电器 CPU,程序存储在穿孔带上
  • Rory Mangles。Tim 8:"按继电器数量计算,世界上最小的图灵完备继电器计算机之一",一个 8 位继电器 CPU,程序存储在穿孔带上,数据存储在离散电容器 (!) 中(没有 RAM 芯片),每个字节一个继电器极;使用 152 个继电器,其中大多数是单极的。
  • Pavel Dovgalyuk。一把继电器。用 4PDT 继电器构建的继电器计算机。

分立晶体管计算机

[edit | edit source]
  • James Newman。超级处理器。"在所有东西上都放上 LED,这样我们就可以实际看到数据移动和逻辑发生。"没有集成电路;只有 LED 和电阻器以及大约 14,000 (?) 个分立晶体管(2N7000,通过孔 TO-95 封装?)在 CPU 的功能部分。
  • Dieter Mueller 的 MT15 几乎完全由(大约 3000 个)独立的 SMT 晶体管构成……还有一些关于微编程和 ALU 设计的 文章
  • Joe Wingbermuehle 的 Q1 计算机。几乎完全由(3105 个)独立的穿孔 PN2222A 晶体管构成。"使用时钟相位,以便可以将透明锁存器用作寄存器,以降低晶体管数量,但代价是速度。"8 位数据总线,16 位地址总线。
  • Svarichevsky Mikhail 显然正在构建一个完全由分立晶体管组成的处理器。使用非常仔细的模拟调谐(12 个不同值的电阻器),Svarichevsky Mikhail 开发了一个 4 晶体管全加器:"BARSFA - 4-TRANSISTOR FULL ADDER"。(4 个肖特基二极管——跨越每个晶体管的基极和集电极——真的有必要吗,还是仅仅是为了提高性能?)(他还展示了 CMOS 全加器的规范实现,需要 28 个晶体管)。
  • Simon Inns。"4 位计算机" 展示了一个完全由 AND、OR、NOT 门组成的 4 位加法器,而 AND、OR、NOT 门又是完全由分立 NPN 晶体管和电阻器构建的。"A" 和 "B" 4 位输入的拨动开关;5 个 LED 输出总和(包括进位位)。(一个 22 晶体管全加器)。
  • Rory Mangles。小蒂姆:二极管-晶体管逻辑(DTL);400 个 2N3904 NPN 晶体管加上二极管、电阻器、电容器等,共计 "2700 个元件" (?)。有 4 个寄存器:工作寄存器 (8 位)、指令寄存器 (8 位)、地址寄存器 (12 位)、程序计数器 (12 位) 和一个排序器。(还使用 SRAM 芯片中存储的一些零页“寄存器”)。

气动计算机

[edit | edit source]

K'nex 计算机

[edit | edit source]

???这些真的算作“处理器”吗???

TTL 计算机

[edit | edit source]

从 TTL 芯片构建的家用 CPU 包括:(不按特定顺序——我们应该按 IC 的数量排序吗?)


  • "维克多的惊人 4 位处理器"……可以使用手动开关在电路中重新编程。大约 90 个芯片。
  • 银河系 4 位 CPU,作者:Jon Qualey。两个 2716 EPROM 用于存储微指令代码,两个 2114 静态 RAM 用于程序内存。总共 25 个 IC,74LS TTL。
  • LM3000 CPU 由佛蒙特州本宁顿学院的五名学生设计和制造,使用了 53 个集成电路。
  • John Doran 的 D16/M 是一款 16 位数字计算机,使用 SSI 和 MSI HCMOS 集成逻辑实现,并使用绕线技术构建。它的时序和控制单元是微程序化的(完全水平,具有 72 位控制字)。
  • (待办事项:谁?)已经使用(TTL)分立逻辑构建了一个 MC14500 克隆。[1] (待办事项:还有谁?)已经使用 FPGA 构建了一个 MC14500 克隆。[2]
  • 田中利雄的 TANACOM-1 是一款 16 位 TTL 小型机,总共使用 146 个 IC,包括 ALU 中的 4 个 SN74181 和一个 74182。


  • Steve Chamberlin 的 BMOW 1(一堆乱线) 是一款 8 位 CPU,由分立的 7400 系列逻辑和一些 22V10 和 20V8 GAL 构成。所有数字电子元件都位于一个大型 Augat 绕线板上,用于互连大约 50 个芯片。BMOW 1 包含大约 1250 根连接组件的线。所有数据总线都是 8 位;地址总线是 24 位。3 个并行微代码 ROM 生成 24 位微代码字。VGA 视频输出为 512×480,两种颜色,或 128×240,256 种颜色。微代码模拟 6502(或多或少)。使用两个 4 位 74LS181 形成核心 8 位 ALU。
  • Steve Chamberlin。"Nibbler 4 位 CPU"。12 位地址空间。16 x 2 字符 LCD 显示屏、蜂鸣器、按钮输入。13 个标准的 7400 系列逻辑芯片 + 2 个用于微代码的 EEPROM + 1 个程序 EEPROM + 1 个数据 4K x 4 SRAM,总共 17 个芯片 + 一块 2 行 LCD 和几个按钮,通过绕线方式连接到 5 英寸 x 4 英寸的穿孔板上。"Nibbler 演示!"
  • "一个专有的 8 位引擎,由 3 个 PROM 和几十个 TTL 芯片构建",正如 Jeff Laughton 所述。
  • "60 赫兹的单比特计算":一台由 EPROM 和少量逻辑芯片组成的微型计算机;由 Jeff Laughton 设计。
  • "廉价视频之子的新娘 - KimKlone":TTL 芯片和 EPROM 为微控制器(65C02)添加了额外的程序员可见寄存器和指令。
  • MyCPU 项目 - [10][11]:"欢迎所有人参与并为项目做出贡献。" CPU 由 5 块板上的 65 个集成电路构建而成。1 MB 银行切换 RAM。最初由 Dennis Kuschel 开发。显然,已经构建了几个 MyCPU 系统?一个 MyCPU 系统运行 HTTP 服务器;另一个 MyCPU 系统运行(纯文本)Web 浏览器。
  • HJS22 - 一台自制的 TTL 计算机。 漂亮的前面板,带有许多指示灯和开关。
  • 澳大利亚电子 EDUC-8 微型计算机:"最早的 DIY 微型计算机之一"。"内部实现是串行,这使得组件经济,因为大多数数据路径仅为 1 位宽。"
  • "学习构建处理器" 展示了一些早期阶段的 TTL CPU 的照片,这些 CPU 在无焊面包板上构建而成。
  • Kyle Hovey。 "如何构建 8 位计算机""8_bit_spaghetti"。一台在无焊面包板上构建的 TTL CPU,使用 11 种类型的 74LSxx 芯片。
  • Albert Malvino 和 Jerald Brown。在他们的书《数字计算机电子学》(1993 年)中,他们描述了 "SAP-1 最简单" 处理器。
    • Pong Guy 在网上发布了 SAP-1 的原理图 [12]
    • 唉,最初的 SAP-1 使用的几个部件显然不再生产。Pong Guy 描述了一些替代部件,这些部件允许您使用仍在生产的部件来构建 SAP-1。[13][14]
    • Pong Guy 发现,用微代码 ROM 替换 SAP-1 的硬连线 "控制矩阵" 可以将 IC 的总数从 48 个减少到 35 个。[15]
    • Pong Guy 建议通过用 (74HC194) 双向移位寄存器替换 (74HC173) D 触发器寄存器来为 CPU 添加位移操作。[16][17]
  • Pong Guy。 "ASAP-3 - 几乎像可能的计算机 3"。Pong Guy 设计了一台 8 位计算机,由 55 个分立的 TTL 逻辑芯片(包括 RAM 和程序 ROM 芯片)组成。 ASAP-3 原理图。Pong Guy 还设计了一个布局良好的 PCB 来容纳这 55 个芯片、振荡器、一个 10 位 LED 显示器 + 2 行 LCD 显示器、一个 22 键键盘和一些拨动开关。ASAP-3 模拟了 8085 指令集的大部分功能。运行速度超过 500kHz。受 "SAP-1 最简单微处理器" 的启发。


  • John Peterson。 "绕线时代"。描述了一个 "紧张的" 硬件实验室课程,该课程使用串行 I/O、指示灯和开关前面板,以及完全由 74Cxx 芯片、一些 2716 UV 可擦除 ROM 和一些 SRAM 组成的 8 位 CPU 来构建一台工作计算机。(架构非常接近 PDP-8,使用与 PDP-11 Unibus 相似的 URBUS 总线。)
  • Gugel 和 Schwartz 博士。 "G-CPU"[18]
  • "自制 CPU/底层设计" 推荐了几本包含底层 TTL CPU 设计信息的书籍。
  • Randy Thelen。 Mippy(每年数百万条指令) 是一款 1MHz、16 位 Forth 机器,使用 74HCT00 系列 TTL 芯片从头开始构建而成。数据总线和地址总线是分开的,每个总线都是 16 位宽的。


由 TTL 芯片构建的商业小型机包括

  • Tandem/16(NonStop I)最初由标准低密度 TTL 芯片实现。它具有高可用性功能,这些功能在今天仍然适用。[3]

(这个 Tandem/16 使用了什么 ALU?74181?)

  • TS-1 是 HP PA-RISC 架构的第一个商业实现,它是用分立的 74F TTL 芯片构建的。32 位 CPU 分布在 6 块板上,每块 8.4" x 11.3" 的板上大约有 150 个芯片。这六个 TS-1 板实现了处理器、一个 4096 个条目的 TLB、64 KB(L1)指令缓存和 64 KB(L1)数据缓存。[4]

(这个 Tandem/16 使用了什么 ALU?74181?)

(这个 Kenback-1 使用了什么 ALU?74181?)

  • Datapoint 2200 包含一个由标准 TTL 组件组成的 8 位 CPU。[6]
  • Data General Nova 可能包含第一个 (?) 单 PCB 上的 CPU。它的 "16 位"(尽管它通过一个 4 位数学单元进行计算)CPU 放在一个 15" x 15" 的单 PCB 上。[7]

(Nova 使用了什么 ALU?74181?)

  • RCA 1802 "COSMAC" 处理器的第一个原型 FRED 由 Joseph Weisbecker 设计,并在家中用 100 个 TTL 芯片构建而成。[8]
  • Cray-1 是第一个使用集成电路的 Cray 设计。它只使用了 4 种不同的 IC 部件编号:[FIXME:具体是哪些编号?] 一种 ECL NOR 门、一种 MECL NOR 门、用于寄存器的 16x4 位 SRAM 和用于主内存的 1024x1 位 SRAM。[9]
  • 这本书《新机器的灵魂》由 Tracy Kidder 撰写,描述了代号为 "Eagle" 的计算机的设计过程,后来被称为 Data General Eclipse MV/8000。Eagle 是第一台使用可编程逻辑芯片 (PAL) 的 DG 计算机。可能是第一款用于任何商用计算机的 PAL?[10][11]
  • 最初的 VAX 11/780 是用 TTL 实现的,在一个四乘五英尺的机柜里容纳了一个 CPU。[12] VAX CPU 分布在 27 块 PCB 上。[11]
  • 32 位 20-MIPS DECWRL "Titan" 处理器由 "100K ECL" MSI 部件[13] 构建在四个大型板上。[14]



  1. "一个 MC14500 克隆......一个用分立逻辑构建的克隆电路..."
  2. "MC14500 1 位 CPU (ICU)"
  3. 维基百科:串联计算机#TNS 堆栈机器
  4. Paul Weissmann。 "早期 PA-RISC 系统".
  5. 维基百科:Kenbak-1
  6. 维基百科:Datapoint 2200
  7. 维基百科:Data General Nova.
  8. 维基百科:RCA 1802
  9. 维基百科:Cray-1
  10. 维基百科:新机器的灵魂
  11. a b John Faughnan;Sanja Stevanovic。 "鹰的飞行:超级小型机的诞生与生命。".
  12. 维基百科:VAX
  13. Norman P. Jouppi 和 Jeffrey Y. F. Tang。 "具有高持续性能与峰值性能比的 20-MIPS 持续 32 位 CMOS 微处理器"。1989 年。第 2 页。
  14. Michael J. K. Nielsen。 "Titan 系统手册"。1988 年。
华夏公益教科书